cryptonite-0.29: Cryptography Primitives sink
LicenseBSD-style
MaintainerVincent Hanquez <vincent@snarc.org>
StabilityStable
PortabilityExcellent
Safe HaskellNone
LanguageHaskell2010

Crypto.Cipher.Types

Description

Symmetric cipher basic types

Synopsis

Cipher classes

class Cipher cipher where #

Symmetric cipher class.

Methods

cipherInit :: ByteArray key => key -> CryptoFailable 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

Instances

Instances details
Cipher DES_EDE2 # 
Instance details

Defined in Crypto.Cipher.TripleDES

Cipher DES_EEE2 # 
Instance details

Defined in Crypto.Cipher.TripleDES

Cipher DES_EDE3 # 
Instance details

Defined in Crypto.Cipher.TripleDES

Cipher DES_EEE3 # 
Instance details

Defined in Crypto.Cipher.TripleDES

Cipher DES # 
Instance details

Defined in Crypto.Cipher.DES

Cipher AES256 # 
Instance details

Defined in Crypto.Cipher.AES

Cipher AES192 # 
Instance details

Defined in Crypto.Cipher.AES

Cipher AES128 # 
Instance details

Defined in Crypto.Cipher.AES

Cipher Twofish256 # 
Instance details

Defined in Crypto.Cipher.Twofish

Cipher Twofish192 # 
Instance details

Defined in Crypto.Cipher.Twofish

Cipher Twofish128 # 
Instance details

Defined in Crypto.Cipher.Twofish

Cipher CAST5 # 
Instance details

Defined in Crypto.Cipher.CAST5

Cipher Blowfish448 # 
Instance details

Defined in Crypto.Cipher.Blowfish

Cipher Blowfish256 # 
Instance details

Defined in Crypto.Cipher.Blowfish

Cipher Blowfish128 # 
Instance details

Defined in Crypto.Cipher.Blowfish

Cipher Blowfish64 # 
Instance details

Defined in Crypto.Cipher.Blowfish

Cipher Blowfish # 
Instance details

Defined in Crypto.Cipher.Blowfish

Cipher Camellia128 # 
Instance details

Defined in Crypto.Cipher.Camellia

class Cipher cipher => BlockCipher cipher where #

Symmetric block cipher class

Minimal complete definition

blockSize, ecbEncrypt, ecbDecrypt

Methods

blockSize :: cipher -> Int #

Return the size of block required for this block cipher

ecbEncrypt :: ByteArray ba => cipher -> ba -> ba #

Encrypt blocks

the input string need to be multiple of the block size

ecbDecrypt :: ByteArray ba => cipher -> ba -> ba #

Decrypt blocks

the input string need to be multiple of the block size

cbcEncrypt :: ByteArray ba => cipher -> IV cipher -> ba -> ba #

encrypt using the CBC mode.

input need to be a multiple of the blocksize

cbcDecrypt :: ByteArray ba => cipher -> IV cipher -> ba -> ba #

decrypt using the CBC mode.

input need to be a multiple of the blocksize

cfbEncrypt :: ByteArray ba => cipher -> IV cipher -> ba -> ba #

encrypt using the CFB mode.

input need to be a multiple of the blocksize

cfbDecrypt :: ByteArray ba => cipher -> IV cipher -> ba -> ba #

decrypt using the CFB mode.

input need to be a multiple of the blocksize

ctrCombine :: ByteArray ba => cipher -> IV cipher -> ba -> ba #

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

aeadInit :: ByteArrayAccess iv => AEADMode -> cipher -> iv -> CryptoFailable (AEAD cipher) #

Initialize a new AEAD State

When Nothing is returns, it means the mode is not handled.

Instances

Instances details
BlockCipher DES_EDE2 # 
Instance details

Defined in Crypto.Cipher.TripleDES

Methods

blockSize :: DES_EDE2 -> Int #

ecbEncrypt :: ByteArray ba => DES_EDE2 -> ba -> ba #

ecbDecrypt :: ByteArray ba => DES_EDE2 -> ba -> ba #

cbcEncrypt :: ByteArray ba => DES_EDE2 -> IV DES_EDE2 -> ba -> ba #

cbcDecrypt :: ByteArray ba => DES_EDE2 -> IV DES_EDE2 -> ba -> ba #

cfbEncrypt :: ByteArray ba => DES_EDE2 -> IV DES_EDE2 -> ba -> ba #

cfbDecrypt :: ByteArray ba => DES_EDE2 -> IV DES_EDE2 -> ba -> ba #

ctrCombine :: ByteArray ba => DES_EDE2 -> IV DES_EDE2 -> ba -> ba #

aeadInit :: ByteArrayAccess iv => AEADMode -> DES_EDE2 -> iv -> CryptoFailable (AEAD DES_EDE2) #

BlockCipher DES_EEE2 # 
Instance details

Defined in Crypto.Cipher.TripleDES

Methods

blockSize :: DES_EEE2 -> Int #

ecbEncrypt :: ByteArray ba => DES_EEE2 -> ba -> ba #

ecbDecrypt :: ByteArray ba => DES_EEE2 -> ba -> ba #

cbcEncrypt :: ByteArray ba => DES_EEE2 -> IV DES_EEE2 -> ba -> ba #

cbcDecrypt :: ByteArray ba => DES_EEE2 -> IV DES_EEE2 -> ba -> ba #

cfbEncrypt :: ByteArray ba => DES_EEE2 -> IV DES_EEE2 -> ba -> ba #

cfbDecrypt :: ByteArray ba => DES_EEE2 -> IV DES_EEE2 -> ba -> ba #

ctrCombine :: ByteArray ba => DES_EEE2 -> IV DES_EEE2 -> ba -> ba #

aeadInit :: ByteArrayAccess iv => AEADMode -> DES_EEE2 -> iv -> CryptoFailable (AEAD DES_EEE2) #

BlockCipher DES_EDE3 # 
Instance details

Defined in Crypto.Cipher.TripleDES

Methods

blockSize :: DES_EDE3 -> Int #

ecbEncrypt :: ByteArray ba => DES_EDE3 -> ba -> ba #

ecbDecrypt :: ByteArray ba => DES_EDE3 -> ba -> ba #

cbcEncrypt :: ByteArray ba => DES_EDE3 -> IV DES_EDE3 -> ba -> ba #

cbcDecrypt :: ByteArray ba => DES_EDE3 -> IV DES_EDE3 -> ba -> ba #

cfbEncrypt :: ByteArray ba => DES_EDE3 -> IV DES_EDE3 -> ba -> ba #

cfbDecrypt :: ByteArray ba => DES_EDE3 -> IV DES_EDE3 -> ba -> ba #

ctrCombine :: ByteArray ba => DES_EDE3 -> IV DES_EDE3 -> ba -> ba #

aeadInit :: ByteArrayAccess iv => AEADMode -> DES_EDE3 -> iv -> CryptoFailable (AEAD DES_EDE3) #

BlockCipher DES_EEE3 # 
Instance details

Defined in Crypto.Cipher.TripleDES

Methods

blockSize :: DES_EEE3 -> Int #

ecbEncrypt :: ByteArray ba => DES_EEE3 -> ba -> ba #

ecbDecrypt :: ByteArray ba => DES_EEE3 -> ba -> ba #

cbcEncrypt :: ByteArray ba => DES_EEE3 -> IV DES_EEE3 -> ba -> ba #

cbcDecrypt :: ByteArray ba => DES_EEE3 -> IV DES_EEE3 -> ba -> ba #

cfbEncrypt :: ByteArray ba => DES_EEE3 -> IV DES_EEE3 -> ba -> ba #

cfbDecrypt :: ByteArray ba => DES_EEE3 -> IV DES_EEE3 -> ba -> ba #

ctrCombine :: ByteArray ba => DES_EEE3 -> IV DES_EEE3 -> ba -> ba #

aeadInit :: ByteArrayAccess iv => AEADMode -> DES_EEE3 -> iv -> CryptoFailable (AEAD DES_EEE3) #

BlockCipher DES # 
Instance details

Defined in Crypto.Cipher.DES

Methods

blockSize :: DES -> Int #

ecbEncrypt :: ByteArray ba => DES -> ba -> ba #

ecbDecrypt :: ByteArray ba => DES -> ba -> ba #

cbcEncrypt :: ByteArray ba => DES -> IV DES -> ba -> ba #

cbcDecrypt :: ByteArray ba => DES -> IV DES -> ba -> ba #

cfbEncrypt :: ByteArray ba => DES -> IV DES -> ba -> ba #

cfbDecrypt :: ByteArray ba => DES -> IV DES -> ba -> ba #

ctrCombine :: ByteArray ba => DES -> IV DES -> ba -> ba #

aeadInit :: ByteArrayAccess iv => AEADMode -> DES -> iv -> CryptoFailable (AEAD DES) #

BlockCipher AES256 # 
Instance details

Defined in Crypto.Cipher.AES

Methods

blockSize :: AES256 -> Int #

ecbEncrypt :: ByteArray ba => AES256 -> ba -> ba #

ecbDecrypt :: ByteArray ba => AES256 -> ba -> ba #

cbcEncrypt :: ByteArray ba => AES256 -> IV AES256 -> ba -> ba #

cbcDecrypt :: ByteArray ba => AES256 -> IV AES256 -> ba -> ba #

cfbEncrypt :: ByteArray ba => AES256 -> IV AES256 -> ba -> ba #

cfbDecrypt :: ByteArray ba => AES256 -> IV AES256 -> ba -> ba #

ctrCombine :: ByteArray ba => AES256 -> IV AES256 -> ba -> ba #

aeadInit :: ByteArrayAccess iv => AEADMode -> AES256 -> iv -> CryptoFailable (AEAD AES256) #

BlockCipher AES192 # 
Instance details

Defined in Crypto.Cipher.AES

Methods

blockSize :: AES192 -> Int #

ecbEncrypt :: ByteArray ba => AES192 -> ba -> ba #

ecbDecrypt :: ByteArray ba => AES192 -> ba -> ba #

cbcEncrypt :: ByteArray ba => AES192 -> IV AES192 -> ba -> ba #

cbcDecrypt :: ByteArray ba => AES192 -> IV AES192 -> ba -> ba #

cfbEncrypt :: ByteArray ba => AES192 -> IV AES192 -> ba -> ba #

cfbDecrypt :: ByteArray ba => AES192 -> IV AES192 -> ba -> ba #

ctrCombine :: ByteArray ba => AES192 -> IV AES192 -> ba -> ba #

aeadInit :: ByteArrayAccess iv => AEADMode -> AES192 -> iv -> CryptoFailable (AEAD AES192) #

BlockCipher AES128 # 
Instance details

Defined in Crypto.Cipher.AES

Methods

blockSize :: AES128 -> Int #

ecbEncrypt :: ByteArray ba => AES128 -> ba -> ba #

ecbDecrypt :: ByteArray ba => AES128 -> ba -> ba #

cbcEncrypt :: ByteArray ba => AES128 -> IV AES128 -> ba -> ba #

cbcDecrypt :: ByteArray ba => AES128 -> IV AES128 -> ba -> ba #

cfbEncrypt :: ByteArray ba => AES128 -> IV AES128 -> ba -> ba #

cfbDecrypt :: ByteArray ba => AES128 -> IV AES128 -> ba -> ba #

ctrCombine :: ByteArray ba => AES128 -> IV AES128 -> ba -> ba #

aeadInit :: ByteArrayAccess iv => AEADMode -> AES128 -> iv -> CryptoFailable (AEAD AES128) #

BlockCipher Twofish256 # 
Instance details

Defined in Crypto.Cipher.Twofish

BlockCipher Twofish192 # 
Instance details

Defined in Crypto.Cipher.Twofish

BlockCipher Twofish128 # 
Instance details

Defined in Crypto.Cipher.Twofish

BlockCipher CAST5 # 
Instance details

Defined in Crypto.Cipher.CAST5

Methods

blockSize :: CAST5 -> Int #

ecbEncrypt :: ByteArray ba => CAST5 -> ba -> ba #

ecbDecrypt :: ByteArray ba => CAST5 -> ba -> ba #

cbcEncrypt :: ByteArray ba => CAST5 -> IV CAST5 -> ba -> ba #

cbcDecrypt :: ByteArray ba => CAST5 -> IV CAST5 -> ba -> ba #

cfbEncrypt :: ByteArray ba => CAST5 -> IV CAST5 -> ba -> ba #

cfbDecrypt :: ByteArray ba => CAST5 -> IV CAST5 -> ba -> ba #

ctrCombine :: ByteArray ba => CAST5 -> IV CAST5 -> ba -> ba #

aeadInit :: ByteArrayAccess iv => AEADMode -> CAST5 -> iv -> CryptoFailable (AEAD CAST5) #

BlockCipher Blowfish448 # 
Instance details

Defined in Crypto.Cipher.Blowfish

BlockCipher Blowfish256 # 
Instance details

Defined in Crypto.Cipher.Blowfish

BlockCipher Blowfish128 # 
Instance details

Defined in Crypto.Cipher.Blowfish

BlockCipher Blowfish64 # 
Instance details

Defined in Crypto.Cipher.Blowfish

BlockCipher Blowfish # 
Instance details

Defined in Crypto.Cipher.Blowfish

Methods

blockSize :: Blowfish -> Int #

ecbEncrypt :: ByteArray ba => Blowfish -> ba -> ba #

ecbDecrypt :: ByteArray ba => Blowfish -> ba -> ba #

cbcEncrypt :: ByteArray ba => Blowfish -> IV Blowfish -> ba -> ba #

cbcDecrypt :: ByteArray ba => Blowfish -> IV Blowfish -> ba -> ba #

cfbEncrypt :: ByteArray ba => Blowfish -> IV Blowfish -> ba -> ba #

cfbDecrypt :: ByteArray ba => Blowfish -> IV Blowfish -> ba -> ba #

ctrCombine :: ByteArray ba => Blowfish -> IV Blowfish -> ba -> ba #

aeadInit :: ByteArrayAccess iv => AEADMode -> Blowfish -> iv -> CryptoFailable (AEAD Blowfish) #

BlockCipher Camellia128 # 
Instance details

Defined in Crypto.Cipher.Camellia

class BlockCipher cipher => BlockCipher128 cipher where #

class of block cipher with a 128 bits block size

Minimal complete definition

Nothing

Methods

xtsEncrypt #

Arguments

:: ByteArray ba 
=> (cipher, cipher) 
-> IV cipher

Usually represent the Data Unit (e.g. disk sector)

-> DataUnitOffset

Offset in the data unit in number of blocks

-> ba

Plaintext

-> ba

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

xtsDecrypt #

Arguments

:: ByteArray ba 
=> (cipher, cipher) 
-> IV cipher

Usually represent the Data Unit (e.g. disk sector)

-> DataUnitOffset

Offset in the data unit in number of blocks

-> ba

Ciphertext

-> ba

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

Instances

Instances details
BlockCipher128 AES256 # 
Instance details

Defined in Crypto.Cipher.AES

Methods

xtsEncrypt :: ByteArray ba => (AES256, AES256) -> IV AES256 -> DataUnitOffset -> ba -> ba #

xtsDecrypt :: ByteArray ba => (AES256, AES256) -> IV AES256 -> DataUnitOffset -> ba -> ba #

BlockCipher128 AES192 # 
Instance details

Defined in Crypto.Cipher.AES

Methods

xtsEncrypt :: ByteArray ba => (AES192, AES192) -> IV AES192 -> DataUnitOffset -> ba -> ba #

xtsDecrypt :: ByteArray ba => (AES192, AES192) -> IV AES192 -> DataUnitOffset -> ba -> ba #

BlockCipher128 AES128 # 
Instance details

Defined in Crypto.Cipher.AES

Methods

xtsEncrypt :: ByteArray ba => (AES128, AES128) -> IV AES128 -> DataUnitOffset -> ba -> ba #

xtsDecrypt :: ByteArray ba => (AES128, AES128) -> IV AES128 -> DataUnitOffset -> ba -> ba #

class Cipher cipher => StreamCipher cipher where #

Symmetric stream cipher class

Methods

streamCombine :: ByteArray ba => cipher -> ba -> (ba, 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

AEAD functions

data AEADMode #

AEAD Mode

Instances

Instances details
Eq AEADMode # 
Instance details

Defined in Crypto.Cipher.Types.Base

Show AEADMode # 
Instance details

Defined in Crypto.Cipher.Types.Base

data CCM_M #

Instances

Instances details
Eq CCM_M # 
Instance details

Defined in Crypto.Cipher.Types.Base

Methods

(==) :: CCM_M -> CCM_M -> Bool #

(/=) :: CCM_M -> CCM_M -> Bool #

Show CCM_M # 
Instance details

Defined in Crypto.Cipher.Types.Base

Methods

showsPrec :: Int -> CCM_M -> ShowS #

show :: CCM_M -> String #

showList :: [CCM_M] -> ShowS #

data CCM_L #

Constructors

CCM_L2 
CCM_L3 
CCM_L4 

Instances

Instances details
Eq CCM_L # 
Instance details

Defined in Crypto.Cipher.Types.Base

Methods

(==) :: CCM_L -> CCM_L -> Bool #

(/=) :: CCM_L -> CCM_L -> Bool #

Show CCM_L # 
Instance details

Defined in Crypto.Cipher.Types.Base

Methods

showsPrec :: Int -> CCM_L -> ShowS #

show :: CCM_L -> String #

showList :: [CCM_L] -> ShowS #

data AEADModeImpl st #

AEAD Implementation

Constructors

AEADModeImpl 

Fields

data AEAD cipher #

Authenticated Encryption with Associated Data algorithms

Constructors

forall st. AEAD 

Fields

aeadAppendHeader :: ByteArrayAccess aad => AEAD cipher -> aad -> AEAD cipher #

Append some header information to an AEAD context

aeadEncrypt :: ByteArray ba => AEAD cipher -> ba -> (ba, AEAD cipher) #

Encrypt some data and update the AEAD context

aeadDecrypt :: ByteArray ba => AEAD cipher -> ba -> (ba, AEAD cipher) #

Decrypt some data and update the AEAD context

aeadFinalize :: AEAD cipher -> Int -> AuthTag #

Finalize the AEAD context and return the authentication tag

aeadSimpleEncrypt #

Arguments

:: (ByteArrayAccess aad, ByteArray ba) 
=> AEAD a

A new AEAD Context

-> aad

Optional Authentication data header

-> ba

Optional Plaintext

-> Int

Tag length

-> (AuthTag, ba)

Authentication tag and ciphertext

Simple AEAD encryption

aeadSimpleDecrypt #

Arguments

:: (ByteArrayAccess aad, ByteArray ba) 
=> AEAD a

A new AEAD Context

-> aad

Optional Authentication data header

-> ba

Ciphertext

-> AuthTag

The authentication tag

-> Maybe ba

Plaintext

Simple AEAD decryption

Initial Vector type and constructor

data IV c #

an IV parametrized by the cipher

Instances

Instances details
Eq (IV c) # 
Instance details

Defined in Crypto.Cipher.Types.Block

Methods

(==) :: IV c -> IV c -> Bool #

(/=) :: IV c -> IV c -> Bool #

BlockCipher c => ByteArrayAccess (IV c) # 
Instance details

Defined in Crypto.Cipher.Types.Block

Methods

length :: IV c -> Int #

withByteArray :: IV c -> (Ptr p -> IO a) -> IO a #

copyByteArrayToPtr :: IV c -> Ptr p -> IO () #

makeIV :: (ByteArrayAccess 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 :: IV c -> Int -> IV c #

Increment an IV by a number.

Assume the IV is in Big Endian format.

Authentification Tag

newtype AuthTag #

Authentication Tag for AE cipher mode

Constructors

AuthTag 

Fields

Instances

Instances details
Eq AuthTag # 
Instance details

Defined in Crypto.Cipher.Types.Base

Methods

(==) :: AuthTag -> AuthTag -> Bool #

(/=) :: AuthTag -> AuthTag -> Bool #

Show AuthTag # 
Instance details

Defined in Crypto.Cipher.Types.Base

NFData AuthTag # 
Instance details

Defined in Crypto.Cipher.Types.Base

Methods

rnf :: AuthTag -> () #

ByteArrayAccess AuthTag # 
Instance details

Defined in Crypto.Cipher.Types.Base

Methods

length :: AuthTag -> Int #

withByteArray :: AuthTag -> (Ptr p -> IO a) -> IO a #

copyByteArrayToPtr :: AuthTag -> Ptr p -> IO () #