module Quantex.Codec ( Codec (..), ) where import Data.ByteString (ByteString) import Quantex.Error (QuantexError) import Quantex.Internal.KEM qualified as KEM import Quantex.Internal.Sign qualified as Sign class Codec a where encode :: a -> ByteString decode :: ByteString -> Either QuantexError a instance KEM.KEM a => Codec (KEM.PublicKey a) where encode :: PublicKey a -> ByteString encode = PublicKey a -> ByteString forall a. PublicKey a -> ByteString KEM.publicKeyBytes decode :: ByteString -> Either QuantexError (PublicKey a) decode = ByteString -> Either QuantexError (PublicKey a) forall a. KEM a => ByteString -> Either QuantexError (PublicKey a) KEM.publicKey instance KEM.KEM a => Codec (KEM.Ciphertext a) where encode :: Ciphertext a -> ByteString encode = Ciphertext a -> ByteString forall a. Ciphertext a -> ByteString KEM.ciphertextBytes decode :: ByteString -> Either QuantexError (Ciphertext a) decode = ByteString -> Either QuantexError (Ciphertext a) forall a. KEM a => ByteString -> Either QuantexError (Ciphertext a) KEM.ciphertext instance Sign.DSA a => Codec (Sign.PublicKey a) where encode :: PublicKey a -> ByteString encode = PublicKey a -> ByteString forall a. PublicKey a -> ByteString Sign.publicKeyBytes decode :: ByteString -> Either QuantexError (PublicKey a) decode = ByteString -> Either QuantexError (PublicKey a) forall a. DSA a => ByteString -> Either QuantexError (PublicKey a) Sign.publicKey instance Sign.DSA a => Codec (Sign.Signature a) where encode :: Signature a -> ByteString encode = Signature a -> ByteString forall a. Signature a -> ByteString Sign.signatureBytes decode :: ByteString -> Either QuantexError (Signature a) decode = ByteString -> Either QuantexError (Signature a) forall a. DSA a => ByteString -> Either QuantexError (Signature a) Sign.signature