1 /* SPDX-License-Identifier: GPL-2.0 OR MIT */
3 * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
12 enum blake2s_lengths {
13 BLAKE2S_BLOCK_SIZE = 64,
14 BLAKE2S_HASH_SIZE = 32,
18 struct blake2s_state {
22 uint8_t buf[BLAKE2S_BLOCK_SIZE];
27 void blake2s_init(struct blake2s_state *state, const size_t outlen);
28 void blake2s_init_key(struct blake2s_state *state, const size_t outlen,
29 const void *key, const size_t keylen);
30 void blake2s_update(struct blake2s_state *state, const uint8_t *in, size_t inlen);
31 void blake2s_final(struct blake2s_state *state, uint8_t *out, const size_t outlen);
33 static inline void blake2s(uint8_t *out, const uint8_t *in, const uint8_t *key,
34 const size_t outlen, const size_t inlen,
37 struct blake2s_state state;
39 WARN_ON(IS_ENABLED(DEBUG) && ((!in && inlen > 0) || !out || !outlen ||
40 outlen > BLAKE2S_HASH_SIZE || keylen > BLAKE2S_KEY_SIZE ||
45 blake2s_init_key(&state, outlen, key, keylen);
47 blake2s_init(&state, outlen);
49 blake2s_update(&state, in, inlen);
50 blake2s_final(&state, out, outlen);
53 void blake2s_hmac(uint8_t *out, const uint8_t *in, const uint8_t *key,
54 const size_t outlen, const size_t inlen, const size_t keylen);
56 #endif /* _BLAKE2S_H_ */