29 0x6A09E667UL, 0xBB67AE85UL, 0x3C6EF372UL, 0xA54FF53AUL,
30 0x510E527FUL, 0x9B05688CUL, 0x1F83D9ABUL, 0x5BE0CD19UL
34 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
35 {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3},
36 {11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4},
37 {7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8},
38 {9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13},
39 {2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9},
40 {12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11},
41 {13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10},
42 {6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5},
43 {10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0},
49 S->f[1] = (uint32_t) - 1;
65 S->f[0] = (uint32_t) - 1;
72 S->t[1] += (
S->t[0] < inc);
81 for (
i = 0;
i < 8; ++
i)
89 const unsigned char *p = (
const unsigned char *) (
P);
95 for (
i = 0;
i < 8; ++
i)
98 S->outlen =
P->digest_length;
113 P->digest_length = (uint8_t) outlen;
123 memset (
P->salt, 0, sizeof (
P->salt));
124 memset (
P->personal, 0, sizeof (
P->personal));
140 P->digest_length = (uint8_t) outlen;
141 P->key_length = (uint8_t) keylen;
150 memset (
P->salt, 0, sizeof (
P->salt));
151 memset (
P->personal, 0, sizeof (
P->personal));
159 memcpy (block,
key, keylen);
166 #define G(r,i,a,b,c,d) \
168 a = a + b + m[blake2s_sigma[r][2*i+0]]; \
169 d = rotr32(d ^ a, 16); \
171 b = rotr32(b ^ c, 12); \
172 a = a + b + m[blake2s_sigma[r][2*i+1]]; \
173 d = rotr32(d ^ a, 8); \
175 b = rotr32(b ^ c, 7); \
180 G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \
181 G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \
182 G(r,2,v[ 2],v[ 6],v[10],v[14]); \
183 G(r,3,v[ 3],v[ 7],v[11],v[15]); \
184 G(r,4,v[ 0],v[ 5],v[10],v[15]); \
185 G(r,5,v[ 1],v[ 6],v[11],v[12]); \
186 G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \
187 G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \
197 for (
i = 0;
i < 16; ++
i)
202 for (
i = 0;
i < 8; ++
i)
227 for (
i = 0;
i < 8; ++
i)
229 S->h[
i] =
S->h[
i] ^ v[
i] ^ v[
i + 8];
239 const unsigned char *in = (
const unsigned char *) pin;
242 size_t left =
S->buflen;
247 memcpy (
S->buf +
left, in, fill);
260 memcpy (
S->buf +
S->buflen, in, inlen);
272 if (out == NULL || outlen < S->outlen)
283 for (
i = 0;
i < 8; ++
i)
286 memcpy (out,
buffer, outlen);
292 blake2s (
void *out,
size_t outlen,
const void *in,
size_t inlen,
293 const void *
key,
size_t keylen)
298 if (NULL == in && inlen > 0)
304 if (NULL ==
key && keylen > 0)