@@ -254,7 +254,7 @@ int main(int argc, char **argv)
254
254
struct s2n_local_sig_schemes_context local_context = { 0 };
255
255
EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
256
256
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 ,
258
258
test_schemes , s2n_array_len (test_schemes )));
259
259
260
260
/* Test: ECDSA */
@@ -301,7 +301,7 @@ int main(int argc, char **argv)
301
301
struct s2n_local_sig_schemes_context local_context = { 0 };
302
302
EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
303
303
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 ,
305
305
test_schemes , s2n_array_len (test_schemes )));
306
306
307
307
/* Test: ECDSA */
@@ -348,7 +348,7 @@ int main(int argc, char **argv)
348
348
349
349
struct s2n_local_sig_schemes_context local_context = { 0 };
350
350
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 ,
352
352
& expected , 1 ));
353
353
354
354
EXPECT_OK (s2n_signature_algorithm_select (conn ));
@@ -367,7 +367,7 @@ int main(int argc, char **argv)
367
367
368
368
struct s2n_local_sig_schemes_context local_context = { 0 };
369
369
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 ,
371
371
& expected , 1 ));
372
372
373
373
EXPECT_OK (s2n_signature_algorithm_select (conn ));
@@ -398,7 +398,7 @@ int main(int argc, char **argv)
398
398
{
399
399
EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
400
400
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 ,
402
402
reversed_order , s2n_array_len (reversed_order )));
403
403
404
404
EXPECT_OK (s2n_signature_algorithm_select (conn ));
@@ -409,7 +409,7 @@ int main(int argc, char **argv)
409
409
{
410
410
EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
411
411
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 ,
413
413
order , s2n_array_len (order )));
414
414
415
415
EXPECT_OK (s2n_signature_algorithm_select (conn ));
@@ -422,7 +422,7 @@ int main(int argc, char **argv)
422
422
{
423
423
EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
424
424
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 ,
426
426
order , s2n_array_len (order )));
427
427
428
428
EXPECT_OK (s2n_signature_algorithm_select (conn ));
@@ -444,7 +444,7 @@ int main(int argc, char **argv)
444
444
struct s2n_local_sig_schemes_context local_context = { 0 };
445
445
EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
446
446
& 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 ,
448
448
& invalid , 1 ));
449
449
450
450
/* Fails for TLS1.3 */
@@ -471,7 +471,7 @@ int main(int argc, char **argv)
471
471
struct s2n_local_sig_schemes_context local_context = { 0 };
472
472
EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
473
473
& 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 ,
475
475
& invalid , 1 ));
476
476
477
477
/* Fails for TLS1.2 */
@@ -505,7 +505,7 @@ int main(int argc, char **argv)
505
505
struct s2n_local_sig_schemes_context local_context = { 0 };
506
506
EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
507
507
& 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 ,
509
509
& invalid , 1 ));
510
510
511
511
/* Fails with SHA1 */
@@ -536,7 +536,7 @@ int main(int argc, char **argv)
536
536
struct s2n_local_sig_schemes_context local_context = { 0 };
537
537
EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
538
538
& 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 ,
540
540
& invalid , 1 ));
541
541
542
542
/* Fails for pkcs1 */
@@ -563,7 +563,7 @@ int main(int argc, char **argv)
563
563
struct s2n_local_sig_schemes_context local_context = { 0 };
564
564
EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
565
565
& 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 ,
567
567
& scheme , 1 ));
568
568
569
569
/* Fails for default config with no certs */
@@ -594,7 +594,7 @@ int main(int argc, char **argv)
594
594
struct s2n_local_sig_schemes_context local_context = { 0 };
595
595
EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
596
596
& 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 ,
598
598
& scheme , 1 ));
599
599
600
600
/* Fails for default config with no certs */
@@ -634,7 +634,7 @@ int main(int argc, char **argv)
634
634
/* Fails with wrong curve (256) */
635
635
EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
636
636
& 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 ,
638
638
& ecdsa256 , 1 ));
639
639
EXPECT_ERROR_WITH_ERRNO (
640
640
s2n_signature_algorithm_select (conn ),
@@ -643,7 +643,7 @@ int main(int argc, char **argv)
643
643
/* Succeeds with right curve (384) */
644
644
EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
645
645
& 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 ,
647
647
& ecdsa384 , 1 ));
648
648
EXPECT_OK (s2n_signature_algorithm_select (conn ));
649
649
};
@@ -673,7 +673,7 @@ int main(int argc, char **argv)
673
673
struct s2n_local_sig_schemes_context local_context = { 0 };
674
674
EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
675
675
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 ,
677
677
schemes , s2n_array_len (schemes )));
678
678
679
679
EXPECT_OK (s2n_signature_algorithm_select (conn ));
@@ -702,7 +702,7 @@ int main(int argc, char **argv)
702
702
struct s2n_local_sig_schemes_context local_context = { 0 };
703
703
EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
704
704
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 ,
706
706
peer_schemes , s2n_array_len (peer_schemes )));
707
707
708
708
EXPECT_OK (s2n_signature_algorithm_select (conn ));
@@ -852,7 +852,7 @@ int main(int argc, char **argv)
852
852
struct s2n_local_sig_schemes_context local_context = { 0 };
853
853
EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
854
854
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 ,
856
856
peer_schemes , s2n_array_len (peer_schemes )));
857
857
858
858
/* ECDSA */
@@ -893,7 +893,7 @@ int main(int argc, char **argv)
893
893
struct s2n_local_sig_schemes_context local_context = { 0 };
894
894
EXPECT_OK (s2n_test_set_local_sig_schemes (conn , & local_context ,
895
895
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 ,
897
897
peer_schemes , s2n_array_len (peer_schemes )));
898
898
899
899
EXPECT_OK (s2n_signature_algorithm_select (conn ));
@@ -1056,6 +1056,30 @@ int main(int argc, char **argv)
1056
1056
};
1057
1057
};
1058
1058
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
+
1059
1083
/* Test: send and receive default signature preferences */
1060
1084
for (size_t i = S2N_TLS10 ; i < S2N_TLS13 ; i ++ ) {
1061
1085
DEFER_CLEANUP (struct s2n_connection * conn = s2n_connection_new (S2N_CLIENT ),
@@ -1162,7 +1186,7 @@ int main(int argc, char **argv)
1162
1186
EXPECT_SUCCESS (s2n_connection_set_config (conn , config ));
1163
1187
1164
1188
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 ,
1166
1190
schemes , s2n_array_len (schemes )));
1167
1191
1168
1192
if (s2n_is_rsa_pss_signing_supported ()) {
@@ -1187,7 +1211,7 @@ int main(int argc, char **argv)
1187
1211
1188
1212
/* Invalid (PKCS1 not allowed by TLS1.3) */
1189
1213
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 ,
1191
1215
peer_schemes , s2n_array_len (peer_schemes )));
1192
1216
1193
1217
/* Both PKCS1 and PSS supported */
0 commit comments