LIBKECCAK_SPEC_CHECK(3) Library Functions Manual LIBKECCAK_SPEC_CHECK(3)

libkeccak_spec_check - Validate hashing parameters

#include <libkeccak.h>
int libkeccak_spec_check(const struct libkeccak_spec *spec);

Link with -lkeccak.

The libkeccak_spec_check() function validates the parameters of *spec, so that unusable configurations can be detected. It is recommended to call this function after calling libkeccak_spec_sha3(3), libkeccak_spec_cshake(3), libkeccak_spec_rawshake(3), libkeccak_spec_shake(3), or, especially, after settings the parameters manually for Keccak hashing.

struct libkeccak_spec {
	long int bitrate;  /* bitrate (in bits) */
	long int capacity; /* capacity (in bits) */
	long int output;   /* output size (in bits) */
};

The libkeccak_spec_check() function returns 0 if the settings are usable. Otherwise it will return one of the following constants.

The specified bitrate was non-positive.
The specified bitrate was not equivalent to 0 modulus 8, that is, it was not in whole bytes.
The specified capacity was non-positive.
The specified capacity was not equivalent to 0 modulus 8, that is, it was not in whole bytes.
The specified output size was non-positive.
The state size, that is the sum of the bitrate and the capacity, exceeded the supported limit (currently at 1600 bits.)
The state size, that is the sum of the bitrate and the capacity, in bits, was not equivalent to 0 modulus 25. Meaning the state size cannot cover all lanes equivalently.
The word size, that is the state size divided by 25, is not a power of 2.
The word size, that is the state size divided by 25, is not quivalent to 0 modulus 8, that is, it is not in whole bytes.

Note that there may be more than one error. Only the first detected is returned.

The libkeccak_spec_check() function cannot fail.

libkeccak_spec_sha3(3), libkeccak_spec_cshake(3), libkeccak_spec_rawshake(3), libkeccak_spec_shake(3), libkeccak_generalised_spec_initialise(3), libkeccak_state_initialise(3), libkeccak_hmac_initialise(3)

LIBKECCAK