diff options
Diffstat (limited to 'src/regress/lib')
| -rw-r--r-- | src/regress/lib/libssl/tlsext/tlsexttest.c | 84 |
1 files changed, 82 insertions, 2 deletions
diff --git a/src/regress/lib/libssl/tlsext/tlsexttest.c b/src/regress/lib/libssl/tlsext/tlsexttest.c index 1b2820d78b..63c64e9411 100644 --- a/src/regress/lib/libssl/tlsext/tlsexttest.c +++ b/src/regress/lib/libssl/tlsext/tlsexttest.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: tlsexttest.c,v 1.15 2017/08/27 02:58:04 doug Exp $ */ | 1 | /* $OpenBSD: tlsexttest.c,v 1.16 2017/08/29 17:24:59 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2017 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2017 Joel Sing <jsing@openbsd.org> |
| 4 | * Copyright (c) 2017 Doug Hogan <doug@openbsd.org> | 4 | * Copyright (c) 2017 Doug Hogan <doug@openbsd.org> |
| @@ -198,6 +198,10 @@ test_tlsext_alpn_clienthello(void) | |||
| 198 | FAIL("failed to parse ALPN"); | 198 | FAIL("failed to parse ALPN"); |
| 199 | goto err; | 199 | goto err; |
| 200 | } | 200 | } |
| 201 | if (CBS_len(&cbs) != 0) { | ||
| 202 | FAIL("extension data remaining"); | ||
| 203 | goto err; | ||
| 204 | } | ||
| 201 | 205 | ||
| 202 | if (ssl->internal->alpn_client_proto_list_len != | 206 | if (ssl->internal->alpn_client_proto_list_len != |
| 203 | sizeof(tlsext_alpn_single_proto_val)) { | 207 | sizeof(tlsext_alpn_single_proto_val)) { |
| @@ -261,6 +265,10 @@ test_tlsext_alpn_clienthello(void) | |||
| 261 | FAIL("failed to parse ALPN"); | 265 | FAIL("failed to parse ALPN"); |
| 262 | goto err; | 266 | goto err; |
| 263 | } | 267 | } |
| 268 | if (CBS_len(&cbs) != 0) { | ||
| 269 | FAIL("extension data remaining"); | ||
| 270 | goto err; | ||
| 271 | } | ||
| 264 | 272 | ||
| 265 | if (ssl->internal->alpn_client_proto_list_len != | 273 | if (ssl->internal->alpn_client_proto_list_len != |
| 266 | sizeof(tlsext_alpn_multiple_protos_val)) { | 274 | sizeof(tlsext_alpn_multiple_protos_val)) { |
| @@ -398,6 +406,10 @@ test_tlsext_alpn_serverhello(void) | |||
| 398 | FAIL("Should be able to parse serverhello when we request it"); | 406 | FAIL("Should be able to parse serverhello when we request it"); |
| 399 | goto err; | 407 | goto err; |
| 400 | } | 408 | } |
| 409 | if (CBS_len(&cbs) != 0) { | ||
| 410 | FAIL("extension data remaining"); | ||
| 411 | goto err; | ||
| 412 | } | ||
| 401 | 413 | ||
| 402 | if (S3I(ssl)->alpn_selected_len != | 414 | if (S3I(ssl)->alpn_selected_len != |
| 403 | sizeof(tlsext_alpn_single_proto_name)) { | 415 | sizeof(tlsext_alpn_single_proto_name)) { |
| @@ -597,6 +609,10 @@ test_tlsext_ec_clienthello(void) | |||
| 597 | FAIL("failed to parse clienthello Ellipticcurves\n"); | 609 | FAIL("failed to parse clienthello Ellipticcurves\n"); |
| 598 | goto err; | 610 | goto err; |
| 599 | } | 611 | } |
| 612 | if (CBS_len(&cbs) != 0) { | ||
| 613 | FAIL("extension data remaining"); | ||
| 614 | goto err; | ||
| 615 | } | ||
| 600 | 616 | ||
| 601 | if (SSI(ssl)->tlsext_supportedgroups_length != | 617 | if (SSI(ssl)->tlsext_supportedgroups_length != |
| 602 | sizeof(tlsext_ec_clienthello_secp384r1_val) / sizeof(uint16_t)) { | 618 | sizeof(tlsext_ec_clienthello_secp384r1_val) / sizeof(uint16_t)) { |
| @@ -693,6 +709,10 @@ test_tlsext_ec_clienthello(void) | |||
| 693 | FAIL("failed to parse clienthello Ellipticcurves\n"); | 709 | FAIL("failed to parse clienthello Ellipticcurves\n"); |
| 694 | goto err; | 710 | goto err; |
| 695 | } | 711 | } |
| 712 | if (CBS_len(&cbs) != 0) { | ||
| 713 | FAIL("extension data remaining"); | ||
| 714 | goto err; | ||
| 715 | } | ||
| 696 | 716 | ||
| 697 | if (SSI(ssl)->tlsext_supportedgroups_length != | 717 | if (SSI(ssl)->tlsext_supportedgroups_length != |
| 698 | sizeof(tlsext_ec_clienthello_nistp192and224_val) / sizeof(uint16_t)) { | 718 | sizeof(tlsext_ec_clienthello_nistp192and224_val) / sizeof(uint16_t)) { |
| @@ -895,6 +915,10 @@ test_tlsext_ecpf_clienthello(void) | |||
| 895 | FAIL("failed to parse clienthello ECPointFormats\n"); | 915 | FAIL("failed to parse clienthello ECPointFormats\n"); |
| 896 | goto err; | 916 | goto err; |
| 897 | } | 917 | } |
| 918 | if (CBS_len(&cbs) != 0) { | ||
| 919 | FAIL("extension data remaining"); | ||
| 920 | goto err; | ||
| 921 | } | ||
| 898 | 922 | ||
| 899 | if (SSI(ssl)->tlsext_ecpointformatlist_length != | 923 | if (SSI(ssl)->tlsext_ecpointformatlist_length != |
| 900 | sizeof(tlsext_ecpf_hello_uncompressed_val)) { | 924 | sizeof(tlsext_ecpf_hello_uncompressed_val)) { |
| @@ -984,6 +1008,10 @@ test_tlsext_ecpf_clienthello(void) | |||
| 984 | FAIL("failed to parse clienthello ECPointFormats\n"); | 1008 | FAIL("failed to parse clienthello ECPointFormats\n"); |
| 985 | goto err; | 1009 | goto err; |
| 986 | } | 1010 | } |
| 1011 | if (CBS_len(&cbs) != 0) { | ||
| 1012 | FAIL("extension data remaining"); | ||
| 1013 | goto err; | ||
| 1014 | } | ||
| 987 | 1015 | ||
| 988 | if (SSI(ssl)->tlsext_ecpointformatlist_length != | 1016 | if (SSI(ssl)->tlsext_ecpointformatlist_length != |
| 989 | sizeof(tlsext_ecpf_hello_prefer_order_val)) { | 1017 | sizeof(tlsext_ecpf_hello_prefer_order_val)) { |
| @@ -1100,6 +1128,10 @@ test_tlsext_ecpf_serverhello(void) | |||
| 1100 | FAIL("must include uncompressed in serverhello ECPointFormats\n"); | 1128 | FAIL("must include uncompressed in serverhello ECPointFormats\n"); |
| 1101 | goto err; | 1129 | goto err; |
| 1102 | } | 1130 | } |
| 1131 | if (CBS_len(&cbs) != 0) { | ||
| 1132 | FAIL("extension data remaining"); | ||
| 1133 | goto err; | ||
| 1134 | } | ||
| 1103 | 1135 | ||
| 1104 | /* | 1136 | /* |
| 1105 | * Test with a custom order that replaces the default uncompressed. | 1137 | * Test with a custom order that replaces the default uncompressed. |
| @@ -1184,6 +1216,10 @@ test_tlsext_ecpf_serverhello(void) | |||
| 1184 | FAIL("failed to parse serverhello ECPointFormats\n"); | 1216 | FAIL("failed to parse serverhello ECPointFormats\n"); |
| 1185 | goto err; | 1217 | goto err; |
| 1186 | } | 1218 | } |
| 1219 | if (CBS_len(&cbs) != 0) { | ||
| 1220 | FAIL("extension data remaining"); | ||
| 1221 | goto err; | ||
| 1222 | } | ||
| 1187 | 1223 | ||
| 1188 | if (SSI(ssl)->tlsext_ecpointformatlist_length != | 1224 | if (SSI(ssl)->tlsext_ecpointformatlist_length != |
| 1189 | sizeof(tlsext_ecpf_hello_prefer_order_val)) { | 1225 | sizeof(tlsext_ecpf_hello_prefer_order_val)) { |
| @@ -1308,6 +1344,10 @@ test_tlsext_ri_clienthello(void) | |||
| 1308 | FAIL("failed to parse clienthello RI\n"); | 1344 | FAIL("failed to parse clienthello RI\n"); |
| 1309 | goto err; | 1345 | goto err; |
| 1310 | } | 1346 | } |
| 1347 | if (CBS_len(&cbs) != 0) { | ||
| 1348 | FAIL("extension data remaining"); | ||
| 1349 | goto err; | ||
| 1350 | } | ||
| 1311 | 1351 | ||
| 1312 | if (S3I(ssl)->renegotiate_seen != 1) { | 1352 | if (S3I(ssl)->renegotiate_seen != 1) { |
| 1313 | FAIL("renegotiate seen not set\n"); | 1353 | FAIL("renegotiate seen not set\n"); |
| @@ -1417,6 +1457,10 @@ test_tlsext_ri_serverhello(void) | |||
| 1417 | FAIL("failed to parse serverhello RI\n"); | 1457 | FAIL("failed to parse serverhello RI\n"); |
| 1418 | goto err; | 1458 | goto err; |
| 1419 | } | 1459 | } |
| 1460 | if (CBS_len(&cbs) != 0) { | ||
| 1461 | FAIL("extension data remaining"); | ||
| 1462 | goto err; | ||
| 1463 | } | ||
| 1420 | 1464 | ||
| 1421 | if (S3I(ssl)->renegotiate_seen != 1) { | 1465 | if (S3I(ssl)->renegotiate_seen != 1) { |
| 1422 | FAIL("renegotiate seen not set\n"); | 1466 | FAIL("renegotiate seen not set\n"); |
| @@ -1534,6 +1578,10 @@ test_tlsext_sigalgs_clienthello(void) | |||
| 1534 | failure = 1; | 1578 | failure = 1; |
| 1535 | goto done; | 1579 | goto done; |
| 1536 | } | 1580 | } |
| 1581 | if (CBS_len(&cbs) != 0) { | ||
| 1582 | FAIL("extension data remaining"); | ||
| 1583 | goto done; | ||
| 1584 | } | ||
| 1537 | 1585 | ||
| 1538 | if (ssl->cert->pkeys[SSL_PKEY_RSA_SIGN].digest != EVP_sha512()) { | 1586 | if (ssl->cert->pkeys[SSL_PKEY_RSA_SIGN].digest != EVP_sha512()) { |
| 1539 | fprintf(stderr, "FAIL: RSA sign digest mismatch\n"); | 1587 | fprintf(stderr, "FAIL: RSA sign digest mismatch\n"); |
| @@ -1601,7 +1649,7 @@ test_tlsext_sigalgs_serverhello(void) | |||
| 1601 | 1649 | ||
| 1602 | CBS_init(&cbs, tlsext_sigalgs_clienthello, sizeof(tlsext_sigalgs_clienthello)); | 1650 | CBS_init(&cbs, tlsext_sigalgs_clienthello, sizeof(tlsext_sigalgs_clienthello)); |
| 1603 | if (tlsext_sigalgs_serverhello_parse(ssl, &cbs, &alert)) { | 1651 | if (tlsext_sigalgs_serverhello_parse(ssl, &cbs, &alert)) { |
| 1604 | fprintf(stderr, "FAIL: failed to parse serverhello sigalgs\n"); | 1652 | fprintf(stderr, "FAIL: serverhello should not parse sigalgs\n"); |
| 1605 | failure = 1; | 1653 | failure = 1; |
| 1606 | goto done; | 1654 | goto done; |
| 1607 | } | 1655 | } |
| @@ -1699,6 +1747,10 @@ test_tlsext_sni_clienthello(void) | |||
| 1699 | FAIL("failed to parse clienthello SNI\n"); | 1747 | FAIL("failed to parse clienthello SNI\n"); |
| 1700 | goto err; | 1748 | goto err; |
| 1701 | } | 1749 | } |
| 1750 | if (CBS_len(&cbs) != 0) { | ||
| 1751 | FAIL("extension data remaining"); | ||
| 1752 | goto err; | ||
| 1753 | } | ||
| 1702 | 1754 | ||
| 1703 | if (ssl->session->tlsext_hostname == NULL) { | 1755 | if (ssl->session->tlsext_hostname == NULL) { |
| 1704 | FAIL("no tlsext_hostname from clienthello SNI\n"); | 1756 | FAIL("no tlsext_hostname from clienthello SNI\n"); |
| @@ -1810,6 +1862,10 @@ test_tlsext_sni_serverhello(void) | |||
| 1810 | FAIL("failed to parse serverhello SNI\n"); | 1862 | FAIL("failed to parse serverhello SNI\n"); |
| 1811 | goto err; | 1863 | goto err; |
| 1812 | } | 1864 | } |
| 1865 | if (CBS_len(&cbs) != 0) { | ||
| 1866 | FAIL("extension data remaining"); | ||
| 1867 | goto err; | ||
| 1868 | } | ||
| 1813 | 1869 | ||
| 1814 | if (ssl->session->tlsext_hostname == NULL) { | 1870 | if (ssl->session->tlsext_hostname == NULL) { |
| 1815 | FAIL("no tlsext_hostname after serverhello SNI\n"); | 1871 | FAIL("no tlsext_hostname after serverhello SNI\n"); |
| @@ -1898,6 +1954,10 @@ test_tlsext_ocsp_clienthello(void) | |||
| 1898 | FAIL("failed to parse ocsp clienthello\n"); | 1954 | FAIL("failed to parse ocsp clienthello\n"); |
| 1899 | goto err; | 1955 | goto err; |
| 1900 | } | 1956 | } |
| 1957 | if (CBS_len(&cbs) != 0) { | ||
| 1958 | FAIL("extension data remaining"); | ||
| 1959 | goto err; | ||
| 1960 | } | ||
| 1901 | 1961 | ||
| 1902 | failure = 0; | 1962 | failure = 0; |
| 1903 | 1963 | ||
| @@ -2385,6 +2445,10 @@ test_tlsext_srtp_clienthello(void) | |||
| 2385 | FAIL("failed to parse SRTP\n"); | 2445 | FAIL("failed to parse SRTP\n"); |
| 2386 | goto err; | 2446 | goto err; |
| 2387 | } | 2447 | } |
| 2448 | if (CBS_len(&cbs) != 0) { | ||
| 2449 | FAIL("extension data remaining"); | ||
| 2450 | goto err; | ||
| 2451 | } | ||
| 2388 | 2452 | ||
| 2389 | if ((prof = SSL_get_selected_srtp_profile(ssl)) == NULL) { | 2453 | if ((prof = SSL_get_selected_srtp_profile(ssl)) == NULL) { |
| 2390 | FAIL("SRTP profile should be set now\n"); | 2454 | FAIL("SRTP profile should be set now\n"); |
| @@ -2448,6 +2512,10 @@ test_tlsext_srtp_clienthello(void) | |||
| 2448 | FAIL("failed to parse SRTP\n"); | 2512 | FAIL("failed to parse SRTP\n"); |
| 2449 | goto err; | 2513 | goto err; |
| 2450 | } | 2514 | } |
| 2515 | if (CBS_len(&cbs) != 0) { | ||
| 2516 | FAIL("extension data remaining"); | ||
| 2517 | goto err; | ||
| 2518 | } | ||
| 2451 | 2519 | ||
| 2452 | if ((prof = SSL_get_selected_srtp_profile(ssl)) == NULL) { | 2520 | if ((prof = SSL_get_selected_srtp_profile(ssl)) == NULL) { |
| 2453 | FAIL("SRTP profile should be set now\n"); | 2521 | FAIL("SRTP profile should be set now\n"); |
| @@ -2475,6 +2543,10 @@ test_tlsext_srtp_clienthello(void) | |||
| 2475 | FAIL("failed to parse SRTP\n"); | 2543 | FAIL("failed to parse SRTP\n"); |
| 2476 | goto err; | 2544 | goto err; |
| 2477 | } | 2545 | } |
| 2546 | if (CBS_len(&cbs) != 0) { | ||
| 2547 | FAIL("extension data remaining"); | ||
| 2548 | goto err; | ||
| 2549 | } | ||
| 2478 | 2550 | ||
| 2479 | if ((prof = SSL_get_selected_srtp_profile(ssl)) == NULL) { | 2551 | if ((prof = SSL_get_selected_srtp_profile(ssl)) == NULL) { |
| 2480 | FAIL("SRTP profile should be set now\n"); | 2552 | FAIL("SRTP profile should be set now\n"); |
| @@ -2500,6 +2572,10 @@ test_tlsext_srtp_clienthello(void) | |||
| 2500 | FAIL("should be able to fall back to negotiated\n"); | 2572 | FAIL("should be able to fall back to negotiated\n"); |
| 2501 | goto err; | 2573 | goto err; |
| 2502 | } | 2574 | } |
| 2575 | if (CBS_len(&cbs) != 0) { | ||
| 2576 | FAIL("extension data remaining"); | ||
| 2577 | goto err; | ||
| 2578 | } | ||
| 2503 | 2579 | ||
| 2504 | /* If we fallback, the server should NOT send the extension. */ | 2580 | /* If we fallback, the server should NOT send the extension. */ |
| 2505 | if (SSL_get_selected_srtp_profile(ssl) != NULL) { | 2581 | if (SSL_get_selected_srtp_profile(ssl) != NULL) { |
| @@ -2609,6 +2685,10 @@ test_tlsext_srtp_serverhello(void) | |||
| 2609 | FAIL("failed to parse SRTP\n"); | 2685 | FAIL("failed to parse SRTP\n"); |
| 2610 | goto err; | 2686 | goto err; |
| 2611 | } | 2687 | } |
| 2688 | if (CBS_len(&cbs) != 0) { | ||
| 2689 | FAIL("extension data remaining"); | ||
| 2690 | goto err; | ||
| 2691 | } | ||
| 2612 | 2692 | ||
| 2613 | if ((prof = SSL_get_selected_srtp_profile(ssl)) == NULL) { | 2693 | if ((prof = SSL_get_selected_srtp_profile(ssl)) == NULL) { |
| 2614 | FAIL("SRTP profile should be set now\n"); | 2694 | FAIL("SRTP profile should be set now\n"); |
