wpa_supplicant / hostapd  2.5
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Macros | Functions
sha256.h File Reference

SHA256 hash implementation and interface functions. More...

Go to the source code of this file.

Macros

#define SHA256_MAC_LEN   32
 

Functions

int hmac_sha256_vector (const u8 *key, size_t key_len, size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
 HMAC-SHA256 over data vector (RFC 2104) More...
 
int hmac_sha256 (const u8 *key, size_t key_len, const u8 *data, size_t data_len, u8 *mac)
 HMAC-SHA256 over data buffer (RFC 2104) More...
 
void sha256_prf (const u8 *key, size_t key_len, const char *label, const u8 *data, size_t data_len, u8 *buf, size_t buf_len)
 SHA256-based Pseudo-Random Function (IEEE 802.11r, 8.5.1.5.2) More...
 
void sha256_prf_bits (const u8 *key, size_t key_len, const char *label, const u8 *data, size_t data_len, u8 *buf, size_t buf_len_bits)
 IEEE Std 802.11-2012, 11.6.1.7.2 Key derivation function. More...
 
void tls_prf_sha256 (const u8 *secret, size_t secret_len, const char *label, const u8 *seed, size_t seed_len, u8 *out, size_t outlen)
 Pseudo-Random Function for TLS v1.2 (P_SHA256, RFC 5246) More...
 
int hmac_sha256_kdf (const u8 *secret, size_t secret_len, const char *label, const u8 *seed, size_t seed_len, u8 *out, size_t outlen)
 HMAC-SHA256 based KDF (RFC 5295) More...
 

Detailed Description

SHA256 hash implementation and interface functions.

Function Documentation

int hmac_sha256 ( const u8 *  key,
size_t  key_len,
const u8 *  data,
size_t  data_len,
u8 *  mac 
)

HMAC-SHA256 over data buffer (RFC 2104)

Parameters
keyKey for HMAC operations
key_lenLength of the key in bytes
dataPointers to the data area
data_lenLength of the data area
macBuffer for the hash (32 bytes)
Returns
0 on success, -1 on failure
int hmac_sha256_kdf ( const u8 *  secret,
size_t  secret_len,
const char *  label,
const u8 *  seed,
size_t  seed_len,
u8 *  out,
size_t  outlen 
)

HMAC-SHA256 based KDF (RFC 5295)

Parameters
secretKey for KDF
secret_lenLength of the key in bytes
labelA unique label for each purpose of the KDF
seedSeed value to bind into the key
seed_lenLength of the seed
outBuffer for the generated pseudo-random key
outlenNumber of bytes of key to generate
Returns
0 on success, -1 on failure.

This function is used to derive new, cryptographically separate keys from a given key in ERP. This KDF is defined in RFC 5295, Chapter 3.1.2.

int hmac_sha256_vector ( const u8 *  key,
size_t  key_len,
size_t  num_elem,
const u8 *  addr[],
const size_t *  len,
u8 *  mac 
)

HMAC-SHA256 over data vector (RFC 2104)

Parameters
keyKey for HMAC operations
key_lenLength of the key in bytes
num_elemNumber of elements in the data vector
addrPointers to the data areas
lenLengths of the data blocks
macBuffer for the hash (32 bytes)
Returns
0 on success, -1 on failure
void sha256_prf ( const u8 *  key,
size_t  key_len,
const char *  label,
const u8 *  data,
size_t  data_len,
u8 *  buf,
size_t  buf_len 
)

SHA256-based Pseudo-Random Function (IEEE 802.11r, 8.5.1.5.2)

Parameters
keyKey for PRF
key_lenLength of the key in bytes
labelA unique label for each purpose of the PRF
dataExtra data to bind into the key
data_lenLength of the data
bufBuffer for the generated pseudo-random key
buf_lenNumber of bytes of key to generate

This function is used to derive new, cryptographically separate keys from a given key.

void sha256_prf_bits ( const u8 *  key,
size_t  key_len,
const char *  label,
const u8 *  data,
size_t  data_len,
u8 *  buf,
size_t  buf_len_bits 
)

IEEE Std 802.11-2012, 11.6.1.7.2 Key derivation function.

Parameters
keyKey for KDF
key_lenLength of the key in bytes
labelA unique label for each purpose of the PRF
dataExtra data to bind into the key
data_lenLength of the data
bufBuffer for the generated pseudo-random key
buf_lenNumber of bits of key to generate

This function is used to derive new, cryptographically separate keys from a given key. If the requested buf_len is not divisible by eight, the least significant 1-7 bits of the last octet in the output are not part of the requested output.

void tls_prf_sha256 ( const u8 *  secret,
size_t  secret_len,
const char *  label,
const u8 *  seed,
size_t  seed_len,
u8 *  out,
size_t  outlen 
)

Pseudo-Random Function for TLS v1.2 (P_SHA256, RFC 5246)

Parameters
secretKey for PRF
secret_lenLength of the key in bytes
labelA unique label for each purpose of the PRF
seedSeed value to bind into the key
seed_lenLength of the seed
outBuffer for the generated pseudo-random key
outlenNumber of bytes of key to generate
Returns
0 on success, -1 on failure.

This function is used to derive new, cryptographically separate keys from a given key in TLS. This PRF is defined in RFC 2246, Chapter 5.