unsigned char *blake384_file(unsigned char *out, FILE *fp) { state384 context; size_t ret = 0; int errsv = 0; unsigned char buf[8192], *digest = NULL; blake384_init(&context); for (;;) { ret = fread(buf, 1, 8192, fp); errsv = errno; if ((ret != 8192) && ferror(fp)) { errno = errsv; return NULL; } blake384_update(&context, (const uint8_t *) buf, ret); if (feof(fp)) break; } if (!out) { if (!(digest = malloc(48))) return NULL; } else { digest = out; } blake384_final(&context, (uint8_t *) digest); return digest; }
void blake384(void *dest, const void *msg, uint32_t length_b){ blake_large_ctx_t ctx; blake384_init(&ctx); while(length_b>=BLAKE_LARGE_BLOCKSIZE){ blake_large_nextBlock(&ctx, msg); msg = (uint8_t*)msg + BLAKE_LARGE_BLOCKSIZE_B; length_b -= BLAKE_LARGE_BLOCKSIZE; } blake_large_lastBlock(&ctx, msg, length_b); blake384_ctx2hash(dest, &ctx); }
/* BLAKE-384 Generic Interface */ unsigned char *blake384_buffer( unsigned char *out, const unsigned char *in, size_t in_len) { state384 context; unsigned char *digest = NULL; blake384_init(&context); if (!out) { if (!(digest = malloc(48))) return NULL; } else { digest = out; } blake384_update(&context, (const uint8_t *) in, in_len); blake384_final(&context, (uint8_t *) digest); return digest; }