Copyright | (c) 2013 Stefan Bühler |
---|---|
License | MIT-style (see the file COPYING) |
Maintainer | stbuehler@web.de |
Stability | experimental |
Portability | portable |
Safe Haskell | None |
Language | Haskell98 |
This module exports ciphers supported by nettle: http://www.lysator.liu.se/~nisse/nettle/
- data AES
- data AES128
- data AES192
- data AES256
- data ARCTWO
- arctwoInitEKB :: Key ARCTWO -> Word -> ARCTWO
- arctwoInitGutmann :: Key ARCTWO -> ARCTWO
- data BLOWFISH
- data Camellia
- data Camellia128
- data Camellia192
- data Camellia256
- data CAST128
- data DES
- data DES_EDE3
- data TWOFISH
- data SERPENT
- class StreamCipher cipher => StreamNonceCipher cipher where
- streamSetNonceWord64 :: StreamNonceCipher cipher => cipher -> Word64 -> Maybe cipher
- data ARCFOUR
- data CHACHA
- data SALSA20
- data ESTREAM_SALSA20
Block ciphers
Only block ciphers with a 128-bit blockSize
(16 bytes) support the XTS cipher mode.
For aeadInit
only AEAD_GCM
and AEAD_CCM
(with ccmInitTLS
) is supported, and only if the the blockSize
is 16 bytes.
In all other cases aeadInit
just returns Nothing
.
AES
ARCTWO
ARCTWO
(also known as the trade marked name RC2) is a block cipher specified in RFC 2268.
The default cipherInit
uses ekb = bit-length of the key
; arctwoInitEKB
allows to specify ekb manually.
arctwoInitGutmann
uses ekb = 1024
(the maximum).
ARCTWO
uses keysizes from 1 to 128 bytes, and uses a blockSize
of 64 bits (8 bytes).
arctwoInitEKB :: Key ARCTWO -> Word -> ARCTWO Source #
Initialize cipher with an explicit ekb
value (valid values from 1 to 1024, 0 meaning the same as 1024).
BLOWFISH
Camellia
Camellia is a block cipher developed by Mitsubishi and Nippon Telegraph and Telephone Corporation, described in RFC3713, and recommended by some Japanese and European authorities as an alternative to AES. The algorithm is patented (details see http://www.lysator.liu.se/~nisse/nettle/nettle.html).
data Camellia128 Source #
Camellia128
provides the same interface as Camellia
, but is restricted to 128-bit keys.
data Camellia192 Source #
Camellia192
provides the same interface as Camellia
, but is restricted to 192-bit keys.
data Camellia256 Source #
Camellia256
provides the same interface as Camellia
, but is restricted to 256-bit keys.
CAST-128
DES
DES3 (EDE)
TWOFISH
SERPENT
Stream ciphers
Nonce ciphers
class StreamCipher cipher => StreamNonceCipher cipher where Source #
StreamNonceCipher
are special stream ciphers that can encrypt many messages with the same key;
setting a nonce restarts the cipher.
A good value for the nonce is a message/packet counter. Usually a nonce should not be reused with the same key.
streamNonceSize :: cipher -> KeySizeSpecifier Source #
streamSetNonce :: cipher -> B.ByteString -> Maybe cipher Source #
streamSetNonceWord64 :: StreamNonceCipher cipher => cipher -> Word64 -> Maybe cipher Source #
Sets a Word64
as 8-byte nonce (bigendian encoded)
ARCFOUR
ARCFOUR
is a stream cipher, also known under the trade marked name RC4.
Valid key sizes are from 1 to 256 bytes.
ChaCha
CHACHA
is a variant of the SALSA20
stream cipher, both designed by D. J. Bernstein.
Key size is 256 bits (32 bytes).
CHACHA
works similar to SALSA20
; it could theoretically also support 128-bit keys, but there is no need for it as they share the same performance.
ChaCha uses a blocksize of 64 bytes internally; if crpyted input isn't aligned to 64 bytes it will pad it with 0 and store the encrypted padding to xor with future input data.
Each message also requires a 8-byte (Word64
) nonce (which is initialized to 0; you can use a message sequence number).
Don't reuse a nonce with the same key.
Setting a nonce also resets the remaining padding data.
Salsa20
SALSA20
is a fairly recent stream cipher designed by D. J. Bernstein.
Valid key sizes are 128 and 256 bits (16 and 32 bytes).
Salsa20 uses a blocksize of 64 bytes internally; if crpyted input isn't aligned to 64 bytes it will pad it with 0 and store the encrypted padding to xor with future input data.
Each message also requires a 8-byte (Word64
) nonce (which is initialized to 0; you can use a message sequence number).
Don't reuse a nonce with the same key.
Setting a nonce also resets the remaining padding data.
data ESTREAM_SALSA20 Source #
ESTREAM_SALSA20
is the same as SALSA20
, but uses only 12 instead of 20 rounds in mixing.