Arduino Cryptography Library
Public Member Functions | Static Public Attributes | List of all members
BLAKE2s Class Reference

BLAKE2s hash algorithm. More...

#include <BLAKE2s.h>

Inheritance diagram for BLAKE2s:
Hash

Public Member Functions

 BLAKE2s ()
 Constructs a BLAKE2s hash object.
 
virtual ~BLAKE2s ()
 Destroys this BLAKE2s hash object after clearing sensitive information.
 
size_t hashSize () const
 Size of the hash result from finalize(). More...
 
size_t blockSize () const
 Size of the internal block used by the hash algorithm. More...
 
void reset ()
 Resets the hash ready for a new hashing process. More...
 
void reset (uint8_t outputLength)
 Resets the hash ready for a new hashing process with a specified output length. More...
 
void reset (const void *key, size_t keyLen, uint8_t outputLength=32)
 Resets the hash ready for a new hashing process with a specified key and output length. More...
 
void update (const void *data, size_t len)
 Updates the hash with more data. More...
 
void finalize (void *hash, size_t len)
 Finalizes the hashing process and returns the hash. More...
 
void clear ()
 Clears the hash state, removing all sensitive data, and then resets the hash ready for a new hashing process. More...
 
void resetHMAC (const void *key, size_t keyLen)
 Resets the hash ready for a new HMAC hashing process. More...
 
void finalizeHMAC (const void *key, size_t keyLen, void *hash, size_t hashLen)
 Finalizes the HMAC hashing process and returns the hash. More...
 
- Public Member Functions inherited from Hash
 Hash ()
 Constructs a new hash object.
 
virtual ~Hash ()
 Destroys this hash object. More...
 

Static Public Attributes

static const size_t HASH_SIZE = 32
 Constant for the size of the hash output of BLAKE2s.
 
static const size_t BLOCK_SIZE = 64
 Constant for the block size of BLAKE2s.
 

Additional Inherited Members

- Protected Member Functions inherited from Hash
void formatHMACKey (void *block, const void *key, size_t len, uint8_t pad)
 Formats a HMAC key into a block. More...
 

Detailed Description

BLAKE2s hash algorithm.

BLAKE2s is a variation on the ChaCha stream cipher, designed for hashing, with a 256-bit hash output. It is intended as a high performance replacement for SHA256 for when speed is critical but exact SHA256 compatibility is not.

This class supports two types of keyed hash. The BLAKE2 keyed hash and traditional HMAC. The BLAKE2 keyed hash is recommended unless there is some higher-level application need to be compatible with the HMAC construction. The keyed hash is computed as follows:

BLAKE2s blake;
blake.reset(key, sizeof(key), outputLength);
blake.update(data1, sizeof(data1));
blake.update(data2, sizeof(data2));
...
blake.update(dataN, sizeof(dataN));
blake.finalize(hash, outputLength);
BLAKE2s hash algorithm.
Definition: BLAKE2s.h:29
void finalize(void *hash, size_t len)
Finalizes the hashing process and returns the hash.
Definition: BLAKE2s.cpp:221
void reset()
Resets the hash ready for a new hashing process.
Definition: BLAKE2s.cpp:119
void update(const void *data, size_t len)
Updates the hash with more data.
Definition: BLAKE2s.cpp:199

The HMAC is computed as follows (the output length is always 32):

BLAKE2s blake;
blake.resetHMAC(key, sizeof(key));
blake.update(data1, sizeof(data1));
blake.update(data2, sizeof(data2));
...
blake.update(dataN, sizeof(dataN));
blake.finalizeHMAC(key, sizeof(key), hash, 32);
void finalizeHMAC(const void *key, size_t keyLen, void *hash, size_t hashLen)
Finalizes the HMAC hashing process and returns the hash.
Definition: BLAKE2s.cpp:250
void resetHMAC(const void *key, size_t keyLen)
Resets the hash ready for a new HMAC hashing process.
Definition: BLAKE2s.cpp:243

References: https://blake2.net/, RFC 7693

See also
BLAKE2b, SHA256, SHA3_256

Definition at line 28 of file BLAKE2s.h.

Member Function Documentation

◆ blockSize()

size_t BLAKE2s::blockSize ( ) const
virtual

Size of the internal block used by the hash algorithm.

See also
update(), hashSize()

Implements Hash.

Definition at line 104 of file BLAKE2s.cpp.

◆ clear()

void BLAKE2s::clear ( )
virtual

Clears the hash state, removing all sensitive data, and then resets the hash ready for a new hashing process.

See also
reset()

Implements Hash.

Definition at line 237 of file BLAKE2s.cpp.

◆ finalize()

void BLAKE2s::finalize ( void *  hash,
size_t  len 
)
virtual

Finalizes the hashing process and returns the hash.

Parameters
hashThe buffer to return the hash value in.
lenThe length of the hash buffer, normally hashSize().

If len is less than hashSize(), then the hash value will be truncated to the first len bytes. If len is greater than hashSize(), then the remaining bytes will left unchanged.

If finalize() is called again, then the returned hash value is undefined. Call reset() first to start a new hashing process.

See also
reset(), update(), finalizeHMAC()

Implements Hash.

Definition at line 221 of file BLAKE2s.cpp.

◆ finalizeHMAC()

void BLAKE2s::finalizeHMAC ( const void *  key,
size_t  keyLen,
void *  hash,
size_t  hashLen 
)
virtual

Finalizes the HMAC hashing process and returns the hash.

Parameters
keyPoints to the HMAC key for the hashing process. The contents of this array must be identical to the value passed to resetHMAC().
keyLenSize of the HMAC key in bytes.
hashThe buffer to return the hash value in.
hashLenThe length of the hash buffer, normally hashSize().
See also
resetHMAC(), finalize()

Implements Hash.

Definition at line 250 of file BLAKE2s.cpp.

◆ hashSize()

size_t BLAKE2s::hashSize ( ) const
virtual

Size of the hash result from finalize().

See also
finalize(), blockSize()

Implements Hash.

Definition at line 99 of file BLAKE2s.cpp.

◆ reset() [1/3]

void BLAKE2s::reset ( )
virtual

Resets the hash ready for a new hashing process.

See also
update(), finalize(), resetHMAC()

Implements Hash.

Definition at line 119 of file BLAKE2s.cpp.

◆ reset() [2/3]

void BLAKE2s::reset ( const void *  key,
size_t  keyLen,
uint8_t  outputLength = 32 
)

Resets the hash ready for a new hashing process with a specified key and output length.

Parameters
keyPoints to the key.
keyLenThe length of the key in bytes, between 0 and 32.
outputLengthThe output length to use for the final hash in bytes, between 1 and 32.

If keyLen is greater than 32, then the key will be truncated to the first 32 bytes.

Definition at line 170 of file BLAKE2s.cpp.

◆ reset() [3/3]

void BLAKE2s::reset ( uint8_t  outputLength)

Resets the hash ready for a new hashing process with a specified output length.

Parameters
outputLengthThe output length to use for the final hash in bytes, between 1 and 32.

Definition at line 140 of file BLAKE2s.cpp.

◆ resetHMAC()

void BLAKE2s::resetHMAC ( const void *  key,
size_t  keyLen 
)
virtual

Resets the hash ready for a new HMAC hashing process.

Parameters
keyPoints to the HMAC key for the hashing process.
keyLenSize of the HMAC key in bytes.

The following example computes a HMAC over a series of data blocks with a specific key:

hash.resetHMAC(key, sizeof(key));
hash.update(data1, sizeof(data1));
hash.update(data2, sizeof(data2));
...
hash.update(dataN, sizeof(dataN));
hash.finalizeHMAC(key, sizeof(key), hmac, sizeof(hmac));

The same key must be passed to both resetHMAC() and finalizeHMAC().

See also
finalizeHMAC(), reset()

Implements Hash.

Definition at line 243 of file BLAKE2s.cpp.

◆ update()

void BLAKE2s::update ( const void *  data,
size_t  len 
)
virtual

Updates the hash with more data.

Parameters
dataData to be hashed.
lenNumber of bytes of data to be hashed.

If finalize() has already been called, then the behavior of update() will be undefined. Call reset() first to start a new hashing process.

See also
reset(), finalize()

Implements Hash.

Definition at line 199 of file BLAKE2s.cpp.


The documentation for this class was generated from the following files: