---
name: "libkeccak_update"
section: "3"
platform: "linux"
package: "libkeccak"
version: "1.4.3-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/libkeccak_update"
---

# libkeccak\_update(3)

Partially hash a message with erasure

## 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)](/malloc/3.md).

## 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)](/libkeccak_cshake_initialise/3.md), must be called, once, immediately after state initialisation; before the first call to the **libkeccak\_update**() function.

## SEE ALSO

[**libkeccak\_state\_initialise**(3)](/libkeccak_state_initialise/3.md), [**libkeccak\_cshake\_initialise**(3)](/libkeccak_cshake_initialise/3.md), [**libkeccak\_fast\_update**(3)](/libkeccak_fast_update/3.md), [**libkeccak\_zerocopy\_update**(3)](/libkeccak_zerocopy_update/3.md), [**libkeccak\_fast\_digest**(3)](/libkeccak_fast_digest/3.md), [**libkeccak\_zerocopy\_digest**(3)](/libkeccak_zerocopy_digest/3.md), [**libkeccak\_digest**(3)](/libkeccak_digest/3.md)
