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

Hashed Message Authentication Code (HMAC) based on Xoodyak-Hash. More...

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

Go to the source code of this file.

Macros

#define XOODYAK_HMAC_SIZE   XOODYAK_HASH_SIZE
 Default size of the output for Xoodyak-HMAC.
 

Typedefs

typedef xoodyak_hash_state_t xoodyak_hmac_state_t
 State information for the Xoodyak-HMAC incremental mode.
 

Functions

void xoodyak_hmac (unsigned char *out, const unsigned char *key, size_t keylen, const unsigned char *in, size_t inlen)
 Computes a HMAC value using Xoodyak-Hash. More...
 
void xoodyak_hmac_init (xoodyak_hmac_state_t *state, const unsigned char *key, size_t keylen)
 Initializes an incremental HMAC state using Xoodyak-Hash. More...
 
void xoodyak_hmac_update (xoodyak_hmac_state_t *state, const unsigned char *in, size_t inlen)
 Updates an incremental Xoodyak-HMAC state with more input data. More...
 
void xoodyak_hmac_finalize (xoodyak_hmac_state_t *state, const unsigned char *key, size_t keylen, unsigned char *out)
 Finalizes an incremental Xoodyak-HMAC state. More...
 

Detailed Description

Hashed Message Authentication Code (HMAC) based on Xoodyak-Hash.

The HMAC mode provides a method to authenticate a sequence of bytes using Xoodyak-Hash as the underlying digest algorithm.

HMAC uses an underlying block size to pad the key data. The Xoodyak-Hash block absorption rate of 16 bytes is too short so we use the HMAC-SHA-256 block size of 64 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 xoodyak_hmac ( unsigned char *  out,
const unsigned char *  key,
size_t  keylen,
const unsigned char *  in,
size_t  inlen 
)

Computes a HMAC value using Xoodyak-Hash.

Parameters
outBuffer to receive the output HMAC value; must be at least XOODYAK_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 xoodyak_hmac_finalize ( xoodyak_hmac_state_t state,
const unsigned char *  key,
size_t  keylen,
unsigned char *  out 
)

Finalizes an incremental Xoodyak-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 XOODYAK_HMAC_SIZE bytes in length.
See Also
xoodyak_hmac_init(), xoodyak_hmac_update()
void xoodyak_hmac_init ( xoodyak_hmac_state_t state,
const unsigned char *  key,
size_t  keylen 
)

Initializes an incremental HMAC state using Xoodyak-Hash.

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 xoodyak_hmac_finalize() call to provide the outer HMAC hashing key.

See Also
xoodyak_hmac_update(), xoodyak_hmac_finalize()
void xoodyak_hmac_update ( xoodyak_hmac_state_t state,
const unsigned char *  in,
size_t  inlen 
)

Updates an incremental Xoodyak-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
xoodyak_hmac_init(), xoodyak_hmac_finalize()