Added implementation of keying material export (RFC 5705) (API for PRF implementations changed, to handle chunked seeds).
This commit is contained in:
parent
2b738493bd
commit
ea95d8264c
15 changed files with 256 additions and 77 deletions
|
|
@ -2075,6 +2075,41 @@ void br_ssl_engine_close(br_ssl_engine_context *cc);
|
|||
*/
|
||||
int br_ssl_engine_renegotiate(br_ssl_engine_context *cc);
|
||||
|
||||
/**
|
||||
* \brief Export key material from a connected SSL engine (RFC 5705).
|
||||
*
|
||||
* This calls compute a secret key of arbitrary length from the master
|
||||
* secret of a connected SSL engine. If the provided context is not
|
||||
* currently in "application data" state (initial handshake is not
|
||||
* finished, another handshake is ongoing, or the connection failed or
|
||||
* was closed), then this function returns 0. Otherwise, a secret key of
|
||||
* length `len` bytes is computed and written in the buffer pointed to
|
||||
* by `dst`, and 1 is returned.
|
||||
*
|
||||
* The computed key follows the specification described in RFC 5705.
|
||||
* That RFC includes two key computations, with and without a "context
|
||||
* value". If `context` is `NULL`, then the variant without context is
|
||||
* used; otherwise, the `context_len` bytes located at the address
|
||||
* pointed to by `context` are used in the computation. Note that it
|
||||
* is possible to have a "with context" key with a context length of
|
||||
* zero bytes, by setting `context` to a non-`NULL` value but
|
||||
* `context_len` to 0.
|
||||
*
|
||||
* When context bytes are used, the context length MUST NOT exceed
|
||||
* 65535 bytes.
|
||||
*
|
||||
* \param cc SSL engine context.
|
||||
* \param dst destination buffer for exported key.
|
||||
* \param len exported key length (in bytes).
|
||||
* \param label disambiguation label.
|
||||
* \param context context value (or `NULL`).
|
||||
* \param context_len context length (in bytes).
|
||||
* \return 1 on success, 0 on error.
|
||||
*/
|
||||
int br_ssl_key_export(br_ssl_engine_context *cc,
|
||||
void *dst, size_t len, const char *label,
|
||||
const void *context, size_t context_len);
|
||||
|
||||
/*
|
||||
* Pre-declaration for the SSL client context.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue