mirror of
https://github.com/ARMmbed/mbedtls.git
synced 2025-05-12 01:42:21 +08:00
Add mbedtls_ssl_ticket_rotate for ticket rotation.
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
This commit is contained in:
parent
196a1c4256
commit
a950938ff0
2
ChangeLog.d/mbedtls_ssl_ticket_rotate.txt
Normal file
2
ChangeLog.d/mbedtls_ssl_ticket_rotate.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Features
|
||||||
|
* Add mbedtls_ssl_ticket_rotate() for external ticket rotation.
|
@ -98,7 +98,7 @@ void mbedtls_ssl_ticket_init( mbedtls_ssl_ticket_context *ctx );
|
|||||||
* supported. Usually that means a 256-bit key.
|
* supported. Usually that means a 256-bit key.
|
||||||
*
|
*
|
||||||
* \note The lifetime of the keys is twice the lifetime of tickets.
|
* \note The lifetime of the keys is twice the lifetime of tickets.
|
||||||
* It is recommended to pick a reasonnable lifetime so as not
|
* It is recommended to pick a reasonable lifetime so as not
|
||||||
* to negate the benefits of forward secrecy.
|
* to negate the benefits of forward secrecy.
|
||||||
*
|
*
|
||||||
* \return 0 if successful,
|
* \return 0 if successful,
|
||||||
@ -109,6 +109,43 @@ int mbedtls_ssl_ticket_setup( mbedtls_ssl_ticket_context *ctx,
|
|||||||
mbedtls_cipher_type_t cipher,
|
mbedtls_cipher_type_t cipher,
|
||||||
uint32_t lifetime );
|
uint32_t lifetime );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Rotate session ticket encryption key to new specified key.
|
||||||
|
* Provides for external control of session ticket encryption
|
||||||
|
* key rotation, e.g. for synchronization between different
|
||||||
|
* machines. If this function is not used, or if not called
|
||||||
|
* before ticket lifetime expires, then a new session ticket
|
||||||
|
* encryption key is generated internally in order to avoid
|
||||||
|
* unbounded session ticket encryption key lifetimes.
|
||||||
|
*
|
||||||
|
* \param ctx Context to be set up
|
||||||
|
* \param name Session ticket encryption key name
|
||||||
|
* \param nlength Session ticket encryption key name length in bytes
|
||||||
|
* \param k Session ticket encryption key
|
||||||
|
* \param klength Session ticket encryption key length in bytes
|
||||||
|
* \param lifetime Tickets lifetime in seconds
|
||||||
|
* Recommended value: 86400 (one day).
|
||||||
|
*
|
||||||
|
* \note \c name and \c k are recommended to be cryptographically
|
||||||
|
* random data.
|
||||||
|
*
|
||||||
|
* \note \c nlength must match sizeof( ctx->name )
|
||||||
|
*
|
||||||
|
* \note \c klength must be sufficient for use by cipher specified
|
||||||
|
* to \c mbedtls_ssl_ticket_setup
|
||||||
|
*
|
||||||
|
* \note The lifetime of the keys is twice the lifetime of tickets.
|
||||||
|
* It is recommended to pick a reasonable lifetime so as not
|
||||||
|
* to negate the benefits of forward secrecy.
|
||||||
|
*
|
||||||
|
* \return 0 if successful,
|
||||||
|
* or a specific MBEDTLS_ERR_XXX error code
|
||||||
|
*/
|
||||||
|
int mbedtls_ssl_ticket_rotate( mbedtls_ssl_ticket_context *ctx,
|
||||||
|
const unsigned char *name, size_t nlength,
|
||||||
|
const unsigned char *k, size_t klength,
|
||||||
|
uint32_t lifetime );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Implementation of the ticket write callback
|
* \brief Implementation of the ticket write callback
|
||||||
*
|
*
|
||||||
|
@ -121,6 +121,35 @@ static int ssl_ticket_update_keys( mbedtls_ssl_ticket_context *ctx )
|
|||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Rotate active session ticket encryption key
|
||||||
|
*/
|
||||||
|
int mbedtls_ssl_ticket_rotate( mbedtls_ssl_ticket_context *ctx,
|
||||||
|
const unsigned char *name, size_t nlength,
|
||||||
|
const unsigned char *k, size_t klength,
|
||||||
|
uint32_t lifetime )
|
||||||
|
{
|
||||||
|
const unsigned char idx = 1 - ctx->active;
|
||||||
|
mbedtls_ssl_ticket_key * const key = ctx->keys + idx;
|
||||||
|
const int bitlen = mbedtls_cipher_get_key_bitlen( &key->ctx );
|
||||||
|
int ret;
|
||||||
|
if( nlength < TICKET_KEY_NAME_BYTES || klength * 8 < (size_t)bitlen )
|
||||||
|
return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA );
|
||||||
|
|
||||||
|
/* With GCM and CCM, same context can encrypt & decrypt */
|
||||||
|
ret = mbedtls_cipher_setkey( &key->ctx, k, bitlen, MBEDTLS_ENCRYPT );
|
||||||
|
if( ret != 0 )
|
||||||
|
return( ret );
|
||||||
|
|
||||||
|
ctx->active = idx;
|
||||||
|
ctx->ticket_lifetime = lifetime;
|
||||||
|
memcpy( key->name, name, TICKET_KEY_NAME_BYTES );
|
||||||
|
#if defined(MBEDTLS_HAVE_TIME)
|
||||||
|
key->generation_time = (uint32_t) mbedtls_time( NULL );
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup context for actual use
|
* Setup context for actual use
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user