License | BSD-style |
---|---|
Maintainer | Vincent Hanquez <vincent@snarc.org> |
Stability | experimental |
Portability | unknown |
Safe Haskell | None |
Language | Haskell2010 |
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
- data Options = Options {
- iterations :: !TimeCost
- memory :: !MemoryCost
- parallelism :: !Parallelism
- variant :: !Variant
- version :: !Version
- type TimeCost = Word32
- type MemoryCost = Word32
- type Parallelism = Word32
- data Variant
- data Version
- defaultOptions :: Options
- hash :: (ByteArrayAccess password, ByteArrayAccess salt, ByteArray out) => Options -> password -> salt -> Int -> CryptoFailable out
Documentation
Parameters that can be adjusted to change the runtime performance of the hashing.
Options | |
|
type TimeCost = Word32 Source #
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 Source #
The memory cost, which defines the memory usage, given in kibibytes.
max ARGON2_MIN_MEMORY
(8 * hashParallelism
) <= hashMemory
<= ARGON2_MAX_MEMORY
type Parallelism = Word32 Source #
A parallelism degree, which defines the number of parallel threads.
ARGON2_MIN_LANES
<= hashParallelism
<= ARGON2_MAX_LANES
&& ARGON_MIN_THREADS
<= hashParallelism
<= ARGON2_MAX_THREADS
Which variant of Argon2 to use. You should choose the variant that is most applicable to your intention to hash inputs.
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 |
Which version of Argon2 to use
Hashing function
hash :: (ByteArrayAccess password, ByteArrayAccess salt, ByteArray out) => Options -> password -> salt -> Int -> CryptoFailable out Source #