| 289 | |
| 290 | |
| 291 | int blake2s_update( blake2s_state *S, const uint8_t *in, size_t inlen ) |
| 292 | { |
| 293 | while( inlen > 0 ) |
| 294 | { |
| 295 | uint32_t left = S->buflen; |
| 296 | uint32_t fill = 2 * BLAKE2S_BLOCKBYTES - left; |
| 297 | |
| 298 | if( inlen > fill ) |
| 299 | { |
| 300 | memcpy( S->buf + left, in, fill ); // Fill buffer |
| 301 | S->buflen += fill; |
| 302 | blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES ); |
| 303 | blake2s_compress( S, S->buf ); // Compress |
| 304 | memcpy( S->buf, S->buf + BLAKE2S_BLOCKBYTES, BLAKE2S_BLOCKBYTES ); // Shift buffer left |
| 305 | S->buflen -= BLAKE2S_BLOCKBYTES; |
| 306 | in += fill; |
| 307 | inlen -= fill; |
| 308 | } |
| 309 | else // inlen <= fill |
| 310 | { |
| 311 | memcpy( S->buf + left, in, inlen ); |
| 312 | S->buflen += ( uint32_t ) inlen; // Be lazy, do not compress |
| 313 | in += inlen; |
| 314 | inlen -= inlen; |
| 315 | } |
| 316 | } |
| 317 | |
| 318 | return 0; |
| 319 | } |
| 320 | |
| 321 | int blake2s_final( blake2s_state *S, uint8_t *out, size_t outlen ) |
| 322 | { |
no test coverage detected