Coverage Report

Created: 2026-08-28 07:25

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/boringssl/fuzz/ssl_ctx_api.cc
Line
Count
Source
1
// Copyright 2016 The BoringSSL Authors
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
//     https://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
15
#include <functional>
16
#include <iterator>
17
#include <string>
18
#include <type_traits>
19
#include <vector>
20
21
#include <assert.h>
22
23
#include <openssl/bytestring.h>
24
#include <openssl/err.h>
25
#include <openssl/evp.h>
26
#include <openssl/hpke.h>
27
#include <openssl/rsa.h>
28
#include <openssl/ssl.h>
29
#include <openssl/stack.h>
30
#include <openssl/x509.h>
31
32
#include "../crypto/internal.h"
33
34
using namespace bssl;
35
36
static const uint8_t kCertificateDER[] = {
37
    0x30, 0x82, 0x02, 0xff, 0x30, 0x82, 0x01, 0xe7, 0xa0, 0x03, 0x02, 0x01,
38
    0x02, 0x02, 0x11, 0x00, 0xb1, 0x84, 0xee, 0x34, 0x99, 0x98, 0x76, 0xfb,
39
    0x6f, 0xb2, 0x15, 0xc8, 0x47, 0x79, 0x05, 0x9b, 0x30, 0x0d, 0x06, 0x09,
40
    0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30,
41
    0x12, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x07,
42
    0x41, 0x63, 0x6d, 0x65, 0x20, 0x43, 0x6f, 0x30, 0x1e, 0x17, 0x0d, 0x31,
43
    0x35, 0x31, 0x31, 0x30, 0x37, 0x30, 0x30, 0x32, 0x34, 0x35, 0x36, 0x5a,
44
    0x17, 0x0d, 0x31, 0x36, 0x31, 0x31, 0x30, 0x36, 0x30, 0x30, 0x32, 0x34,
45
    0x35, 0x36, 0x5a, 0x30, 0x12, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55,
46
    0x04, 0x0a, 0x13, 0x07, 0x41, 0x63, 0x6d, 0x65, 0x20, 0x43, 0x6f, 0x30,
47
    0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
48
    0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30,
49
    0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xce, 0x47, 0xcb, 0x11,
50
    0xbb, 0xd2, 0x9d, 0x8e, 0x9e, 0xd2, 0x1e, 0x14, 0xaf, 0xc7, 0xea, 0xb6,
51
    0xc9, 0x38, 0x2a, 0x6f, 0xb3, 0x7e, 0xfb, 0xbc, 0xfc, 0x59, 0x42, 0xb9,
52
    0x56, 0xf0, 0x4c, 0x3f, 0xf7, 0x31, 0x84, 0xbe, 0xac, 0x03, 0x9e, 0x71,
53
    0x91, 0x85, 0xd8, 0x32, 0xbd, 0x00, 0xea, 0xac, 0x65, 0xf6, 0x03, 0xc8,
54
    0x0f, 0x8b, 0xfd, 0x6e, 0x58, 0x88, 0x04, 0x41, 0x92, 0x74, 0xa6, 0x57,
55
    0x2e, 0x8e, 0x88, 0xd5, 0x3d, 0xda, 0x14, 0x3e, 0x63, 0x88, 0x22, 0xe3,
56
    0x53, 0xe9, 0xba, 0x39, 0x09, 0xac, 0xfb, 0xd0, 0x4c, 0xf2, 0x3c, 0x20,
57
    0xd6, 0x97, 0xe6, 0xed, 0xf1, 0x62, 0x1e, 0xe5, 0xc9, 0x48, 0xa0, 0xca,
58
    0x2e, 0x3c, 0x14, 0x5a, 0x82, 0xd4, 0xed, 0xb1, 0xe3, 0x43, 0xc1, 0x2a,
59
    0x59, 0xa5, 0xb9, 0xc8, 0x48, 0xa7, 0x39, 0x23, 0x74, 0xa7, 0x37, 0xb0,
60
    0x6f, 0xc3, 0x64, 0x99, 0x6c, 0xa2, 0x82, 0xc8, 0xf6, 0xdb, 0x86, 0x40,
61
    0xce, 0xd1, 0x85, 0x9f, 0xce, 0x69, 0xf4, 0x15, 0x2a, 0x23, 0xca, 0xea,
62
    0xb7, 0x7b, 0xdf, 0xfb, 0x43, 0x5f, 0xff, 0x7a, 0x49, 0x49, 0x0e, 0xe7,
63
    0x02, 0x51, 0x45, 0x13, 0xe8, 0x90, 0x64, 0x21, 0x0c, 0x26, 0x2b, 0x5d,
64
    0xfc, 0xe4, 0xb5, 0x86, 0x89, 0x43, 0x22, 0x4c, 0xf3, 0x3b, 0xf3, 0x09,
65
    0xc4, 0xa4, 0x10, 0x80, 0xf2, 0x46, 0xe2, 0x46, 0x8f, 0x76, 0x50, 0xbf,
66
    0xaf, 0x2b, 0x90, 0x1b, 0x78, 0xc7, 0xcf, 0xc1, 0x77, 0xd0, 0xfb, 0xa9,
67
    0xfb, 0xc9, 0x66, 0x5a, 0xc5, 0x9b, 0x31, 0x41, 0x67, 0x01, 0xbe, 0x33,
68
    0x10, 0xba, 0x05, 0x58, 0xed, 0x76, 0x53, 0xde, 0x5d, 0xc1, 0xe8, 0xbb,
69
    0x9f, 0xf1, 0xcd, 0xfb, 0xdf, 0x64, 0x7f, 0xd7, 0x18, 0xab, 0x0f, 0x94,
70
    0x28, 0x95, 0x4a, 0xcc, 0x6a, 0xa9, 0x50, 0xc7, 0x05, 0x47, 0x10, 0x41,
71
    0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x0e, 0x06,
72
    0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x05,
73
    0xa0, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x04, 0x0c, 0x30, 0x0a,
74
    0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x30, 0x0c,
75
    0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00,
76
    0x30, 0x19, 0x06, 0x03, 0x55, 0x1d, 0x11, 0x04, 0x12, 0x30, 0x10, 0x82,
77
    0x0e, 0x66, 0x75, 0x7a, 0x7a, 0x2e, 0x62, 0x6f, 0x72, 0x69, 0x6e, 0x67,
78
    0x73, 0x73, 0x6c, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
79
    0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x92,
80
    0xde, 0xef, 0x96, 0x06, 0x7b, 0xff, 0x71, 0x7d, 0x4e, 0xa0, 0x7d, 0xae,
81
    0xb8, 0x22, 0xb4, 0x2c, 0xf7, 0x96, 0x9c, 0x37, 0x1d, 0x8f, 0xe7, 0xd9,
82
    0x47, 0xff, 0x3f, 0xe9, 0x35, 0x95, 0x0e, 0xdd, 0xdc, 0x7f, 0xc8, 0x8a,
83
    0x1e, 0x36, 0x1d, 0x38, 0x47, 0xfc, 0x76, 0xd2, 0x1f, 0x98, 0xa1, 0x36,
84
    0xac, 0xc8, 0x70, 0x38, 0x0a, 0x3d, 0x51, 0x8d, 0x0f, 0x03, 0x1b, 0xef,
85
    0x62, 0xa1, 0xcb, 0x2b, 0x4a, 0x8c, 0x12, 0x2b, 0x54, 0x50, 0x9a, 0x6b,
86
    0xfe, 0xaf, 0xd9, 0xf6, 0xbf, 0x58, 0x11, 0x58, 0x5e, 0xe5, 0x86, 0x1e,
87
    0x3b, 0x6b, 0x30, 0x7e, 0x72, 0x89, 0xe8, 0x6b, 0x7b, 0xb7, 0xaf, 0xef,
88
    0x8b, 0xa9, 0x3e, 0xb0, 0xcd, 0x0b, 0xef, 0xb0, 0x0c, 0x96, 0x2b, 0xc5,
89
    0x3b, 0xd5, 0xf1, 0xc2, 0xae, 0x3a, 0x60, 0xd9, 0x0f, 0x75, 0x37, 0x55,
90
    0x4d, 0x62, 0xd2, 0xed, 0x96, 0xac, 0x30, 0x6b, 0xda, 0xa1, 0x48, 0x17,
91
    0x96, 0x23, 0x85, 0x9a, 0x57, 0x77, 0xe9, 0x22, 0xa2, 0x37, 0x03, 0xba,
92
    0x49, 0x77, 0x40, 0x3b, 0x76, 0x4b, 0xda, 0xc1, 0x04, 0x57, 0x55, 0x34,
93
    0x22, 0x83, 0x45, 0x29, 0xab, 0x2e, 0x11, 0xff, 0x0d, 0xab, 0x55, 0xb1,
94
    0xa7, 0x58, 0x59, 0x05, 0x25, 0xf9, 0x1e, 0x3d, 0xb7, 0xac, 0x04, 0x39,
95
    0x2c, 0xf9, 0xaf, 0xb8, 0x68, 0xfb, 0x8e, 0x35, 0x71, 0x32, 0xff, 0x70,
96
    0xe9, 0x46, 0x6d, 0x5c, 0x06, 0x90, 0x88, 0x23, 0x48, 0x0c, 0x50, 0xeb,
97
    0x0a, 0xa9, 0xae, 0xe8, 0xfc, 0xbe, 0xa5, 0x76, 0x94, 0xd7, 0x64, 0x22,
98
    0x38, 0x98, 0x17, 0xa4, 0x3a, 0xa7, 0x59, 0x9f, 0x1d, 0x3b, 0x75, 0x90,
99
    0x1a, 0x81, 0xef, 0x19, 0xfb, 0x2b, 0xb7, 0xa7, 0x64, 0x61, 0x22, 0xa4,
100
    0x6f, 0x7b, 0xfa, 0x58, 0xbb, 0x8c, 0x4e, 0x77, 0x67, 0xd0, 0x5d, 0x58,
101
    0x76, 0x8a, 0xbb,
102
};
103
104
static const uint8_t kRSAPrivateKeyDER[] = {
105
    0x30, 0x82, 0x04, 0xa5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00,
106
    0xce, 0x47, 0xcb, 0x11, 0xbb, 0xd2, 0x9d, 0x8e, 0x9e, 0xd2, 0x1e, 0x14,
107
    0xaf, 0xc7, 0xea, 0xb6, 0xc9, 0x38, 0x2a, 0x6f, 0xb3, 0x7e, 0xfb, 0xbc,
108
    0xfc, 0x59, 0x42, 0xb9, 0x56, 0xf0, 0x4c, 0x3f, 0xf7, 0x31, 0x84, 0xbe,
109
    0xac, 0x03, 0x9e, 0x71, 0x91, 0x85, 0xd8, 0x32, 0xbd, 0x00, 0xea, 0xac,
110
    0x65, 0xf6, 0x03, 0xc8, 0x0f, 0x8b, 0xfd, 0x6e, 0x58, 0x88, 0x04, 0x41,
111
    0x92, 0x74, 0xa6, 0x57, 0x2e, 0x8e, 0x88, 0xd5, 0x3d, 0xda, 0x14, 0x3e,
112
    0x63, 0x88, 0x22, 0xe3, 0x53, 0xe9, 0xba, 0x39, 0x09, 0xac, 0xfb, 0xd0,
113
    0x4c, 0xf2, 0x3c, 0x20, 0xd6, 0x97, 0xe6, 0xed, 0xf1, 0x62, 0x1e, 0xe5,
114
    0xc9, 0x48, 0xa0, 0xca, 0x2e, 0x3c, 0x14, 0x5a, 0x82, 0xd4, 0xed, 0xb1,
115
    0xe3, 0x43, 0xc1, 0x2a, 0x59, 0xa5, 0xb9, 0xc8, 0x48, 0xa7, 0x39, 0x23,
116
    0x74, 0xa7, 0x37, 0xb0, 0x6f, 0xc3, 0x64, 0x99, 0x6c, 0xa2, 0x82, 0xc8,
117
    0xf6, 0xdb, 0x86, 0x40, 0xce, 0xd1, 0x85, 0x9f, 0xce, 0x69, 0xf4, 0x15,
118
    0x2a, 0x23, 0xca, 0xea, 0xb7, 0x7b, 0xdf, 0xfb, 0x43, 0x5f, 0xff, 0x7a,
119
    0x49, 0x49, 0x0e, 0xe7, 0x02, 0x51, 0x45, 0x13, 0xe8, 0x90, 0x64, 0x21,
120
    0x0c, 0x26, 0x2b, 0x5d, 0xfc, 0xe4, 0xb5, 0x86, 0x89, 0x43, 0x22, 0x4c,
121
    0xf3, 0x3b, 0xf3, 0x09, 0xc4, 0xa4, 0x10, 0x80, 0xf2, 0x46, 0xe2, 0x46,
122
    0x8f, 0x76, 0x50, 0xbf, 0xaf, 0x2b, 0x90, 0x1b, 0x78, 0xc7, 0xcf, 0xc1,
123
    0x77, 0xd0, 0xfb, 0xa9, 0xfb, 0xc9, 0x66, 0x5a, 0xc5, 0x9b, 0x31, 0x41,
124
    0x67, 0x01, 0xbe, 0x33, 0x10, 0xba, 0x05, 0x58, 0xed, 0x76, 0x53, 0xde,
125
    0x5d, 0xc1, 0xe8, 0xbb, 0x9f, 0xf1, 0xcd, 0xfb, 0xdf, 0x64, 0x7f, 0xd7,
126
    0x18, 0xab, 0x0f, 0x94, 0x28, 0x95, 0x4a, 0xcc, 0x6a, 0xa9, 0x50, 0xc7,
127
    0x05, 0x47, 0x10, 0x41, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x01,
128
    0x01, 0x00, 0xa8, 0x47, 0xb9, 0x4a, 0x06, 0x47, 0x93, 0x71, 0x3d, 0xef,
129
    0x7b, 0xca, 0xb4, 0x7c, 0x0a, 0xe6, 0x82, 0xd0, 0xe7, 0x0d, 0xa9, 0x08,
130
    0xf6, 0xa4, 0xfd, 0xd8, 0x73, 0xae, 0x6f, 0x56, 0x29, 0x5e, 0x25, 0x72,
131
    0xa8, 0x30, 0x44, 0x73, 0xcf, 0x56, 0x26, 0xb9, 0x61, 0xde, 0x42, 0x81,
132
    0xf4, 0xf0, 0x1f, 0x5d, 0xcb, 0x47, 0xf2, 0x26, 0xe9, 0xe0, 0x93, 0x28,
133
    0xa3, 0x10, 0x3b, 0x42, 0x1e, 0x51, 0x11, 0x12, 0x06, 0x5e, 0xaf, 0xce,
134
    0xb0, 0xa5, 0x14, 0xdd, 0x82, 0x58, 0xa1, 0xa4, 0x12, 0xdf, 0x65, 0x1d,
135
    0x51, 0x70, 0x64, 0xd5, 0x58, 0x68, 0x11, 0xa8, 0x6a, 0x23, 0xc2, 0xbf,
136
    0xa1, 0x25, 0x24, 0x47, 0xb3, 0xa4, 0x3c, 0x83, 0x96, 0xb7, 0x1f, 0xf4,
137
    0x44, 0xd4, 0xd1, 0xe9, 0xfc, 0x33, 0x68, 0x5e, 0xe2, 0x68, 0x99, 0x9c,
138
    0x91, 0xe8, 0x72, 0xc9, 0xd7, 0x8c, 0x80, 0x20, 0x8e, 0x77, 0x83, 0x4d,
139
    0xe4, 0xab, 0xf9, 0x74, 0xa1, 0xdf, 0xd3, 0xc0, 0x0d, 0x5b, 0x05, 0x51,
140
    0xc2, 0x6f, 0xb2, 0x91, 0x02, 0xec, 0xc0, 0x02, 0x1a, 0x5c, 0x91, 0x05,
141
    0xf1, 0xe3, 0xfa, 0x65, 0xc2, 0xad, 0x24, 0xe6, 0xe5, 0x3c, 0xb6, 0x16,
142
    0xf1, 0xa1, 0x67, 0x1a, 0x9d, 0x37, 0x56, 0xbf, 0x01, 0xd7, 0x3b, 0x35,
143
    0x30, 0x57, 0x73, 0xf4, 0xf0, 0x5e, 0xa7, 0xe8, 0x0a, 0xc1, 0x94, 0x17,
144
    0xcf, 0x0a, 0xbd, 0xf5, 0x31, 0xa7, 0x2d, 0xf7, 0xf5, 0xd9, 0x8c, 0xc2,
145
    0x01, 0xbd, 0xda, 0x16, 0x8e, 0xb9, 0x30, 0x40, 0xa6, 0x6e, 0xbd, 0xcd,
146
    0x4d, 0x84, 0x67, 0x4e, 0x0b, 0xce, 0xd5, 0xef, 0xf8, 0x08, 0x63, 0x02,
147
    0xc6, 0xc7, 0xf7, 0x67, 0x92, 0xe2, 0x23, 0x9d, 0x27, 0x22, 0x1d, 0xc6,
148
    0x67, 0x5e, 0x66, 0xbf, 0x03, 0xb8, 0xa9, 0x67, 0xd4, 0x39, 0xd8, 0x75,
149
    0xfa, 0xe8, 0xed, 0x56, 0xb8, 0x81, 0x02, 0x81, 0x81, 0x00, 0xf7, 0x46,
150
    0x68, 0xc6, 0x13, 0xf8, 0xba, 0x0f, 0x83, 0xdb, 0x05, 0xa8, 0x25, 0x00,
151
    0x70, 0x9c, 0x9e, 0x8b, 0x12, 0x34, 0x0d, 0x96, 0xcf, 0x0d, 0x98, 0x9b,
152
    0x8d, 0x9c, 0x96, 0x78, 0xd1, 0x3c, 0x01, 0x8c, 0xb9, 0x35, 0x5c, 0x20,
153
    0x42, 0xb4, 0x38, 0xe3, 0xd6, 0x54, 0xe7, 0x55, 0xd6, 0x26, 0x8a, 0x0c,
154
    0xf6, 0x1f, 0xe0, 0x04, 0xc1, 0x22, 0x42, 0x19, 0x61, 0xc4, 0x94, 0x7c,
155
    0x07, 0x2e, 0x80, 0x52, 0xfe, 0x8d, 0xe6, 0x92, 0x3a, 0x91, 0xfe, 0x72,
156
    0x99, 0xe1, 0x2a, 0x73, 0x76, 0xb1, 0x24, 0x20, 0x67, 0xde, 0x28, 0xcb,
157
    0x0e, 0xe6, 0x52, 0xb5, 0xfa, 0xfb, 0x8b, 0x1e, 0x6a, 0x1d, 0x09, 0x26,
158
    0xb9, 0xa7, 0x61, 0xba, 0xf8, 0x79, 0xd2, 0x66, 0x57, 0x28, 0xd7, 0x31,
159
    0xb5, 0x0b, 0x27, 0x19, 0x1e, 0x6f, 0x46, 0xfc, 0x54, 0x95, 0xeb, 0x78,
160
    0x01, 0xb6, 0xd9, 0x79, 0x5a, 0x4d, 0x02, 0x81, 0x81, 0x00, 0xd5, 0x8f,
161
    0x16, 0x53, 0x2f, 0x57, 0x93, 0xbf, 0x09, 0x75, 0xbf, 0x63, 0x40, 0x3d,
162
    0x27, 0xfd, 0x23, 0x21, 0xde, 0x9b, 0xe9, 0x73, 0x3f, 0x49, 0x02, 0xd2,
163
    0x38, 0x96, 0xcf, 0xc3, 0xba, 0x92, 0x07, 0x87, 0x52, 0xa9, 0x35, 0xe3,
164
    0x0c, 0xe4, 0x2f, 0x05, 0x7b, 0x37, 0xa5, 0x40, 0x9c, 0x3b, 0x94, 0xf7,
165
    0xad, 0xa0, 0xee, 0x3a, 0xa8, 0xfb, 0x1f, 0x11, 0x1f, 0xd8, 0x9a, 0x80,
166
    0x42, 0x3d, 0x7f, 0xa4, 0xb8, 0x9a, 0xaa, 0xea, 0x72, 0xc1, 0xe3, 0xed,
167
    0x06, 0x60, 0x92, 0x37, 0xf9, 0xba, 0xfb, 0x9e, 0xed, 0x05, 0xa6, 0xd4,
168
    0x72, 0x68, 0x4f, 0x63, 0xfe, 0xd6, 0x10, 0x0d, 0x4f, 0x0a, 0x93, 0xc6,
169
    0xb9, 0xd7, 0xaf, 0xfd, 0xd9, 0x57, 0x7d, 0xcb, 0x75, 0xe8, 0x93, 0x2b,
170
    0xae, 0x4f, 0xea, 0xd7, 0x30, 0x0b, 0x58, 0x44, 0x82, 0x0f, 0x84, 0x5d,
171
    0x62, 0x11, 0x78, 0xea, 0x5f, 0xc5, 0x02, 0x81, 0x81, 0x00, 0x82, 0x0c,
172
    0xc1, 0xe6, 0x0b, 0x72, 0xf1, 0x48, 0x5f, 0xac, 0xbd, 0x98, 0xe5, 0x7d,
173
    0x09, 0xbd, 0x15, 0x95, 0x47, 0x09, 0xa1, 0x6c, 0x03, 0x91, 0xbf, 0x05,
174
    0x70, 0xc1, 0x3e, 0x52, 0x64, 0x99, 0x0e, 0xa7, 0x98, 0x70, 0xfb, 0xf6,
175
    0xeb, 0x9e, 0x25, 0x9d, 0x8e, 0x88, 0x30, 0xf2, 0xf0, 0x22, 0x6c, 0xd0,
176
    0xcc, 0x51, 0x8f, 0x5c, 0x70, 0xc7, 0x37, 0xc4, 0x69, 0xab, 0x1d, 0xfc,
177
    0xed, 0x3a, 0x03, 0xbb, 0xa2, 0xad, 0xb6, 0xea, 0x89, 0x6b, 0x67, 0x4b,
178
    0x96, 0xaa, 0xd9, 0xcc, 0xc8, 0x4b, 0xfa, 0x18, 0x21, 0x08, 0xb2, 0xa3,
179
    0xb9, 0x3e, 0x61, 0x99, 0xdc, 0x5a, 0x97, 0x9c, 0x73, 0x6a, 0xb9, 0xf9,
180
    0x68, 0x03, 0x24, 0x5f, 0x55, 0x77, 0x9c, 0xb4, 0xbe, 0x7a, 0x78, 0x53,
181
    0x68, 0x48, 0x69, 0x53, 0xc8, 0xb1, 0xf5, 0xbf, 0x98, 0x2d, 0x11, 0x1e,
182
    0x98, 0xa8, 0x36, 0x50, 0xa0, 0xb1, 0x02, 0x81, 0x81, 0x00, 0x90, 0x88,
183
    0x30, 0x71, 0xc7, 0xfe, 0x9b, 0x6d, 0x95, 0x37, 0x6d, 0x79, 0xfc, 0x85,
184
    0xe7, 0x44, 0x78, 0xbc, 0x79, 0x6e, 0x47, 0x86, 0xc9, 0xf3, 0xdd, 0xc6,
185
    0xec, 0xa9, 0x94, 0x9f, 0x40, 0xeb, 0x87, 0xd0, 0xdb, 0xee, 0xcd, 0x1b,
186
    0x87, 0x23, 0xff, 0x76, 0xd4, 0x37, 0x8a, 0xcd, 0xb9, 0x6e, 0xd1, 0x98,
187
    0xf6, 0x97, 0x8d, 0xe3, 0x81, 0x6d, 0xc3, 0x4e, 0xd1, 0xa0, 0xc4, 0x9f,
188
    0xbd, 0x34, 0xe5, 0xe8, 0x53, 0x4f, 0xca, 0x10, 0xb5, 0xed, 0xe7, 0x16,
189
    0x09, 0x54, 0xde, 0x60, 0xa7, 0xd1, 0x16, 0x6e, 0x2e, 0xb7, 0xbe, 0x7a,
190
    0xd5, 0x9b, 0x26, 0xef, 0xe4, 0x0e, 0x77, 0xfa, 0xa9, 0xdd, 0xdc, 0xb9,
191
    0x88, 0x19, 0x23, 0x70, 0xc7, 0xe1, 0x60, 0xaf, 0x8c, 0x73, 0x04, 0xf7,
192
    0x71, 0x17, 0x81, 0x36, 0x75, 0xbb, 0x97, 0xd7, 0x75, 0xb6, 0x8e, 0xbc,
193
    0xac, 0x9c, 0x6a, 0x9b, 0x24, 0x89, 0x02, 0x81, 0x80, 0x5a, 0x2b, 0xc7,
194
    0x6b, 0x8c, 0x65, 0xdb, 0x04, 0x73, 0xab, 0x25, 0xe1, 0x5b, 0xbc, 0x3c,
195
    0xcf, 0x5a, 0x3c, 0x04, 0xae, 0x97, 0x2e, 0xfd, 0xa4, 0x97, 0x1f, 0x05,
196
    0x17, 0x27, 0xac, 0x7c, 0x30, 0x85, 0xb4, 0x82, 0x3f, 0x5b, 0xb7, 0x94,
197
    0x3b, 0x7f, 0x6c, 0x0c, 0xc7, 0x16, 0xc6, 0xa0, 0xbd, 0x80, 0xb0, 0x81,
198
    0xde, 0xa0, 0x23, 0xa6, 0xf6, 0x75, 0x33, 0x51, 0x35, 0xa2, 0x75, 0x55,
199
    0x70, 0x4d, 0x42, 0xbb, 0xcf, 0x54, 0xe4, 0xdb, 0x2d, 0x88, 0xa0, 0x7a,
200
    0xf2, 0x17, 0xa7, 0xdd, 0x13, 0x44, 0x9f, 0x5f, 0x6b, 0x2c, 0x42, 0x42,
201
    0x8b, 0x13, 0x4d, 0xf9, 0x5b, 0xf8, 0x33, 0x42, 0xd9, 0x9e, 0x50, 0x1c,
202
    0x7c, 0xbc, 0xfa, 0x62, 0x85, 0x0b, 0xcf, 0x99, 0xda, 0x9e, 0x04, 0x90,
203
    0xb2, 0xc6, 0xb2, 0x0a, 0x2a, 0x7c, 0x6d, 0x6a, 0x40, 0xfc, 0xf5, 0x50,
204
    0x98, 0x46, 0x89, 0x82, 0x40,
205
};
206
207
struct GlobalState {
208
2
  GlobalState() {
209
2
    const uint8_t *bufp = kRSAPrivateKeyDER;
210
2
    RSA *privkey = d2i_RSAPrivateKey(NULL, &bufp, sizeof(kRSAPrivateKeyDER));
211
2
    assert(privkey != nullptr);
212
213
2
    pkey_.reset(EVP_PKEY_new());
214
2
    EVP_PKEY_assign_RSA(pkey_.get(), privkey);
215
216
2
    bufp = kCertificateDER;
217
2
    cert_.reset(d2i_X509(NULL, &bufp, sizeof(kCertificateDER)));
218
2
    assert(cert_.get() != nullptr);
219
220
2
    certs_.reset(sk_X509_new_null());
221
2
    PushToStack(certs_.get(), UpRef(cert_));
222
2
  }
223
224
  UniquePtr<EVP_PKEY> pkey_;
225
  UniquePtr<X509> cert_;
226
  UniquePtr<STACK_OF(X509)> certs_;
227
};
228
229
static GlobalState g_state;
230
231
50.3k
static bool GetString(std::string *out, CBS *cbs) {
232
50.3k
  CBS str;
233
50.3k
  if (!CBS_get_u8_length_prefixed(cbs, &str)) {
234
1.03k
    return false;
235
1.03k
  }
236
237
49.3k
  *out = BytesAsStringView(str);
238
49.3k
  return true;
239
50.3k
}
240
241
template <typename T>
242
67.6k
static bool GetVector(std::vector<T> *out, CBS *cbs) {
243
67.6k
  static_assert(
244
67.6k
      std::is_standard_layout_v<T> && std::is_trivially_copyable_v<T>,
245
67.6k
      "GetVector may only be called on standard layout, trivially copyable "
246
67.6k
      "types");
247
248
67.6k
  CBS child;
249
67.6k
  if (!CBS_get_u8_length_prefixed(cbs, &child)) {
250
1.56k
    return false;
251
1.56k
  }
252
253
66.0k
  size_t num = CBS_len(&child) / sizeof(T);
254
66.0k
  out->resize(num);
255
66.0k
  out->shrink_to_fit();  // Ensure ASan notices out-of-bounds reads.
256
66.0k
  OPENSSL_memcpy(out->data(), CBS_data(&child), num * sizeof(T));
257
66.0k
  return true;
258
67.6k
}
ssl_ctx_api.cc:bool GetVector<unsigned char>(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> >*, cbs_st*)
Line
Count
Source
242
44.7k
static bool GetVector(std::vector<T> *out, CBS *cbs) {
243
44.7k
  static_assert(
244
44.7k
      std::is_standard_layout_v<T> && std::is_trivially_copyable_v<T>,
245
44.7k
      "GetVector may only be called on standard layout, trivially copyable "
246
44.7k
      "types");
247
248
44.7k
  CBS child;
249
44.7k
  if (!CBS_get_u8_length_prefixed(cbs, &child)) {
250
925
    return false;
251
925
  }
252
253
43.7k
  size_t num = CBS_len(&child) / sizeof(T);
254
43.7k
  out->resize(num);
255
43.7k
  out->shrink_to_fit();  // Ensure ASan notices out-of-bounds reads.
256
43.7k
  OPENSSL_memcpy(out->data(), CBS_data(&child), num * sizeof(T));
257
43.7k
  return true;
258
44.7k
}
ssl_ctx_api.cc:bool GetVector<unsigned short>(std::__1::vector<unsigned short, std::__1::allocator<unsigned short> >*, cbs_st*)
Line
Count
Source
242
11.0k
static bool GetVector(std::vector<T> *out, CBS *cbs) {
243
11.0k
  static_assert(
244
11.0k
      std::is_standard_layout_v<T> && std::is_trivially_copyable_v<T>,
245
11.0k
      "GetVector may only be called on standard layout, trivially copyable "
246
11.0k
      "types");
247
248
11.0k
  CBS child;
249
11.0k
  if (!CBS_get_u8_length_prefixed(cbs, &child)) {
250
284
    return false;
251
284
  }
252
253
10.7k
  size_t num = CBS_len(&child) / sizeof(T);
254
10.7k
  out->resize(num);
255
10.7k
  out->shrink_to_fit();  // Ensure ASan notices out-of-bounds reads.
256
10.7k
  OPENSSL_memcpy(out->data(), CBS_data(&child), num * sizeof(T));
257
10.7k
  return true;
258
11.0k
}
ssl_ctx_api.cc:bool GetVector<int>(std::__1::vector<int, std::__1::allocator<int> >*, cbs_st*)
Line
Count
Source
242
11.8k
static bool GetVector(std::vector<T> *out, CBS *cbs) {
243
11.8k
  static_assert(
244
11.8k
      std::is_standard_layout_v<T> && std::is_trivially_copyable_v<T>,
245
11.8k
      "GetVector may only be called on standard layout, trivially copyable "
246
11.8k
      "types");
247
248
11.8k
  CBS child;
249
11.8k
  if (!CBS_get_u8_length_prefixed(cbs, &child)) {
250
359
    return false;
251
359
  }
252
253
11.4k
  size_t num = CBS_len(&child) / sizeof(T);
254
11.4k
  out->resize(num);
255
11.4k
  out->shrink_to_fit();  // Ensure ASan notices out-of-bounds reads.
256
11.4k
  OPENSSL_memcpy(out->data(), CBS_data(&child), num * sizeof(T));
257
11.4k
  return true;
258
11.8k
}
259
260
5.01k
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len) {
261
5.01k
  constexpr size_t kMaxExpensiveAPIs = 100;
262
5.01k
  constexpr size_t kMaxAPIs = 10000;
263
5.01k
  unsigned expensive_api_count = 0;
264
265
5.01k
  const std::function<void(SSL_CTX *, CBS *)> kAPIs[] = {
266
89.7k
      [](SSL_CTX *ctx, CBS *cbs) {
267
89.7k
        uint8_t b;
268
89.7k
        if (!CBS_get_u8(cbs, &b)) {
269
44
          return;
270
44
        }
271
89.7k
        SSL_CTX_set_quiet_shutdown(ctx, b);
272
89.7k
      },
273
11.0k
      [](SSL_CTX *ctx, CBS *cbs) { SSL_CTX_get_quiet_shutdown(ctx); },
274
20.7k
      [](SSL_CTX *ctx, CBS *cbs) {
275
20.7k
        uint16_t version;
276
20.7k
        if (!CBS_get_u16(cbs, &version)) {
277
28
          return;
278
28
        }
279
20.6k
        SSL_CTX_set_min_proto_version(ctx, version);
280
20.6k
      },
281
8.71k
      [](SSL_CTX *ctx, CBS *cbs) {
282
8.71k
        uint16_t version;
283
8.71k
        if (!CBS_get_u16(cbs, &version)) {
284
27
          return;
285
27
        }
286
8.68k
        SSL_CTX_set_max_proto_version(ctx, version);
287
8.68k
      },
288
9.41k
      [](SSL_CTX *ctx, CBS *cbs) {
289
9.41k
        uint32_t options;
290
9.41k
        if (!CBS_get_u32(cbs, &options)) {
291
42
          return;
292
42
        }
293
9.37k
        SSL_CTX_set_options(ctx, options);
294
9.37k
      },
295
5.01k
      [](SSL_CTX *ctx, CBS *cbs) {
296
2.99k
        uint32_t options;
297
2.99k
        if (!CBS_get_u32(cbs, &options)) {
298
32
          return;
299
32
        }
300
2.95k
        SSL_CTX_clear_options(ctx, options);
301
2.95k
      },
302
5.01k
      [](SSL_CTX *ctx, CBS *cbs) { SSL_CTX_get_options(ctx); },
303
5.01k
      [](SSL_CTX *ctx, CBS *cbs) {
304
3.04k
        uint32_t mode;
305
3.04k
        if (!CBS_get_u32(cbs, &mode)) {
306
43
          return;
307
43
        }
308
3.00k
        SSL_CTX_set_mode(ctx, mode);
309
3.00k
      },
310
5.01k
      [](SSL_CTX *ctx, CBS *cbs) {
311
3.88k
        uint32_t mode;
312
3.88k
        if (!CBS_get_u32(cbs, &mode)) {
313
33
          return;
314
33
        }
315
3.85k
        SSL_CTX_clear_mode(ctx, mode);
316
3.85k
      },
317
5.01k
      [](SSL_CTX *ctx, CBS *cbs) { SSL_CTX_get_mode(ctx); },
318
7.26k
      [](SSL_CTX *ctx, CBS *cbs) {
319
7.26k
        SSL_CTX_use_certificate(ctx, g_state.cert_.get());
320
7.26k
      },
321
8.08k
      [](SSL_CTX *ctx, CBS *cbs) {
322
8.08k
        SSL_CTX_use_PrivateKey(ctx, g_state.pkey_.get());
323
8.08k
      },
324
5.53k
      [](SSL_CTX *ctx, CBS *cbs) {
325
5.53k
        SSL_CTX_set1_chain(ctx, g_state.certs_.get());
326
5.53k
      },
327
35.0k
      [&](SSL_CTX *ctx, CBS *cbs) {
328
        // Avoid an unbounded certificate chain.
329
35.0k
        if (++expensive_api_count >= kMaxExpensiveAPIs) {
330
25.0k
          return;
331
25.0k
        }
332
333
10.0k
        SSL_CTX_add1_chain_cert(ctx, g_state.cert_.get());
334
10.0k
      },
335
5.01k
      [](SSL_CTX *ctx, CBS *cbs) { SSL_CTX_clear_chain_certs(ctx); },
336
59.3k
      [](SSL_CTX *ctx, CBS *cbs) { SSL_CTX_clear_extra_chain_certs(ctx); },
337
9.15k
      [](SSL_CTX *ctx, CBS *cbs) { SSL_CTX_check_private_key(ctx); },
338
7.56k
      [](SSL_CTX *ctx, CBS *cbs) { SSL_CTX_get0_certificate(ctx); },
339
5.01k
      [](SSL_CTX *ctx, CBS *cbs) { SSL_CTX_get0_privatekey(ctx); },
340
14.4k
      [](SSL_CTX *ctx, CBS *cbs) {
341
14.4k
        STACK_OF(X509) * chains;
342
14.4k
        SSL_CTX_get0_chain_certs(ctx, &chains);
343
14.4k
      },
344
5.01k
      [](SSL_CTX *ctx, CBS *cbs) {
345
4.41k
        std::vector<uint8_t> sct_data;
346
4.41k
        if (!GetVector(&sct_data, cbs)) {
347
112
          return;
348
112
        }
349
4.30k
        SSL_CTX_set_signed_cert_timestamp_list(ctx, sct_data.data(),
350
4.30k
                                               sct_data.size());
351
4.30k
      },
352
14.8k
      [](SSL_CTX *ctx, CBS *cbs) {
353
14.8k
        std::vector<uint8_t> ocsp_data;
354
14.8k
        if (!GetVector(&ocsp_data, cbs)) {
355
196
          return;
356
196
        }
357
14.6k
        SSL_CTX_set_ocsp_response(ctx, ocsp_data.data(), ocsp_data.size());
358
14.6k
      },
359
5.01k
      [](SSL_CTX *ctx, CBS *cbs) {
360
3.32k
        std::vector<uint16_t> algs;
361
3.32k
        if (!GetVector(&algs, cbs)) {
362
90
          return;
363
90
        }
364
3.23k
        SSL_CTX_set_signing_algorithm_prefs(ctx, algs.data(), algs.size());
365
3.23k
      },
366
10.3k
      [](SSL_CTX *ctx, CBS *cbs) {
367
10.3k
        std::string ciphers;
368
10.3k
        if (!GetString(&ciphers, cbs)) {
369
118
          return;
370
118
        }
371
10.2k
        SSL_CTX_set_strict_cipher_list(ctx, ciphers.c_str());
372
10.2k
      },
373
17.1k
      [](SSL_CTX *ctx, CBS *cbs) {
374
17.1k
        std::string ciphers;
375
17.1k
        if (!GetString(&ciphers, cbs)) {
376
136
          return;
377
136
        }
378
17.0k
        SSL_CTX_set_cipher_list(ctx, ciphers.c_str());
379
17.0k
      },
380
5.01k
      [](SSL_CTX *ctx, CBS *cbs) {
381
2.66k
        std::vector<uint16_t> algs;
382
2.66k
        if (!GetVector(&algs, cbs)) {
383
86
          return;
384
86
        }
385
2.57k
        SSL_CTX_set_verify_algorithm_prefs(ctx, algs.data(), algs.size());
386
2.57k
      },
387
12.9k
      [](SSL_CTX *ctx, CBS *cbs) {
388
12.9k
        std::vector<uint8_t> id_ctx;
389
12.9k
        if (!GetVector(&id_ctx, cbs)) {
390
115
          return;
391
115
        }
392
12.8k
        SSL_CTX_set_session_id_context(ctx, id_ctx.data(), id_ctx.size());
393
12.8k
      },
394
5.01k
      [](SSL_CTX *ctx, CBS *cbs) {
395
3.07k
        uint32_t size;
396
3.07k
        if (!CBS_get_u32(cbs, &size)) {
397
28
          return;
398
28
        }
399
3.04k
        SSL_CTX_sess_set_cache_size(ctx, size);
400
3.04k
      },
401
11.0k
      [](SSL_CTX *ctx, CBS *cbs) { SSL_CTX_sess_get_cache_size(ctx); },
402
11.3k
      [](SSL_CTX *ctx, CBS *cbs) { SSL_CTX_sess_number(ctx); },
403
5.01k
      [](SSL_CTX *ctx, CBS *cbs) {
404
3.58k
        uint32_t time;
405
3.58k
        if (!CBS_get_u32(cbs, &time)) {
406
33
          return;
407
33
        }
408
3.55k
        SSL_CTX_flush_sessions(ctx, time);
409
3.55k
      },
410
5.01k
      [](SSL_CTX *ctx, CBS *cbs) {
411
2.20k
        std::vector<uint8_t> keys;
412
2.20k
        if (!GetVector(&keys, cbs)) {
413
210
          return;
414
210
        }
415
1.99k
        SSL_CTX_set_tlsext_ticket_keys(ctx, keys.data(), keys.size());
416
1.99k
      },
417
8.14k
      [](SSL_CTX *ctx, CBS *cbs) {
418
8.14k
        std::vector<int> groups;
419
8.14k
        if (!GetVector(&groups, cbs)) {
420
136
          return;
421
136
        }
422
8.00k
        SSL_CTX_set1_groups(ctx, groups.data(), groups.size());
423
8.00k
      },
424
5.09k
      [](SSL_CTX *ctx, CBS *cbs) {
425
5.09k
        std::vector<uint16_t> groups;
426
5.09k
        if (!GetVector(&groups, cbs)) {
427
108
          return;
428
108
        }
429
4.98k
        SSL_CTX_set1_group_ids(ctx, groups.data(), groups.size());
430
4.98k
      },
431
6.92k
      [](SSL_CTX *ctx, CBS *cbs) {
432
6.92k
        std::string groups;
433
6.92k
        if (!GetString(&groups, cbs)) {
434
371
          return;
435
371
        }
436
6.55k
        SSL_CTX_set1_groups_list(ctx, groups.c_str());
437
6.55k
      },
438
7.00k
      [](SSL_CTX *ctx, CBS *cbs) {
439
7.00k
        SSL_CTX_enable_signed_cert_timestamps(ctx);
440
7.00k
      },
441
5.01k
      [](SSL_CTX *ctx, CBS *cbs) { SSL_CTX_enable_ocsp_stapling(ctx); },
442
20.0k
      [&](SSL_CTX *ctx, CBS *cbs) {
443
        // Avoid an unbounded client CA list.
444
20.0k
        if (++expensive_api_count >= kMaxExpensiveAPIs) {
445
16.7k
          return;
446
16.7k
        }
447
448
3.24k
        SSL_CTX_add_client_CA(ctx, g_state.cert_.get());
449
3.24k
      },
450
10.2k
      [](SSL_CTX *ctx, CBS *cbs) {
451
10.2k
        std::vector<uint8_t> protos;
452
10.2k
        if (!GetVector(&protos, cbs)) {
453
292
          return;
454
292
        }
455
10.0k
        SSL_CTX_set_alpn_protos(ctx, protos.data(), protos.size());
456
10.0k
      },
457
5.01k
      [](SSL_CTX *ctx, CBS *cbs) {
458
3.59k
        std::string profiles;
459
3.59k
        if (!GetString(&profiles, cbs)) {
460
97
          return;
461
97
        }
462
3.49k
        SSL_CTX_set_srtp_profiles(ctx, profiles.c_str());
463
3.49k
      },
464
5.01k
      [](SSL_CTX *ctx, CBS *cbs) { SSL_CTX_get_max_cert_list(ctx); },
465
5.01k
      [](SSL_CTX *ctx, CBS *cbs) {
466
2.02k
        uint32_t size;
467
2.02k
        if (!CBS_get_u32(cbs, &size)) {
468
27
          return;
469
27
        }
470
1.99k
        SSL_CTX_set_max_cert_list(ctx, size);
471
1.99k
      },
472
5.01k
      [](SSL_CTX *ctx, CBS *cbs) {
473
3.29k
        uint32_t size;
474
3.29k
        if (!CBS_get_u32(cbs, &size)) {
475
33
          return;
476
33
        }
477
3.25k
        SSL_CTX_set_max_send_fragment(ctx, size);
478
3.25k
      },
479
5.01k
      [](SSL_CTX *ctx, CBS *cbs) {
480
3.78k
        uint8_t b;
481
3.78k
        if (!CBS_get_u8(cbs, &b)) {
482
19
          return;
483
19
        }
484
3.76k
        SSL_CTX_set_retain_only_sha256_of_client_certs(ctx, b);
485
3.76k
      },
486
5.01k
      [](SSL_CTX *ctx, CBS *cbs) {
487
1.30k
        uint8_t b;
488
1.30k
        if (!CBS_get_u8(cbs, &b)) {
489
8
          return;
490
8
        }
491
1.29k
        SSL_CTX_set_grease_enabled(ctx, b);
492
1.29k
      },
493
5.01k
      [](SSL_CTX *ctx, CBS *cbs) {
494
3.69k
        std::vector<int> sigalgs;
495
3.69k
        if (!GetVector(&sigalgs, cbs)) {
496
223
          return;
497
223
        }
498
3.47k
        SSL_CTX_set1_sigalgs(ctx, sigalgs.data(), sigalgs.size());
499
3.47k
      },
500
12.3k
      [](SSL_CTX *ctx, CBS *cbs) {
501
12.3k
        std::string sigalgs;
502
12.3k
        if (!GetString(&sigalgs, cbs)) {
503
311
          return;
504
311
        }
505
12.0k
        SSL_CTX_set1_sigalgs_list(ctx, sigalgs.c_str());
506
12.0k
      },
507
16.2k
      [](SSL_CTX *ctx, CBS *cbs) {
508
16.2k
        UniquePtr<SSL_ECH_KEYS> keys(SSL_ECH_KEYS_new());
509
16.2k
        if (keys == nullptr) {
510
0
          return;
511
0
        }
512
16.2k
        uint8_t is_retry_config;
513
16.2k
        CBS ech_config, private_key;
514
16.2k
        if (!CBS_get_u8(cbs, &is_retry_config) ||
515
16.2k
            !CBS_get_u16_length_prefixed(cbs, &ech_config) ||
516
15.2k
            !CBS_get_u16_length_prefixed(cbs, &private_key)) {
517
1.34k
          return;
518
1.34k
        }
519
14.9k
        ScopedEVP_HPKE_KEY key;
520
14.9k
        if (!EVP_HPKE_KEY_init(key.get(), EVP_hpke_x25519_hkdf_sha256(),
521
14.9k
                               CBS_data(&private_key), CBS_len(&private_key)) ||
522
14.0k
            !SSL_ECH_KEYS_add(keys.get(), is_retry_config,
523
14.0k
                              CBS_data(&ech_config), CBS_len(&ech_config),
524
14.0k
                              key.get()) ||
525
14.9k
            !SSL_CTX_set1_ech_keys(ctx, keys.get())) {
526
14.9k
          return;
527
14.9k
        }
528
14.9k
      },
529
5.01k
  };
530
531
5.01k
  UniquePtr<SSL_CTX> ctx(SSL_CTX_new(TLS_method()));
532
533
  // If the number of functions exceeds this limit then the code needs to do
534
  // more than sample a single uint8_t to pick the function.
535
5.01k
  static_assert(std::size(kAPIs) < 256, "kAPIs too large");
536
537
5.01k
  CBS cbs;
538
5.01k
  CBS_init(&cbs, buf, len);
539
540
519k
  for (unsigned i = 0; i < kMaxAPIs; i++) {
541
519k
    uint8_t index;
542
519k
    if (!CBS_get_u8(&cbs, &index)) {
543
4.99k
      break;
544
4.99k
    }
545
546
514k
    kAPIs[index % std::size(kAPIs)](ctx.get(), &cbs);
547
514k
  }
548
549
5.01k
  UniquePtr<SSL> ssl(SSL_new(ctx.get()));
550
5.01k
  ERR_clear_error();
551
552
5.01k
  return 0;
553
5.01k
}