License | BSD-style |
---|---|
Maintainer | Vincent Hanquez <vincent@snarc.org> |
Stability | Stable |
Portability | Excellent |
Safe Haskell | None |
Language | Haskell98 |
Crypto.Cipher.Types
Contents
Description
symmetric cipher basic types
- class Cipher cipher where
- class Cipher cipher => BlockCipher cipher where
- class Cipher cipher => StreamCipher cipher where
- type DataUnitOffset = Word32
- data KeySizeSpecifier
- = KeySizeRange Int Int
- | KeySizeEnum [Int]
- | KeySizeFixed Int
- data KeyError
- data AEAD cipher = AEAD cipher (AEADState cipher)
- data AEADState cipher = AEADModeImpl cipher st => AEADState st
- data AEADMode
- class BlockCipher cipher => AEADModeImpl cipher state where
- cfb8Encrypt :: BlockCipher a => a -> IV a -> ByteString -> ByteString
- cfb8Decrypt :: BlockCipher a => a -> IV a -> ByteString -> ByteString
- aeadAppendHeader :: BlockCipher a => AEAD a -> ByteString -> AEAD a
- aeadEncrypt :: BlockCipher a => AEAD a -> ByteString -> (ByteString, AEAD a)
- aeadDecrypt :: BlockCipher a => AEAD a -> ByteString -> (ByteString, AEAD a)
- aeadFinalize :: BlockCipher a => AEAD a -> Int -> AuthTag
- aeadSimpleEncrypt :: BlockCipher a => AEAD a -> ByteString -> ByteString -> Int -> (AuthTag, ByteString)
- aeadSimpleDecrypt :: BlockCipher a => AEAD a -> ByteString -> ByteString -> AuthTag -> Maybe ByteString
- data Key c
- makeKey :: (ToSecureMem b, Cipher c) => b -> Either KeyError (Key c)
- data IV c
- makeIV :: (Byteable b, BlockCipher c) => b -> Maybe (IV c)
- nullIV :: BlockCipher c => IV c
- ivAdd :: BlockCipher c => IV c -> Int -> IV c
- newtype AuthTag = AuthTag ByteString
Cipher classes
Symmetric cipher class.
Minimal complete definition
Methods
cipherInit :: Key cipher -> cipher #
Initialize a cipher context from a key
cipherName :: cipher -> String #
Cipher name
cipherKeySize :: cipher -> KeySizeSpecifier #
return the size of the key required for this cipher. Some cipher accept any size for key
class Cipher cipher => BlockCipher cipher where #
Symmetric block cipher class
Minimal complete definition
Methods
Return the size of block required for this block cipher
ecbEncrypt :: cipher -> ByteString -> ByteString #
Encrypt blocks
the input string need to be multiple of the block size
ecbDecrypt :: cipher -> ByteString -> ByteString #
Decrypt blocks
the input string need to be multiple of the block size
cbcEncrypt :: cipher -> IV cipher -> ByteString -> ByteString #
encrypt using the CBC mode.
input need to be a multiple of the blocksize
cbcDecrypt :: cipher -> IV cipher -> ByteString -> ByteString #
decrypt using the CBC mode.
input need to be a multiple of the blocksize
cfbEncrypt :: cipher -> IV cipher -> ByteString -> ByteString #
encrypt using the CFB mode.
input need to be a multiple of the blocksize
cfbDecrypt :: cipher -> IV cipher -> ByteString -> ByteString #
decrypt using the CFB mode.
input need to be a multiple of the blocksize
ctrCombine :: cipher -> IV cipher -> ByteString -> ByteString #
combine using the CTR mode.
CTR mode produce a stream of randomized data that is combined (by XOR operation) with the input stream.
encryption and decryption are the same operation.
input can be of any size
xtsEncrypt :: (cipher, cipher) -> IV cipher -> DataUnitOffset -> ByteString -> ByteString #
encrypt using the XTS mode.
input need to be a multiple of the blocksize, and the cipher need to process 128 bits block only
xtsDecrypt :: (cipher, cipher) -> IV cipher -> DataUnitOffset -> ByteString -> ByteString #
decrypt using the XTS mode.
input need to be a multiple of the blocksize, and the cipher need to process 128 bits block only
aeadInit :: Byteable iv => AEADMode -> cipher -> iv -> Maybe (AEAD cipher) #
Initialize a new AEAD State
When Nothing is returns, it means the mode is not handled.
class Cipher cipher => StreamCipher cipher where #
Symmetric stream cipher class
Minimal complete definition
Methods
streamCombine :: cipher -> ByteString -> (ByteString, cipher) #
Combine using the stream cipher
type DataUnitOffset = Word32 #
Offset inside an XTS data unit, measured in block size.
data KeySizeSpecifier #
Different specifier for key size in bytes
Constructors
KeySizeRange Int Int | in the range [min,max] |
KeySizeEnum [Int] | one of the specified values |
KeySizeFixed Int | a specific size |
Instances
Possible Error that can be reported when initializating a key
Constructors
KeyErrorTooSmall | |
KeyErrorTooBig | |
KeyErrorInvalid String |
Authenticated Encryption with Associated Data algorithms
AEAD Mode
class BlockCipher cipher => AEADModeImpl cipher state where #
Class of AEAD Mode implementation
Minimal complete definition
aeadStateAppendHeader, aeadStateEncrypt, aeadStateDecrypt, aeadStateFinalize
Methods
aeadStateAppendHeader :: cipher -> state -> ByteString -> state #
aeadStateEncrypt :: cipher -> state -> ByteString -> (ByteString, state) #
aeadStateDecrypt :: cipher -> state -> ByteString -> (ByteString, state) #
aeadStateFinalize :: cipher -> state -> Int -> AuthTag #
cfb8Encrypt :: BlockCipher a => a -> IV a -> ByteString -> ByteString #
Encrypt using CFB mode in 8 bit output
Effectively turn a Block cipher in CFB mode into a Stream cipher
cfb8Decrypt :: BlockCipher a => a -> IV a -> ByteString -> ByteString #
Decrypt using CFB mode in 8 bit output
Effectively turn a Block cipher in CFB mode into a Stream cipher
AEAD functions
aeadAppendHeader :: BlockCipher a => AEAD a -> ByteString -> AEAD a #
Append associated data into the AEAD state
aeadEncrypt :: BlockCipher a => AEAD a -> ByteString -> (ByteString, AEAD a) #
Encrypt input and append into the AEAD state
aeadDecrypt :: BlockCipher a => AEAD a -> ByteString -> (ByteString, AEAD a) #
Decrypt input and append into the AEAD state
aeadFinalize :: BlockCipher a => AEAD a -> Int -> AuthTag #
Finalize the AEAD state and create an authentification tag
Arguments
:: BlockCipher a | |
=> AEAD a | A new AEAD Context |
-> ByteString | Optional Authentified Header |
-> ByteString | Optional Plaintext |
-> Int | Tag length |
-> (AuthTag, ByteString) | Authentification tag and ciphertext |
Simple AEAD encryption
Arguments
:: BlockCipher a | |
=> AEAD a | A new AEAD Context |
-> ByteString | Optional Authentified Header |
-> ByteString | Optional Plaintext |
-> AuthTag | Tag length |
-> Maybe ByteString | Plaintext |
Simple AEAD decryption
Key type and constructor
a Key parametrized by the cipher
makeKey :: (ToSecureMem b, Cipher c) => b -> Either KeyError (Key c) #
Create a Key for a specified cipher
Initial Vector type and constructor
makeIV :: (Byteable b, BlockCipher c) => b -> Maybe (IV c) #
Create an IV for a specified block cipher
nullIV :: BlockCipher c => IV c #
Create an IV that is effectively representing the number 0
ivAdd :: BlockCipher c => IV c -> Int -> IV c #
Increment an IV by a number.
Assume the IV is in Big Endian format.