h*       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                                                    0.0.2.0 Cryptography for the casual user BSD-3-ClauseThe Haskell Cryptography GroupGHC only Safe-Inferred"Keyed Message Authentication Codes Safe-Inferred" Safe-Inferred  selThis calls to C's memcmp( function, used in lieu of libsodium's memcmp, in cases when the return code is necessary.selCompare if the contents of two  ForeignPtr s are equal.selCompare the contents of two  ForeignPtr!s using lexicographical ordering.sel+Securely allocate an amount of memory with  and pass a pointer to the region to the provided action. The region is deallocated with  afterwards. Do not try to jailbreak the pointer outside of the action, this will not be pleasant.selAmount of memory to allocateselAction to perform on the memory2Short input hashing with the SipHash-2-4 algorithm(C) Hcate Moonlight 2023 BSD-3-ClauseThe Haskell Cryptography GroupGHC only Safe-Inferred>Dsel/Exception thrown upon error during hashing by  or .sel'A random key used for hashing, of size .The same message hashed with the same key will always produce the same output.sel)A 128-bit hash of a short input, of size selHash a .The same message hashed with the same key will always produce the same output.The  is of length selHash a strict .The same message hashed with the same key will always produce the same output.The  is of length sel Convert a  to a strict binary . sel Convert a  to a hexadecimal-encoded . sel Convert a ! to a strict hexadecimal-encoded . selGenerate a random  of size  sel Convert a  to a strict binary . sel Convert a  to a hexadecimal-encoded .sel Convert a ! to a strict hexadecimal-encoded .selConvert a binary  to a . The input key must be of length sel%Convert a strict hexadecimal-encoded  to a .;The input key, once decoded from base16, must be of length selConvert a hexadecimal-encoded  to a .;The input key, once decoded from base16, must be of length selselselselselselselselselselselselselRandom key produced by  sel Data to hashselRandom key produced by  selUTF-8 encoded data to hash      Legacy SHA-512 hashing(C) Hcate Moonlight 2022 BSD-3-ClauseThe Haskell Cryptography GroupGHC only Safe-Inferred3sel is a cryptographic context for streaming hashing. This API can be used when a message is too big to fit in memory or when the message is received in portions.Use it like this:hash <- SHA512.withMultipart $ \multipartState -> do -- we are in MonadIO... message1 <- getMessage4... SHA512.updateMultipart multipartState message1... message2 <- getMessage4... SHA512.updateMultipart multipartState message2 sel*A hashed value from the SHA-512 algorithm.!sel Convert a   to a strict hexadecimal ."sel Convert a  " to a strict, hexadecimal-encoded .#sel Convert a   to a binary .$selHash a  with the SHA-512 algorithm.%selHash a UTF8-encoded strict  with the SHA-512 algorithm.&sel!Perform streaming hashing with a  cryptographic context.Use  and  inside of the continuation.The context is safely allocated and deallocated inside of the continuation.sel Compute the   of all the portions that were fed to the cryptographic context."This function is only used within &.'sel#Add a message portion to be hashed.$This function should be used within &.(sel)sel*sel+sel,sel&sel(Continuation that gives you access to a  cryptographic context #!"$%&' #!"$%&'Legacy SHA-256 hashing(C) Hcate Moonlight 2022 BSD-3-ClauseThe Haskell Cryptography GroupGHC only Safe-Inferred3-sel- is a cryptographic context for streaming hashing. This API can be used when a message is too big to fit in memory or when the message is received in portions.Use it like this:hash <- SHA256.withMultipart $ \multipartState -> do -- we are in MonadIO... message1 <- getMessage4... SHA256.updateMultipart multipartState message1... message2 <- getMessage4... SHA256.updateMultipart multipartState message2.sel*A hashed value from the SHA-256 algorithm./selHash a  with the SHA-256 algorithm.0selHash a UTF8-encoded strict  with the SHA-256 algorithm.1sel Convert a . to a strict hexadecimal .2sel Convert a ." to a strict, hexadecimal-encoded .3sel Convert a . to a binary .4sel!Perform streaming hashing with a - cryptographic context.Use  within the continuation.The context is safely allocated first, then the continuation is run and then it is deallocated after that.sel Compute the . of all the portions that were fed to the cryptographic context."this function is only used within 45sel#Add a message portion to be hashed.$This function should be used within 4.6sel7sel8sel9sel:sel4sel(Continuation that gives you access to a - cryptographic context ./0-45312 ./0-45312,Password hashing with the Argon2id algorithm(C) Hcate Moonlight 2022 BSD-3-ClauseThe Haskell Cryptography GroupGHC only Safe-Inferred'1<*o;sel=selThe = is used in conjunction with A when you want to manually provide the piece of data that will differentiate two fingerprints of the same password.8It is automatically taken care of for you when you use ? or @.Use J to create a = of size equal to the constant .>sel.A hashed password from the Argon2id algorithm.?selHash the password with the Argon2id algorithm and a set of pre-defined parameters.=The hash is encoded in a human-readable format that includes:The result of a memory-hard, CPU-intensive hash function applied to the password;The automatically generated salt used for the previous computation;The other parameters required to verify the password, including the algorithm identifier, its version, opslimit, and memlimit.Example output: .$argon2id$v=19$m=262144,t=3,p=1$fpPdXj9mK7J4m@@selHash a UTF8-encoded password with the Argon2id algorithm and a set of pre-defined parameters.Asel.Hash the password with the Argon2id algorithm. The hash is not" encoded in human-readable format.Bsel)Verify the password hash against a clear  passwordThis function purposefully takes some time to complete, in order to alleviate bruteforce attacks.Csel)Verify the password hash against a clear  passwordThis function purposefully takes some time to complete, in order to alleviate bruteforce attacks.Dsel Convert a > to a .Esel Convert a > to a strict .Fsel Convert a > to a hexadecimal-encoded .'It is recommended to use this one on a > produced by A.Gsel Convert a >! to a strict hexadecimal-encoded .'It is recommended to use this one on a > produced by A.Hsel,Convert an ascii-encoded password hash to a >0This function does not perform ASCII validation.Isel,Convert an ascii-encoded password hash to a >0This function does not perform ASCII validation.JselGenerate a random = for password hashingKselConvert = to underlying  binary.LselConvert =! to a strict hexadecimal-encoded .MselConvert = to a hexadecimal-encoded .NselConvert  to =.!The input salt must be of length .Osel%Convert a strict hexadecimal-encoded  to a =.?@CBADEGFHI=JKLMNOP;?@CBADEGFHI=JKLMNOP; do -- we are in MonadIO... message1 <- getMessage5... Hashing.updateMultipart multipartState message1... message2 <- getMessage5... Hashing.updateMultipart multipartState message2\selThe fingerprint computed by hashByteString<. It is produced by the BLAKE2b algorithm, and is of size , as recommended.=You can produce a human-readable string representation of a \ by using the display function.]selThe ] is used to produce distinct fingerprints for the same message. It is optional to use, and _ will always produce the same fingerprint for the same message if a ] is not given. This behaviour is similar to MD5 and SHA-1 functions, for which _) is a faster and more secure alternative. Create a new ] with ^.^sel Create a new ] of size ._selHash a 1 with the BLAKE2b algorithm, and an optional key. Without a ]8, hashing the same data twice will give the same result.`sel Convert a \" to a strict, hexadecimal-encoded .asel Convert a \" to a strict, hexadecimal-encoded .bsel Convert a \ to a strict binary .csel!Perform streaming hashing with a [( cryptographic context. If there is no ]?, you will get the same output for the same input all the time.Use  within the continuation to add more message parts to be hashed.The context is safely allocated first, then the continuation is run and then it is deallocated after that.sel Compute the \ of all the portions that were fed to the cryptographic context."this function is only used within cdsel#Add a message portion to be hashed.#This function is to be used within c.gselhseliseljselkselcselOptional cryptographic keysel(Continuation that gives you access to a [ cryptographic context ]^\_[cd`ab ]^\_[cd`abHMAC-SHA-512-256The Haskell Cryptography GroupGHC only Safe-Inferred 1?lsel$A secret authentication key of size .msel$A secret authentication key of size .nseln is a cryptographic context for streaming hashing. This API can be used when a message is too big to fit in memory or when the message is received in portions.Use it like this:secretKey <- HMAC.newSecreKeyhash <- HMAC.withMultipart secretKey $ \multipartState -> do -- we are in MonadIO... message1 <- getMessage2... HMAC.updateMultipart multipartState message1... message2 <- getMessage2... HMAC.updateMultipart multipartState message2oselCompute an authentication tag for a message with a secret key shared by all parties.psel!Perform streaming hashing with a n cryptographic context.Use  within the continuation.The context is safely allocated first, then the continuation is run and then it is deallocated after that.sel Compute the l of all the portions that were fed to the cryptographic context."this function is only used within pqsel#Add a message portion to be hashed.$This function should be used within p.rselVerify that the tag is valid for the provided message and secret key.ssel)Generate a new random secret key of size .selPrepare memory for a m( and use the provided action to fill it.Memory is allocated with  (see the note attached there). A finalizer is run when the key is goes out of scope.tsel Create an m from a binary  that you have obtained on your own, usually from the network or disk.The input secret key, once decoded from base16, must be of length .usel6Convert a 'AuthenticationKey to a hexadecimal-encoded .This format is useful if you need conversion to base32 or base64.(M Be prudent as to where you store it!vsel6Convert a 'AuthenticationKey to a hexadecimal-encoded .(M Be prudent as to where you store it!wsel Convert an l to a hexadecimal-encoded .xsel Convert an l to a binary .ysel Create an l from a binary  that you have obtained on your own, usually from the network or disk.The input secret key, once decoded from base16, must be of length .zsel &show authenticationKey == "[REDACTED]"{sel|sel}sel~selselselsel (display authenticatonKey == "[REDACTED]"oselMessage to authenticateselSecret key for authenticationsel$Cryptographic tag for authenticationpsel(Continuation that gives you access to a n cryptographic contextonpqrmstvulwxyonpqrmstvulwxy HMAC-SHA-512(C) Hcate Moonlight 2022 BSD-3-ClauseThe Haskell Cryptography GroupGHC only Safe-Inferred 1KWsel$A secret authentication key of size .sel$A secret authentication key of size .sel is a cryptographic context for streaming hashing. This API can be used when a message is too big to fit in memory or when the message is received in portions.Use it like this:secretKey <- HMAC.newSecreKeyhash <- HMAC.withMultipart secretKey $ \multipartState -> do -- we are in MonadIO... message1 <- getMessage2... HMAC.updateMultipart multipartState message1... message2 <- getMessage2... HMAC.updateMultipart multipartState message2selCompute an authentication tag for a message with a secret key shared by all parties.sel!Perform streaming hashing with a  cryptographic context.Use  within the continuation.The context is safely allocated first, then the continuation is run and then it is deallocated after that.sel Compute the  of all the portions that were fed to the cryptographic context."this function is only used within sel#Add a message portion to be hashed.$This function should be used within .selVerify that the tag is valid for the provided message and secret key.sel)Generate a new random secret key of size .selPrepare memory for a ( and use the provided action to fill it.Memory is allocated with  (see the note attached there). A finalizer is run when the key is goes out of scope.sel Create an  from a binary  that you have obtained on your own, usually from the network or disk.The input secret key, once decoded from base16, must be of length .sel6Convert a 'AuthenticationKey to a hexadecimal-encoded .This format is useful if you need conversion to base32 or base64.(M Be prudent as to where you store it!sel6Convert a 'AuthenticationKey to a hexadecimal-encoded .(M Be prudent as to where you store it!sel Convert an  to a hexadecimal-encoded .sel Convert an  to a binary .sel Create an  from a binary  that you have obtained on your own, usually from the network or disk.The input secret key, once decoded from base16, must be of length .sel &show authenticationKey == "[REDACTED]"selselselselselselsel (display authenticatonKey == "[REDACTED]"selMessage to authenticateselSecret key for authenticationsel$Cryptographic tag for authenticationsel(Continuation that gives you access to a  cryptographic context  HMAC-SHA-256(C) Hcate Moonlight 2022 BSD-3-ClauseThe Haskell Cryptography GroupGHC only Safe-Inferred 1Wsel$A secret authentication key of size .sel$A secret authentication key of size .sel is a cryptographic context for streaming hashing. This API can be used when a message is too big to fit in memory or when the message is received in portions.Use it like this:secretKey <- HMAC.newSecreKeyhash <- HMAC.withMultipart secretKey $ \multipartState -> do -- we are in MonadIO... message1 <- getMessage2... HMAC.updateMultipart multipartState message1... message2 <- getMessage2... HMAC.updateMultipart multipartState message2selCompute an authentication tag for a message with a secret key shared by all parties.sel!Perform streaming hashing with a  cryptographic context.Use  within the continuation.The context is safely allocated first, then the continuation is run and then it is deallocated after that.sel Compute the  of all the portions that were fed to the cryptographic context."this function is only used within sel#Add a message portion to be hashed.$This function should be used within .selVerify that the tag is valid for the provided message and secret key.sel)Generate a new random secret key of size .selPrepare memory for a ( and use the provided action to fill it.Memory is allocated with  (see the note attached there). A finalizer is run when the key is goes out of scope.sel Create an  from a binary  that you have obtained on your own, usually from the network or disk.The input secret key, once decoded from base16, must be of length .sel6Convert a 'AuthenticationKey to a hexadecimal-encoded .This format is useful if you need conversion to base32 or base64.(M Be prudent as to where you store it!sel6Convert a 'AuthenticationKey to a hexadecimal-encoded .(M Be prudent as to where you store it!sel Convert an  to a hexadecimal-encoded .sel Convert an  to a binary .sel Create an  from a binary  that you have obtained on your own, usually from the network or disk.The input secret key, once decoded from base16, must be of length .sel &show authenticationKey == "[REDACTED]"selselselselselselsel (display authenticatonKey == "[REDACTED]"selMessage to authenticateselSecret key for authenticationsel$Cryptographic tag for authenticationsel(Continuation that gives you access to a  cryptographic context 4Authenticated encryption with public and secret keys(C) Hcate Moonlight 2022 BSD-3-ClauseThe Haskell Cryptography GroupGHC only Safe-Inferred'1>e$selException thrown upon error during the encryption of the message by .selException thrown upon error during the generation of the key pair by .selA ciphertext consisting of an encrypted message and an authentication tag.sel Convert a  to a hexadecimal-encoded .(M Be prudent as to where you store it!A random number that must only be used once per exchanged message. It does not have to be confidential. It is of size .selA public key of size .selA secret key of size .sel Convert a  to a hexadecimal-encoded .sel!Generate a new random secret key. May throw  if the generation fails.selCreate a pair of  and  from hexadecimal-encoded s that you have obtained on your own, usually from the network or disk.The public and secret keys, once decoded from base16, must respectively be at least of length  and 'cryptoBoxSecretKeyBytes.selPrepare memory for a  and / pair, and use the provided action to fill it.Memory is allocated with  (see the note attached there). A finalizer is run when the key is goes out of scope.sel Convert a  to a hexadecimal-encoded .(M Be prudent as to where you store it!selGenerate a new random nonce. Only use it once per exchanged message./Do not use this outside of ciphertext creation!sel Create a  from a hexadecimal-encoded  that you have obtained on your own, usually from the network or disk.sel Convert a  to a hexadecimal-encoded .sel Create a  from a binary  that you have obtained on your own, usually from the network or disk. It must be a valid cipherText built from the concatenation of the encrypted message and the authentication tag.The input cipher text, once decoded from base16, must be at least of length .sel Convert a  to a hexadecimal-encoded .(M Be prudent as to where you store it!sel Convert a  to a hexadecimal-encoded .(M Be prudent as to where you store it!sel Convert a  to a binary .(M Be prudent as to where you store it!selCreate an authenticated  from a message, a  , and a one-time cryptographic  that must never be re-used with the same secret key to encrypt another message.sel Decrypt a  and authenticated message with the shared secret key and the one-time cryptographic nonce.sel show secretKey == "[REDACTED]"selselselselselselselselsel)M Be prudent as to what you do with it!sel)M Be prudent as to what you do with it!selselselselsel !display secretKey == "[REDACTED]"sel Public keysel Secret keyselMessage to encrypt.selPublic key of the recipientselSecret key of the sendersel&Encrypted message you want to decrypt.selPublic key of the sender.selSecret key of the recipient.sel/Nonce used for encrypting the original message. Anonymous ephemeral authenticated encryption with public and secret keys(C) Hcate Moonlight 2022 BSD-3-ClauseThe Haskell Cryptography GroupGHC only Safe-Inferred1hselEncrypt a message with the recipient's public key. A key pair for the sender is generated, and the public key of that pair is attached to the cipher text. The secret key of the sender's pair is automatically destroyed.selOpen a sealed message from an unknown sender. You need your public and secret keys.selMessage to encryptselPublic key of the recipientselCipher to decryptselPublic key of the recipientselSecret key of the recipient   0Public-key signatures with the Ed25519 algorithm(C) Hcate Moonlight 2022 BSD-3-ClauseThe Haskell Cryptography GroupGHC only Safe-Inferred'lselselselsel)Generate a pair of public and secret key.The length parameters used are  and .selSign a message.selOpen a signed message with the signatory's public key. The function returns  if there is a key mismatch.selGet the signature part of a .selGet the message part of a  without verifying the signature.sel)Combine a message and a signature into a .selselselselselsel   "Hashing with the Scrypt algorithm.(C) Seth Paul Hubbard 2023 BSD-3-ClauseThe Haskell Cryptography GroupStableGHC only Safe-Inferredqd sel,A hashed password from the Scrypt algorithm.selHash the password with the Scrypt algorithm and a set of pre-defined parameters.=The hash is encoded in a human-readable format that includes:The result of a memory-hard, CPU-intensive hash function applied to the password;The automatically generated salt used for the previous computation;The other parameters required to verify the password, including the algorithm identifier, its version, opslimit, and memlimit.Example output: "$7$C6........dLONLMz8YfO.EKvzwOeqWVVLmXg62MC.hL1m1sYtO/$X9eNjVxdD4jHAhOVid3OLzNkpv6ADJSAXygOxXqGHg7NUL"selVerify a hashed password against a password verification string. This returns True if successful.sel Convert a  to a binary .sel Convert a  to a hexadecimal-encoded .sel,Convert an ASCII-encoded password hash to a 0This function does not perform ASCII validation.sel,Convert an ASCII-encoded password hash to a 0This function does not perform ASCII validation.selselselsel#Authentication with HMAC-SHA512-256The Haskell Cryptography GroupGHC only Safe-Inferred1wsel$A secret authentication key of size .sel$A secret authentication key of size .selCompute an authentication tag for a message with a secret key shared by all parties.selVerify that the tag is valid for the provided message and secret key.sel!Generate a new random secret key.selPrepare memory for a ( and use the provided action to fill it.Memory is allocated with  (see the note attached there). A finalizer is run when the key is goes out of scope.sel Create an  from a binary  that you have obtained on your own, usually from the network or disk.The input secret key, once decoded from base16, must be of length .sel6Convert a 'AuthenticationKey to a hexadecimal-encoded .(M Be prudent as to where you store it!sel Convert an  to a hexadecimal-encoded .sel Create an  from a binary  that you have obtained on your own, usually from the network or disk.The input secret key, once decoded from base16, must be of length .sel &show authenticationKey == "[REDACTED]"selselselselselselsel (display authenticatonKey == "[REDACTED]"selMessage to authenticateselSecret key for authenticationsel$Cryptographic tag for authentication  7Authenticated Encryption with Poly1305 MAC and XSalsa20(C) Hcate Moonlight 2022 BSD-3-ClauseThe Haskell Cryptography GroupGHC only Safe-Inferred'1yselA ciphertext consisting of an encrypted message and an authentication tag.selA random number that must only be used once per exchanged message. It does not have to be confidential. It is of size .selA secret key of size .sel!Generate a new random secret key.sel Create a  from a binary  that you have obtained on your own, usually from the network or disk.The input secret key, once decoded from base16, must be of length .selPrepare memory for a ( and use the provided action to fill it.Memory is allocated with  (see the note attached there). A finalizer is run when the key is goes out of scope.sel Convert a  to a hexadecimal-encoded .(M Be prudent as to where you store it!selGenerate a new random nonce. Only use it once per exchanged message.)Do not use this outside of hash creation!sel Create a  from a binary  that you have obtained on your own, usually from the network or disk. Once decoded from hexadecimal, it must be of length .sel Convert a  to a hexadecimal-encoded .sel Create a  from a binary  that you have obtained on your own, usually from the network or disk. It must be a valid hash built from the concatenation of the encrypted message and the authentication tag.'The input hash must at least of length sel Convert a  to a hexadecimal-encoded .(M Be prudent as to where you store it!sel Convert a  to a hexadecimal-encoded .(M Be prudent as to where you store it!sel Convert a  to a binary .(M Be prudent as to where you store it!selCreate an authenticated hash from a message, a secret key, and a one-time cryptographic nonce that must never be re-used with the same secret key to encrypt another message.selDecrypt a hashed and authenticated message with the shared secret key and the one-time cryptographic nonce.sel show secretKey == "[REDACTED]"selselselselselsel)M Be prudent as to what you do with it!sel)M Be prudent as to what you do with it!selselselsel !display secretKey == "[REDACTED]"selMessage to encrypt.selSecret key generated with .sel&Encrypted message you want to decrypt.sel4Secret key used for encrypting the original message.sel/Nonce used for encrypting the original message.'Encrypted Streams with ChaCha20Poly1305(C) Hcate Moonlight 2024 BSD-3-ClauseThe Haskell Cryptography GroupGHC only Safe-Inferred '1>)selselselsel8An encrypted message. It is guaranteed to be of size: original_message_length + sel0Each encrypted message is associated with a tag.+A typical encrypted stream simply attaches  as a tag to all messages, except the last one which is tagged as .selThe most common tag, that doesn@t add any information about the nature of the message.selIndicates that the message marks the end of the stream, and erases the secret key used to encrypt the previous sequence.selIndicates that the message marks the end of a set of messages, but not the end of the stream.sel@Forget@ the key used to encrypt this message and the previous ones, and derive a new secret key.sel"An encrypted stream starts with a  of size .That header must be sent/stored before the sequence of encrypted messages, as it is required to decrypt the stream.The header content doesn@t have to be secret and decryption with a different header will fail.selA secret key of size .sel4 is the cryptographic context for stream encryption.sel!Perform streaming hashing with a  cryptographic context.Use  within the continuation.The context is safely allocated first, then the continuation is run and then it is deallocated after that.selAdd a message portion (chunk) to be encrypted.Use it within .This function can throw 0 upon an error in the underlying implementation.sel.Perform streaming encryption of a finite list.This function can throw 0 upon an error in the underlying implementation.sel$Perform streaming decryption with a  cryptographic context.Use  within the continuation.The context is safely allocated first, then the continuation is run and then it is deallocated after that.selAdd a message portion (chunk) to be decrypted.Use this function within .This function can throw 3 if the chunk is invalid, incomplete, or corrupted.sel5Perform streaming decryption of a finite Linked List.This function can throw 3 if the chunk is invalid, incomplete, or corrupted.sel!Generate a new random secret key.sel Create a  from a binary  that you have obtained on your own, usually from the network or disk.The input secret key, once decoded from base16, must be of length .sel Convert a  to a hexadecimal-encoded .(M Be prudent as to where you store it!sel Convert a  to a hexadecimal-encoded selBuild a  from a base16-encoded sel Convert a  to a hexadecimal-encoded .sel Convert a  to its corresponding constant.sel Create a  from a binary  that you have obtained on your own, usually from the network or disk. It must be a valid hash built from the concatenation of the encrypted message and the authentication tag.'The input hash must at least of length sel Convert a  to a hexadecimal-encoded .(M Be prudent as to where you store it!sel Convert a  to a hexadecimal-encoded .(M Be prudent as to where you store it!sel Convert a  to a binary .(M Be prudent as to where you store it!sel show secretKey == "[REDACTED]"selselselselselselselselselselsel !display secretKey == "[REDACTED]"selGenerated with .sel(Continuation that gives you access to a  cryptographic contextselCryptographic contextselTag that will be associated with the message. See the documentation of  to know which to choose when.selMessage to encrypt.sel:Header used by the encrypting party. See its documentationsel(Continuation that gives you access to a  cryptographic contextselCryptographic contextsel$Encrypted message portion to decryptselDecrypted message portion !!"#$%&'()*+,-./0123456789:;<=>?@A$%BCDEFG=>$%?@ABCDEFGHHIJ$%KLMNOPQRSTUVWXYZ[\]^_`abcd=>ef$?@ABghCDEFGij=kBlmnopqrstuvwxyz{ij=kBlmnopqrstuvwxyz{ i j = k B  l m n o p q r s t u v w x y z { | | } } ~ ~                                                                        ijklmnpqstuvwxyz{>?@ACDFG~=    sel-0.0.2.0-inplaceSelSel.Hashing.ShortSel.Hashing.SHA512Sel.Hashing.SHA256Sel.Hashing.Password Sel.HashingSel.HMAC.SHA512_256Sel.HMAC.SHA512Sel.HMAC.SHA256Sel.PublicKey.CipherSel.PublicKey.SealSel.PublicKey.Signature Sel.ScryptSel.SecretKey.AuthenticationSel.SecretKey.CipherSel.SecretKey.StreamselSel.HMAC Sel.InternalSHA512updateMultipartfinaliseMultipartSHA256HashingHMACStream encryptChunk decryptChunk"libsodium-bindings-0.0.2.0-inplaceLibSodium.Bindings.Main secureMainsecureMainWithErrorShortHashingException ShortHashKey ShortHashhashByteStringhashTextshortHashToBinaryshortHashToHexByteStringshortHashToHexTextnewKeyshortHashKeyToBinaryshortHashKeyToHexByteStringshortHashKeyToHexTextbinaryToShortHashKeyhexTextToShortHashKeyhexByteStringToShortHashKey$fDisplayShortHash$fShowShortHash$fOrdShortHash $fEqShortHash$fDisplayShortHashKey$fShowShortHashKey$fOrdShortHashKey$fEqShortHashKey$fShowShortHashingException$fEqShortHashingException$fOrdShortHashingException $fExceptionShortHashingException$fDisplayShortHashingException MultipartHash hashToHexTexthashToHexByteString hashToBinary withMultipart $fShowHash $fDisplayHash$fStorableHash $fOrdHash$fEqHash Argon2ParamsSalt PasswordHashhashByteStringWithParams verifyTextverifyByteStringpasswordHashToByteStringpasswordHashToTextpasswordHashToHexByteStringpasswordHashToHexTextasciiTextToPasswordHashasciiByteStringToPasswordHashgenSalt saltToBinary saltToHexTextsaltToHexByteString binaryToSalt hexTextToSalthexByteStringToSaltdefaultArgon2Params$fShowPasswordHash$fOrdPasswordHash$fEqPasswordHash$fDisplayPasswordHash $fDisplaySalt$fEqSalt $fOrdSalt $fShowSalt$fGenericPasswordHashHashKey newHashKey $fOrdHashKey $fEqHashKeyAuthenticationTagAuthenticationKey authenticateverifynewAuthenticationKey"authenticationKeyFromHexByteStringunsafeAuthenticationKeyToBinary&unsafeAuthenticationKeyToHexByteString authenticationTagToHexByteStringauthenticationTagToBinary"authenticationTagFromHexByteString$fShowAuthenticationKey$fOrdAuthenticationKey$fEqAuthenticationKey$fShowAuthenticationTag$fOrdAuthenticationTag$fEqAuthenticationTag$fDisplayAuthenticationTag$fDisplayAuthenticationKeyEncryptionErrorKeyPairGenerationException CipherText messageLengthcipherTextForeignPtrNonce PublicKey SecretKeypublicKeyToHexByteString newKeyPairkeyPairFromHexByteStringsunsafeSecretKeyToHexByteStringnonceFromHexByteStringnonceToHexByteStringcipherTextFromHexByteStringcipherTextToHexTextcipherTextToHexByteStringcipherTextToBinaryencryptdecrypt$fShowSecretKey$fOrdSecretKey $fEqSecretKey$fShowPublicKey$fOrdPublicKey $fEqPublicKey $fShowNonce $fOrdNonce $fEqNonce$fShowCipherText$fDisplayCipherText$fOrdCipherText$fEqCipherText$fEqEncryptionError$fOrdEncryptionError$fShowEncryptionError$fExceptionEncryptionError$fEqKeyPairGenerationException$fOrdKeyPairGenerationException $fShowKeyPairGenerationException%$fExceptionKeyPairGenerationException$fDisplayNonce$fDisplayPublicKey$fDisplaySecretKeysealopen SignedMessagegenerateKeyPair signMessage openMessage getSignatureunsafeGetMessage mkSignature$fOrdSignedMessage$fEqSignedMessage ScryptHashscryptHashPasswordscryptVerifyPasswordscryptHashToByteStringscryptHashToTextasciiByteStringToScryptHashasciiTextToScryptHash$fDisplayScryptHash$fShowScryptHash$fOrdScryptHash$fEqScryptHash newSecretKeysecretKeyFromHexByteStringhashFromHexByteStringStreamDecryptionExceptionStreamInitEncryptionExceptionStreamEncryptionException MessageTagMessageFinalPushRekeyHeader encryptStream encryptList decryptStream decryptListheaderToHexByteStringheaderFromHexByteStringciphertextFromHexByteStringciphertextToHexTextciphertextToHexByteStringciphertextToBinary $fOrdHeader $fEqHeader$fDisplayHeader $fShowHeader$fEqStreamDecryptionException$fOrdStreamDecryptionException$fShowStreamDecryptionException$$fExceptionStreamDecryptionException!$fEqStreamInitEncryptionException"$fOrdStreamInitEncryptionException#$fShowStreamInitEncryptionException($fExceptionStreamInitEncryptionException$fEqStreamEncryptionException$fOrdStreamEncryptionException$fShowStreamEncryptionException$$fExceptionStreamEncryptionExceptionmemcmp foreignPtrEq foreignPtrOrd allocateWithLibSodium.Bindings.SecureMemory sodiumMalloc sodiumFreeforeignPtrShowLibSodium.Bindings.ShortHashing!cryptoShortHashSipHashX24KeyBytescryptoShortHashSipHashX24Bytesbytestring-0.11.5.3Data.ByteString.Internal.TypeStrictByteString text-2.0.2Data.Text.InternalText"LibSodium.Bindings.PasswordHashingcryptoPWHashSaltBytescryptoPWHashOpsLimitModeratecryptoPWHashMemLimitModerate!LibSodium.Bindings.GenericHashingcryptoGenericHashBytescryptoGenericHashKeyBytesLibSodium.Bindings.SHA2cryptoAuthHMACSHA512256BytescryptoAuthHMACSHA512256KeyBytesnewAuthenticationKeyWithcryptoAuthHMACSHA512BytescryptoAuthHMACSHA512KeyBytescryptoAuthHMACSHA256BytescryptoAuthHMACSHA256KeyBytesLibSodium.Bindings.CryptoBoxcryptoBoxNonceBytescryptoBoxPublicKeyBytescryptoBoxSecretKeyBytesnewKeyPairWithnewNoncecryptoBoxMACBytesLibSodium.Bindings.CryptoSigncryptoSignPublicKeyBytescryptoSignSecretKeyBytesbase GHC.MaybeNothingLibSodium.Bindings.CryptoAuthcryptoAuthBytescryptoAuthKeyBytesLibSodium.Bindings.SecretboxcryptoSecretboxNonceBytescryptoSecretboxKeyBytesnewSecretKeyWithcryptoSecretboxMACBytesLibSodium.Bindings.SecretStream)cryptoSecretStreamXChaCha20Poly1305ABytes.cryptoSecretStreamXChaCha20Poly1305HeaderBytes+cryptoSecretStreamXChaCha20Poly1305KeyBytesheaderToHexTextmessageTagToConstant