Lightweight Cryptography Primitives
 All Data Structures Files Functions Variables Typedefs Macros Pages
Data Structures | Functions
romulus-xof.h File Reference

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...
 

Detailed Description

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

Function Documentation

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.

Parameters
outBuffer to receive the hash output which must be at least ROMULUS_HASH_SIZE bytes in length.
inPoints to the input data to be hashed.
inlenLength of the input data in bytes.
Returns
Returns zero on success or -1 if there was an error in the parameters.
See Also
romulus_xof_init(), romulus_xof_absorb(), romulus_xof_squeeze()
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.

Parameters
stateXOF state to be updated.
inPoints to the input data to be absorbed into the state.
inlenLength of the input data to be absorbed into the state.
See Also
romulus_xof_init(), romulus_xof_squeeze()
void romulus_xof_init ( romulus_xof_state_t state)

Initializes the state for a Romulus-H XOF mode.

Parameters
stateXOF state to be initialized.
See Also
romulus_xof_update(), romulus_xof_squeeze(), romulus_xof()
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.

Parameters
stateXOF state to squeeze data from.
outBuffer to receive the squeezed dara.
outlenNumber of bytes to squeeze from the XOF state.
See Also
romulus_xof_init(), romulus_xof_update()