From f457293b57917aa9848af62d4d93ee7a3bbb90ad Mon Sep 17 00:00:00 2001 From: Jarno Lamsa Date: Wed, 29 May 2019 15:41:21 +0300 Subject: [PATCH] Serialize/deserialize for ssl_server2 --- programs/ssl/ssl_server2.c | 48 +++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/programs/ssl/ssl_server2.c b/programs/ssl/ssl_server2.c index f09b4041c..7af5c68ae 100644 --- a/programs/ssl/ssl_server2.c +++ b/programs/ssl/ssl_server2.c @@ -3338,7 +3338,53 @@ data_exchange: ret = 0; /* - * 7b. Continue doing data exchanges? + * 7b. Simulate serialize/deserialize and go back to data exchange + */ + if( opt.serialize != 0) + { + size_t len; + unsigned char *buf = NULL; + + opt.serialize = 0; + mbedtls_printf( " Serializing live connection..." ); + + if( ( ret = mbedtls_ssl_context_save( &ssl, NULL, 0, &len) ) != MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ) + { + mbedtls_printf( " failed\n ! mbedtls_ssl_context_save returned -0x%x\n\n", -ret ); + + goto exit; + } + + if( ( buf = mbedtls_calloc(1, len) ) == NULL ) + { + mbedtls_printf( " failed\n ! Couldn't allocate buffer for serialized context" ); + + goto exit; + } + + if( ( ret = mbedtls_ssl_context_save( &ssl, buf, len, &len ) ) != 0 ) + { + mbedtls_printf( "failed\n ! mbedtls_ssl_context_save returned -0x%x\n\n", -ret ); + + goto exit; + } + + mbedtls_ssl_free( &ssl ); + + mbedtls_printf( " Deserializing connection..." ); + + mbedtls_ssl_init( &ssl ); + + if( ( ret = mbedtls_ssl_context_load( &ssl, buf, len ) ) != 0 ) + { + mbedtls_printf( "failed\n ! mbedtls_ssl_context_load returned -0x%x\n\n", -ret ); + + goto exit; + } + } + + /* + * 7c. Continue doing data exchanges? */ if( --exchanges_left > 0 ) goto data_exchange;