{-| Base API for Point serialisation for G1, G2 and GT -} module Pairing.Serialize.Types where -- ( MkCompressedForm(..) -- , MkUncompressedForm(..) -- , FromSerialisedForm(..) -- , FromUncompressedForm(..) -- , minReprLength -- , buildPoint -- , parseBS -- ) where -- -- import Protolude hiding (putByteString) -- import Pairing.Point -- import Pairing.Fq -- import Data.ByteString.Builder -- import Data.ByteString as B hiding (length) -- import qualified Data.ByteString as B -- import Data.Binary.Get -- import Data.Binary.Put (Put, putWord8, putWord16le, runPut, putByteString) -- import Control.Error -- import Pairing.ByteRepr -- import Pairing.CyclicGroup -- -- class MkCompressedForm a where -- -- | The serialisation may fail if y cannot be obtained from x -- serializeCompressed :: (ByteRepr b, FromX b, Ord b) => a -> Point b -> Maybe LByteString -- -- class MkUncompressedForm a where -- serializePointUncompressed :: (ByteRepr b, FromX b, Eq b) => a -> Point b -> Maybe LByteString -- serializeUncompressed :: (ByteRepr c) => a -> c -> Maybe LByteString -- -- class FromSerialisedForm a where -- unserializePoint :: (ByteRepr b, FromX b, Ord b, Show b, Validate (Point b)) => a -> Point b -> LByteString -> Either Text (Point b) -- -- class FromUncompressedForm a where -- unserialize :: (ByteRepr b, Validate b, Eq b, Show b) => a -> b -> LByteString -> Either Text b -- -- minReprLength :: Int -- minReprLength = B.length $ toBytes p -- where -- p = natVal (witness :: Fq) -- -- buildPoint :: ByteRepr a => a -> ByteOrderLength -> ByteString -> ByteOrderLength -> ByteString -> Maybe (Point a) -- buildPoint one xlen xbs ylen ybs = do -- x <- fromRepr xlen one xbs -- y <- fromRepr ylen one ybs -- pure (Point x y) -- -- parseBS :: (Validate a, Show a) => Get (Maybe a) -> LByteString -> Either Text a -- parseBS f bs = do -- (_, _, mpt) <- first (\(_,_,err) -> toS err) (runGetOrFail f bs) -- case mpt of -- Just pt -> if isValidElement pt then (Right pt) else Left ("Element was not valid after deserialisation: " <> show pt) -- Nothing -> Left "Point could not be parsed"