module Signet.Unstable.Type.AsymmetricSignatureTest where import qualified Control.Monad.Catch as Exception import qualified Crypto.Error as Error import qualified Crypto.PubKey.Ed25519 as Ed25519 import qualified Data.ByteString.Char8 as Ascii import qualified Signet.Unstable.Exception.InvalidAsymmetricSignature as InvalidAsymmetricSignature import qualified Signet.Unstable.Extra.Either as Either import qualified Signet.Unstable.Type.AsymmetricSignature as AsymmetricSignature import qualified Signet.Unstable.Type.Test as Test spec :: (Exception.MonadThrow io, Monad tree) => Test.Test io tree -> tree () spec :: forall (io :: * -> *) (tree :: * -> *). (MonadThrow io, Monad tree) => Test io tree -> tree () spec Test io tree test = Test io tree -> String -> tree () -> tree () forall (io :: * -> *) (tree :: * -> *). Test io tree -> String -> tree () -> tree () Test.describe Test io tree test String "Signet.Unstable.Type.AsymmetricSignature" (tree () -> tree ()) -> tree () -> tree () forall a b. (a -> b) -> a -> b $ do Test io tree -> String -> tree () -> tree () forall (io :: * -> *) (tree :: * -> *). Test io tree -> String -> tree () -> tree () Test.describe Test io tree test String "parse" (tree () -> tree ()) -> tree () -> tree () forall a b. (a -> b) -> a -> b $ do Test io tree -> String -> io () -> tree () forall (io :: * -> *) (tree :: * -> *). Test io tree -> String -> io () -> tree () Test.it Test io tree test String "fails with invalid input" (io () -> tree ()) -> io () -> tree () forall a b. (a -> b) -> a -> b $ do let byteString :: ByteString byteString = String -> ByteString Ascii.pack String "invalid" let result :: Either InvalidAsymmetricSignature AsymmetricSignature result = ByteString -> Either InvalidAsymmetricSignature AsymmetricSignature AsymmetricSignature.parse ByteString byteString Test io tree -> Either InvalidAsymmetricSignature AsymmetricSignature -> Either InvalidAsymmetricSignature AsymmetricSignature -> io () forall (io :: * -> *) a (tree :: * -> *). (HasCallStack, Applicative io, Eq a, Show a) => Test io tree -> a -> a -> io () Test.assertEq Test io tree test Either InvalidAsymmetricSignature AsymmetricSignature result (InvalidAsymmetricSignature -> Either InvalidAsymmetricSignature AsymmetricSignature forall a b. a -> Either a b Left (InvalidAsymmetricSignature -> Either InvalidAsymmetricSignature AsymmetricSignature) -> InvalidAsymmetricSignature -> Either InvalidAsymmetricSignature AsymmetricSignature forall a b. (a -> b) -> a -> b $ ByteString -> InvalidAsymmetricSignature InvalidAsymmetricSignature.MkInvalidAsymmetricSignature ByteString byteString) Test io tree -> String -> io () -> tree () forall (io :: * -> *) (tree :: * -> *). Test io tree -> String -> io () -> tree () Test.it Test io tree test String "succeeds with valid input" (io () -> tree ()) -> io () -> tree () forall a b. (a -> b) -> a -> b $ do let result :: Either InvalidAsymmetricSignature AsymmetricSignature result = ByteString -> Either InvalidAsymmetricSignature AsymmetricSignature AsymmetricSignature.parse (ByteString -> Either InvalidAsymmetricSignature AsymmetricSignature) -> ByteString -> Either InvalidAsymmetricSignature AsymmetricSignature forall a b. (a -> b) -> a -> b $ String -> ByteString Ascii.pack String "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVotMDEyMzQ1Njc4OS1hYmNkZWZnaGlqa2xtbm9wcXJzdHV2cXh5eg==" signature <- Either CryptoError Signature -> io Signature forall e (m :: * -> *) a. (Exception e, MonadThrow m) => Either e a -> m a Either.throw (Either CryptoError Signature -> io Signature) -> (ByteString -> Either CryptoError Signature) -> ByteString -> io Signature forall b c a. (b -> c) -> (a -> b) -> a -> c . CryptoFailable Signature -> Either CryptoError Signature forall a. CryptoFailable a -> Either CryptoError a Error.eitherCryptoError (CryptoFailable Signature -> Either CryptoError Signature) -> (ByteString -> CryptoFailable Signature) -> ByteString -> Either CryptoError Signature forall b c a. (b -> c) -> (a -> b) -> a -> c . ByteString -> CryptoFailable Signature forall ba. ByteArrayAccess ba => ba -> CryptoFailable Signature Ed25519.signature (ByteString -> io Signature) -> ByteString -> io Signature forall a b. (a -> b) -> a -> b $ String -> ByteString Ascii.pack String "ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789-abcdefghijklmnopqrstuvqxyz" Test.assertEq test result (Right $ AsymmetricSignature.MkAsymmetricSignature signature) Test io tree -> String -> tree () -> tree () forall (io :: * -> *) (tree :: * -> *). Test io tree -> String -> tree () -> tree () Test.describe Test io tree test String "render" (tree () -> tree ()) -> tree () -> tree () forall a b. (a -> b) -> a -> b $ do Test io tree -> String -> io () -> tree () forall (io :: * -> *) (tree :: * -> *). Test io tree -> String -> io () -> tree () Test.it Test io tree test String "works" (io () -> tree ()) -> io () -> tree () forall a b. (a -> b) -> a -> b $ do asymmetricSignature <- Either CryptoError AsymmetricSignature -> io AsymmetricSignature forall e (m :: * -> *) a. (Exception e, MonadThrow m) => Either e a -> m a Either.throw (Either CryptoError AsymmetricSignature -> io AsymmetricSignature) -> (ByteString -> Either CryptoError AsymmetricSignature) -> ByteString -> io AsymmetricSignature forall b c a. (b -> c) -> (a -> b) -> a -> c . (Signature -> AsymmetricSignature) -> Either CryptoError Signature -> Either CryptoError AsymmetricSignature forall a b. (a -> b) -> Either CryptoError a -> Either CryptoError b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap Signature -> AsymmetricSignature AsymmetricSignature.MkAsymmetricSignature (Either CryptoError Signature -> Either CryptoError AsymmetricSignature) -> (ByteString -> Either CryptoError Signature) -> ByteString -> Either CryptoError AsymmetricSignature forall b c a. (b -> c) -> (a -> b) -> a -> c . CryptoFailable Signature -> Either CryptoError Signature forall a. CryptoFailable a -> Either CryptoError a Error.eitherCryptoError (CryptoFailable Signature -> Either CryptoError Signature) -> (ByteString -> CryptoFailable Signature) -> ByteString -> Either CryptoError Signature forall b c a. (b -> c) -> (a -> b) -> a -> c . ByteString -> CryptoFailable Signature forall ba. ByteArrayAccess ba => ba -> CryptoFailable Signature Ed25519.signature (ByteString -> io AsymmetricSignature) -> ByteString -> io AsymmetricSignature forall a b. (a -> b) -> a -> b $ String -> ByteString Ascii.pack String "ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789-abcdefghijklmnopqrstuvqxyz" Test.assertEq test (AsymmetricSignature.render asymmetricSignature) (Ascii.pack "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVotMDEyMzQ1Njc4OS1hYmNkZWZnaGlqa2xtbm9wcXJzdHV2cXh5eg==")