@@ -592,6 +592,39 @@ int main(int argc, char **argv)
592
592
}
593
593
};
594
594
595
+ /* Self-talk: A deserialized session can be serialized */
596
+ for (size_t i = 0 ; i < s2n_array_len (config_array ); i ++ ) {
597
+ DEFER_CLEANUP (struct s2n_connection * client_conn = s2n_connection_new (S2N_CLIENT ),
598
+ s2n_connection_ptr_free );
599
+ EXPECT_NOT_NULL (client_conn );
600
+ EXPECT_SUCCESS (s2n_connection_set_config (client_conn , config_array [i ]));
601
+
602
+ uint8_t serialized_data [S2N_SERIALIZED_CONN_TLS12_SIZE ] = { 0 };
603
+ for (size_t j = 0 ; j < 10 ; j ++ ) {
604
+ DEFER_CLEANUP (struct s2n_connection * server = s2n_connection_new (S2N_SERVER ),
605
+ s2n_connection_ptr_free );
606
+ EXPECT_NOT_NULL (server );
607
+ EXPECT_SUCCESS (s2n_connection_set_config (server , config_array [i ]));
608
+
609
+ DEFER_CLEANUP (struct s2n_test_io_stuffer_pair io_pair = { 0 }, s2n_io_stuffer_pair_free );
610
+ EXPECT_OK (s2n_io_stuffer_pair_init (& io_pair ));
611
+ EXPECT_OK (s2n_connections_set_io_stuffer_pair (client_conn , server , & io_pair ));
612
+
613
+ if (j == 0 ) {
614
+ EXPECT_SUCCESS (s2n_negotiate_test_server_and_client (server , client_conn ));
615
+ } else {
616
+ EXPECT_SUCCESS (s2n_connection_deserialize (server , serialized_data , sizeof (serialized_data )));
617
+ }
618
+
619
+ /* Can send and receive after either negotiating or deserializing */
620
+ EXPECT_OK (s2n_send_and_recv_test (server , client_conn ));
621
+ EXPECT_OK (s2n_send_and_recv_test (client_conn , server ));
622
+
623
+ memset (serialized_data , 0 , S2N_SERIALIZED_CONN_TLS12_SIZE );
624
+ EXPECT_SUCCESS (s2n_connection_serialize (server , serialized_data , sizeof (serialized_data )));
625
+ };
626
+ };
627
+
595
628
/* Self-talk: Test interaction between TLS1.2 session resumption and serialization */
596
629
{
597
630
DEFER_CLEANUP (struct s2n_config * resumption_config = s2n_config_new (), s2n_config_ptr_free );
0 commit comments