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
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
- 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 | |
|
Instances
Eq Options Source # | |
Ord Options Source # | |
Read Options Source # | |
Show Options Source # | |
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 |
Instances
Bounded Variant Source # | |
Enum Variant Source # | |
Defined in Crypto.KDF.Argon2 succ :: Variant -> Variant Source # pred :: Variant -> Variant Source # toEnum :: Int -> Variant Source # fromEnum :: Variant -> Int Source # enumFrom :: Variant -> [ Variant ] Source # enumFromThen :: Variant -> Variant -> [ Variant ] Source # enumFromTo :: Variant -> Variant -> [ Variant ] Source # enumFromThenTo :: Variant -> Variant -> Variant -> [ Variant ] Source # |
|
Eq Variant Source # | |
Ord Variant Source # | |
Read Variant Source # | |
Show Variant Source # | |
Which version of Argon2 to use
Instances
Bounded Version Source # | |
Enum Version Source # | |
Defined in Crypto.KDF.Argon2 succ :: Version -> Version Source # pred :: Version -> Version Source # toEnum :: Int -> Version Source # fromEnum :: Version -> Int Source # enumFrom :: Version -> [ Version ] Source # enumFromThen :: Version -> Version -> [ Version ] Source # enumFromTo :: Version -> Version -> [ Version ] Source # enumFromThenTo :: Version -> Version -> Version -> [ Version ] Source # |
|
Eq Version Source # | |
Ord Version Source # | |
Read Version Source # | |
Show Version Source # | |
Hashing function
hash :: ( ByteArrayAccess password, ByteArrayAccess salt, ByteArray out) => Options -> password -> salt -> Int -> CryptoFailable out Source #