module Signet.Unstable.Type.AsymmetricSignatureTest where 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.Tasty as Tasty import qualified Signet.Unstable.Type.AsymmetricSignature as AsymmetricSignature import Test.Tasty.HUnit ((@?=)) spec :: Tasty.Spec spec :: Spec spec = TestName -> Spec -> Spec Tasty.describe TestName "Signet.Unstable.Type.AsymmetricSignature" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do TestName -> Spec -> Spec Tasty.describe TestName "parse" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do TestName -> Assertion -> Spec Tasty.it TestName "fails with invalid input" (Assertion -> Spec) -> Assertion -> Spec forall a b. (a -> b) -> a -> b $ do let byteString :: ByteString byteString = TestName -> ByteString Ascii.pack TestName "invalid" let result :: Either InvalidAsymmetricSignature AsymmetricSignature result = ByteString -> Either InvalidAsymmetricSignature AsymmetricSignature AsymmetricSignature.parse ByteString byteString Either InvalidAsymmetricSignature AsymmetricSignature result Either InvalidAsymmetricSignature AsymmetricSignature -> Either InvalidAsymmetricSignature AsymmetricSignature -> Assertion forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion @?= InvalidAsymmetricSignature -> Either InvalidAsymmetricSignature AsymmetricSignature forall a b. a -> Either a b Left (ByteString -> InvalidAsymmetricSignature InvalidAsymmetricSignature.MkInvalidAsymmetricSignature ByteString byteString) TestName -> Assertion -> Spec Tasty.it TestName "succeeds with valid input" (Assertion -> Spec) -> Assertion -> Spec 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 $ TestName -> ByteString Ascii.pack TestName "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVotMDEyMzQ1Njc4OS1hYmNkZWZnaGlqa2xtbm9wcXJzdHV2cXh5eg==" Signature signature <- CryptoFailable Signature -> IO Signature forall a. CryptoFailable a -> IO a Error.throwCryptoErrorIO (CryptoFailable Signature -> IO Signature) -> (ByteString -> CryptoFailable Signature) -> ByteString -> IO 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 $ TestName -> ByteString Ascii.pack TestName "ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789-abcdefghijklmnopqrstuvqxyz" Either InvalidAsymmetricSignature AsymmetricSignature result Either InvalidAsymmetricSignature AsymmetricSignature -> Either InvalidAsymmetricSignature AsymmetricSignature -> Assertion forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion @?= AsymmetricSignature -> Either InvalidAsymmetricSignature AsymmetricSignature forall a b. b -> Either a b Right (Signature -> AsymmetricSignature AsymmetricSignature.MkAsymmetricSignature Signature signature) TestName -> Spec -> Spec Tasty.describe TestName "render" (Spec -> Spec) -> Spec -> Spec forall a b. (a -> b) -> a -> b $ do TestName -> Assertion -> Spec Tasty.it TestName "works" (Assertion -> Spec) -> Assertion -> Spec forall a b. (a -> b) -> a -> b $ do AsymmetricSignature asymmetricSignature <- (Signature -> AsymmetricSignature) -> IO Signature -> IO AsymmetricSignature forall a b. (a -> b) -> IO a -> IO b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap Signature -> AsymmetricSignature AsymmetricSignature.MkAsymmetricSignature (IO Signature -> IO AsymmetricSignature) -> (ByteString -> IO Signature) -> ByteString -> IO AsymmetricSignature forall b c a. (b -> c) -> (a -> b) -> a -> c . CryptoFailable Signature -> IO Signature forall a. CryptoFailable a -> IO a Error.throwCryptoErrorIO (CryptoFailable Signature -> IO Signature) -> (ByteString -> CryptoFailable Signature) -> ByteString -> IO 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 $ TestName -> ByteString Ascii.pack TestName "ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789-abcdefghijklmnopqrstuvqxyz" AsymmetricSignature -> ByteString AsymmetricSignature.render AsymmetricSignature asymmetricSignature ByteString -> ByteString -> Assertion forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion @?= TestName -> ByteString Ascii.pack TestName "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVotMDEyMzQ1Njc4OS1hYmNkZWZnaGlqa2xtbm9wcXJzdHV2cXh5eg=="