26#define BLAKE2_PACKED(x) __pragma(pack(push, 1)) x __pragma(pack(pop))
28#define BLAKE2_PACKED(x) x __attribute__((packed))
31#if defined(__cplusplus)
34enum blake2s_constant {
35 BLAKE2S_BLOCKBYTES = 64,
36 BLAKE2S_OUTBYTES = 32,
37 BLAKE2S_KEYBYTES = 32,
38 BLAKE2S_SALTBYTES = 8,
39 BLAKE2S_PERSONALBYTES = 8
42BLAKE2_PACKED(
struct blake2s_param__ {
43 uint8_t digest_length;
53 uint8_t salt[BLAKE2S_SALTBYTES];
54 uint8_t personal[BLAKE2S_PERSONALBYTES];
57typedef struct blake2s_param__ blake2s_param;
59BLAKE2_PACKED(
struct blake2b_param__ {
60 uint8_t digest_length;
70 uint8_t salt[BLAKE2B_SALTBYTES];
71 uint8_t personal[BLAKE2B_PERSONALBYTES];
74typedef struct blake2b_param__ blake2b_param;
78 BLAKE2_DUMMY_1 = 1 / (
sizeof(blake2s_param) == BLAKE2S_OUTBYTES),
79 BLAKE2_DUMMY_2 = 1 / (
sizeof(blake2b_param) == BLAKE2B_OUTBYTES)
84int blake2b_init(blake2b_state *S,
88 unsigned char *personal,
90int blake2b_init_key(blake2b_state *S,
size_t outlen,
const void *key,
size_t keylen);
91int blake2b_init_param(blake2b_state *S,
const blake2b_param *P);
92void blake2b_update(blake2b_state *S,
const void *in,
size_t inlen);
93int blake2b_final(blake2b_state *S,
void *out,
size_t outlen);
96int blake2b(
void *out,
size_t outlen,
const void *in,
size_t inlen,
const void *key,
size_t keylen);
99int blake2(
void *out,
size_t outlen,
const void *in,
size_t inlen,
const void *key,
size_t keylen);
101#if defined(__cplusplus)
BLAKE2 crypographic hash function.