BearSSL
Data Structures | Typedefs | Functions
bearssl_prf.h File Reference
Include dependency graph for bearssl_prf.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  br_tls_prf_seed_chunk
 Type for a seed chunk. More...
 

Typedefs

typedef void(* br_tls_prf_impl) (void *dst, size_t len, const void *secret, size_t secret_len, const char *label, size_t seed_num, const br_tls_prf_seed_chunk *seed)
 

Functions

void br_tls10_prf (void *dst, size_t len, const void *secret, size_t secret_len, const char *label, size_t seed_num, const br_tls_prf_seed_chunk *seed)
 PRF implementation for TLS 1.0 and 1.1. More...
 
void br_tls12_sha256_prf (void *dst, size_t len, const void *secret, size_t secret_len, const char *label, size_t seed_num, const br_tls_prf_seed_chunk *seed)
 PRF implementation for TLS 1.2, with SHA-256. More...
 
void br_tls12_sha384_prf (void *dst, size_t len, const void *secret, size_t secret_len, const char *label, size_t seed_num, const br_tls_prf_seed_chunk *seed)
 PRF implementation for TLS 1.2, with SHA-384. More...
 

Detailed Description

The TLS PRF

The "PRF" is the pseudorandom function used internally during the SSL/TLS handshake, notably to expand negotiated shared secrets into the symmetric encryption keys that will be used to process the application data.

TLS 1.0 and 1.1 define a PRF that is based on both MD5 and SHA-1. This is implemented by the br_tls10_prf() function.

TLS 1.2 redefines the PRF, using an explicit hash function. The br_tls12_sha256_prf() and br_tls12_sha384_prf() functions apply that PRF with, respectively, SHA-256 and SHA-384. Most standard cipher suites rely on the SHA-256 based PRF, but some use SHA-384.

The PRF always uses as input three parameters: a "secret" (some bytes), a "label" (ASCII string), and a "seed" (again some bytes). An arbitrary output length can be produced. The "seed" is provided as an arbitrary number of binary chunks, that gets internally concatenated.

Typedef Documentation

◆ br_tls_prf_impl

typedef void(* br_tls_prf_impl) (void *dst, size_t len, const void *secret, size_t secret_len, const char *label, size_t seed_num, const br_tls_prf_seed_chunk *seed)

brief A convenient type name for a PRF implementation.

Parameters
dstdestination buffer.
lenoutput length (in bytes).
secretsecret value (key) for this computation.
secret_lenlength of "secret" (in bytes).
labelPRF label (zero-terminated ASCII string).
seed_numnumber of seed chunks.
seedseed chnks for this computation (usually non-secret).

Function Documentation

◆ br_tls10_prf()

void br_tls10_prf ( void *  dst,
size_t  len,
const void *  secret,
size_t  secret_len,
const char *  label,
size_t  seed_num,
const br_tls_prf_seed_chunk seed 
)

PRF implementation for TLS 1.0 and 1.1.

This PRF is the one specified by TLS 1.0 and 1.1. It internally uses MD5 and SHA-1.

Parameters
dstdestination buffer.
lenoutput length (in bytes).
secretsecret value (key) for this computation.
secret_lenlength of "secret" (in bytes).
labelPRF label (zero-terminated ASCII string).
seed_numnumber of seed chunks.
seedseed chnks for this computation (usually non-secret).

◆ br_tls12_sha256_prf()

void br_tls12_sha256_prf ( void *  dst,
size_t  len,
const void *  secret,
size_t  secret_len,
const char *  label,
size_t  seed_num,
const br_tls_prf_seed_chunk seed 
)

PRF implementation for TLS 1.2, with SHA-256.

This PRF is the one specified by TLS 1.2, when the underlying hash function is SHA-256.

Parameters
dstdestination buffer.
lenoutput length (in bytes).
secretsecret value (key) for this computation.
secret_lenlength of "secret" (in bytes).
labelPRF label (zero-terminated ASCII string).
seed_numnumber of seed chunks.
seedseed chnks for this computation (usually non-secret).

◆ br_tls12_sha384_prf()

void br_tls12_sha384_prf ( void *  dst,
size_t  len,
const void *  secret,
size_t  secret_len,
const char *  label,
size_t  seed_num,
const br_tls_prf_seed_chunk seed 
)

PRF implementation for TLS 1.2, with SHA-384.

This PRF is the one specified by TLS 1.2, when the underlying hash function is SHA-384.

Parameters
dstdestination buffer.
lenoutput length (in bytes).
secretsecret value (key) for this computation.
secret_lenlength of "secret" (in bytes).
labelPRF label (zero-terminated ASCII string).
seed_numnumber of seed chunks.
seedseed chnks for this computation (usually non-secret).