cryptocipher-0.6.2: Symmetrical block and stream ciphers.

LicenseBSD-style
MaintainerVincent Hanquez <vincent@snarc.org>
Stabilitystable
Portabilitygood
Safe HaskellNone
LanguageHaskell98

Crypto.Cipher

Contents

Description

All the cipher functionalities are available through the BlockCipher and StreamCipher classes.

A simplified example (with simplified error handling):

import Crypto.Cipher
import Data.ByteString (ByteString)
import qualified Data.ByteString as B

initAES256 :: ByteString -> AES256
initAES256 = either (error . show) cipherInit . makeKey

cbcEncryption :: AES256 -> ByteString -> ByteString -> ByteString
cbcEncryption ctx ivRaw plainText = cbcEncrypt ctx iv plainText
  where iv = maybe (error "invalid IV") id $ ivRaw
Synopsis

Cipher classes

class Cipher cipher where #

Symmetric cipher class.

Minimal complete definition

cipherInit, cipherName, cipherKeySize

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

Instances
Cipher AES 
Instance details

Defined in Crypto.Cipher.AES

Methods

cipherInit :: Key AES -> AES #

cipherName :: AES -> String #

cipherKeySize :: AES -> KeySizeSpecifier #

Cipher AES128 
Instance details

Defined in Crypto.Cipher.AES

Cipher AES192 
Instance details

Defined in Crypto.Cipher.AES

Cipher AES256 
Instance details

Defined in Crypto.Cipher.AES

Cipher Blowfish 
Instance details

Defined in Crypto.Cipher.Blowfish

Cipher Blowfish128 
Instance details

Defined in Crypto.Cipher.Blowfish

Cipher Blowfish256 
Instance details

Defined in Crypto.Cipher.Blowfish

Cipher Blowfish448 
Instance details

Defined in Crypto.Cipher.Blowfish

Cipher Blowfish64 
Instance details

Defined in Crypto.Cipher.Blowfish

Cipher DES 
Instance details

Defined in Crypto.Cipher.DES

Cipher DES_EDE2 
Instance details

Defined in Crypto.Cipher.TripleDES

Cipher DES_EDE3 
Instance details

Defined in Crypto.Cipher.TripleDES

Cipher DES_EEE2 
Instance details

Defined in Crypto.Cipher.TripleDES

Cipher DES_EEE3 
Instance details

Defined in Crypto.Cipher.TripleDES

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 :: 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 #

Arguments

:: (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

xtsDecrypt #

Arguments

:: (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) #

Initialize a new AEAD State

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

Instances
BlockCipher AES 
Instance details

Defined in Crypto.Cipher.AES

Methods

blockSize :: AES -> Int #

ecbEncrypt :: AES -> ByteString -> ByteString #

ecbDecrypt :: AES -> ByteString -> ByteString #

cbcEncrypt :: AES -> IV AES -> ByteString -> ByteString #

cbcDecrypt :: AES -> IV AES -> ByteString -> ByteString #

cfbEncrypt :: AES -> IV AES -> ByteString -> ByteString #

cfbDecrypt :: AES -> IV AES -> ByteString -> ByteString #

ctrCombine :: AES -> IV AES -> ByteString -> ByteString #

xtsEncrypt :: (AES, AES) -> IV AES -> DataUnitOffset -> ByteString -> ByteString #

xtsDecrypt :: (AES, AES) -> IV AES -> DataUnitOffset -> ByteString -> ByteString #

aeadInit :: Byteable iv => AEADMode -> AES -> iv -> Maybe (AEAD AES) #

BlockCipher AES128 
Instance details

Defined in Crypto.Cipher.AES

BlockCipher AES192 
Instance details

Defined in Crypto.Cipher.AES

BlockCipher AES256 
Instance details

Defined in Crypto.Cipher.AES

BlockCipher Blowfish 
Instance details

Defined in Crypto.Cipher.Blowfish

BlockCipher Blowfish128 
Instance details

Defined in Crypto.Cipher.Blowfish

BlockCipher Blowfish256 
Instance details

Defined in Crypto.Cipher.Blowfish

BlockCipher Blowfish448 
Instance details

Defined in Crypto.Cipher.Blowfish

BlockCipher Blowfish64 
Instance details

Defined in Crypto.Cipher.Blowfish

BlockCipher DES 
Instance details

Defined in Crypto.Cipher.DES

BlockCipher DES_EDE2 
Instance details

Defined in Crypto.Cipher.TripleDES

BlockCipher DES_EDE3 
Instance details

Defined in Crypto.Cipher.TripleDES

BlockCipher DES_EEE2 
Instance details

Defined in Crypto.Cipher.TripleDES

BlockCipher DES_EEE3 
Instance details

Defined in Crypto.Cipher.TripleDES

BlockCipher Camellia128 
Instance details

Defined in Crypto.Cipher.Camellia

class Cipher cipher => StreamCipher cipher where #

Symmetric stream cipher class

Minimal complete definition

streamCombine

Methods

streamCombine :: cipher -> ByteString -> (ByteString, cipher) #

Combine using the stream cipher

Key

data Key c #

a Key parametrized by the cipher

Instances
Eq (Key c) 
Instance details

Defined in Crypto.Cipher.Types.Base

Methods

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

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

ToSecureMem (Key c) 
Instance details

Defined in Crypto.Cipher.Types.Base

Methods

toSecureMem :: Key c -> SecureMem

Byteable (Key c) 
Instance details

Defined in Crypto.Cipher.Types.Base

Methods

toBytes :: Key c -> ByteString

byteableLength :: Key c -> Int

withBytePtr :: Key c -> (Ptr Word8 -> IO b) -> IO b

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

Create a Key for a specified cipher

Initialization Vector (IV)

data IV c #

an IV parametrized by the cipher

Instances
Eq (IV c) 
Instance details

Defined in Crypto.Cipher.Types.Base

Methods

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

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

Byteable (IV c) 
Instance details

Defined in Crypto.Cipher.Types.Base

Methods

toBytes :: IV c -> ByteString

byteableLength :: IV c -> Int

withBytePtr :: IV c -> (Ptr Word8 -> IO b) -> IO b

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.

Authenticated Encryption with Associated Data (AEAD)

data AEAD cipher #

Authenticated Encryption with Associated Data algorithms

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

Cipher implementations

data AES128 #

Instances
BlockCipher AES128 
Instance details

Defined in Crypto.Cipher.AES

Cipher AES128 
Instance details

Defined in Crypto.Cipher.AES

AEADModeImpl AES128 AESGCM 
Instance details

Defined in Crypto.Cipher.AES

Methods

aeadStateAppendHeader :: AES128 -> AESGCM -> ByteString -> AESGCM #

aeadStateEncrypt :: AES128 -> AESGCM -> ByteString -> (ByteString, AESGCM) #

aeadStateDecrypt :: AES128 -> AESGCM -> ByteString -> (ByteString, AESGCM) #

aeadStateFinalize :: AES128 -> AESGCM -> Int -> AuthTag #

AEADModeImpl AES128 AESOCB 
Instance details

Defined in Crypto.Cipher.AES

Methods

aeadStateAppendHeader :: AES128 -> AESOCB -> ByteString -> AESOCB #

aeadStateEncrypt :: AES128 -> AESOCB -> ByteString -> (ByteString, AESOCB) #

aeadStateDecrypt :: AES128 -> AESOCB -> ByteString -> (ByteString, AESOCB) #

aeadStateFinalize :: AES128 -> AESOCB -> Int -> AuthTag #

data AES192 #

Instances
BlockCipher AES192 
Instance details

Defined in Crypto.Cipher.AES

Cipher AES192 
Instance details

Defined in Crypto.Cipher.AES

AEADModeImpl AES192 AESGCM 
Instance details

Defined in Crypto.Cipher.AES

Methods

aeadStateAppendHeader :: AES192 -> AESGCM -> ByteString -> AESGCM #

aeadStateEncrypt :: AES192 -> AESGCM -> ByteString -> (ByteString, AESGCM) #

aeadStateDecrypt :: AES192 -> AESGCM -> ByteString -> (ByteString, AESGCM) #

aeadStateFinalize :: AES192 -> AESGCM -> Int -> AuthTag #

AEADModeImpl AES192 AESOCB 
Instance details

Defined in Crypto.Cipher.AES

Methods

aeadStateAppendHeader :: AES192 -> AESOCB -> ByteString -> AESOCB #

aeadStateEncrypt :: AES192 -> AESOCB -> ByteString -> (ByteString, AESOCB) #

aeadStateDecrypt :: AES192 -> AESOCB -> ByteString -> (ByteString, AESOCB) #

aeadStateFinalize :: AES192 -> AESOCB -> Int -> AuthTag #

data AES256 #

Instances
BlockCipher AES256 
Instance details

Defined in Crypto.Cipher.AES

Cipher AES256 
Instance details

Defined in Crypto.Cipher.AES

AEADModeImpl AES256 AESGCM 
Instance details

Defined in Crypto.Cipher.AES

Methods

aeadStateAppendHeader :: AES256 -> AESGCM -> ByteString -> AESGCM #

aeadStateEncrypt :: AES256 -> AESGCM -> ByteString -> (ByteString, AESGCM) #

aeadStateDecrypt :: AES256 -> AESGCM -> ByteString -> (ByteString, AESGCM) #

aeadStateFinalize :: AES256 -> AESGCM -> Int -> AuthTag #

AEADModeImpl AES256 AESOCB 
Instance details

Defined in Crypto.Cipher.AES

Methods

aeadStateAppendHeader :: AES256 -> AESOCB -> ByteString -> AESOCB #

aeadStateEncrypt :: AES256 -> AESOCB -> ByteString -> (ByteString, AESOCB) #

aeadStateDecrypt :: AES256 -> AESOCB -> ByteString -> (ByteString, AESOCB) #

aeadStateFinalize :: AES256 -> AESOCB -> Int -> AuthTag #