Merged support for ECDH-RSA / ECDH-ECDSA key exchanges and ciphersuites
diff --git a/ChangeLog b/ChangeLog
index 84115d4..b0955e7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,7 @@
* Support for adhering to client ciphersuite order preference
(POLARSSL_SSL_SRV_RESPECT_CLIENT_PREFERENCE)
* Support for Curve25519
+ * Support for ECDH-RSA and ECDH-ECDSA key exchanges and ciphersuites
Changes
* gen_prime() speedup
@@ -21,6 +22,8 @@
* SSL now gracefully handles missing RNG
* Missing defines / cases for RSA_PSK key exchange
* crypt_and_hash app checks MAC before final decryption
+ * Potential memory leak in ssl_ticket_keys_init()
+ * Memory leak in benchmark application
= PolarSSL 1.3.2 released on 2013-11-04
Features
diff --git a/library/cipher.c b/library/cipher.c
index f0a770a..bfb229e 100644
--- a/library/cipher.c
+++ b/library/cipher.c
@@ -241,13 +241,13 @@
{
int ret;
- *olen = 0;
-
if( NULL == ctx || NULL == ctx->cipher_info || NULL == olen )
{
return POLARSSL_ERR_CIPHER_BAD_INPUT_DATA;
}
+ *olen = 0;
+
if( ctx->cipher_info->mode == POLARSSL_MODE_ECB )
{
if( ilen != cipher_get_block_size( ctx ) )
diff --git a/library/ssl_tls.c b/library/ssl_tls.c
index ce05d7a..9abc9be 100644
--- a/library/ssl_tls.c
+++ b/library/ssl_tls.c
@@ -3455,17 +3455,24 @@
return( POLARSSL_ERR_SSL_MALLOC_FAILED );
if( ( ret = ssl->f_rng( ssl->p_rng, tkeys->key_name, 16 ) ) != 0 )
+ {
+ polarssl_free( tkeys );
return( ret );
+ }
if( ( ret = ssl->f_rng( ssl->p_rng, buf, 16 ) ) != 0 ||
( ret = aes_setkey_enc( &tkeys->enc, buf, 128 ) ) != 0 ||
( ret = aes_setkey_dec( &tkeys->dec, buf, 128 ) ) != 0 )
{
- return( ret );
+ polarssl_free( tkeys );
+ return( ret );
}
if( ( ret = ssl->f_rng( ssl->p_rng, tkeys->mac_key, 16 ) ) != 0 )
+ {
+ polarssl_free( tkeys );
return( ret );
+ }
ssl->ticket_keys = tkeys;
@@ -3823,7 +3830,7 @@
#if defined(POLARSSL_SSL_MAX_FRAGMENT_LENGTH)
int ssl_set_max_frag_len( ssl_context *ssl, unsigned char mfl_code )
{
- if( mfl_code >= sizeof( mfl_code_to_length ) ||
+ if( mfl_code >= SSL_MAX_FRAG_LEN_INVALID ||
mfl_code_to_length[mfl_code] > SSL_MAX_CONTENT_LEN )
{
return( POLARSSL_ERR_SSL_BAD_INPUT_DATA );
diff --git a/programs/test/benchmark.c b/programs/test/benchmark.c
index 34219c5..f91a2d4 100644
--- a/programs/test/benchmark.c
+++ b/programs/test/benchmark.c
@@ -298,6 +298,8 @@
TIME_AND_TSC( title,
gcm_crypt_and_tag( &gcm, GCM_ENCRYPT, BUFSIZE, tmp,
12, NULL, 0, buf, buf, 16, tmp ) );
+
+ gcm_free( &gcm );
}
}
#endif