1 /* SPDX-License-Identifier: GPL-2.0 OR MIT */
3 * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
6 #ifndef _ZINC_BLAKE2S_H
7 #define _ZINC_BLAKE2S_H
11 enum blake2s_lengths {
12 BLAKE2S_BLOCK_SIZE = 64,
13 BLAKE2S_HASH_SIZE = 32,
17 struct blake2s_state {
21 uint8_t buf[BLAKE2S_BLOCK_SIZE];
26 void blake2s_init(struct blake2s_state *state, const size_t outlen);
27 void blake2s_init_key(struct blake2s_state *state, const size_t outlen,
28 const void *key, const size_t keylen);
29 void blake2s_update(struct blake2s_state *state, const uint8_t *in, size_t inlen);
30 //void blake2s_final(struct blake2s_state *state, uint8_t *out);
32 static inline void blake2s(uint8_t *out, const uint8_t *in, const uint8_t *key,
33 const size_t outlen, const size_t inlen,
36 struct blake2s_state state;
39 blake2s_init_key(&state, outlen, key, keylen);
41 blake2s_init(&state, outlen);
43 blake2s_update(&state, in, inlen);
44 blake2s_final(&state, out);
47 void blake2s_hmac(uint8_t *out, const uint8_t *in, const uint8_t *key, const size_t outlen,
48 const size_t inlen, const size_t keylen);
50 #endif /* _ZINC_BLAKE2S_H */