nettle-0.3.1.1: safe nettle binding

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 | Haskell2010

Crypto.Nettle.Hash

Contents

- HashAlgorithm class
- hash algorithms
  - GOSTHASH94
  - MD family
  - RIPEMD160
  - SHA1
  - SHA2 family
  - SHA3 family

Description

This module exports hash algorithms supported by nettle: http://www.lysator.liu.se/~nisse/nettle/

Synopsis

- class HashAlgorithm a where
  - hashBlockSize :: Tagged a Int
  - hashDigestSize :: Tagged a Int
  - hashName :: Tagged a String
  - hashInit :: a
  - hashUpdate :: a -> ByteString -> a
  - hashUpdateLazy :: a -> ByteString -> a
  - hashFinalize :: a -> ByteString
  - hashHMAC :: ByteString -> Tagged a KeyedHash
- hash :: HashAlgorithm a => ByteString -> Tagged a ByteString
- hash' :: HashAlgorithm a => a -> ByteString -> ByteString
- hashLazy :: HashAlgorithm a => ByteString -> Tagged a ByteString
- hashLazy' :: HashAlgorithm a => a -> ByteString -> ByteString
- data GOSTHASH94
- data MD2
- data MD4
- data MD5
- data RIPEMD160
- data SHA1
- data SHA224
- data SHA256
- data SHA384
- data SHA512
- data SHA3_224
- data SHA3_256
- data SHA3_384
- data SHA3_512

# HashAlgorithm class

class HashAlgorithm a where Source #

`HashAlgorithm` is a class that hash algorithms will implement. generating a digest is a 3 step procedure:

- `hashInit` to create a new context
- `hashUpdate` to hash data
- `hashFinalize` to extract the final digest

The final digest has `hashDigestSize` bytes, and the algorithm uses `hashBlockSize` as internal block size.

Minimal complete definition

hashBlockSize, hashDigestSize, hashName, hashInit, hashUpdate, hashFinalize

Methods

hashBlockSize :: Tagged a Int Source #

Block size in bytes the hash algorithm operates on

hashDigestSize :: Tagged a Int Source #

Digest size in bytes the hash algorithm returns

hashName :: Tagged a String Source #

Name of the hash algorithm

hashInit :: a Source #

Initialize a new context for this hash algorithm

hashUpdate :: a -> ByteString -> a Source #

Update the context with bytestring, and return a new context with the updates.

hashUpdateLazy :: a -> ByteString -> a Source #

Update the context with a lazy bytestring, and return a new context with the updates.

hashFinalize :: a -> ByteString Source #

Finalize a context and return a digest.

hashHMAC :: ByteString -> Tagged a KeyedHash Source #

Use `HashAlgorithm` for HMAC; can use a optimized variant or the default `hmacInit` one

#### Instances

Instances details

HashAlgorithm GOSTHASH94 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged GOSTHASH94 Int Source #

hashDigestSize :: Tagged GOSTHASH94 Int Source #

hashName :: Tagged GOSTHASH94 String Source #

hashInit :: GOSTHASH94 Source #

hashUpdate :: GOSTHASH94 -> ByteString -> GOSTHASH94 Source #

hashUpdateLazy :: GOSTHASH94 -> ByteString -> GOSTHASH94 Source #

hashFinalize :: GOSTHASH94 -> ByteString Source #

hashHMAC :: ByteString -> Tagged GOSTHASH94 KeyedHash Source #

HashAlgorithm MD2 Source # |
Instance details Defined in Crypto.Nettle.Hash Methods hashBlockSize :: Tagged MD2 Int Source # hashDigestSize :: Tagged MD2 Int Source # hashName :: Tagged MD2 String Source # hashInit :: MD2 Source # hashUpdate :: MD2 -> ByteString -> MD2 Source # hashUpdateLazy :: MD2 -> ByteString -> MD2 Source # hashFinalize :: MD2 -> ByteString Source # hashHMAC :: ByteString -> Tagged MD2 KeyedHash Source #
HashAlgorithm MD4 Source # |
Instance details Defined in Crypto.Nettle.Hash Methods hashBlockSize :: Tagged MD4 Int Source # hashDigestSize :: Tagged MD4 Int Source # hashName :: Tagged MD4 String Source # hashInit :: MD4 Source # hashUpdate :: MD4 -> ByteString -> MD4 Source # hashUpdateLazy :: MD4 -> ByteString -> MD4 Source # hashFinalize :: MD4 -> ByteString Source # hashHMAC :: ByteString -> Tagged MD4 KeyedHash Source #
HashAlgorithm MD5 Source # |
Instance details Defined in Crypto.Nettle.Hash Methods hashBlockSize :: Tagged MD5 Int Source # hashDigestSize :: Tagged MD5 Int Source # hashName :: Tagged MD5 String Source # hashInit :: MD5 Source # hashUpdate :: MD5 -> ByteString -> MD5 Source # hashUpdateLazy :: MD5 -> ByteString -> MD5 Source # hashFinalize :: MD5 -> ByteString Source # hashHMAC :: ByteString -> Tagged MD5 KeyedHash Source #
HashAlgorithm RIPEMD160 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged RIPEMD160 Int Source #

hashDigestSize :: Tagged RIPEMD160 Int Source #

hashName :: Tagged RIPEMD160 String Source #

hashInit :: RIPEMD160 Source #

hashUpdate :: RIPEMD160 -> ByteString -> RIPEMD160 Source #

hashUpdateLazy :: RIPEMD160 -> ByteString -> RIPEMD160 Source #

hashFinalize :: RIPEMD160 -> ByteString Source #

hashHMAC :: ByteString -> Tagged RIPEMD160 KeyedHash Source #

HashAlgorithm SHA1 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged SHA1 Int Source #

hashDigestSize :: Tagged SHA1 Int Source #

hashName :: Tagged SHA1 String Source #

hashInit :: SHA1 Source #

hashUpdate :: SHA1 -> ByteString -> SHA1 Source #

hashUpdateLazy :: SHA1 -> ByteString -> SHA1 Source #

hashFinalize :: SHA1 -> ByteString Source #

hashHMAC :: ByteString -> Tagged SHA1 KeyedHash Source #

HashAlgorithm SHA224 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged SHA224 Int Source #

hashDigestSize :: Tagged SHA224 Int Source #

hashName :: Tagged SHA224 String Source #

hashInit :: SHA224 Source #

hashUpdate :: SHA224 -> ByteString -> SHA224 Source #

hashUpdateLazy :: SHA224 -> ByteString -> SHA224 Source #

hashFinalize :: SHA224 -> ByteString Source #

hashHMAC :: ByteString -> Tagged SHA224 KeyedHash Source #

HashAlgorithm SHA256 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged SHA256 Int Source #

hashDigestSize :: Tagged SHA256 Int Source #

hashName :: Tagged SHA256 String Source #

hashInit :: SHA256 Source #

hashUpdate :: SHA256 -> ByteString -> SHA256 Source #

hashUpdateLazy :: SHA256 -> ByteString -> SHA256 Source #

hashFinalize :: SHA256 -> ByteString Source #

hashHMAC :: ByteString -> Tagged SHA256 KeyedHash Source #

HashAlgorithm SHA384 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged SHA384 Int Source #

hashDigestSize :: Tagged SHA384 Int Source #

hashName :: Tagged SHA384 String Source #

hashInit :: SHA384 Source #

hashUpdate :: SHA384 -> ByteString -> SHA384 Source #

hashUpdateLazy :: SHA384 -> ByteString -> SHA384 Source #

hashFinalize :: SHA384 -> ByteString Source #

hashHMAC :: ByteString -> Tagged SHA384 KeyedHash Source #

HashAlgorithm SHA3_224 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged SHA3_224 Int Source #

hashDigestSize :: Tagged SHA3_224 Int Source #

hashName :: Tagged SHA3_224 String Source #

hashInit :: SHA3_224 Source #

hashUpdate :: SHA3_224 -> ByteString -> SHA3_224 Source #

hashUpdateLazy :: SHA3_224 -> ByteString -> SHA3_224 Source #

hashFinalize :: SHA3_224 -> ByteString Source #

hashHMAC :: ByteString -> Tagged SHA3_224 KeyedHash Source #

HashAlgorithm SHA3_256 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged SHA3_256 Int Source #

hashDigestSize :: Tagged SHA3_256 Int Source #

hashName :: Tagged SHA3_256 String Source #

hashInit :: SHA3_256 Source #

hashUpdate :: SHA3_256 -> ByteString -> SHA3_256 Source #

hashUpdateLazy :: SHA3_256 -> ByteString -> SHA3_256 Source #

hashFinalize :: SHA3_256 -> ByteString Source #

hashHMAC :: ByteString -> Tagged SHA3_256 KeyedHash Source #

HashAlgorithm SHA3_384 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged SHA3_384 Int Source #

hashDigestSize :: Tagged SHA3_384 Int Source #

hashName :: Tagged SHA3_384 String Source #

hashInit :: SHA3_384 Source #

hashUpdate :: SHA3_384 -> ByteString -> SHA3_384 Source #

hashUpdateLazy :: SHA3_384 -> ByteString -> SHA3_384 Source #

hashFinalize :: SHA3_384 -> ByteString Source #

hashHMAC :: ByteString -> Tagged SHA3_384 KeyedHash Source #

HashAlgorithm SHA3_512 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged SHA3_512 Int Source #

hashDigestSize :: Tagged SHA3_512 Int Source #

hashName :: Tagged SHA3_512 String Source #

hashInit :: SHA3_512 Source #

hashUpdate :: SHA3_512 -> ByteString -> SHA3_512 Source #

hashUpdateLazy :: SHA3_512 -> ByteString -> SHA3_512 Source #

hashFinalize :: SHA3_512 -> ByteString Source #

hashHMAC :: ByteString -> Tagged SHA3_512 KeyedHash Source #

HashAlgorithm SHA512 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged SHA512 Int Source #

hashDigestSize :: Tagged SHA512 Int Source #

hashName :: Tagged SHA512 String Source #

hashInit :: SHA512 Source #

hashUpdate :: SHA512 -> ByteString -> SHA512 Source #

hashUpdateLazy :: SHA512 -> ByteString -> SHA512 Source #

hashFinalize :: SHA512 -> ByteString Source #

hashHMAC :: ByteString -> Tagged SHA512 KeyedHash Source #

hash :: HashAlgorithm a => ByteString -> Tagged a ByteString Source #

Helper to hash a single (strict) `ByteString` in one step.

Example:

    untag (hash (fromString "abc") :: Tagged SHA256 B.ByteString)

hash' :: HashAlgorithm a => a -> ByteString -> ByteString Source #

Untagged variant of `hash`; takes a (possible `undefined`) typed `HashAlgorithm` context as parameter.

Example:

    hash' (undefined :: SHA256) $ fromString "abc"

hashLazy :: HashAlgorithm a => ByteString -> Tagged a ByteString Source #

Helper to hash a single (lazy) `ByteString` in one step.

Example:

    untag (hashLazy (fromString "abc") :: Tagged SHA256 L.ByteString)

hashLazy' :: HashAlgorithm a => a -> ByteString -> ByteString Source #

Untagged variant of `hashLazy`; takes a (possible `undefined`) typed `HashAlgorithm` context as parameter.

Example:

    hashLazy' (undefined :: SHA256) $ fromString "abc"

# hash algorithms

Only members of the SHA2 and SHA3 family have no known weaknesses (according to http://www.lysator.liu.se/~nisse/nettle/nettle.html#Hash-functions)

## GOSTHASH94

data GOSTHASH94 Source #

The GOST94 or GOST R 34.11-94 hash algorithm is a Soviet-era algorithm used in Russian government standards (see RFC 4357). It outputs message digests of 32 bytes (256 bits).

#### Instances

Instances details

HashAlgorithm GOSTHASH94 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged GOSTHASH94 Int Source #

hashDigestSize :: Tagged GOSTHASH94 Int Source #

hashName :: Tagged GOSTHASH94 String Source #

hashInit :: GOSTHASH94 Source #

hashUpdate :: GOSTHASH94 -> ByteString -> GOSTHASH94 Source #

hashUpdateLazy :: GOSTHASH94 -> ByteString -> GOSTHASH94 Source #

hashFinalize :: GOSTHASH94 -> ByteString Source #

hashHMAC :: ByteString -> Tagged GOSTHASH94 KeyedHash Source #

## MD family

data MD2 Source #

`MD2` is a hash function of Ronald Rivest's, described in RFC 1319. It outputs message digests of 16 bytes (128 bits).

#### Instances

Instances details

HashAlgorithm MD2 Source # |
Instance details Defined in Crypto.Nettle.Hash Methods hashBlockSize :: Tagged MD2 Int Source # hashDigestSize :: Tagged MD2 Int Source # hashName :: Tagged MD2 String Source # hashInit :: MD2 Source # hashUpdate :: MD2 -> ByteString -> MD2 Source # hashUpdateLazy :: MD2 -> ByteString -> MD2 Source # hashFinalize :: MD2 -> ByteString Source # hashHMAC :: ByteString -> Tagged MD2 KeyedHash Source #

data MD4 Source #

`MD4` is a hash function of Ronald Rivest's, described in RFC 1320. It outputs message digests of 16 bytes (128 bits).

#### Instances

Instances details

HashAlgorithm MD4 Source # |
Instance details Defined in Crypto.Nettle.Hash Methods hashBlockSize :: Tagged MD4 Int Source # hashDigestSize :: Tagged MD4 Int Source # hashName :: Tagged MD4 String Source # hashInit :: MD4 Source # hashUpdate :: MD4 -> ByteString -> MD4 Source # hashUpdateLazy :: MD4 -> ByteString -> MD4 Source # hashFinalize :: MD4 -> ByteString Source # hashHMAC :: ByteString -> Tagged MD4 KeyedHash Source #

data MD5 Source #

`MD5` is a hash function of Ronald Rivest's, described in RFC 1321. It outputs message digests of 16 bytes (128 bits).

#### Instances

Instances details

HashAlgorithm MD5 Source # |
Instance details Defined in Crypto.Nettle.Hash Methods hashBlockSize :: Tagged MD5 Int Source # hashDigestSize :: Tagged MD5 Int Source # hashName :: Tagged MD5 String Source # hashInit :: MD5 Source # hashUpdate :: MD5 -> ByteString -> MD5 Source # hashUpdateLazy :: MD5 -> ByteString -> MD5 Source # hashFinalize :: MD5 -> ByteString Source # hashHMAC :: ByteString -> Tagged MD5 KeyedHash Source #

## RIPEMD160

data RIPEMD160 Source #

`RIPEMD160` is a hash function designed by Hans Dobbertin, Antoon Bosselaers, and Bart Preneel, as a strengthened version of RIPEMD. It produces message digests of 20 bytes (160 bits).

#### Instances

Instances details

HashAlgorithm RIPEMD160 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged RIPEMD160 Int Source #

hashDigestSize :: Tagged RIPEMD160 Int Source #

hashName :: Tagged RIPEMD160 String Source #

hashInit :: RIPEMD160 Source #

hashUpdate :: RIPEMD160 -> ByteString -> RIPEMD160 Source #

hashUpdateLazy :: RIPEMD160 -> ByteString -> RIPEMD160 Source #

hashFinalize :: RIPEMD160 -> ByteString Source #

hashHMAC :: ByteString -> Tagged RIPEMD160 KeyedHash Source #

## SHA1

data SHA1 Source #

`SHA1` is a hash function specified by NIST (The U.S. National Institute for Standards and Technology). It produces message digests of 20 bytes (160 bits).

#### Instances

Instances details

HashAlgorithm SHA1 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged SHA1 Int Source #

hashDigestSize :: Tagged SHA1 Int Source #

hashName :: Tagged SHA1 String Source #

hashInit :: SHA1 Source #

hashUpdate :: SHA1 -> ByteString -> SHA1 Source #

hashUpdateLazy :: SHA1 -> ByteString -> SHA1 Source #

hashFinalize :: SHA1 -> ByteString Source #

hashHMAC :: ByteString -> Tagged SHA1 KeyedHash Source #

## SHA2 family

The SHA2 family supports digests lengths of 28, 32, 48 or 64 bytes (224, 256, 384, 512 bits), and the variants are named after the bit length.

The SHA2 family of hash functions were specified by NIST, intended as a replacement for `SHA1`.

data SHA224 Source #

`SHA224` is a member of the SHA2 family which outputs messages digests of 28 bytes (224 bits).

#### Instances

Instances details

HashAlgorithm SHA224 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged SHA224 Int Source #

hashDigestSize :: Tagged SHA224 Int Source #

hashName :: Tagged SHA224 String Source #

hashInit :: SHA224 Source #

hashUpdate :: SHA224 -> ByteString -> SHA224 Source #

hashUpdateLazy :: SHA224 -> ByteString -> SHA224 Source #

hashFinalize :: SHA224 -> ByteString Source #

hashHMAC :: ByteString -> Tagged SHA224 KeyedHash Source #

data SHA256 Source #

`SHA256` is a member of the SHA2 family which outputs messages digests of 32 bytes (256 bits).

#### Instances

Instances details

HashAlgorithm SHA256 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged SHA256 Int Source #

hashDigestSize :: Tagged SHA256 Int Source #

hashName :: Tagged SHA256 String Source #

hashInit :: SHA256 Source #

hashUpdate :: SHA256 -> ByteString -> SHA256 Source #

hashUpdateLazy :: SHA256 -> ByteString -> SHA256 Source #

hashFinalize :: SHA256 -> ByteString Source #

hashHMAC :: ByteString -> Tagged SHA256 KeyedHash Source #

data SHA384 Source #

`SHA384` is a member of the SHA2 family which outputs messages digests of 48 bytes (384 bits).

#### Instances

Instances details

HashAlgorithm SHA384 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged SHA384 Int Source #

hashDigestSize :: Tagged SHA384 Int Source #

hashName :: Tagged SHA384 String Source #

hashInit :: SHA384 Source #

hashUpdate :: SHA384 -> ByteString -> SHA384 Source #

hashUpdateLazy :: SHA384 -> ByteString -> SHA384 Source #

hashFinalize :: SHA384 -> ByteString Source #

hashHMAC :: ByteString -> Tagged SHA384 KeyedHash Source #

data SHA512 Source #

`SHA512` is a member of the SHA2 family which outputs messages digests of 64 bytes (512 bits).

#### Instances

Instances details

HashAlgorithm SHA512 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged SHA512 Int Source #

hashDigestSize :: Tagged SHA512 Int Source #

hashName :: Tagged SHA512 String Source #

hashInit :: SHA512 Source #

hashUpdate :: SHA512 -> ByteString -> SHA512 Source #

hashUpdateLazy :: SHA512 -> ByteString -> SHA512 Source #

hashFinalize :: SHA512 -> ByteString Source #

hashHMAC :: ByteString -> Tagged SHA512 KeyedHash Source #

## SHA3 family

The SHA3 family supports (like SHA2) digests lengths of 28, 32, 48 or 64 bytes (224, 256, 384, 512 bits), and the variants are named after the bit length.

The SHA3 hash functions were specified by NIST in response to weaknesses in SHA1, and doubts about SHA2 hash functions which structurally are very similar to SHA1. The standard is a result of a competition, where the winner, also known as Keccak, was designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche. It is structurally very different from all widely used earlier hash functions.

data SHA3_224 Source #

`SHA3_224` is a member of the SHA3 family which outputs messages digests of 28 bytes (224 bits).

#### Instances

Instances details

HashAlgorithm SHA3_224 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged SHA3_224 Int Source #

hashDigestSize :: Tagged SHA3_224 Int Source #

hashName :: Tagged SHA3_224 String Source #

hashInit :: SHA3_224 Source #

hashUpdate :: SHA3_224 -> ByteString -> SHA3_224 Source #

hashUpdateLazy :: SHA3_224 -> ByteString -> SHA3_224 Source #

hashFinalize :: SHA3_224 -> ByteString Source #

hashHMAC :: ByteString -> Tagged SHA3_224 KeyedHash Source #

data SHA3_256 Source #

`SHA3_256` is a member of the SHA3 family which outputs messages digests of 32 bytes (256 bits).

#### Instances

Instances details

HashAlgorithm SHA3_256 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged SHA3_256 Int Source #

hashDigestSize :: Tagged SHA3_256 Int Source #

hashName :: Tagged SHA3_256 String Source #

hashInit :: SHA3_256 Source #

hashUpdate :: SHA3_256 -> ByteString -> SHA3_256 Source #

hashUpdateLazy :: SHA3_256 -> ByteString -> SHA3_256 Source #

hashFinalize :: SHA3_256 -> ByteString Source #

hashHMAC :: ByteString -> Tagged SHA3_256 KeyedHash Source #

data SHA3_384 Source #

`SHA3_384` is a member of the SHA3 family which outputs messages digests of 48 bytes (384 bits).

#### Instances

Instances details

HashAlgorithm SHA3_384 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged SHA3_384 Int Source #

hashDigestSize :: Tagged SHA3_384 Int Source #

hashName :: Tagged SHA3_384 String Source #

hashInit :: SHA3_384 Source #

hashUpdate :: SHA3_384 -> ByteString -> SHA3_384 Source #

hashUpdateLazy :: SHA3_384 -> ByteString -> SHA3_384 Source #

hashFinalize :: SHA3_384 -> ByteString Source #

hashHMAC :: ByteString -> Tagged SHA3_384 KeyedHash Source #

data SHA3_512 Source #

`SHA3_512` is a member of the SHA3 family which outputs messages digests of 64 bytes (512 bits).

#### Instances

Instances details

HashAlgorithm SHA3_512 Source # |

Instance details

Defined in Crypto.Nettle.Hash

Methods

hashBlockSize :: Tagged SHA3_512 Int Source #

hashDigestSize :: Tagged SHA3_512 Int Source #

hashName :: Tagged SHA3_512 String Source #

hashInit :: SHA3_512 Source #

hashUpdate :: SHA3_512 -> ByteString -> SHA3_512 Source #

hashUpdateLazy :: SHA3_512 -> ByteString -> SHA3_512 Source #

hashFinalize :: SHA3_512 -> ByteString Source #

hashHMAC :: ByteString -> Tagged SHA3_512 KeyedHash Source #