Crypto++
8.2
Free C++ class library of cryptographic schemes

Scrypt key derivation function. More...
Public Member Functions  
std::string  AlgorithmName () const 
Provides the name of this algorithm. More...  
size_t  MaxDerivedLength () const 
Determine maximum number of bytes. More...  
size_t  GetValidDerivedLength (size_t keylength) const 
Returns a valid key length for the derivation function. More...  
size_t  DeriveKey (byte *derived, size_t derivedLen, const byte *secret, size_t secretLen, const NameValuePairs ¶ms) const 
Derive a key from a seed. More...  
size_t  DeriveKey (byte *derived, size_t derivedLen, const byte *secret, size_t secretLen, const byte *salt, size_t saltLen, word64 cost=2, word64 blockSize=8, word64 parallelization=1) const 
Derive a key from a seed. More...  
Public Member Functions inherited from KeyDerivationFunction  
virtual size_t  MinDerivedLength () const 
Determine minimum number of bytes. More...  
virtual bool  IsValidDerivedLength (size_t keylength) const 
Returns whether keylength is a valid key length. More...  
virtual void  SetParameters (const NameValuePairs ¶ms) 
Set or change parameters. More...  
Public Member Functions inherited from Algorithm  
Algorithm (bool checkSelfTestStatus=true)  
Interface for all crypto algorithms. More...  
virtual std::string  AlgorithmProvider () const 
Retrieve the provider of this algorithm. More...  
Public Member Functions inherited from Clonable  
virtual Clonable *  Clone () const 
Copies this object. More...  
Static Public Member Functions  
static std::string  StaticAlgorithmName () 
Scrypt key derivation function.
The Crypto++ implementation uses OpenMP to accelerate the derivation when available.
The Crypto++ implementation of Scrypt is limited by C++ datatypes. For example, the library is limited to a derived key length of SIZE_MAX
, and not (2^32  1) * 32
.

inlinevirtual 
Provides the name of this algorithm.
Implements KeyDerivationFunction.

inlinevirtual 
Determine maximum number of bytes.
Reimplemented from KeyDerivationFunction.

virtual 
Returns a valid key length for the derivation function.
keylength  the size of the derived key, in bytes 
Implements KeyDerivationFunction.
Definition at line 178 of file scrypt.cpp.

virtual 
Derive a key from a seed.
derived  the derived output buffer 
derivedLen  the size of the derived buffer, in bytes 
secret  the seed input buffer 
secretLen  the size of the secret buffer, in bytes 
params  additional initialization parameters to configure this object 
InvalidDerivedLength  if derivedLen is invalid for the scheme 
DeriveKey() provides a standard interface to derive a key from a secret seed and other parameters. Each class that derives from KeyDerivationFunction provides an overload that accepts most parameters used by the derivation function.
the number of iterations performed by DeriveKey() may be 1. For example, a scheme like HKDF does not use the iteration count so it returns 1.
Implements KeyDerivationFunction.
Definition at line 259 of file scrypt.cpp.
size_t Scrypt::DeriveKey  (  byte *  derived, 
size_t  derivedLen,  
const byte *  secret,  
size_t  secretLen,  
const byte *  salt,  
size_t  saltLen,  
word64  cost = 2 , 

word64  blockSize = 8 , 

word64  parallelization = 1 

)  const 
Derive a key from a seed.
derived  the derived output buffer 
derivedLen  the size of the derived buffer, in bytes 
secret  the seed input buffer 
secretLen  the size of the secret buffer, in bytes 
salt  the salt input buffer 
saltLen  the size of the salt buffer, in bytes 
cost  the CPU/memory cost factor 
blockSize  the block size 
parallelization  the parallelization factor 
InvalidDerivedLength  if derivedLen is invalid for the scheme 
DeriveKey() provides a standard interface to derive a key from a seed and other parameters. Each class that derives from KeyDerivationFunction provides an overload that accepts most parameters used by the derivation function.
The CPU/Memory cost
parameter ("N" in the documents) must be larger than 1, a power of 2, and less than 2^(128 * r / 8)
.
The parameter blockSize
("r" in the documents) specifies the block size.
The parallelization
parameter ("p" in the documents) is a positive integer less than or equal to ((2^321) * 32) / (128 * r)
. Due to Microsoft and its OpenMP 2.0 implementation parallelization
is limited to std::numeric_limits<int>::max()
.
Scrypt always returns 1 because it only performs 1 iteration. Other derivation functions, like PBKDF's, will return more interesting values.
The Crypto++ implementation of Scrypt is limited by C++ datatypes. For example, the library is limited to a derived key length of SIZE_MAX
, and not (2^32  1) * 32
.
Definition at line 282 of file scrypt.cpp.