cipher-aes-0.2.11: Fast AES cipher implementation with advanced mode of operations
LicenseBSD-style
MaintainerVincent Hanquez <vincent@snarc.org>
Stabilitystable
Portabilitygood
Safe HaskellNone
LanguageHaskell98

Crypto.Cipher.AES

Description

 
Synopsis

block cipher data types

data AES Source #

AES Context (pre-processed key)

Instances

Instances details
Cipher AES Source # 
Instance details

Defined in Crypto.Cipher.AES

Methods

cipherInit :: Key AES -> AES

cipherName :: AES -> String

cipherKeySize :: AES -> KeySizeSpecifier

BlockCipher AES Source # 
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)

AEADModeImpl AES AESGCM Source # 
Instance details

Defined in Crypto.Cipher.AES

Methods

aeadStateAppendHeader :: AES -> AESGCM -> ByteString -> AESGCM

aeadStateEncrypt :: AES -> AESGCM -> ByteString -> (ByteString, AESGCM)

aeadStateDecrypt :: AES -> AESGCM -> ByteString -> (ByteString, AESGCM)

aeadStateFinalize :: AES -> AESGCM -> Int -> AuthTag

data AES128 Source #

AES with 128 bit key

Instances

Instances details
Cipher AES128 Source # 
Instance details

Defined in Crypto.Cipher.AES

Methods

cipherInit :: Key AES128 -> AES128

cipherName :: AES128 -> String

cipherKeySize :: AES128 -> KeySizeSpecifier

BlockCipher AES128 Source # 
Instance details

Defined in Crypto.Cipher.AES

Methods

blockSize :: AES128 -> Int

ecbEncrypt :: AES128 -> ByteString -> ByteString

ecbDecrypt :: AES128 -> ByteString -> ByteString

cbcEncrypt :: AES128 -> IV AES128 -> ByteString -> ByteString

cbcDecrypt :: AES128 -> IV AES128 -> ByteString -> ByteString

cfbEncrypt :: AES128 -> IV AES128 -> ByteString -> ByteString

cfbDecrypt :: AES128 -> IV AES128 -> ByteString -> ByteString

ctrCombine :: AES128 -> IV AES128 -> ByteString -> ByteString

xtsEncrypt :: (AES128, AES128) -> IV AES128 -> DataUnitOffset -> ByteString -> ByteString

xtsDecrypt :: (AES128, AES128) -> IV AES128 -> DataUnitOffset -> ByteString -> ByteString

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

AEADModeImpl AES128 AESGCM Source # 
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

data AES192 Source #

AES with 192 bit key

Instances

Instances details
Cipher AES192 Source # 
Instance details

Defined in Crypto.Cipher.AES

Methods

cipherInit :: Key AES192 -> AES192

cipherName :: AES192 -> String

cipherKeySize :: AES192 -> KeySizeSpecifier

BlockCipher AES192 Source # 
Instance details

Defined in Crypto.Cipher.AES

Methods

blockSize :: AES192 -> Int

ecbEncrypt :: AES192 -> ByteString -> ByteString

ecbDecrypt :: AES192 -> ByteString -> ByteString

cbcEncrypt :: AES192 -> IV AES192 -> ByteString -> ByteString

cbcDecrypt :: AES192 -> IV AES192 -> ByteString -> ByteString

cfbEncrypt :: AES192 -> IV AES192 -> ByteString -> ByteString

cfbDecrypt :: AES192 -> IV AES192 -> ByteString -> ByteString

ctrCombine :: AES192 -> IV AES192 -> ByteString -> ByteString

xtsEncrypt :: (AES192, AES192) -> IV AES192 -> DataUnitOffset -> ByteString -> ByteString

xtsDecrypt :: (AES192, AES192) -> IV AES192 -> DataUnitOffset -> ByteString -> ByteString

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

AEADModeImpl AES192 AESGCM Source # 
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

data AES256 Source #

AES with 256 bit key

Instances

Instances details
Cipher AES256 Source # 
Instance details

Defined in Crypto.Cipher.AES

Methods

cipherInit :: Key AES256 -> AES256

cipherName :: AES256 -> String

cipherKeySize :: AES256 -> KeySizeSpecifier

BlockCipher AES256 Source # 
Instance details

Defined in Crypto.Cipher.AES

Methods

blockSize :: AES256 -> Int

ecbEncrypt :: AES256 -> ByteString -> ByteString

ecbDecrypt :: AES256 -> ByteString -> ByteString

cbcEncrypt :: AES256 -> IV AES256 -> ByteString -> ByteString

cbcDecrypt :: AES256 -> IV AES256 -> ByteString -> ByteString

cfbEncrypt :: AES256 -> IV AES256 -> ByteString -> ByteString

cfbDecrypt :: AES256 -> IV AES256 -> ByteString -> ByteString

ctrCombine :: AES256 -> IV AES256 -> ByteString -> ByteString

xtsEncrypt :: (AES256, AES256) -> IV AES256 -> DataUnitOffset -> ByteString -> ByteString

xtsDecrypt :: (AES256, AES256) -> IV AES256 -> DataUnitOffset -> ByteString -> ByteString

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

AEADModeImpl AES256 AESGCM Source # 
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

IV

data AESIV Source #

AES IV is always 16 bytes

Instances

Instances details
Show AESIV Source # 
Instance details

Defined in Crypto.Cipher.AES

Methods

showsPrec :: Int -> AESIV -> ShowS

show :: AESIV -> String

showList :: [AESIV] -> ShowS

Byteable AESIV Source # 
Instance details

Defined in Crypto.Cipher.AES

Methods

toBytes :: AESIV -> ByteString

byteableLength :: AESIV -> Int

withBytePtr :: AESIV -> (Ptr Word8 -> IO b) -> IO b

Eq AESIV Source # 
Instance details

Defined in Crypto.Cipher.AES

Methods

(==) :: AESIV -> AESIV -> Bool

(/=) :: AESIV -> AESIV -> Bool

aesIV_ :: ByteString -> AESIV Source #

convert a bytestring to an AESIV

Authenticated encryption block cipher types

data AESGCM Source #

AESGCM State

Instances

Instances details
AEADModeImpl AES AESGCM Source # 
Instance details

Defined in Crypto.Cipher.AES

Methods

aeadStateAppendHeader :: AES -> AESGCM -> ByteString -> AESGCM

aeadStateEncrypt :: AES -> AESGCM -> ByteString -> (ByteString, AESGCM)

aeadStateDecrypt :: AES -> AESGCM -> ByteString -> (ByteString, AESGCM)

aeadStateFinalize :: AES -> AESGCM -> Int -> AuthTag

AEADModeImpl AES128 AESGCM Source # 
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 AES192 AESGCM Source # 
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 AES256 AESGCM Source # 
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

creation

initAES :: Byteable b => b -> AES Source #

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

Deprecated: use initAES

misc

genCTR Source #

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.

genCounter :: AES -> AESIV -> Int -> (ByteString, AESIV) Source #

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.

Similiar to genCTR but also return the next IV for continuation

encryption

encryptECB :: AES -> ByteString -> ByteString Source #

encrypt using Electronic Code Book (ECB)

encryptCBC Source #

Arguments

:: Byteable iv 
=> AES

AES Context

-> iv

Initial vector of AES block size

-> ByteString

plaintext

-> ByteString

ciphertext

encrypt using Cipher Block Chaining (CBC)

encryptCTR Source #

Arguments

:: Byteable iv 
=> AES

AES Context

-> iv

initial vector of AES block size (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 Source #

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

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

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

decrypt using Electronic Code Book (ECB)

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

decrypt using Cipher block chaining (CBC)

decryptCTR Source #

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

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

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

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)