Lightweight Cryptography Primitives
|
Extensible Output Function (XOF) based on Romulus-H. More...
#include "romulus-hash.h"
Go to the source code of this file.
Data Structures | |
struct | romulus_xof_state_t |
State information for Romulus-H XOF mode. More... | |
Functions | |
int | romulus_xof (unsigned char *out, const unsigned char *in, size_t inlen) |
Hashes a block of input data with Romulus-H in XOF mode. More... | |
void | romulus_xof_init (romulus_xof_state_t *state) |
Initializes the state for a Romulus-H XOF mode. More... | |
void | romulus_xof_absorb (romulus_xof_state_t *state, const unsigned char *in, size_t inlen) |
Absorbs more input data into a Romulus-H XOF state. More... | |
void | romulus_xof_squeeze (romulus_xof_state_t *state, unsigned char *out, size_t outlen) |
Returns the final hash value from a Romulus-H hashing operation. More... | |
Extensible Output Function (XOF) based on Romulus-H.
Romulus-H is a hash algorithm based on the block cipher SKINNY-128-384+, using the MDPH construction. We combine it with the mask generation function MGF1 to create an XOF mode.
The XOF output is generated with the sequence Hash(M || [0]), Hash(M || [1]), Hash(M || [2]), etc. "M" is the message input padded to a 32 byte block boundary using the same padding scheme as Romulus-H. [0], [1], [2], etc are 32-bit integers encoded in big-endian.
The application should not generate more than 32 * 232 bytes (or 128 GiB) of output because after that the MGF1 counter will wrap around and start generating the same output again.
References: https://romulusae.github.io/romulus/, https://www.ietf.org/rfc/rfc2437.html
int romulus_xof | ( | unsigned char * | out, |
const unsigned char * | in, | ||
size_t | inlen | ||
) |
Hashes a block of input data with Romulus-H in XOF mode.
out | Buffer to receive the hash output which must be at least ROMULUS_HASH_SIZE bytes in length. |
in | Points to the input data to be hashed. |
inlen | Length of the input data in bytes. |
void romulus_xof_absorb | ( | romulus_xof_state_t * | state, |
const unsigned char * | in, | ||
size_t | inlen | ||
) |
Absorbs more input data into a Romulus-H XOF state.
state | XOF state to be updated. |
in | Points to the input data to be absorbed into the state. |
inlen | Length of the input data to be absorbed into the state. |
void romulus_xof_init | ( | romulus_xof_state_t * | state | ) |
Initializes the state for a Romulus-H XOF mode.
state | XOF state to be initialized. |
void romulus_xof_squeeze | ( | romulus_xof_state_t * | state, |
unsigned char * | out, | ||
size_t | outlen | ||
) |
Returns the final hash value from a Romulus-H hashing operation.
state | XOF state to squeeze data from. |
out | Buffer to receive the squeezed dara. |
outlen | Number of bytes to squeeze from the XOF state. |