blake23
Blake2 cryptographic hash functions
Usage
#include <blake2.h>
int
blake2s(uint8_t *out, const void *in, const void *key, size_t outlen, size_t inlen, size_t keylen);
int
blake2b(uint8_t *out, const void *in, const void *key, size_t outlen, size_t inlen, size_t keylen);
int
blake2sp(uint8_t *out, const void *in, const void *key, size_t outlen, size_t inlen, size_t keylen);
int
blake2bp(uint8_t *out, const void *in, const void *key, size_t outlen, size_t inlen, size_t keylen);
int
blake2s_init(blake2s_state *S, size_t outlen);
int
blake2s_init_key(blake2s_state *S, size_t outlen, const void *key, size_t keylen);
int
blake2s_init_param(blake2s_state *S, const blake2s_param *P);
int
blake2s_update(blake2s_state *S, const uint8_t *in, size_t inlen);
int
blake2s_final(blake2s_state *S, uint8_t *out, size_t outlen);
int
blake2b_init(blake2b_state *S, size_t outlen);
int
blake2b_init_key(blake2b_state *S, size_t outlen, const void *key, size_t keylen);
int
blake2b_init_param(blake2b_state *S, const blake2b_param *P);
int
blake2b_update(blake2b_state *S, const uint8_t *in, size_t inlen);
int
blake2b_final(blake2b_state *S, uint8_t *out, size_t outlen);
int
blake2sp_init(blake2sp_state *S, size_t outlen);
int
blake2sp_init_key(blake2sp_state *S, size_t outlen, const void *key, size_t keylen);
int
blake2sp_update(blake2sp_state *S, const uint8_t *in, size_t inlen);
int
blake2sp_final(blake2sp_state *S, uint8_t *out, size_t outlen);
int
blake2bp_init(blake2bp_state *S, size_t outlen);
int
blake2bp_init_key(blake2bp_state *S, size_t outlen, const void *key, size_t keylen);
int
blake2bp_update(blake2bp_state *S, const uint8_t *in, size_t inlen);
int
blake2bp_final(blake2bp_state *S, uint8_t *out, size_t outlen);
Overview
The BLAKE2 family of cryptographic hash functions is an improved version of the SHA-3 finalist BLAKE.
BLAKE2b is optimized for 64-bit platforms and produces up to 64 bytes of output; BLAKE2s is optimized for 32-bit platforms and produces up to 32 bytes of output.
BLAKE2bp and BLAKE2sp are parallel versions of BLAKE2b and BLAKE2s designed for increased performance on multicore and large-vector SIMD processors.
The blake2s_init(), blake2b_init(), blake2sp_init(), and blake2bp_init() functions initialize a hash state S to hash a message to an output of outlen bytes, without using a key.
S must be allocated by the caller.
The blake2s_init_key(), blake2b_init_key(), blake2sp_init_key(), and blake2bp_init_key() functions initialize a hash state S to hash a message to an output of outlen bytes, using the key key of length keylen.
The blake2s_init_param() and blake2b_init_param() initialize a hash state S using a custom parameter block P, which must have been filled in completely by the caller. See the BLAKE2 paper and the ⟨blake2.h⟩ header file for details.
The blake2s_update(), blake2b_update(), blake2sp_update(), and blake2bp_update() functions hash the input buffer in of length inlen bytes into the hash state S.
The blake2s_final(), blake2b_final(), blake2sp_final(), and blake2bp_final() functions compute the hash value accumulated in S and store it into out. outlen must have the same value that was passed to the corresponding init function.
The blake2s(), blake2b(), blake2sp(), and blake2bp() functions hash a single-buffer input in one function call, optionally using a key.
To use the latter functions without a key, set keylen to 0 and key to NULL.
For all functions, the lengths outlen, inlen, and keylen are specified in bytes.
outlen must be positive and no greater than BLAKE2S_OUTBYTES (32) for the blake2s and blake2sp functions, or positive and no greater than BLAKE2B_OUTBYTES (64) for the blake2b and blake2bp functions.
keylen must be positive and no greater than BLAKE2S_KEYBYTES (32) for the blake2s and blake2sp functions, or positive and no greater than BLAKE2B_KEYBYTES (64) for the blake2b and blake2bp functions.
Return values
All of these functions return 0 if successful, or -1 if they detect an error.
All detected, reported errors are caused by invalid pointer arguments or out-of-bounds length arguments.
Not all invalid arguments are detected.
These functions do not set errno themselves, but do call standard C library functions which might set errno.
Releases
5 releases since Debian 9 (Stretch); the text changed 1 time.