xref: /freebsd/sys/contrib/libsodium/src/libsodium/crypto_generichash/crypto_generichash.c (revision 3611ec604864a7d4dcc9a3ea898c80eb35eef8a0)
1*0ac341f1SConrad Meyer 
2*0ac341f1SConrad Meyer #include "crypto_generichash.h"
3*0ac341f1SConrad Meyer #include "randombytes.h"
4*0ac341f1SConrad Meyer 
5*0ac341f1SConrad Meyer size_t
crypto_generichash_bytes_min(void)6*0ac341f1SConrad Meyer crypto_generichash_bytes_min(void)
7*0ac341f1SConrad Meyer {
8*0ac341f1SConrad Meyer     return crypto_generichash_BYTES_MIN;
9*0ac341f1SConrad Meyer }
10*0ac341f1SConrad Meyer 
11*0ac341f1SConrad Meyer size_t
crypto_generichash_bytes_max(void)12*0ac341f1SConrad Meyer crypto_generichash_bytes_max(void)
13*0ac341f1SConrad Meyer {
14*0ac341f1SConrad Meyer     return crypto_generichash_BYTES_MAX;
15*0ac341f1SConrad Meyer }
16*0ac341f1SConrad Meyer 
17*0ac341f1SConrad Meyer size_t
crypto_generichash_bytes(void)18*0ac341f1SConrad Meyer crypto_generichash_bytes(void)
19*0ac341f1SConrad Meyer {
20*0ac341f1SConrad Meyer     return crypto_generichash_BYTES;
21*0ac341f1SConrad Meyer }
22*0ac341f1SConrad Meyer 
23*0ac341f1SConrad Meyer size_t
crypto_generichash_keybytes_min(void)24*0ac341f1SConrad Meyer crypto_generichash_keybytes_min(void)
25*0ac341f1SConrad Meyer {
26*0ac341f1SConrad Meyer     return crypto_generichash_KEYBYTES_MIN;
27*0ac341f1SConrad Meyer }
28*0ac341f1SConrad Meyer 
29*0ac341f1SConrad Meyer size_t
crypto_generichash_keybytes_max(void)30*0ac341f1SConrad Meyer crypto_generichash_keybytes_max(void)
31*0ac341f1SConrad Meyer {
32*0ac341f1SConrad Meyer     return crypto_generichash_KEYBYTES_MAX;
33*0ac341f1SConrad Meyer }
34*0ac341f1SConrad Meyer 
35*0ac341f1SConrad Meyer size_t
crypto_generichash_keybytes(void)36*0ac341f1SConrad Meyer crypto_generichash_keybytes(void)
37*0ac341f1SConrad Meyer {
38*0ac341f1SConrad Meyer     return crypto_generichash_KEYBYTES;
39*0ac341f1SConrad Meyer }
40*0ac341f1SConrad Meyer 
41*0ac341f1SConrad Meyer const char *
crypto_generichash_primitive(void)42*0ac341f1SConrad Meyer crypto_generichash_primitive(void)
43*0ac341f1SConrad Meyer {
44*0ac341f1SConrad Meyer     return crypto_generichash_PRIMITIVE;
45*0ac341f1SConrad Meyer }
46*0ac341f1SConrad Meyer 
47*0ac341f1SConrad Meyer size_t
crypto_generichash_statebytes(void)48*0ac341f1SConrad Meyer crypto_generichash_statebytes(void)
49*0ac341f1SConrad Meyer {
50*0ac341f1SConrad Meyer     return (sizeof(crypto_generichash_state) + (size_t) 63U) & ~(size_t) 63U;
51*0ac341f1SConrad Meyer }
52*0ac341f1SConrad Meyer 
53*0ac341f1SConrad Meyer int
crypto_generichash(unsigned char * out,size_t outlen,const unsigned char * in,unsigned long long inlen,const unsigned char * key,size_t keylen)54*0ac341f1SConrad Meyer crypto_generichash(unsigned char *out, size_t outlen, const unsigned char *in,
55*0ac341f1SConrad Meyer                    unsigned long long inlen, const unsigned char *key,
56*0ac341f1SConrad Meyer                    size_t keylen)
57*0ac341f1SConrad Meyer {
58*0ac341f1SConrad Meyer     return crypto_generichash_blake2b(out, outlen, in, inlen, key, keylen);
59*0ac341f1SConrad Meyer }
60*0ac341f1SConrad Meyer 
61*0ac341f1SConrad Meyer int
crypto_generichash_init(crypto_generichash_state * state,const unsigned char * key,const size_t keylen,const size_t outlen)62*0ac341f1SConrad Meyer crypto_generichash_init(crypto_generichash_state *state,
63*0ac341f1SConrad Meyer                         const unsigned char *key,
64*0ac341f1SConrad Meyer                         const size_t keylen, const size_t outlen)
65*0ac341f1SConrad Meyer {
66*0ac341f1SConrad Meyer     return crypto_generichash_blake2b_init
67*0ac341f1SConrad Meyer         ((crypto_generichash_blake2b_state *) state, key, keylen, outlen);
68*0ac341f1SConrad Meyer }
69*0ac341f1SConrad Meyer 
70*0ac341f1SConrad Meyer int
crypto_generichash_update(crypto_generichash_state * state,const unsigned char * in,unsigned long long inlen)71*0ac341f1SConrad Meyer crypto_generichash_update(crypto_generichash_state *state,
72*0ac341f1SConrad Meyer                           const unsigned char *in,
73*0ac341f1SConrad Meyer                           unsigned long long inlen)
74*0ac341f1SConrad Meyer {
75*0ac341f1SConrad Meyer     return crypto_generichash_blake2b_update
76*0ac341f1SConrad Meyer         ((crypto_generichash_blake2b_state *) state, in, inlen);
77*0ac341f1SConrad Meyer }
78*0ac341f1SConrad Meyer 
79*0ac341f1SConrad Meyer int
crypto_generichash_final(crypto_generichash_state * state,unsigned char * out,const size_t outlen)80*0ac341f1SConrad Meyer crypto_generichash_final(crypto_generichash_state *state,
81*0ac341f1SConrad Meyer                          unsigned char *out, const size_t outlen)
82*0ac341f1SConrad Meyer {
83*0ac341f1SConrad Meyer     return crypto_generichash_blake2b_final
84*0ac341f1SConrad Meyer         ((crypto_generichash_blake2b_state *) state, out, outlen);
85*0ac341f1SConrad Meyer }
86*0ac341f1SConrad Meyer 
87*0ac341f1SConrad Meyer void
crypto_generichash_keygen(unsigned char k[crypto_generichash_KEYBYTES])88*0ac341f1SConrad Meyer crypto_generichash_keygen(unsigned char k[crypto_generichash_KEYBYTES])
89*0ac341f1SConrad Meyer {
90*0ac341f1SConrad Meyer     randombytes_buf(k, crypto_generichash_KEYBYTES);
91*0ac341f1SConrad Meyer }
92