xref: /netbsd-src/crypto/external/bsd/openssl/dist/test/ext_internal_test.c (revision b0d1725196a7921d003d2c66a14f186abda4176b)
1*b0d17251Schristos /*
2*b0d17251Schristos  * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved.
3*b0d17251Schristos  *
4*b0d17251Schristos  * Licensed under the Apache License 2.0 (the "License").  You may not use
5*b0d17251Schristos  * this file except in compliance with the License.  You can obtain a copy
6*b0d17251Schristos  * in the file LICENSE in the source distribution or at
7*b0d17251Schristos  * https://www.openssl.org/source/license.html
8*b0d17251Schristos  */
9*b0d17251Schristos 
10*b0d17251Schristos #include "internal/nelem.h"
11*b0d17251Schristos #include "../ssl/ssl_local.h"
12*b0d17251Schristos #include "../ssl/statem/statem_local.h"
13*b0d17251Schristos #include "testutil.h"
14*b0d17251Schristos 
15*b0d17251Schristos #define EXT_ENTRY(name) { TLSEXT_IDX_##name, TLSEXT_TYPE_##name, #name }
16*b0d17251Schristos #define EXT_EXCEPTION(name) { TLSEXT_IDX_##name, TLSEXT_TYPE_invalid, #name }
17*b0d17251Schristos #define EXT_END(name) { TLSEXT_IDX_##name, TLSEXT_TYPE_out_of_range, #name }
18*b0d17251Schristos 
19*b0d17251Schristos typedef struct {
20*b0d17251Schristos     size_t idx;
21*b0d17251Schristos     unsigned int type;
22*b0d17251Schristos     char *name;
23*b0d17251Schristos } EXT_LIST;
24*b0d17251Schristos 
25*b0d17251Schristos /* The order here does matter! */
26*b0d17251Schristos static EXT_LIST ext_list[] = {
27*b0d17251Schristos 
28*b0d17251Schristos     EXT_ENTRY(renegotiate),
29*b0d17251Schristos     EXT_ENTRY(server_name),
30*b0d17251Schristos     EXT_ENTRY(max_fragment_length),
31*b0d17251Schristos #ifndef OPENSSL_NO_SRP
32*b0d17251Schristos     EXT_ENTRY(srp),
33*b0d17251Schristos #else
34*b0d17251Schristos     EXT_EXCEPTION(srp),
35*b0d17251Schristos #endif
36*b0d17251Schristos     EXT_ENTRY(ec_point_formats),
37*b0d17251Schristos     EXT_ENTRY(supported_groups),
38*b0d17251Schristos     EXT_ENTRY(session_ticket),
39*b0d17251Schristos #ifndef OPENSSL_NO_OCSP
40*b0d17251Schristos     EXT_ENTRY(status_request),
41*b0d17251Schristos #else
42*b0d17251Schristos     EXT_EXCEPTION(status_request),
43*b0d17251Schristos #endif
44*b0d17251Schristos #ifndef OPENSSL_NO_NEXTPROTONEG
45*b0d17251Schristos     EXT_ENTRY(next_proto_neg),
46*b0d17251Schristos #else
47*b0d17251Schristos     EXT_EXCEPTION(next_proto_neg),
48*b0d17251Schristos #endif
49*b0d17251Schristos     EXT_ENTRY(application_layer_protocol_negotiation),
50*b0d17251Schristos #ifndef OPENSSL_NO_SRTP
51*b0d17251Schristos     EXT_ENTRY(use_srtp),
52*b0d17251Schristos #else
53*b0d17251Schristos     EXT_EXCEPTION(use_srtp),
54*b0d17251Schristos #endif
55*b0d17251Schristos     EXT_ENTRY(encrypt_then_mac),
56*b0d17251Schristos #ifndef OPENSSL_NO_CT
57*b0d17251Schristos     EXT_ENTRY(signed_certificate_timestamp),
58*b0d17251Schristos #else
59*b0d17251Schristos     EXT_EXCEPTION(signed_certificate_timestamp),
60*b0d17251Schristos #endif
61*b0d17251Schristos     EXT_ENTRY(extended_master_secret),
62*b0d17251Schristos     EXT_ENTRY(signature_algorithms_cert),
63*b0d17251Schristos     EXT_ENTRY(post_handshake_auth),
64*b0d17251Schristos     EXT_ENTRY(signature_algorithms),
65*b0d17251Schristos     EXT_ENTRY(supported_versions),
66*b0d17251Schristos     EXT_ENTRY(psk_kex_modes),
67*b0d17251Schristos     EXT_ENTRY(key_share),
68*b0d17251Schristos     EXT_ENTRY(cookie),
69*b0d17251Schristos     EXT_ENTRY(cryptopro_bug),
70*b0d17251Schristos     EXT_ENTRY(early_data),
71*b0d17251Schristos     EXT_ENTRY(certificate_authorities),
72*b0d17251Schristos     EXT_ENTRY(padding),
73*b0d17251Schristos     EXT_ENTRY(psk),
74*b0d17251Schristos     EXT_END(num_builtins)
75*b0d17251Schristos };
76*b0d17251Schristos 
test_extension_list(void)77*b0d17251Schristos static int test_extension_list(void)
78*b0d17251Schristos {
79*b0d17251Schristos     size_t n = OSSL_NELEM(ext_list);
80*b0d17251Schristos     size_t i;
81*b0d17251Schristos     unsigned int type;
82*b0d17251Schristos     int retval = 1;
83*b0d17251Schristos 
84*b0d17251Schristos     for (i = 0; i < n; i++) {
85*b0d17251Schristos         if (!TEST_size_t_eq(i, ext_list[i].idx)) {
86*b0d17251Schristos             retval = 0;
87*b0d17251Schristos             TEST_error("TLSEXT_IDX_%s=%zd, found at=%zd\n",
88*b0d17251Schristos                        ext_list[i].name, ext_list[i].idx, i);
89*b0d17251Schristos         }
90*b0d17251Schristos         type = ossl_get_extension_type(ext_list[i].idx);
91*b0d17251Schristos         if (!TEST_uint_eq(type, ext_list[i].type)) {
92*b0d17251Schristos             retval = 0;
93*b0d17251Schristos             TEST_error("TLSEXT_IDX_%s=%zd expected=0x%05X got=0x%05X",
94*b0d17251Schristos                        ext_list[i].name, ext_list[i].idx, ext_list[i].type,
95*b0d17251Schristos                        type);
96*b0d17251Schristos         }
97*b0d17251Schristos     }
98*b0d17251Schristos     return retval;
99*b0d17251Schristos }
100*b0d17251Schristos 
setup_tests(void)101*b0d17251Schristos int setup_tests(void)
102*b0d17251Schristos {
103*b0d17251Schristos     ADD_TEST(test_extension_list);
104*b0d17251Schristos     return 1;
105*b0d17251Schristos }
106