]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/if_wg/include/crypto/blake2s.h
service(8): use an environment more consistent with init(8)
[FreeBSD/FreeBSD.git] / sys / dev / if_wg / include / crypto / blake2s.h
1 /* SPDX-License-Identifier: GPL-2.0 OR MIT */
2 /*
3  * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
4  */
5
6 #include <sys/types.h>
7
8 #ifndef _BLAKE2S_H_
9 #define _BLAKE2S_H_
10
11
12 enum blake2s_lengths {
13         BLAKE2S_BLOCK_SIZE = 64,
14         BLAKE2S_HASH_SIZE = 32,
15         BLAKE2S_KEY_SIZE = 32
16 };
17
18 struct blake2s_state {
19         uint32_t h[8];
20         uint32_t t[2];
21         uint32_t f[2];
22         uint8_t buf[BLAKE2S_BLOCK_SIZE];
23         size_t buflen;
24         uint8_t last_node;
25 };
26
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);
32
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,
35                            const size_t keylen)
36 {
37         struct blake2s_state state;
38 #ifdef __linux___
39         WARN_ON(IS_ENABLED(DEBUG) && ((!in && inlen > 0) || !out || !outlen ||
40                 outlen > BLAKE2S_HASH_SIZE || keylen > BLAKE2S_KEY_SIZE ||
41                 (!key && keylen)));
42 #endif
43
44         if (keylen)
45                 blake2s_init_key(&state, outlen, key, keylen);
46         else
47                 blake2s_init(&state, outlen);
48
49         blake2s_update(&state, in, inlen);
50         blake2s_final(&state, out, outlen);
51 }
52
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);
55
56 #endif /* _BLAKE2S_H_ */