]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/if_wg/include/zinc/blake2s.h
service(8): use an environment more consistent with init(8)
[FreeBSD/FreeBSD.git] / sys / dev / if_wg / include / zinc / 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 #ifndef _ZINC_BLAKE2S_H
7 #define _ZINC_BLAKE2S_H
8
9 #include <sys/types.h>
10
11 enum blake2s_lengths {
12         BLAKE2S_BLOCK_SIZE = 64,
13         BLAKE2S_HASH_SIZE = 32,
14         BLAKE2S_KEY_SIZE = 32
15 };
16
17 struct blake2s_state {
18         uint32_t h[8];
19         uint32_t t[2];
20         uint32_t f[2];
21         uint8_t buf[BLAKE2S_BLOCK_SIZE];
22         unsigned int buflen;
23         unsigned int outlen;
24 };
25
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);
31
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,
34                            const size_t keylen)
35 {
36         struct blake2s_state state;
37
38         if (keylen)
39                 blake2s_init_key(&state, outlen, key, keylen);
40         else
41                 blake2s_init(&state, outlen);
42
43         blake2s_update(&state, in, inlen);
44         blake2s_final(&state, out);
45 }
46
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);
49
50 #endif /* _ZINC_BLAKE2S_H */