crypto-cipher-types-0.0.4: Generic cryptography cipher types

PortabilityExcellent
StabilityStable
MaintainerVincent Hanquez <vincent@snarc.org>
Safe HaskellNone

Crypto.Cipher.Types

Contents

Description

symmetric cipher basic types

Synopsis

Cipher classes

class Cipher cipher whereSource

Symmetric cipher class.

Methods

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

Methods

blockSize :: cipher -> IntSource

Return the size of block required for this block cipher

ecbEncrypt :: cipher -> ByteString -> ByteStringSource

Encrypt using the ECB mode.

input need to be a multiple of the blocksize

ecbDecrypt :: cipher -> ByteString -> ByteStringSource

Decrypt using the ECB mode.

input need to be a multiple of the blocksize

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

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

xtsEncrypt :: (cipher, cipher) -> IV cipher -> DataUnitOffset -> ByteString -> ByteStringSource

encrypt using the XTS mode.

input need to be a multiple of the blocksize

xtsDecrypt :: (cipher, cipher) -> IV cipher -> DataUnitOffset -> ByteString -> ByteStringSource

decrypt using the XTS mode.

input need to be a multiple of the blocksize

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

Methods

streamEncrypt :: cipher -> ByteString -> (ByteString, cipher)Source

Encrypt using the stream cipher

streamDecrypt :: cipher -> ByteString -> (ByteString, cipher)Source

Decrypt 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

Constructors

KeySizeRange Int Int

in the range [min,max]

KeySizeEnum [Int]

one of the specified values

KeySizeFixed Int

a specific size

data KeyError Source

Possible Error that can be reported when initializating a key

Instances

data AEAD cipher Source

Authenticated Encryption with Associated Data algorithms

Constructors

AEAD cipher (AEADState cipher) 

data AEADState cipher Source

Wrapper for any AEADState

Constructors

forall st . AEADModeImpl cipher st => AEADState st 

data AEADMode Source

AEAD Mode

Instances

class BlockCipher cipher => AEADModeImpl cipher state whereSource

Class of AEAD Mode implementation

Methods

aeadStateAppendHeader :: cipher -> state -> ByteString -> stateSource

aeadStateEncrypt :: cipher -> state -> ByteString -> (ByteString, state)Source

aeadStateDecrypt :: cipher -> state -> ByteString -> (ByteString, state)Source

aeadStateFinalize :: cipher -> state -> Int -> AuthTagSource

AEAD

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

aeadSimpleEncryptSource

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

aeadSimpleDecryptSource

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

data Key c Source

a Key parametrized by the cipher

Instances

Eq (Key c) 
Byteable (Key c) 
ToSecureMem (Key c) 

makeKey :: (ToSecureMem b, Cipher c) => b -> Either KeyError (Key c)Source

Create a Key for a specified cipher

Initial Vector type and constructor

data IV c Source

an IV parametrized by the cipher

Instances

Eq (IV c) 
Byteable (IV c) 

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.

Authentification Tag

newtype AuthTag Source

Authentification Tag for AE cipher mode

Constructors

AuthTag ByteString