cipher-aes-0.2.8: Fast AES cipher implementation with advanced mode of operations

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

Crypto.Cipher.AES

Contents

Description

 

Synopsis

block cipher data types

data AES

AES Context (pre-processed key)

data AES128

AES with 128 bit key

data AES192

AES with 192 bit key

data AES256

AES with 256 bit key

Authenticated encryption block cipher types

creation

initAES :: Byteable b => b -> AES

Initialize a new context with a key

Key need to be of length 16, 24 or 32 bytes. any other values will cause undefined behavior

initKey :: Byteable b => b -> AES

Deprecated: use initAES

misc

genCTR

Arguments

:: Byteable iv 
=> AES

Cipher Key.

-> iv

usually a 128 bit integer.

-> Int

length of bytes required.

-> ByteString 

generate a counter mode pad. this is generally xor-ed to an input to make the standard counter mode block operations.

if the length requested is not a multiple of the block cipher size, more data will be returned, so that the returned bytestring is a multiple of the block cipher size.

encryption

encryptECB :: AES -> ByteString -> ByteString

encrypt using Electronic Code Book (ECB)

encryptCBC

Arguments

:: Byteable iv 
=> AES

AES Context

-> iv

Initial vector

-> ByteString

plaintext

-> ByteString

ciphertext

encrypt using Cipher Block Chaining (CBC)

encryptCTR

Arguments

:: Byteable iv 
=> AES

AES Context

-> iv

initial vector, usually representing a 128 bit integer

-> ByteString

plaintext input

-> ByteString

ciphertext output

encrypt using Counter mode (CTR)

in CTR mode encryption and decryption is the same operation.

encryptXTS

Arguments

:: Byteable iv 
=> (AES, AES)

AES cipher and tweak context

-> iv

a 128 bits IV, typically a sector or a block offset in XTS

-> Word32

number of rounds to skip, also seen a 16 byte offset in the sector or block.

-> ByteString

input to encrypt

-> ByteString

output encrypted

encrypt using XTS

the first key is the normal block encryption key the second key is used for the initial block tweak

encryptGCM

Arguments

:: Byteable iv 
=> AES

AES Context

-> iv

IV initial vector of any size

-> ByteString

data to authenticate (AAD)

-> ByteString

data to encrypt

-> (ByteString, AuthTag)

ciphertext and tag

encrypt using Galois counter mode (GCM) return the encrypted bytestring and the tag associated

note: encrypted data is identical to CTR mode in GCM, however a tag is also computed.

encryptOCB

Arguments

:: Byteable iv 
=> AES

AES Context

-> iv

IV initial vector of any size

-> ByteString

data to authenticate (AAD)

-> ByteString

data to encrypt

-> (ByteString, AuthTag)

ciphertext and tag

encrypt using OCB v3 return the encrypted bytestring and the tag associated

decryption

decryptECB :: AES -> ByteString -> ByteString

decrypt using Electronic Code Book (ECB)

decryptCBC :: Byteable iv => AES -> iv -> ByteString -> ByteString

decrypt using Cipher block chaining (CBC)

decryptCTR

Arguments

:: Byteable iv 
=> AES

AES Context

-> iv

initial vector, usually representing a 128 bit integer

-> ByteString

ciphertext input

-> ByteString

plaintext output

decrypt using Counter mode (CTR).

in CTR mode encryption and decryption is the same operation.

decryptXTS

Arguments

:: Byteable iv 
=> (AES, AES)

AES cipher and tweak context

-> iv

a 128 bits IV, typically a sector or a block offset in XTS

-> Word32

number of rounds to skip, also seen a 16 byte offset in the sector or block.

-> ByteString

input to decrypt

-> ByteString

output decrypted

decrypt using XTS

decryptGCM

Arguments

:: Byteable iv 
=> AES

Key

-> iv

IV initial vector of any size

-> ByteString

data to authenticate (AAD)

-> ByteString

data to decrypt

-> (ByteString, AuthTag)

plaintext and tag

decrypt using Galois Counter Mode (GCM)

decryptOCB

Arguments

:: Byteable iv 
=> AES

Key

-> iv

IV initial vector of any size

-> ByteString

data to authenticate (AAD)

-> ByteString

data to decrypt

-> (ByteString, AuthTag)

plaintext and tag

decrypt using Offset Codebook Mode (OCB)