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

Hash algorithms based on the SPARKLE permutation. More...

#include <stddef.h>

Go to the source code of this file.

Data Structures

union  esch_256_hash_state_t
 State information for the Esch256 incremental hash mode and the XOEsch256 increment XOF mode. More...
 
union  esch_384_hash_state_t
 State information for the Esch384 incremental hash mod ande the XOEsch384 increment XOF mode. More...
 

Macros

#define ESCH_256_HASH_SIZE   32
 Size of the hash output for Esch256.
 
#define ESCH_256_RATE   16
 Rate at which bytes are processed by Esch256 and XOEsch256.
 
#define ESCH_384_HASH_SIZE   48
 Size of the hash output for Esch384.
 
#define ESCH_384_RATE   16
 Rate at which bytes are processed by Esch384 and XOEsch384.
 

Functions

int esch_256_hash (unsigned char *out, const unsigned char *in, size_t inlen)
 Hashes a block of input data with Esch256 to generate a hash value. More...
 
int esch_256_xof (unsigned char *out, const unsigned char *in, size_t inlen)
 Hashes a block of input data with XOEsch256 to generate an XOF output value. More...
 
void esch_256_hash_init (esch_256_hash_state_t *state)
 Initializes the state for an Esch256 hashing or a XOEsch256 XOF operation. More...
 
void esch_256_hash_update (esch_256_hash_state_t *state, const unsigned char *in, size_t inlen)
 Updates an Esch256 or XOEsch256 state with more input data. More...
 
void esch_256_hash_finalize (esch_256_hash_state_t *state, unsigned char *out)
 Returns the final hash value from an Esch256 hashing operation. More...
 
void esch_256_hash_squeeze (esch_256_hash_state_t *state, unsigned char *out, size_t outlen)
 Squeezes output data from a XOEsch256 XOF state. More...
 
int esch_384_hash (unsigned char *out, const unsigned char *in, size_t inlen)
 Hashes a block of input data with Esch384 to generate a hash value. More...
 
int esch_384_xof (unsigned char *out, const unsigned char *in, size_t inlen)
 Hashes a block of input data with XOEsch384 to generate an XOF output value. More...
 
void esch_384_hash_init (esch_384_hash_state_t *state)
 Initializes the state for an Esch384 hashing or a XOEsch384 XOF operation. More...
 
void esch_384_hash_update (esch_384_hash_state_t *state, const unsigned char *in, size_t inlen)
 Updates an Esch384 state with more input data. More...
 
void esch_384_hash_finalize (esch_384_hash_state_t *state, unsigned char *out)
 Returns the final hash value from an Esch384 hashing operation. More...
 
void esch_384_hash_squeeze (esch_384_hash_state_t *state, unsigned char *out, size_t outlen)
 Squeezes output data from a XOEsch384 XOF state. More...
 

Detailed Description

Hash algorithms based on the SPARKLE permutation.

SPARKLE is a family of encryption and hash algorithms that are based around the SPARKLE permutation. There are three versions of the permutation with 256-bit, 384-bit, and 512-bit state sizes. The hash algorithms in the family are:

References: https://www.cryptolux.org/index.php/Sparkle

Function Documentation

int esch_256_hash ( unsigned char *  out,
const unsigned char *  in,
size_t  inlen 
)

Hashes a block of input data with Esch256 to generate a hash value.

Parameters
outBuffer to receive the hash output which must be at least ESCH_256_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.
void esch_256_hash_finalize ( esch_256_hash_state_t state,
unsigned char *  out 
)

Returns the final hash value from an Esch256 hashing operation.

Parameters
stateState to be finalized.
outPoints to the output buffer to receive the 32-byte hash value.

This function is intended for generating output from the Esch256 hashing mode. Use esch_256_hash_squeeze() instead to generate XOF data.

See Also
esch_256_hash_init(), esch_256_hash_update(), esch_256_hash_squeeze()
void esch_256_hash_init ( esch_256_hash_state_t state)

Initializes the state for an Esch256 hashing or a XOEsch256 XOF operation.

Parameters
stateState to be initialized.
See Also
esch_256_hash_update(), esch_256_hash_finalize(), esch_256_hash()
void esch_256_hash_squeeze ( esch_256_hash_state_t state,
unsigned char *  out,
size_t  outlen 
)

Squeezes output data from a XOEsch256 XOF state.

Parameters
stateState to squeeze the output data from.
outPoints to the output buffer to receive the squeezed data.
outlenNumber of bytes of data to squeeze out of the state.
See Also
esch_256_hash_init(), esch_256_hash_update()
void esch_256_hash_update ( esch_256_hash_state_t state,
const unsigned char *  in,
size_t  inlen 
)

Updates an Esch256 or XOEsch256 state with more input data.

Parameters
stateState to be updated.
inPoints to the input data to be incorporated into the state.
inlenLength of the input data to be incorporated into the state.
See Also
esch_256_hash_init(), esch_256_hash_finalize(), esch_256_hash_squeeze()
int esch_256_xof ( unsigned char *  out,
const unsigned char *  in,
size_t  inlen 
)

Hashes a block of input data with XOEsch256 to generate an XOF output value.

Parameters
outBuffer to receive the hash output which must be at least ESCH_256_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.
int esch_384_hash ( unsigned char *  out,
const unsigned char *  in,
size_t  inlen 
)

Hashes a block of input data with Esch384 to generate a hash value.

Parameters
outBuffer to receive the hash output which must be at least ESCH_384_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.
void esch_384_hash_finalize ( esch_384_hash_state_t state,
unsigned char *  out 
)

Returns the final hash value from an Esch384 hashing operation.

Parameters
stateState to be finalized.
outPoints to the output buffer to receive the 48-byte hash value.

This function is intended for generating output from the Esch384 hashing mode. Use esch_384_hash_squeeze() instead to generate XOF data.

See Also
esch_384_hash_init(), esch_384_hash_update(), esch_384_hash_squeeze()
void esch_384_hash_init ( esch_384_hash_state_t state)

Initializes the state for an Esch384 hashing or a XOEsch384 XOF operation.

Parameters
stateState to be initialized.
See Also
esch_384_hash_update(), esch_384_hash_finalize(), esch_384_hash()
void esch_384_hash_squeeze ( esch_384_hash_state_t state,
unsigned char *  out,
size_t  outlen 
)

Squeezes output data from a XOEsch384 XOF state.

Parameters
stateState to squeeze the output data from.
outPoints to the output buffer to receive the squeezed data.
outlenNumber of bytes of data to squeeze out of the state.
See Also
esch_384_hash_init(), esch_384_hash_update()
void esch_384_hash_update ( esch_384_hash_state_t state,
const unsigned char *  in,
size_t  inlen 
)

Updates an Esch384 state with more input data.

Parameters
stateState to be updated.
inPoints to the input data to be incorporated into the state.
inlenLength of the input data to be incorporated into the state.
See Also
esch_384_hash_init(), esch_384_hash_finalize(), esch_384_hash_squeeze()
int esch_384_xof ( unsigned char *  out,
const unsigned char *  in,
size_t  inlen 
)

Hashes a block of input data with XOEsch384 to generate an XOF output value.

Parameters
outBuffer to receive the hash output which must be at least ESCH_384_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.