| 299 | |
| 300 | |
| 301 | int blake2b_update( blake2b_state *S, const uint8_t *in, size_t inlen ) |
| 302 | { |
| 303 | while( inlen > 0 ) |
| 304 | { |
| 305 | uint32_t left = S->buflen; |
| 306 | uint32_t fill = 2 * BLAKE2B_BLOCKBYTES - left; |
| 307 | |
| 308 | if( inlen > fill ) |
| 309 | { |
| 310 | memcpy( S->buf + left, in, fill ); // Fill buffer |
| 311 | S->buflen += fill; |
| 312 | blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES ); |
| 313 | blake2b_compress( S, S->buf ); // Compress |
| 314 | memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES ); // Shift buffer left |
| 315 | S->buflen -= BLAKE2B_BLOCKBYTES; |
| 316 | in += fill; |
| 317 | inlen -= fill; |
| 318 | } |
| 319 | else // inlen <= fill |
| 320 | { |
| 321 | memcpy( S->buf + left, in, inlen ); |
| 322 | S->buflen += ( uint32_t ) inlen; // Be lazy, do not compress |
| 323 | in += inlen; |
| 324 | inlen -= inlen; |
| 325 | } |
| 326 | } |
| 327 | |
| 328 | return 0; |
| 329 | } |
| 330 | |
| 331 | int blake2b_final( blake2b_state *S, uint8_t *out, size_t outlen ) |
| 332 | { |
no test coverage detected