Scroll to navigation

LIBKECCAK_FAST_UPDATE(3) Library Functions Manual LIBKECCAK_FAST_UPDATE(3)

NAME

libkeccak_fast_update - Partially hash a message without erasure

SYNOPSIS

#include <libkeccak.h>
int libkeccak_fast_update(struct libkeccak_state *state, const void *msg, size_t msglen);

Link with -lkeccak.

DESCRIPTION

The libkeccak_fast_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_fast_update() function may reallocate the state's message chunk buffer. When doing so, it attempts to do so as quickly as possible, rather than ensuring that the information in the old allocation is securely removed if a new allocation is required.

RETURN VALUES

The libkeccak_fast_update() function returns 0 upon successful completion. On error, -1 is returned and errno is set to describe the error.

ERRORS

The libkeccak_fast_update() function may fail for any reason specified by the function realloc(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_fast_update(&state, chunk, (size_t)len) < 0)
		goto fail;
}
if (libkeccak_fast_digest(&state, NULL, 0, 0, "", binhash) < 0)
	goto fail;
libkeccak_behex_lower(hexhash, binhash, sizeof(binhash));
printf("%s\n", hexhash);
libkeccak_state_fast_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_fast_update() function.

SEE ALSO

libkeccak_state_initialise(3), libkeccak_cshake_initialise(3), libkeccak_zerocopy_update(3), libkeccak_update(3), libkeccak_fast_digest(3), libkeccak_zerocopy_digest(3), libkeccak_digest(3)

LIBKECCAK