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

Hashed Message Authentication Code (HMAC) based on SPARKLE. More...

#include "sparkle-hash.h"
#include <stddef.h>

Go to the source code of this file.

Macros

#define ESCH_256_HMAC_SIZE   ESCH_256_HASH_SIZE
 Default size of the output for Esch256-HMAC.
 
#define ESCH_384_HMAC_SIZE   ESCH_384_HASH_SIZE
 Default size of the output for Esch384-HMAC.
 

Typedefs

typedef esch_256_hash_state_t esch_256_hmac_state_t
 State information for the Esch256-HMAC incremental mode.
 
typedef esch_384_hash_state_t esch_384_hmac_state_t
 State information for the Esch384-HMAC incremental mode.
 

Functions

void esch_256_hmac (unsigned char *out, const unsigned char *key, size_t keylen, const unsigned char *in, size_t inlen)
 Computes a HMAC value using Esch256. More...
 
void esch_256_hmac_init (esch_256_hmac_state_t *state, const unsigned char *key, size_t keylen)
 Initializes an incremental HMAC state using Esch256. More...
 
void esch_256_hmac_update (esch_256_hmac_state_t *state, const unsigned char *in, size_t inlen)
 Updates an incremental Esch256-HMAC state with more input data. More...
 
void esch_256_hmac_finalize (esch_256_hmac_state_t *state, const unsigned char *key, size_t keylen, unsigned char *out)
 Finalizes an incremental Esch256-HMAC state. More...
 
void esch_384_hmac (unsigned char *out, const unsigned char *key, size_t keylen, const unsigned char *in, size_t inlen)
 Computes a HMAC value using Esch384. More...
 
void esch_384_hmac_init (esch_384_hmac_state_t *state, const unsigned char *key, size_t keylen)
 Initializes an incremental HMAC state using Esch384. More...
 
void esch_384_hmac_update (esch_384_hmac_state_t *state, const unsigned char *in, size_t inlen)
 Updates an incremental Esch384-HMAC state with more input data. More...
 
void esch_384_hmac_finalize (esch_384_hmac_state_t *state, const unsigned char *key, size_t keylen, unsigned char *out)
 Finalizes an incremental Esch384-HMAC state. More...
 

Detailed Description

Hashed Message Authentication Code (HMAC) based on SPARKLE.

The HMAC mode provides a method to authenticate a sequence of bytes using either Esch256 or Esch384 as the underlying digest algorithm.

HMAC uses an underlying block size to pad the key data. The SPARKLE block absorption rate of 16 bytes is too short so we use the HMAC-SHA-256 and HMAC-SHA-384 block sizes of 64 and 128 instead.

Note
The KMAC construction is preferable for sponge-based hash algorithms as it is simpler and more efficient. HMAC mode is provided for drop-in compatibility with existing designs.

Reference: https://tools.ietf.org/html/rfc2104

Function Documentation

void esch_256_hmac ( unsigned char *  out,
const unsigned char *  key,
size_t  keylen,
const unsigned char *  in,
size_t  inlen 
)

Computes a HMAC value using Esch256.

Parameters
outBuffer to receive the output HMAC value; must be at least ESCH_256_HMAC_SIZE bytes in length.
keyPoints to the key.
keylenNumber of bytes in the key.
inPoints to the data to authenticate.
inlenNumber of bytes of data to authenticate.
void esch_256_hmac_finalize ( esch_256_hmac_state_t state,
const unsigned char *  key,
size_t  keylen,
unsigned char *  out 
)

Finalizes an incremental Esch256-HMAC state.

Parameters
stateHMAC state to squeeze the output data from.
keyPoints to the key.
keylenNumber of bytes in the key.
outPoints to the output buffer to receive the HMAC value; must be at least ESCH_256_HMAC_SIZE bytes in length.
See Also
esch_256_hmac_init(), esch_256_hmac_update()
void esch_256_hmac_init ( esch_256_hmac_state_t state,
const unsigned char *  key,
size_t  keylen 
)

Initializes an incremental HMAC state using Esch256.

Parameters
statePoints to the state to be initialized.
keyPoints to the key.
keylenNumber of bytes in the key.

The key needs to be preserved until the esch_256_hmac_finalize() call to provide the outer HMAC hashing key.

See Also
esch_256_hmac_update(), esch_256_hmac_finalize()
void esch_256_hmac_update ( esch_256_hmac_state_t state,
const unsigned char *  in,
size_t  inlen 
)

Updates an incremental Esch256-HMAC state with more input data.

Parameters
stateHMAC state 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_hmac_init(), esch_256_hmac_finalize()
void esch_384_hmac ( unsigned char *  out,
const unsigned char *  key,
size_t  keylen,
const unsigned char *  in,
size_t  inlen 
)

Computes a HMAC value using Esch384.

Parameters
outBuffer to receive the output HMAC value; must be at least ESCH_384_HMAC_SIZE bytes in length.
keyPoints to the key.
keylenNumber of bytes in the key.
inPoints to the data to authenticate.
inlenNumber of bytes of data to authenticate.
void esch_384_hmac_finalize ( esch_384_hmac_state_t state,
const unsigned char *  key,
size_t  keylen,
unsigned char *  out 
)

Finalizes an incremental Esch384-HMAC state.

Parameters
stateHMAC state to squeeze the output data from.
keyPoints to the key.
keylenNumber of bytes in the key.
outPoints to the output buffer to receive the HMAC value; must be at least ESCH_384_HMAC_SIZE bytes in length.
See Also
esch_384_hmac_init(), esch_384_hmac_update()
void esch_384_hmac_init ( esch_384_hmac_state_t state,
const unsigned char *  key,
size_t  keylen 
)

Initializes an incremental HMAC state using Esch384.

Parameters
statePoints to the state to be initialized.
keyPoints to the key.
keylenNumber of bytes in the key.

The key needs to be preserved until the esch_384_hmac_finalize() call to provide the outer HMAC hashing key.

See Also
esch_384_hmac_update(), esch_384_hmac_finalize()
void esch_384_hmac_update ( esch_384_hmac_state_t state,
const unsigned char *  in,
size_t  inlen 
)

Updates an incremental Esch384-HMAC state with more input data.

Parameters
stateHMAC state 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_hmac_init(), esch_384_hmac_finalize()