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