Portability | Excellent |
---|---|
Stability | Stable |
Maintainer | Vincent Hanquez <vincent@snarc.org> |
Safe Haskell | None |
symmetric cipher basic types
- class Cipher cipher where
- cipherInit :: Key cipher -> cipher
- cipherName :: cipher -> String
- cipherKeySize :: cipher -> KeySizeSpecifier
- class Cipher cipher => BlockCipher cipher where
- blockSize :: cipher -> Int
- ecbEncrypt :: cipher -> ByteString -> ByteString
- ecbDecrypt :: cipher -> ByteString -> ByteString
- cbcEncrypt :: cipher -> IV cipher -> ByteString -> ByteString
- cbcDecrypt :: cipher -> IV cipher -> ByteString -> ByteString
- cfbEncrypt :: cipher -> IV cipher -> ByteString -> ByteString
- cfbDecrypt :: cipher -> IV cipher -> ByteString -> ByteString
- ctrCombine :: cipher -> IV cipher -> ByteString -> ByteString
- xtsEncrypt :: (cipher, cipher) -> IV cipher -> DataUnitOffset -> ByteString -> ByteString
- xtsDecrypt :: (cipher, cipher) -> IV cipher -> DataUnitOffset -> ByteString -> ByteString
- aeadInit :: Byteable iv => AEADMode -> cipher -> iv -> Maybe (AEAD cipher)
- class Cipher cipher => StreamCipher cipher where
- streamCombine :: cipher -> ByteString -> (ByteString, cipher)
- type DataUnitOffset = Word32
- data KeySizeSpecifier
- = KeySizeRange Int Int
- | KeySizeEnum [Int]
- | KeySizeFixed Int
- data KeyError
- data AEAD cipher = AEAD cipher (AEADState cipher)
- data AEADState cipher = forall st . AEADModeImpl cipher st => AEADState st
- data AEADMode
- class BlockCipher cipher => AEADModeImpl cipher state where
- 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
- 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
class Cipher cipher whereSource
Symmetric cipher class.
cipherInit :: Key cipher -> cipherSource
Initialize a cipher context from a key
cipherName :: cipher -> StringSource
Cipher name
cipherKeySize :: cipher -> KeySizeSpecifierSource
return the size of the key required for this cipher. Some cipher accept any size for key
class Cipher cipher => BlockCipher cipher whereSource
Symmetric block cipher class
blockSize :: cipher -> IntSource
Return the size of block required for this block cipher
ecbEncrypt :: cipher -> ByteString -> ByteStringSource
Encrypt blocks
the input string need to be multiple of the block size
ecbDecrypt :: cipher -> ByteString -> ByteStringSource
Decrypt blocks
the input string need to be multiple of the block size
cbcEncrypt :: cipher -> IV cipher -> ByteString -> ByteStringSource
encrypt using the CBC mode.
input need to be a multiple of the blocksize
cbcDecrypt :: cipher -> IV cipher -> ByteString -> ByteStringSource
decrypt using the CBC mode.
input need to be a multiple of the blocksize
cfbEncrypt :: cipher -> IV cipher -> ByteString -> ByteStringSource
encrypt using the CFB mode.
input need to be a multiple of the blocksize
cfbDecrypt :: cipher -> IV cipher -> ByteString -> ByteStringSource
decrypt using the CFB mode.
input need to be a multiple of the blocksize
ctrCombine :: cipher -> IV cipher -> ByteString -> ByteStringSource
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
:: (cipher, cipher) | |
-> IV cipher | Usually represent the Data Unit (e.g. disk sector) |
-> DataUnitOffset | Offset in the data unit in number of blocks |
-> ByteString | Plaintext |
-> ByteString | Ciphertext |
encrypt using the XTS mode.
input need to be a multiple of the blocksize, and the cipher need to process 128 bits block only
:: (cipher, cipher) | |
-> IV cipher | Usually represent the Data Unit (e.g. disk sector) |
-> DataUnitOffset | Offset in the data unit in number of blocks |
-> ByteString | Ciphertext |
-> ByteString | Plaintext |
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)Source
Initialize a new AEAD State
When Nothing is returns, it means the mode is not handled.
class Cipher cipher => StreamCipher cipher whereSource
Symmetric stream cipher class
streamCombine :: cipher -> ByteString -> (ByteString, cipher)Source
Combine using the stream cipher
type DataUnitOffset = Word32Source
Offset inside an XTS data unit, measured in block size.
data KeySizeSpecifier Source
Different specifier for key size in bytes
KeySizeRange Int Int | in the range [min,max] |
KeySizeEnum [Int] | one of the specified values |
KeySizeFixed Int | a specific size |
Possible Error that can be reported when initializating a key
Authenticated Encryption with Associated Data algorithms
Wrapper for any AEADState
forall st . AEADModeImpl cipher st => AEADState st |
AEAD Mode
class BlockCipher cipher => AEADModeImpl cipher state whereSource
Class of AEAD Mode implementation
aeadStateAppendHeader :: cipher -> state -> ByteString -> stateSource
aeadStateEncrypt :: cipher -> state -> ByteString -> (ByteString, state)Source
aeadStateDecrypt :: cipher -> state -> ByteString -> (ByteString, state)Source
aeadStateFinalize :: cipher -> state -> Int -> AuthTagSource
cfb8Encrypt :: BlockCipher a => a -> IV a -> ByteString -> ByteStringSource
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 -> ByteStringSource
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 aSource
Append associated data into the AEAD state
aeadEncrypt :: BlockCipher a => AEAD a -> ByteString -> (ByteString, AEAD a)Source
Encrypt input and append into the AEAD state
aeadDecrypt :: BlockCipher a => AEAD a -> ByteString -> (ByteString, AEAD a)Source
Decrypt input and append into the AEAD state
aeadFinalize :: BlockCipher a => AEAD a -> Int -> AuthTagSource
Finalize the AEAD state and create an authentification tag
:: 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
:: 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
makeKey :: (ToSecureMem b, Cipher c) => b -> Either KeyError (Key c)Source
Create a Key for a specified cipher
Initial Vector type and constructor
makeIV :: (Byteable b, BlockCipher c) => b -> Maybe (IV c)Source
Create an IV for a specified block cipher
nullIV :: BlockCipher c => IV cSource
Create an IV that is effectively representing the number 0
ivAdd :: BlockCipher c => IV c -> Int -> IV cSource
Increment an IV by a number.
Assume the IV is in Big Endian format.