Start adding ticket keys (only key_name for now)
diff --git a/library/ssl_srv.c b/library/ssl_srv.c
index 5b7db17..1178309 100644
--- a/library/ssl_srv.c
+++ b/library/ssl_srv.c
@@ -165,7 +165,10 @@
unsigned char *p = start;
size_t clear_len, enc_len;
- memset( p, 0, 16 ); // TODO: key_name
+ if( ssl->ticket_keys == NULL )
+ return( POLARSSL_ERR_SSL_BAD_INPUT_DATA );
+
+ memcpy( p, ssl->ticket_keys->key_name, 16 );
p += 16;
memset( p, 0, 16 ); // TODO: iv
@@ -208,7 +211,7 @@
const unsigned char *mac;
size_t enc_len, clear_len;
- if( len < 34 )
+ if( len < 34 || ssl->ticket_keys == NULL )
return( POLARSSL_ERR_SSL_BAD_INPUT_DATA );
enc_len = ( enc_len_p[0] << 8 ) | enc_len_p[1];
@@ -217,8 +220,8 @@
if( len != enc_len + 66 )
return( POLARSSL_ERR_SSL_BAD_INPUT_DATA );
- // TODO: check key_name
- (void) key_name;
+ if( memcmp( key_name, ssl->ticket_keys->key_name, 16 ) != 0 )
+ return( POLARSSL_ERR_SSL_BAD_INPUT_DATA );
// TODO: check hmac
(void) mac;
diff --git a/library/ssl_tls.c b/library/ssl_tls.c
index f7b9bd9..f4d6e24 100644
--- a/library/ssl_tls.c
+++ b/library/ssl_tls.c
@@ -2973,6 +2973,28 @@
}
/*
+ * Allocate and initialize ticket keys
+ */
+static int ssl_ticket_keys_init( ssl_context *ssl )
+{
+ int ret;
+ ssl_ticket_keys *tkeys;
+
+ if( ssl->ticket_keys != NULL )
+ return( 0 );
+
+ if( ( tkeys = polarssl_malloc( sizeof( ssl_ticket_keys ) ) ) == NULL )
+ return( POLARSSL_ERR_SSL_MALLOC_FAILED );
+
+ if( ( ret = ssl->f_rng( ssl->p_rng, tkeys->key_name, 16 ) ) != 0 )
+ return( ret );
+
+ ssl->ticket_keys = tkeys;
+
+ return( 0 );
+}
+
+/*
* SSL set accessors
*/
void ssl_set_endpoint( ssl_context *ssl, int endpoint )
@@ -3232,7 +3254,13 @@
{
ssl->session_tickets = use_tickets;
- return( 0 );
+ if( ssl->endpoint == SSL_IS_CLIENT )
+ return( 0 );
+
+ if( ssl->f_rng == NULL )
+ return( POLARSSL_ERR_SSL_BAD_INPUT_DATA );
+
+ return( ssl_ticket_keys_init( ssl ) );
}
/*
@@ -3671,6 +3699,8 @@
polarssl_free( ssl->session );
}
+ polarssl_free( ssl->ticket_keys );
+
if ( ssl->hostname != NULL)
{
memset( ssl->hostname, 0, ssl->hostname_len );