table of contents
LIBKECCAK_UPDATE(3) | Library Functions Manual | LIBKECCAK_UPDATE(3) |
NAME¶
libkeccak_update - Partially hash a message with erasure
SYNOPSIS¶
#include <libkeccak.h> int libkeccak_update(struct libkeccak_state *state, const void *msg, size_t msglen);
Link with -lkeccak.
DESCRIPTION¶
The libkeccak_update() function continues (or starts) hashing a message. The current state of the hashing is stored in *state, and will be updated. The message specified by the msg parameter with the byte-size specified by the msglen parameter, will be hashed.
The libkeccak_update() function may reallocate the state's message chunk buffer. When doing so, it attempts to do so as securely as possible, rather than as fast as possible.
RETURN VALUES¶
The libkeccak_update() function returns 0 upon successful completion. On error, -1 is returned and errno is set to describe the error.
ERRORS¶
The libkeccak_update() function may fail for any reason specified by the function malloc(3).
NOTES¶
Neither parameter by be NULL or 0.
EXAMPLE¶
This example calculates the Keccak[b = 1024, c = 576, n = 256] hash of the input from stdin, and prints the hash, in hexadecimal form, to stdout.
struct libkeccak_state state; struct libkeccak_spec spec; char binhash[256 / 8]; char hexhash[256 / 8 * 2 + 1]; char chunk[4 << 10]; ssize_t len; spec.bitrate = 1024; spec.capacity = 576; spec.output = 256; if (libkeccak_state_initialise(&state, &spec) < 0) goto fail; for (;;) { len = read(STDIN_FILENO, chunk, sizeof(chunk)); if ((len < 0) && (errno == EINTR)) continue; if (len < 0) goto fail; if (len == 0) break; if (libkeccak_update(&state, chunk, (size_t)len) < 0) goto fail; } if (libkeccak_digest(&state, NULL, 0, 0, "", binhash) < 0) goto fail; libkeccak_behex_lower(hexhash, binhash, sizeof(binhash)); printf("%s\n", hexhash); libkeccak_state_destroy(&state);
NOTES¶
For cSHAKE, the libkeccak_cshake_initialise(3), must be called, once, immediately after state initialisation; before the first call to the libkeccak_update() function.
SEE ALSO¶
libkeccak_state_initialise(3), libkeccak_cshake_initialise(3), libkeccak_fast_update(3), libkeccak_zerocopy_update(3), libkeccak_fast_digest(3), libkeccak_zerocopy_digest(3), libkeccak_digest(3)
LIBKECCAK |