-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Symmetrical block and stream ciphers. -- -- Symmetrical block and stream ciphers. @package cryptocipher @version 0.4.0 -- | Deprecated: Use crypto-pubkey Crypto.PubKey.DSA module Crypto.Cipher.DSA data Error -- | signature is not valid r or s is not between the bound 0..q InvalidSignature :: Error -- | the random generator returns an error. give the opportunity to reseed -- for example. RandomGenFailure :: GenError -> Error -- | Represent DSA parameters namely P, G, and Q. type Params = (Integer, Integer, Integer) -- | Represent a DSA signature namely R and S. type Signature = (Integer, Integer) -- | Represent a DSA public key. data PublicKey :: * PublicKey :: Params -> Integer -> PublicKey -- | DSA parameters public_params :: PublicKey -> Params -- | DSA public Y public_y :: PublicKey -> Integer -- | Represent a DSA private key. -- -- Only x need to be secret. the DSA parameters are publicly shared with -- the other side. data PrivateKey :: * PrivateKey :: Params -> Integer -> PrivateKey -- | DSA parameters private_params :: PrivateKey -> Params -- | DSA private X private_x :: PrivateKey -> Integer -- | sign message using the private key. sign :: CryptoRandomGen g => g -> (ByteString -> ByteString) -> PrivateKey -> ByteString -> Either GenError (Signature, g) -- | verify a bytestring using the public key. verify :: Signature -> (ByteString -> ByteString) -> PublicKey -> ByteString -> Either Error Bool instance Show Error instance Eq Error -- | Deprecated: Use crypto-pubkey Crypto.PubKey.DH module Crypto.Cipher.DH -- | Represent Diffie Hellman parameters namely P (prime), and G -- (generator). type Params = (Integer, Integer) -- | Represent Diffie Hellman public number Y. data PublicNumber :: * -- | Represent Diffie Hellman private number X. data PrivateNumber :: * -- | Represent Diffie Hellman shared secret. data SharedKey :: * -- | generate params from a specific generator (2 or 5 are common values) -- we generate a safe prime (a prime number of the form 2p+1 where p is -- also prime) generateParams :: CryptoRandomGen g => g -> Int -> Integer -> Either GenError (Params, g) -- | generate a private number with no specific property this number is -- usually called X in DH text. generatePrivate :: CryptoRandomGen g => g -> Int -> Either GenError (PrivateNumber, g) -- | generate a public number that is for the other party benefits. this -- number is usually called Y in DH text. generatePublic :: Params -> PrivateNumber -> PublicNumber -- | generate a shared key using our private number and the other party -- public number getShared :: Params -> PrivateNumber -> PublicNumber -> SharedKey -- | Deprecated: Use crypto-pubkey Crypto.PubKey.RSA module Crypto.Cipher.RSA data Error -- | the message to decrypt is not of the correct size (need to be == -- private_size) MessageSizeIncorrect :: Error -- | the message to encrypt is too long (>= private_size - 11) MessageTooLong :: Error -- | the message decrypted doesn't have a PKCS15 structure (0 2 .. 0 msg) MessageNotRecognized :: Error -- | the signature generated through the hash is too long to process with -- this key SignatureTooLong :: Error -- | the random generator returns an error. give the opportunity to reseed -- for example. RandomGenFailure :: GenError -> Error -- | the whole key is probably not valid, since the message is bigger than -- the key size KeyInternalError :: Error -- | Represent a RSA public key data PublicKey :: * PublicKey :: Int -> Integer -> Integer -> PublicKey -- | size of key in bytes public_size :: PublicKey -> Int -- | public p*q public_n :: PublicKey -> Integer -- | public exponant e public_e :: PublicKey -> Integer -- | Represent a RSA private key. -- -- Only the pub, d fields are mandatory to fill. -- -- p, q, dP, dQ, qinv are by-product during RSA generation, but are -- useful to record here to speed up massively the decrypt and sign -- operation. -- -- implementations can leave optional fields to 0. data PrivateKey :: * PrivateKey :: PublicKey -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> PrivateKey -- | public part of a private key (size, n and e) private_pub :: PrivateKey -> PublicKey -- | private exponant d private_d :: PrivateKey -> Integer -- | p prime number private_p :: PrivateKey -> Integer -- | q prime number private_q :: PrivateKey -> Integer -- | d mod (p-1) private_dP :: PrivateKey -> Integer -- | d mod (q-1) private_dQ :: PrivateKey -> Integer -- | q^(-1) mod p private_qinv :: PrivateKey -> Integer type HashF = ByteString -> ByteString type HashASN1 = ByteString -- | generate a pair of (private, public) key of size in bytes. generate :: CryptoRandomGen g => g -> Int -> Integer -> Either Error ((PublicKey, PrivateKey), g) -- | decrypt message using the private key. decrypt :: PrivateKey -> ByteString -> Either Error ByteString -- | encrypt a bytestring using the public key and a CryptoRandomGen random -- generator. - the message need to be smaller than the key size - 11 encrypt :: CryptoRandomGen g => g -> PublicKey -> ByteString -> Either Error (ByteString, g) -- | sign message using private key, a hash and its ASN1 description sign :: HashF -> HashASN1 -> PrivateKey -> ByteString -> Either Error ByteString -- | verify message with the signed message verify :: HashF -> HashASN1 -> PublicKey -> ByteString -> ByteString -> Either Error Bool instance Show Error instance Eq Error -- | this only cover Camellia 128 bits for now, API will change once 192 -- and 256 mode are implemented too module Crypto.Cipher.Camellia data Key Key :: Vector Word64 -> Vector Word64 -> Vector Word64 -> Key k :: Key -> Vector Word64 kw :: Key -> Vector Word64 ke :: Key -> Vector Word64 initKey128 :: ByteString -> Either String Key -- | encrypt with the key a bytestring and returns the encrypted bytestring encrypt :: Key -> ByteString -> ByteString -- | decrypt with the key a bytestring and returns the encrypted bytestring decrypt :: Key -> ByteString -> ByteString instance Show Word128 instance Eq Word128 instance Show Key module Crypto.Cipher.Blowfish data Blowfish data Key initKey :: ByteString -> Either String Key encrypt :: Key -> ByteString -> ByteString decrypt :: Key -> ByteString -> ByteString instance Eq Key instance Show Key instance Serialize Key instance Serialize Blowfish module Crypto.Cipher.RC4 module Crypto.Cipher.AES