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

HMAC-based key derivation function based on Romulus-HMAC. More...

#include <stddef.h>

Go to the source code of this file.

Data Structures

struct  romulus_hkdf_state_t
 State for incremental generation of key material from Romulus-HKDF. More...
 

Macros

#define ROMULUS_HKDF_OUTPUT_SIZE   32
 Default output block size for Romulus-HKDF. Key material is generated in blocks of this size.
 

Functions

int romulus_hkdf (unsigned char *out, size_t outlen, const unsigned char *key, size_t keylen, const unsigned char *salt, size_t saltlen, const unsigned char *info, size_t infolen)
 Derives key material using Romulus-HKDF. More...
 
void romulus_hkdf_extract (romulus_hkdf_state_t *state, const unsigned char *key, size_t keylen, const unsigned char *salt, size_t saltlen)
 Extracts entropy from a key and salt for Romulus-HKDF. More...
 
int romulus_hkdf_expand (romulus_hkdf_state_t *state, const unsigned char *info, size_t infolen, unsigned char *out, size_t outlen)
 Expands key material using a Romulus-HKDF state. More...
 
void romulus_hkdf_free (romulus_hkdf_state_t *state)
 Frees all sensitive material in a Romulus-HKDF state. More...
 

Detailed Description

HMAC-based key derivation function based on Romulus-HMAC.

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

Function Documentation

int romulus_hkdf ( unsigned char *  out,
size_t  outlen,
const unsigned char *  key,
size_t  keylen,
const unsigned char *  salt,
size_t  saltlen,
const unsigned char *  info,
size_t  infolen 
)

Derives key material using Romulus-HKDF.

Parameters
outPoints to the output buffer to receive the key material.
outlenNumber of bytes of key material to generate, maximum of ROMULUS_HKDF_OUTPUT_SIZE * 255 bytes.
keyPoints to the bytes of the key.
keylenNumber of bytes in the key.
saltPoints to the bytes of the salt.
saltlenNumber of bytes in the salt.
infoPoints to the bytes of the informational data.
infolenNumber of bytes in the informational data.
Returns
Zero on success or -1 if outlen is out of range.
See Also
romulus_hkdf_extract(), romulus_hkdf_expand()
int romulus_hkdf_expand ( romulus_hkdf_state_t state,
const unsigned char *  info,
size_t  infolen,
unsigned char *  out,
size_t  outlen 
)

Expands key material using a Romulus-HKDF state.

Parameters
stateHKDF state to use to expand key material.
infoPoints to the bytes of the informational data.
infolenNumber of bytes in the informational data.
outPoints to the output buffer to receive the key material.
outlenNumber of bytes of key material to generate.
Returns
Zero on success or -1 if too many bytes have been generated so far. There is a limit of ROMULUS_HKDF_OUTPUT_SIZE * 255 bytes.
void romulus_hkdf_extract ( romulus_hkdf_state_t state,
const unsigned char *  key,
size_t  keylen,
const unsigned char *  salt,
size_t  saltlen 
)

Extracts entropy from a key and salt for Romulus-HKDF.

Parameters
stateHKDF state to be initialized.
keyPoints to the bytes of the key.
keylenNumber of bytes in the key.
saltPoints to the bytes of the salt.
saltlenNumber of bytes in the salt.
See Also
romulus_hkdf_expand(), romulus_hkdf()
void romulus_hkdf_free ( romulus_hkdf_state_t state)

Frees all sensitive material in a Romulus-HKDF state.

Parameters
statePoints to the HKDF state.