cryptonite-0.24: Cryptography Primitives sink

License | BSD-style
Maintainer | Vincent Hanquez <vincent@snarc.org>
Stability | experimental
Portability | unknown
Safe Haskell | None
Language | Haskell2010

Crypto.KDF.Argon2

Contents

- Hashing function

Description

Argon2 hashing function (P-H-C winner)

Recommended to use this module qualified

File started from Argon2.hs, from Oliver Charles at https://github.com/ocharles/argon2

Synopsis

- data Options = Options {
  - iterations :: !TimeCost
  - memory :: !MemoryCost
  - parallelism :: !Parallelism
  - variant :: !Variant
  - version :: !Version
  }
- type TimeCost = Word32
- type MemoryCost = Word32
- type Parallelism = Word32
- data Variant
  - = Argon2d
  - | Argon2i
  - | Argon2id
- data Version
  - = Version10
  - | Version13
- defaultOptions :: Options
- hash :: (ByteArrayAccess password, ByteArrayAccess salt, ByteArray out) => Options -> password -> salt -> Int -> CryptoFailable out

# Documentation

data Options

Parameters that can be adjusted to change the runtime performance of the hashing.

Constructors

Options |
Fields iterations :: !TimeCost memory :: !MemoryCost parallelism :: !Parallelism variant :: !Variant Which variant of Argon2 to use. version :: !Version Which version of Argon2 to use.

Instances

Eq Options |
Ord Options |
Read Options |
Show Options |

type TimeCost = Word32

The time cost, which defines the amount of computation realized and therefore the execution time, given in number of iterations.

`ARGON2_MIN_TIME` <= `hashIterations` <= `ARGON2_MAX_TIME`

type MemoryCost = Word32

The memory cost, which defines the memory usage, given in kibibytes.

max `ARGON2_MIN_MEMORY` (8 * `hashParallelism`) <= `hashMemory` <= `ARGON2_MAX_MEMORY`

type Parallelism = Word32

data Variant

Which variant of Argon2 to use. You should choose the variant that is most applicable to your intention to hash inputs.

Constructors

Argon2d | Argon2d is faster than Argon2i and uses data-depending memory access, which makes it suitable for cryptocurrencies and applications with no threats from side-channel timing attacks.
Argon2i | Argon2i uses data-independent memory access, which is preferred for password hashing and password-based key derivation. Argon2i is slower as it makes more passes over the memory to protect from tradeoff attacks.
Argon2id | Argon2id is a hybrid of Argon2i and Argon2d, using a combination of data-depending and data-independent memory accesses, which gives some of Argon2i's resistance to side-channel cache timing attacks and much of Argon2d's resistance to GPU cracking attacks

Instances

Bounded Variant |
Enum Variant |
Eq Variant |
Ord Variant |
Read Variant |
Show Variant |

data Version

Which version of Argon2 to use

Constructors

Version10 |
Version13 |

Instances

Bounded Version |
Enum Version |
Eq Version |
Ord Version |
Read Version |
Show Version |

defaultOptions :: Options

# Hashing function

hash :: (ByteArrayAccess password, ByteArrayAccess salt, ByteArray out) => Options -> password -> salt -> Int -> CryptoFailable out