@@ -254,7 +254,7 @@ int main(int argc, char **argv)
254254 struct s2n_local_sig_schemes_context local_context = { 0 };
255255 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
256256 test_schemes , s2n_array_len (test_schemes )));
257- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .server_sig_hash_algs ,
257+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
258258 test_schemes , s2n_array_len (test_schemes )));
259259
260260 /* Test: ECDSA */
@@ -301,7 +301,7 @@ int main(int argc, char **argv)
301301 struct s2n_local_sig_schemes_context local_context = { 0 };
302302 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
303303 test_schemes , s2n_array_len (test_schemes )));
304- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .client_sig_hash_algs ,
304+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
305305 test_schemes , s2n_array_len (test_schemes )));
306306
307307 /* Test: ECDSA */
@@ -348,7 +348,7 @@ int main(int argc, char **argv)
348348
349349 struct s2n_local_sig_schemes_context local_context = { 0 };
350350 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context , & expected , 1 ));
351- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .server_sig_hash_algs ,
351+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
352352 & expected , 1 ));
353353
354354 EXPECT_OK (s2n_signature_algorithm_select (conn ));
@@ -367,7 +367,7 @@ int main(int argc, char **argv)
367367
368368 struct s2n_local_sig_schemes_context local_context = { 0 };
369369 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context , & expected , 1 ));
370- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .server_sig_hash_algs ,
370+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
371371 & expected , 1 ));
372372
373373 EXPECT_OK (s2n_signature_algorithm_select (conn ));
@@ -398,7 +398,7 @@ int main(int argc, char **argv)
398398 {
399399 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
400400 order , s2n_array_len (order )));
401- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .client_sig_hash_algs ,
401+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
402402 reversed_order , s2n_array_len (reversed_order )));
403403
404404 EXPECT_OK (s2n_signature_algorithm_select (conn ));
@@ -409,7 +409,7 @@ int main(int argc, char **argv)
409409 {
410410 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
411411 reversed_order , s2n_array_len (reversed_order )));
412- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .client_sig_hash_algs ,
412+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
413413 order , s2n_array_len (order )));
414414
415415 EXPECT_OK (s2n_signature_algorithm_select (conn ));
@@ -422,7 +422,7 @@ int main(int argc, char **argv)
422422 {
423423 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
424424 order , s2n_array_len (order )));
425- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .client_sig_hash_algs ,
425+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
426426 order , s2n_array_len (order )));
427427
428428 EXPECT_OK (s2n_signature_algorithm_select (conn ));
@@ -444,7 +444,7 @@ int main(int argc, char **argv)
444444 struct s2n_local_sig_schemes_context local_context = { 0 };
445445 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
446446 & invalid , 1 ));
447- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .client_sig_hash_algs ,
447+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
448448 & invalid , 1 ));
449449
450450 /* Fails for TLS1.3 */
@@ -471,7 +471,7 @@ int main(int argc, char **argv)
471471 struct s2n_local_sig_schemes_context local_context = { 0 };
472472 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
473473 & invalid , 1 ));
474- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .client_sig_hash_algs ,
474+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
475475 & invalid , 1 ));
476476
477477 /* Fails for TLS1.2 */
@@ -505,7 +505,7 @@ int main(int argc, char **argv)
505505 struct s2n_local_sig_schemes_context local_context = { 0 };
506506 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
507507 & invalid , 1 ));
508- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .client_sig_hash_algs ,
508+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
509509 & invalid , 1 ));
510510
511511 /* Fails with SHA1 */
@@ -536,7 +536,7 @@ int main(int argc, char **argv)
536536 struct s2n_local_sig_schemes_context local_context = { 0 };
537537 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
538538 & invalid , 1 ));
539- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .client_sig_hash_algs ,
539+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
540540 & invalid , 1 ));
541541
542542 /* Fails for pkcs1 */
@@ -563,7 +563,7 @@ int main(int argc, char **argv)
563563 struct s2n_local_sig_schemes_context local_context = { 0 };
564564 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
565565 & scheme , 1 ));
566- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .server_sig_hash_algs ,
566+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
567567 & scheme , 1 ));
568568
569569 /* Fails for default config with no certs */
@@ -594,7 +594,7 @@ int main(int argc, char **argv)
594594 struct s2n_local_sig_schemes_context local_context = { 0 };
595595 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
596596 & scheme , 1 ));
597- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .server_sig_hash_algs ,
597+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
598598 & scheme , 1 ));
599599
600600 /* Fails for default config with no certs */
@@ -634,7 +634,7 @@ int main(int argc, char **argv)
634634 /* Fails with wrong curve (256) */
635635 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
636636 & ecdsa256 , 1 ));
637- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .client_sig_hash_algs ,
637+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
638638 & ecdsa256 , 1 ));
639639 EXPECT_ERROR_WITH_ERRNO (
640640 s2n_signature_algorithm_select (conn ),
@@ -643,7 +643,7 @@ int main(int argc, char **argv)
643643 /* Succeeds with right curve (384) */
644644 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
645645 & ecdsa384 , 1 ));
646- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .client_sig_hash_algs ,
646+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
647647 & ecdsa384 , 1 ));
648648 EXPECT_OK (s2n_signature_algorithm_select (conn ));
649649 };
@@ -673,7 +673,7 @@ int main(int argc, char **argv)
673673 struct s2n_local_sig_schemes_context local_context = { 0 };
674674 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
675675 schemes , s2n_array_len (schemes )));
676- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .server_sig_hash_algs ,
676+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
677677 schemes , s2n_array_len (schemes )));
678678
679679 EXPECT_OK (s2n_signature_algorithm_select (conn ));
@@ -702,7 +702,7 @@ int main(int argc, char **argv)
702702 struct s2n_local_sig_schemes_context local_context = { 0 };
703703 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
704704 local_schemes , s2n_array_len (local_schemes )));
705- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .client_sig_hash_algs ,
705+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
706706 peer_schemes , s2n_array_len (peer_schemes )));
707707
708708 EXPECT_OK (s2n_signature_algorithm_select (conn ));
@@ -852,7 +852,7 @@ int main(int argc, char **argv)
852852 struct s2n_local_sig_schemes_context local_context = { 0 };
853853 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
854854 local_schemes , s2n_array_len (local_schemes )));
855- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .client_sig_hash_algs ,
855+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
856856 peer_schemes , s2n_array_len (peer_schemes )));
857857
858858 /* ECDSA */
@@ -893,7 +893,7 @@ int main(int argc, char **argv)
893893 struct s2n_local_sig_schemes_context local_context = { 0 };
894894 EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
895895 local_schemes , s2n_array_len (local_schemes )));
896- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .client_sig_hash_algs ,
896+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
897897 peer_schemes , s2n_array_len (peer_schemes )));
898898
899899 EXPECT_OK (s2n_signature_algorithm_select (conn ));
@@ -1056,6 +1056,30 @@ int main(int argc, char **argv)
10561056 };
10571057 };
10581058
1059+ /* Test: Ensure that the maximum number of permitted signature schemes can be received. */
1060+ const uint16_t max_sig_schemes = TLS_SIGNATURE_SCHEME_LIST_MAX_LEN ;
1061+ for (uint16_t count = max_sig_schemes - 1 ; count <= max_sig_schemes + 1 ; count ++ ) {
1062+ DEFER_CLEANUP (struct s2n_connection * conn = s2n_connection_new (S2N_CLIENT ),
1063+ s2n_connection_ptr_free );
1064+ EXPECT_NOT_NULL (conn );
1065+
1066+ DEFER_CLEANUP (struct s2n_stuffer input = { 0 }, s2n_stuffer_free );
1067+ EXPECT_SUCCESS (s2n_stuffer_growable_alloc (& input , 0 ));
1068+
1069+ uint16_t sig_scheme_list_size = count * TLS_SIGNATURE_SCHEME_LEN ;
1070+ EXPECT_SUCCESS (s2n_stuffer_write_uint16 (& input , sig_scheme_list_size ));
1071+ for (size_t i = 0 ; i < count ; i ++ ) {
1072+ EXPECT_SUCCESS (s2n_stuffer_write_uint16 (& input , s2n_rsa_pkcs1_sha256 .iana_value ));
1073+ }
1074+
1075+ int ret = s2n_recv_supported_sig_scheme_list (& input , & conn -> handshake_params .peer_sig_scheme_list );
1076+ if (count <= max_sig_schemes ) {
1077+ EXPECT_SUCCESS (ret );
1078+ } else {
1079+ EXPECT_FAILURE_WITH_ERRNO (ret , S2N_ERR_TOO_MANY_SIGNATURE_SCHEMES );
1080+ }
1081+ }
1082+
10591083 /* Test: send and receive default signature preferences */
10601084 for (size_t i = S2N_TLS10 ; i < S2N_TLS13 ; i ++ ) {
10611085 DEFER_CLEANUP (struct s2n_connection * conn = s2n_connection_new (S2N_CLIENT ),
@@ -1162,7 +1186,7 @@ int main(int argc, char **argv)
11621186 EXPECT_SUCCESS (s2n_connection_set_config (conn , config ));
11631187
11641188 const struct s2n_signature_scheme * schemes [] = { & s2n_rsa_pss_rsae_sha256 };
1165- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .server_sig_hash_algs ,
1189+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
11661190 schemes , s2n_array_len (schemes )));
11671191
11681192 if (s2n_is_rsa_pss_signing_supported ()) {
@@ -1187,7 +1211,7 @@ int main(int argc, char **argv)
11871211
11881212 /* Invalid (PKCS1 not allowed by TLS1.3) */
11891213 const struct s2n_signature_scheme * peer_schemes [] = { & s2n_rsa_pkcs1_sha224 };
1190- EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .client_sig_hash_algs ,
1214+ EXPECT_OK (s2n_test_set_peer_sig_schemes (& conn -> handshake_params .peer_sig_scheme_list ,
11911215 peer_schemes , s2n_array_len (peer_schemes )));
11921216
11931217 /* Both PKCS1 and PSS supported */
0 commit comments