diff --git a/library/ssl_tls12_client.c b/library/ssl_tls12_client.c index 3388f10d1b..3f2ef31485 100644 --- a/library/ssl_tls12_client.c +++ b/library/ssl_tls12_client.c @@ -1644,7 +1644,12 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) } } - if( ssl->state == MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC ) + /* + * mbedtls_ssl_derive_keys() has to be called after the parsing of the + * extensions. It sets the transform data for the resumed session which in + * case of DTLS includes the server CID extracted from the CID extension. + */ + if( ssl->handshake->resume ) { if( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) {