xref: /freebsd/crypto/openssl/fuzz/server.c (revision 76f9bb488e77ae4cc220b0bbbc53f1a7315ef977)
1 /*
2  * Copyright 2016-2026 The OpenSSL Project Authors. All Rights Reserved.
3  *
4  * Licensed under the Apache License 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  * https://www.openssl.org/source/license.html
8  * or in the file LICENSE in the source distribution.
9  */
10 
11 /* Shamelessly copied from BoringSSL and converted to C. */
12 
13 /* Test first part of SSL server handshake. */
14 
15 /* We need to use some deprecated APIs */
16 #define OPENSSL_SUPPRESS_DEPRECATED
17 
18 #include <time.h>
19 #include <openssl/rand.h>
20 #include <openssl/ssl.h>
21 #include <openssl/rsa.h>
22 #include <openssl/dsa.h>
23 #include <openssl/ec.h>
24 #include <openssl/dh.h>
25 #include <openssl/err.h>
26 #include "fuzzer.h"
27 
28 static const uint8_t kCertificateDER[] = {
29     0x30, 0x82, 0x02, 0xff, 0x30, 0x82, 0x01, 0xe7,
30     0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x11, 0x00,
31     0xb1, 0x84, 0xee, 0x34, 0x99, 0x98, 0x76, 0xfb,
32     0x6f, 0xb2, 0x15, 0xc8, 0x47, 0x79, 0x05, 0x9b,
33     0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
34     0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30,
35     0x12, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55,
36     0x04, 0x0a, 0x13, 0x07, 0x41, 0x63, 0x6d, 0x65,
37     0x20, 0x43, 0x6f, 0x30, 0x1e, 0x17, 0x0d, 0x31,
38     0x35, 0x31, 0x31, 0x30, 0x37, 0x30, 0x30, 0x32,
39     0x34, 0x35, 0x36, 0x5a, 0x17, 0x0d, 0x31, 0x36,
40     0x31, 0x31, 0x30, 0x36, 0x30, 0x30, 0x32, 0x34,
41     0x35, 0x36, 0x5a, 0x30, 0x12, 0x31, 0x10, 0x30,
42     0x0e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x07,
43     0x41, 0x63, 0x6d, 0x65, 0x20, 0x43, 0x6f, 0x30,
44     0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a,
45     0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01,
46     0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30,
47     0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00,
48     0xce, 0x47, 0xcb, 0x11, 0xbb, 0xd2, 0x9d, 0x8e,
49     0x9e, 0xd2, 0x1e, 0x14, 0xaf, 0xc7, 0xea, 0xb6,
50     0xc9, 0x38, 0x2a, 0x6f, 0xb3, 0x7e, 0xfb, 0xbc,
51     0xfc, 0x59, 0x42, 0xb9, 0x56, 0xf0, 0x4c, 0x3f,
52     0xf7, 0x31, 0x84, 0xbe, 0xac, 0x03, 0x9e, 0x71,
53     0x91, 0x85, 0xd8, 0x32, 0xbd, 0x00, 0xea, 0xac,
54     0x65, 0xf6, 0x03, 0xc8, 0x0f, 0x8b, 0xfd, 0x6e,
55     0x58, 0x88, 0x04, 0x41, 0x92, 0x74, 0xa6, 0x57,
56     0x2e, 0x8e, 0x88, 0xd5, 0x3d, 0xda, 0x14, 0x3e,
57     0x63, 0x88, 0x22, 0xe3, 0x53, 0xe9, 0xba, 0x39,
58     0x09, 0xac, 0xfb, 0xd0, 0x4c, 0xf2, 0x3c, 0x20,
59     0xd6, 0x97, 0xe6, 0xed, 0xf1, 0x62, 0x1e, 0xe5,
60     0xc9, 0x48, 0xa0, 0xca, 0x2e, 0x3c, 0x14, 0x5a,
61     0x82, 0xd4, 0xed, 0xb1, 0xe3, 0x43, 0xc1, 0x2a,
62     0x59, 0xa5, 0xb9, 0xc8, 0x48, 0xa7, 0x39, 0x23,
63     0x74, 0xa7, 0x37, 0xb0, 0x6f, 0xc3, 0x64, 0x99,
64     0x6c, 0xa2, 0x82, 0xc8, 0xf6, 0xdb, 0x86, 0x40,
65     0xce, 0xd1, 0x85, 0x9f, 0xce, 0x69, 0xf4, 0x15,
66     0x2a, 0x23, 0xca, 0xea, 0xb7, 0x7b, 0xdf, 0xfb,
67     0x43, 0x5f, 0xff, 0x7a, 0x49, 0x49, 0x0e, 0xe7,
68     0x02, 0x51, 0x45, 0x13, 0xe8, 0x90, 0x64, 0x21,
69     0x0c, 0x26, 0x2b, 0x5d, 0xfc, 0xe4, 0xb5, 0x86,
70     0x89, 0x43, 0x22, 0x4c, 0xf3, 0x3b, 0xf3, 0x09,
71     0xc4, 0xa4, 0x10, 0x80, 0xf2, 0x46, 0xe2, 0x46,
72     0x8f, 0x76, 0x50, 0xbf, 0xaf, 0x2b, 0x90, 0x1b,
73     0x78, 0xc7, 0xcf, 0xc1, 0x77, 0xd0, 0xfb, 0xa9,
74     0xfb, 0xc9, 0x66, 0x5a, 0xc5, 0x9b, 0x31, 0x41,
75     0x67, 0x01, 0xbe, 0x33, 0x10, 0xba, 0x05, 0x58,
76     0xed, 0x76, 0x53, 0xde, 0x5d, 0xc1, 0xe8, 0xbb,
77     0x9f, 0xf1, 0xcd, 0xfb, 0xdf, 0x64, 0x7f, 0xd7,
78     0x18, 0xab, 0x0f, 0x94, 0x28, 0x95, 0x4a, 0xcc,
79     0x6a, 0xa9, 0x50, 0xc7, 0x05, 0x47, 0x10, 0x41,
80     0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30,
81     0x4e, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f,
82     0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x05,
83     0xa0, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1d, 0x25,
84     0x04, 0x0c, 0x30, 0x0a, 0x06, 0x08, 0x2b, 0x06,
85     0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x30, 0x0c,
86     0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff,
87     0x04, 0x02, 0x30, 0x00, 0x30, 0x19, 0x06, 0x03,
88     0x55, 0x1d, 0x11, 0x04, 0x12, 0x30, 0x10, 0x82,
89     0x0e, 0x66, 0x75, 0x7a, 0x7a, 0x2e, 0x62, 0x6f,
90     0x72, 0x69, 0x6e, 0x67, 0x73, 0x73, 0x6c, 0x30,
91     0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
92     0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82,
93     0x01, 0x01, 0x00, 0x92, 0xde, 0xef, 0x96, 0x06,
94     0x7b, 0xff, 0x71, 0x7d, 0x4e, 0xa0, 0x7d, 0xae,
95     0xb8, 0x22, 0xb4, 0x2c, 0xf7, 0x96, 0x9c, 0x37,
96     0x1d, 0x8f, 0xe7, 0xd9, 0x47, 0xff, 0x3f, 0xe9,
97     0x35, 0x95, 0x0e, 0xdd, 0xdc, 0x7f, 0xc8, 0x8a,
98     0x1e, 0x36, 0x1d, 0x38, 0x47, 0xfc, 0x76, 0xd2,
99     0x1f, 0x98, 0xa1, 0x36, 0xac, 0xc8, 0x70, 0x38,
100     0x0a, 0x3d, 0x51, 0x8d, 0x0f, 0x03, 0x1b, 0xef,
101     0x62, 0xa1, 0xcb, 0x2b, 0x4a, 0x8c, 0x12, 0x2b,
102     0x54, 0x50, 0x9a, 0x6b, 0xfe, 0xaf, 0xd9, 0xf6,
103     0xbf, 0x58, 0x11, 0x58, 0x5e, 0xe5, 0x86, 0x1e,
104     0x3b, 0x6b, 0x30, 0x7e, 0x72, 0x89, 0xe8, 0x6b,
105     0x7b, 0xb7, 0xaf, 0xef, 0x8b, 0xa9, 0x3e, 0xb0,
106     0xcd, 0x0b, 0xef, 0xb0, 0x0c, 0x96, 0x2b, 0xc5,
107     0x3b, 0xd5, 0xf1, 0xc2, 0xae, 0x3a, 0x60, 0xd9,
108     0x0f, 0x75, 0x37, 0x55, 0x4d, 0x62, 0xd2, 0xed,
109     0x96, 0xac, 0x30, 0x6b, 0xda, 0xa1, 0x48, 0x17,
110     0x96, 0x23, 0x85, 0x9a, 0x57, 0x77, 0xe9, 0x22,
111     0xa2, 0x37, 0x03, 0xba, 0x49, 0x77, 0x40, 0x3b,
112     0x76, 0x4b, 0xda, 0xc1, 0x04, 0x57, 0x55, 0x34,
113     0x22, 0x83, 0x45, 0x29, 0xab, 0x2e, 0x11, 0xff,
114     0x0d, 0xab, 0x55, 0xb1, 0xa7, 0x58, 0x59, 0x05,
115     0x25, 0xf9, 0x1e, 0x3d, 0xb7, 0xac, 0x04, 0x39,
116     0x2c, 0xf9, 0xaf, 0xb8, 0x68, 0xfb, 0x8e, 0x35,
117     0x71, 0x32, 0xff, 0x70, 0xe9, 0x46, 0x6d, 0x5c,
118     0x06, 0x90, 0x88, 0x23, 0x48, 0x0c, 0x50, 0xeb,
119     0x0a, 0xa9, 0xae, 0xe8, 0xfc, 0xbe, 0xa5, 0x76,
120     0x94, 0xd7, 0x64, 0x22, 0x38, 0x98, 0x17, 0xa4,
121     0x3a, 0xa7, 0x59, 0x9f, 0x1d, 0x3b, 0x75, 0x90,
122     0x1a, 0x81, 0xef, 0x19, 0xfb, 0x2b, 0xb7, 0xa7,
123     0x64, 0x61, 0x22, 0xa4, 0x6f, 0x7b, 0xfa, 0x58,
124     0xbb, 0x8c, 0x4e, 0x77, 0x67, 0xd0, 0x5d, 0x58,
125     0x76, 0x8a, 0xbb
126 };
127 
128 #ifndef OPENSSL_NO_DEPRECATED_3_0
129 static const uint8_t kRSAPrivateKeyDER[] = {
130     0x30, 0x82, 0x04, 0xa5, 0x02, 0x01, 0x00, 0x02,
131     0x82, 0x01, 0x01, 0x00, 0xce, 0x47, 0xcb, 0x11,
132     0xbb, 0xd2, 0x9d, 0x8e, 0x9e, 0xd2, 0x1e, 0x14,
133     0xaf, 0xc7, 0xea, 0xb6, 0xc9, 0x38, 0x2a, 0x6f,
134     0xb3, 0x7e, 0xfb, 0xbc, 0xfc, 0x59, 0x42, 0xb9,
135     0x56, 0xf0, 0x4c, 0x3f, 0xf7, 0x31, 0x84, 0xbe,
136     0xac, 0x03, 0x9e, 0x71, 0x91, 0x85, 0xd8, 0x32,
137     0xbd, 0x00, 0xea, 0xac, 0x65, 0xf6, 0x03, 0xc8,
138     0x0f, 0x8b, 0xfd, 0x6e, 0x58, 0x88, 0x04, 0x41,
139     0x92, 0x74, 0xa6, 0x57, 0x2e, 0x8e, 0x88, 0xd5,
140     0x3d, 0xda, 0x14, 0x3e, 0x63, 0x88, 0x22, 0xe3,
141     0x53, 0xe9, 0xba, 0x39, 0x09, 0xac, 0xfb, 0xd0,
142     0x4c, 0xf2, 0x3c, 0x20, 0xd6, 0x97, 0xe6, 0xed,
143     0xf1, 0x62, 0x1e, 0xe5, 0xc9, 0x48, 0xa0, 0xca,
144     0x2e, 0x3c, 0x14, 0x5a, 0x82, 0xd4, 0xed, 0xb1,
145     0xe3, 0x43, 0xc1, 0x2a, 0x59, 0xa5, 0xb9, 0xc8,
146     0x48, 0xa7, 0x39, 0x23, 0x74, 0xa7, 0x37, 0xb0,
147     0x6f, 0xc3, 0x64, 0x99, 0x6c, 0xa2, 0x82, 0xc8,
148     0xf6, 0xdb, 0x86, 0x40, 0xce, 0xd1, 0x85, 0x9f,
149     0xce, 0x69, 0xf4, 0x15, 0x2a, 0x23, 0xca, 0xea,
150     0xb7, 0x7b, 0xdf, 0xfb, 0x43, 0x5f, 0xff, 0x7a,
151     0x49, 0x49, 0x0e, 0xe7, 0x02, 0x51, 0x45, 0x13,
152     0xe8, 0x90, 0x64, 0x21, 0x0c, 0x26, 0x2b, 0x5d,
153     0xfc, 0xe4, 0xb5, 0x86, 0x89, 0x43, 0x22, 0x4c,
154     0xf3, 0x3b, 0xf3, 0x09, 0xc4, 0xa4, 0x10, 0x80,
155     0xf2, 0x46, 0xe2, 0x46, 0x8f, 0x76, 0x50, 0xbf,
156     0xaf, 0x2b, 0x90, 0x1b, 0x78, 0xc7, 0xcf, 0xc1,
157     0x77, 0xd0, 0xfb, 0xa9, 0xfb, 0xc9, 0x66, 0x5a,
158     0xc5, 0x9b, 0x31, 0x41, 0x67, 0x01, 0xbe, 0x33,
159     0x10, 0xba, 0x05, 0x58, 0xed, 0x76, 0x53, 0xde,
160     0x5d, 0xc1, 0xe8, 0xbb, 0x9f, 0xf1, 0xcd, 0xfb,
161     0xdf, 0x64, 0x7f, 0xd7, 0x18, 0xab, 0x0f, 0x94,
162     0x28, 0x95, 0x4a, 0xcc, 0x6a, 0xa9, 0x50, 0xc7,
163     0x05, 0x47, 0x10, 0x41, 0x02, 0x03, 0x01, 0x00,
164     0x01, 0x02, 0x82, 0x01, 0x01, 0x00, 0xa8, 0x47,
165     0xb9, 0x4a, 0x06, 0x47, 0x93, 0x71, 0x3d, 0xef,
166     0x7b, 0xca, 0xb4, 0x7c, 0x0a, 0xe6, 0x82, 0xd0,
167     0xe7, 0x0d, 0xa9, 0x08, 0xf6, 0xa4, 0xfd, 0xd8,
168     0x73, 0xae, 0x6f, 0x56, 0x29, 0x5e, 0x25, 0x72,
169     0xa8, 0x30, 0x44, 0x73, 0xcf, 0x56, 0x26, 0xb9,
170     0x61, 0xde, 0x42, 0x81, 0xf4, 0xf0, 0x1f, 0x5d,
171     0xcb, 0x47, 0xf2, 0x26, 0xe9, 0xe0, 0x93, 0x28,
172     0xa3, 0x10, 0x3b, 0x42, 0x1e, 0x51, 0x11, 0x12,
173     0x06, 0x5e, 0xaf, 0xce, 0xb0, 0xa5, 0x14, 0xdd,
174     0x82, 0x58, 0xa1, 0xa4, 0x12, 0xdf, 0x65, 0x1d,
175     0x51, 0x70, 0x64, 0xd5, 0x58, 0x68, 0x11, 0xa8,
176     0x6a, 0x23, 0xc2, 0xbf, 0xa1, 0x25, 0x24, 0x47,
177     0xb3, 0xa4, 0x3c, 0x83, 0x96, 0xb7, 0x1f, 0xf4,
178     0x44, 0xd4, 0xd1, 0xe9, 0xfc, 0x33, 0x68, 0x5e,
179     0xe2, 0x68, 0x99, 0x9c, 0x91, 0xe8, 0x72, 0xc9,
180     0xd7, 0x8c, 0x80, 0x20, 0x8e, 0x77, 0x83, 0x4d,
181     0xe4, 0xab, 0xf9, 0x74, 0xa1, 0xdf, 0xd3, 0xc0,
182     0x0d, 0x5b, 0x05, 0x51, 0xc2, 0x6f, 0xb2, 0x91,
183     0x02, 0xec, 0xc0, 0x02, 0x1a, 0x5c, 0x91, 0x05,
184     0xf1, 0xe3, 0xfa, 0x65, 0xc2, 0xad, 0x24, 0xe6,
185     0xe5, 0x3c, 0xb6, 0x16, 0xf1, 0xa1, 0x67, 0x1a,
186     0x9d, 0x37, 0x56, 0xbf, 0x01, 0xd7, 0x3b, 0x35,
187     0x30, 0x57, 0x73, 0xf4, 0xf0, 0x5e, 0xa7, 0xe8,
188     0x0a, 0xc1, 0x94, 0x17, 0xcf, 0x0a, 0xbd, 0xf5,
189     0x31, 0xa7, 0x2d, 0xf7, 0xf5, 0xd9, 0x8c, 0xc2,
190     0x01, 0xbd, 0xda, 0x16, 0x8e, 0xb9, 0x30, 0x40,
191     0xa6, 0x6e, 0xbd, 0xcd, 0x4d, 0x84, 0x67, 0x4e,
192     0x0b, 0xce, 0xd5, 0xef, 0xf8, 0x08, 0x63, 0x02,
193     0xc6, 0xc7, 0xf7, 0x67, 0x92, 0xe2, 0x23, 0x9d,
194     0x27, 0x22, 0x1d, 0xc6, 0x67, 0x5e, 0x66, 0xbf,
195     0x03, 0xb8, 0xa9, 0x67, 0xd4, 0x39, 0xd8, 0x75,
196     0xfa, 0xe8, 0xed, 0x56, 0xb8, 0x81, 0x02, 0x81,
197     0x81, 0x00, 0xf7, 0x46, 0x68, 0xc6, 0x13, 0xf8,
198     0xba, 0x0f, 0x83, 0xdb, 0x05, 0xa8, 0x25, 0x00,
199     0x70, 0x9c, 0x9e, 0x8b, 0x12, 0x34, 0x0d, 0x96,
200     0xcf, 0x0d, 0x98, 0x9b, 0x8d, 0x9c, 0x96, 0x78,
201     0xd1, 0x3c, 0x01, 0x8c, 0xb9, 0x35, 0x5c, 0x20,
202     0x42, 0xb4, 0x38, 0xe3, 0xd6, 0x54, 0xe7, 0x55,
203     0xd6, 0x26, 0x8a, 0x0c, 0xf6, 0x1f, 0xe0, 0x04,
204     0xc1, 0x22, 0x42, 0x19, 0x61, 0xc4, 0x94, 0x7c,
205     0x07, 0x2e, 0x80, 0x52, 0xfe, 0x8d, 0xe6, 0x92,
206     0x3a, 0x91, 0xfe, 0x72, 0x99, 0xe1, 0x2a, 0x73,
207     0x76, 0xb1, 0x24, 0x20, 0x67, 0xde, 0x28, 0xcb,
208     0x0e, 0xe6, 0x52, 0xb5, 0xfa, 0xfb, 0x8b, 0x1e,
209     0x6a, 0x1d, 0x09, 0x26, 0xb9, 0xa7, 0x61, 0xba,
210     0xf8, 0x79, 0xd2, 0x66, 0x57, 0x28, 0xd7, 0x31,
211     0xb5, 0x0b, 0x27, 0x19, 0x1e, 0x6f, 0x46, 0xfc,
212     0x54, 0x95, 0xeb, 0x78, 0x01, 0xb6, 0xd9, 0x79,
213     0x5a, 0x4d, 0x02, 0x81, 0x81, 0x00, 0xd5, 0x8f,
214     0x16, 0x53, 0x2f, 0x57, 0x93, 0xbf, 0x09, 0x75,
215     0xbf, 0x63, 0x40, 0x3d, 0x27, 0xfd, 0x23, 0x21,
216     0xde, 0x9b, 0xe9, 0x73, 0x3f, 0x49, 0x02, 0xd2,
217     0x38, 0x96, 0xcf, 0xc3, 0xba, 0x92, 0x07, 0x87,
218     0x52, 0xa9, 0x35, 0xe3, 0x0c, 0xe4, 0x2f, 0x05,
219     0x7b, 0x37, 0xa5, 0x40, 0x9c, 0x3b, 0x94, 0xf7,
220     0xad, 0xa0, 0xee, 0x3a, 0xa8, 0xfb, 0x1f, 0x11,
221     0x1f, 0xd8, 0x9a, 0x80, 0x42, 0x3d, 0x7f, 0xa4,
222     0xb8, 0x9a, 0xaa, 0xea, 0x72, 0xc1, 0xe3, 0xed,
223     0x06, 0x60, 0x92, 0x37, 0xf9, 0xba, 0xfb, 0x9e,
224     0xed, 0x05, 0xa6, 0xd4, 0x72, 0x68, 0x4f, 0x63,
225     0xfe, 0xd6, 0x10, 0x0d, 0x4f, 0x0a, 0x93, 0xc6,
226     0xb9, 0xd7, 0xaf, 0xfd, 0xd9, 0x57, 0x7d, 0xcb,
227     0x75, 0xe8, 0x93, 0x2b, 0xae, 0x4f, 0xea, 0xd7,
228     0x30, 0x0b, 0x58, 0x44, 0x82, 0x0f, 0x84, 0x5d,
229     0x62, 0x11, 0x78, 0xea, 0x5f, 0xc5, 0x02, 0x81,
230     0x81, 0x00, 0x82, 0x0c, 0xc1, 0xe6, 0x0b, 0x72,
231     0xf1, 0x48, 0x5f, 0xac, 0xbd, 0x98, 0xe5, 0x7d,
232     0x09, 0xbd, 0x15, 0x95, 0x47, 0x09, 0xa1, 0x6c,
233     0x03, 0x91, 0xbf, 0x05, 0x70, 0xc1, 0x3e, 0x52,
234     0x64, 0x99, 0x0e, 0xa7, 0x98, 0x70, 0xfb, 0xf6,
235     0xeb, 0x9e, 0x25, 0x9d, 0x8e, 0x88, 0x30, 0xf2,
236     0xf0, 0x22, 0x6c, 0xd0, 0xcc, 0x51, 0x8f, 0x5c,
237     0x70, 0xc7, 0x37, 0xc4, 0x69, 0xab, 0x1d, 0xfc,
238     0xed, 0x3a, 0x03, 0xbb, 0xa2, 0xad, 0xb6, 0xea,
239     0x89, 0x6b, 0x67, 0x4b, 0x96, 0xaa, 0xd9, 0xcc,
240     0xc8, 0x4b, 0xfa, 0x18, 0x21, 0x08, 0xb2, 0xa3,
241     0xb9, 0x3e, 0x61, 0x99, 0xdc, 0x5a, 0x97, 0x9c,
242     0x73, 0x6a, 0xb9, 0xf9, 0x68, 0x03, 0x24, 0x5f,
243     0x55, 0x77, 0x9c, 0xb4, 0xbe, 0x7a, 0x78, 0x53,
244     0x68, 0x48, 0x69, 0x53, 0xc8, 0xb1, 0xf5, 0xbf,
245     0x98, 0x2d, 0x11, 0x1e, 0x98, 0xa8, 0x36, 0x50,
246     0xa0, 0xb1, 0x02, 0x81, 0x81, 0x00, 0x90, 0x88,
247     0x30, 0x71, 0xc7, 0xfe, 0x9b, 0x6d, 0x95, 0x37,
248     0x6d, 0x79, 0xfc, 0x85, 0xe7, 0x44, 0x78, 0xbc,
249     0x79, 0x6e, 0x47, 0x86, 0xc9, 0xf3, 0xdd, 0xc6,
250     0xec, 0xa9, 0x94, 0x9f, 0x40, 0xeb, 0x87, 0xd0,
251     0xdb, 0xee, 0xcd, 0x1b, 0x87, 0x23, 0xff, 0x76,
252     0xd4, 0x37, 0x8a, 0xcd, 0xb9, 0x6e, 0xd1, 0x98,
253     0xf6, 0x97, 0x8d, 0xe3, 0x81, 0x6d, 0xc3, 0x4e,
254     0xd1, 0xa0, 0xc4, 0x9f, 0xbd, 0x34, 0xe5, 0xe8,
255     0x53, 0x4f, 0xca, 0x10, 0xb5, 0xed, 0xe7, 0x16,
256     0x09, 0x54, 0xde, 0x60, 0xa7, 0xd1, 0x16, 0x6e,
257     0x2e, 0xb7, 0xbe, 0x7a, 0xd5, 0x9b, 0x26, 0xef,
258     0xe4, 0x0e, 0x77, 0xfa, 0xa9, 0xdd, 0xdc, 0xb9,
259     0x88, 0x19, 0x23, 0x70, 0xc7, 0xe1, 0x60, 0xaf,
260     0x8c, 0x73, 0x04, 0xf7, 0x71, 0x17, 0x81, 0x36,
261     0x75, 0xbb, 0x97, 0xd7, 0x75, 0xb6, 0x8e, 0xbc,
262     0xac, 0x9c, 0x6a, 0x9b, 0x24, 0x89, 0x02, 0x81,
263     0x80, 0x5a, 0x2b, 0xc7, 0x6b, 0x8c, 0x65, 0xdb,
264     0x04, 0x73, 0xab, 0x25, 0xe1, 0x5b, 0xbc, 0x3c,
265     0xcf, 0x5a, 0x3c, 0x04, 0xae, 0x97, 0x2e, 0xfd,
266     0xa4, 0x97, 0x1f, 0x05, 0x17, 0x27, 0xac, 0x7c,
267     0x30, 0x85, 0xb4, 0x82, 0x3f, 0x5b, 0xb7, 0x94,
268     0x3b, 0x7f, 0x6c, 0x0c, 0xc7, 0x16, 0xc6, 0xa0,
269     0xbd, 0x80, 0xb0, 0x81, 0xde, 0xa0, 0x23, 0xa6,
270     0xf6, 0x75, 0x33, 0x51, 0x35, 0xa2, 0x75, 0x55,
271     0x70, 0x4d, 0x42, 0xbb, 0xcf, 0x54, 0xe4, 0xdb,
272     0x2d, 0x88, 0xa0, 0x7a, 0xf2, 0x17, 0xa7, 0xdd,
273     0x13, 0x44, 0x9f, 0x5f, 0x6b, 0x2c, 0x42, 0x42,
274     0x8b, 0x13, 0x4d, 0xf9, 0x5b, 0xf8, 0x33, 0x42,
275     0xd9, 0x9e, 0x50, 0x1c, 0x7c, 0xbc, 0xfa, 0x62,
276     0x85, 0x0b, 0xcf, 0x99, 0xda, 0x9e, 0x04, 0x90,
277     0xb2, 0xc6, 0xb2, 0x0a, 0x2a, 0x7c, 0x6d, 0x6a,
278     0x40, 0xfc, 0xf5, 0x50, 0x98, 0x46, 0x89, 0x82,
279     0x40
280 };
281 #endif
282 
283 #ifndef OPENSSL_NO_EC
284 #ifndef OPENSSL_NO_DEPRECATED_3_0
285 /*
286  *  -----BEGIN EC PRIVATE KEY-----
287  *  MHcCAQEEIJLyl7hJjpQL/RhP1x2zS79xdiPJQB683gWeqcqHPeZkoAoGCCqGSM49
288  *  AwEHoUQDQgAEdsjygVYjjaKBF4CNECVllNf017p5/MxNSWDoTHy9I2GeDwEDDazI
289  *  D/xy8JiYjtPKVE/Zqwbmivp2UwtH28a7NQ==
290  *  -----END EC PRIVATE KEY-----
291  */
292 static const char ECDSAPrivateKeyPEM[] = {
293     0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x45,
294     0x43, 0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x20, 0x4b, 0x45,
295     0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x4d, 0x48, 0x63, 0x43, 0x41,
296     0x51, 0x45, 0x45, 0x49, 0x4a, 0x4c, 0x79, 0x6c, 0x37, 0x68, 0x4a, 0x6a,
297     0x70, 0x51, 0x4c, 0x2f, 0x52, 0x68, 0x50, 0x31, 0x78, 0x32, 0x7a, 0x53,
298     0x37, 0x39, 0x78, 0x64, 0x69, 0x50, 0x4a, 0x51, 0x42, 0x36, 0x38, 0x33,
299     0x67, 0x57, 0x65, 0x71, 0x63, 0x71, 0x48, 0x50, 0x65, 0x5a, 0x6b, 0x6f,
300     0x41, 0x6f, 0x47, 0x43, 0x43, 0x71, 0x47, 0x53, 0x4d, 0x34, 0x39, 0x0a,
301     0x41, 0x77, 0x45, 0x48, 0x6f, 0x55, 0x51, 0x44, 0x51, 0x67, 0x41, 0x45,
302     0x64, 0x73, 0x6a, 0x79, 0x67, 0x56, 0x59, 0x6a, 0x6a, 0x61, 0x4b, 0x42,
303     0x46, 0x34, 0x43, 0x4e, 0x45, 0x43, 0x56, 0x6c, 0x6c, 0x4e, 0x66, 0x30,
304     0x31, 0x37, 0x70, 0x35, 0x2f, 0x4d, 0x78, 0x4e, 0x53, 0x57, 0x44, 0x6f,
305     0x54, 0x48, 0x79, 0x39, 0x49, 0x32, 0x47, 0x65, 0x44, 0x77, 0x45, 0x44,
306     0x44, 0x61, 0x7a, 0x49, 0x0a, 0x44, 0x2f, 0x78, 0x79, 0x38, 0x4a, 0x69,
307     0x59, 0x6a, 0x74, 0x50, 0x4b, 0x56, 0x45, 0x2f, 0x5a, 0x71, 0x77, 0x62,
308     0x6d, 0x69, 0x76, 0x70, 0x32, 0x55, 0x77, 0x74, 0x48, 0x32, 0x38, 0x61,
309     0x37, 0x4e, 0x51, 0x3d, 0x3d, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45,
310     0x4e, 0x44, 0x20, 0x45, 0x43, 0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54,
311     0x45, 0x20, 0x4b, 0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a
312 };
313 #endif
314 
315 /*
316  * -----BEGIN CERTIFICATE-----
317  *  MIIBXzCCAQagAwIBAgIJAK6/Yvf/ain6MAoGCCqGSM49BAMCMBIxEDAOBgNVBAoM
318  *  B0FjbWUgQ28wHhcNMTYxMjI1MTEzOTI3WhcNMjYxMjI1MTEzOTI3WjASMRAwDgYD
319  *  VQQKDAdBY21lIENvMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEdsjygVYjjaKB
320  *  F4CNECVllNf017p5/MxNSWDoTHy9I2GeDwEDDazID/xy8JiYjtPKVE/Zqwbmivp2
321  *  UwtH28a7NaNFMEMwCQYDVR0TBAIwADALBgNVHQ8EBAMCBaAwEwYDVR0lBAwwCgYI
322  *  KwYBBQUHAwEwFAYDVR0RBA0wC4IJbG9jYWxob3N0MAoGCCqGSM49BAMCA0cAMEQC
323  *  IEzr3t/jejVE9oSnBp8c3P2p+lDLVRrB8zxLyjZvirUXAiAyQPaE9MNcL8/nRpuu
324  *  99I1enCSmWIAJ57IwuJ/n1d45Q==
325  *  -----END CERTIFICATE-----
326  */
327 static const char ECDSACertPEM[] = {
328     0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x43,
329     0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d,
330     0x2d, 0x2d, 0x2d, 0x0a, 0x4d, 0x49, 0x49, 0x42, 0x58, 0x7a, 0x43, 0x43,
331     0x41, 0x51, 0x61, 0x67, 0x41, 0x77, 0x49, 0x42, 0x41, 0x67, 0x49, 0x4a,
332     0x41, 0x4b, 0x36, 0x2f, 0x59, 0x76, 0x66, 0x2f, 0x61, 0x69, 0x6e, 0x36,
333     0x4d, 0x41, 0x6f, 0x47, 0x43, 0x43, 0x71, 0x47, 0x53, 0x4d, 0x34, 0x39,
334     0x42, 0x41, 0x4d, 0x43, 0x4d, 0x42, 0x49, 0x78, 0x45, 0x44, 0x41, 0x4f,
335     0x42, 0x67, 0x4e, 0x56, 0x42, 0x41, 0x6f, 0x4d, 0x0a, 0x42, 0x30, 0x46,
336     0x6a, 0x62, 0x57, 0x55, 0x67, 0x51, 0x32, 0x38, 0x77, 0x48, 0x68, 0x63,
337     0x4e, 0x4d, 0x54, 0x59, 0x78, 0x4d, 0x6a, 0x49, 0x31, 0x4d, 0x54, 0x45,
338     0x7a, 0x4f, 0x54, 0x49, 0x33, 0x57, 0x68, 0x63, 0x4e, 0x4d, 0x6a, 0x59,
339     0x78, 0x4d, 0x6a, 0x49, 0x31, 0x4d, 0x54, 0x45, 0x7a, 0x4f, 0x54, 0x49,
340     0x33, 0x57, 0x6a, 0x41, 0x53, 0x4d, 0x52, 0x41, 0x77, 0x44, 0x67, 0x59,
341     0x44, 0x0a, 0x56, 0x51, 0x51, 0x4b, 0x44, 0x41, 0x64, 0x42, 0x59, 0x32,
342     0x31, 0x6c, 0x49, 0x45, 0x4e, 0x76, 0x4d, 0x46, 0x6b, 0x77, 0x45, 0x77,
343     0x59, 0x48, 0x4b, 0x6f, 0x5a, 0x49, 0x7a, 0x6a, 0x30, 0x43, 0x41, 0x51,
344     0x59, 0x49, 0x4b, 0x6f, 0x5a, 0x49, 0x7a, 0x6a, 0x30, 0x44, 0x41, 0x51,
345     0x63, 0x44, 0x51, 0x67, 0x41, 0x45, 0x64, 0x73, 0x6a, 0x79, 0x67, 0x56,
346     0x59, 0x6a, 0x6a, 0x61, 0x4b, 0x42, 0x0a, 0x46, 0x34, 0x43, 0x4e, 0x45,
347     0x43, 0x56, 0x6c, 0x6c, 0x4e, 0x66, 0x30, 0x31, 0x37, 0x70, 0x35, 0x2f,
348     0x4d, 0x78, 0x4e, 0x53, 0x57, 0x44, 0x6f, 0x54, 0x48, 0x79, 0x39, 0x49,
349     0x32, 0x47, 0x65, 0x44, 0x77, 0x45, 0x44, 0x44, 0x61, 0x7a, 0x49, 0x44,
350     0x2f, 0x78, 0x79, 0x38, 0x4a, 0x69, 0x59, 0x6a, 0x74, 0x50, 0x4b, 0x56,
351     0x45, 0x2f, 0x5a, 0x71, 0x77, 0x62, 0x6d, 0x69, 0x76, 0x70, 0x32, 0x0a,
352     0x55, 0x77, 0x74, 0x48, 0x32, 0x38, 0x61, 0x37, 0x4e, 0x61, 0x4e, 0x46,
353     0x4d, 0x45, 0x4d, 0x77, 0x43, 0x51, 0x59, 0x44, 0x56, 0x52, 0x30, 0x54,
354     0x42, 0x41, 0x49, 0x77, 0x41, 0x44, 0x41, 0x4c, 0x42, 0x67, 0x4e, 0x56,
355     0x48, 0x51, 0x38, 0x45, 0x42, 0x41, 0x4d, 0x43, 0x42, 0x61, 0x41, 0x77,
356     0x45, 0x77, 0x59, 0x44, 0x56, 0x52, 0x30, 0x6c, 0x42, 0x41, 0x77, 0x77,
357     0x43, 0x67, 0x59, 0x49, 0x0a, 0x4b, 0x77, 0x59, 0x42, 0x42, 0x51, 0x55,
358     0x48, 0x41, 0x77, 0x45, 0x77, 0x46, 0x41, 0x59, 0x44, 0x56, 0x52, 0x30,
359     0x52, 0x42, 0x41, 0x30, 0x77, 0x43, 0x34, 0x49, 0x4a, 0x62, 0x47, 0x39,
360     0x6a, 0x59, 0x57, 0x78, 0x6f, 0x62, 0x33, 0x4e, 0x30, 0x4d, 0x41, 0x6f,
361     0x47, 0x43, 0x43, 0x71, 0x47, 0x53, 0x4d, 0x34, 0x39, 0x42, 0x41, 0x4d,
362     0x43, 0x41, 0x30, 0x63, 0x41, 0x4d, 0x45, 0x51, 0x43, 0x0a, 0x49, 0x45,
363     0x7a, 0x72, 0x33, 0x74, 0x2f, 0x6a, 0x65, 0x6a, 0x56, 0x45, 0x39, 0x6f,
364     0x53, 0x6e, 0x42, 0x70, 0x38, 0x63, 0x33, 0x50, 0x32, 0x70, 0x2b, 0x6c,
365     0x44, 0x4c, 0x56, 0x52, 0x72, 0x42, 0x38, 0x7a, 0x78, 0x4c, 0x79, 0x6a,
366     0x5a, 0x76, 0x69, 0x72, 0x55, 0x58, 0x41, 0x69, 0x41, 0x79, 0x51, 0x50,
367     0x61, 0x45, 0x39, 0x4d, 0x4e, 0x63, 0x4c, 0x38, 0x2f, 0x6e, 0x52, 0x70,
368     0x75, 0x75, 0x0a, 0x39, 0x39, 0x49, 0x31, 0x65, 0x6e, 0x43, 0x53, 0x6d,
369     0x57, 0x49, 0x41, 0x4a, 0x35, 0x37, 0x49, 0x77, 0x75, 0x4a, 0x2f, 0x6e,
370     0x31, 0x64, 0x34, 0x35, 0x51, 0x3d, 0x3d, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d,
371     0x2d, 0x45, 0x4e, 0x44, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49,
372     0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a
373 };
374 #endif
375 
376 #if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0)
377 /*
378  * -----BEGIN DSA PRIVATE KEY-----
379  * MIIBuwIBAAKBgQDdkFKzNABLOha7Eqj7004+p5fhtR6bxpujToMmSZTYi8igVVXP
380  * Wzf03ULKS5UKjA6WpR6EiZAhm+PdxusZ5xfAuRZLdKy0bgxn1f348Rwh+EQNaEM8
381  * 0TGcnw5ijwKmSw5yyHPDWdiHzoqEBlhAf8Nl22YTXax/clsc/pu/RRLAdwIVAIEg
382  * QqWRf/1EIZZcgM65Qpd65YuxAoGBAKBauV/RuloFHoSy5iWXESDywiS380tN5974
383  * GukGwoYdZo5uSIH6ahpeNSef0MbHGAzr7ZVEnhCQfRAwH1gRvSHoq/Rbmcvtd3r+
384  * QtQHOwvQHgLAynhI4i73c794czHaR+439bmcaSwDnQduRM85Mho/jiiZzAVPxBmG
385  * POIMWNXXAoGAI6Ep5IE7yn3JzkXO9B6tC3bbDM+ZzuuInwZLbtZ8lim7Dsqabg4k
386  * 2YbE4R95Bnfwnjsyl80mq/DbQN5lAHBvjDrkC6ItojBGKI3+iIrqGUEJdxvl4ulj
387  * F0PmSD7zvIG8BfocKOel+EHH0YryExiW6krV1KW2ZRmJrqSFw6KCjV0CFFQFbPfU
388  * xy5PmKytJmXR8BmppkIO
389  * -----END DSA PRIVATE KEY-----
390  */
391 static const char DSAPrivateKeyPEM[] = {
392     0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x44,
393     0x53, 0x41, 0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x20, 0x4b,
394     0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a, 0x4d, 0x49, 0x49, 0x42,
395     0x75, 0x77, 0x49, 0x42, 0x41, 0x41, 0x4b, 0x42, 0x67, 0x51, 0x44, 0x64,
396     0x6b, 0x46, 0x4b, 0x7a, 0x4e, 0x41, 0x42, 0x4c, 0x4f, 0x68, 0x61, 0x37,
397     0x45, 0x71, 0x6a, 0x37, 0x30, 0x30, 0x34, 0x2b, 0x70, 0x35, 0x66, 0x68,
398     0x74, 0x52, 0x36, 0x62, 0x78, 0x70, 0x75, 0x6a, 0x54, 0x6f, 0x4d, 0x6d,
399     0x53, 0x5a, 0x54, 0x59, 0x69, 0x38, 0x69, 0x67, 0x56, 0x56, 0x58, 0x50,
400     0x0a, 0x57, 0x7a, 0x66, 0x30, 0x33, 0x55, 0x4c, 0x4b, 0x53, 0x35, 0x55,
401     0x4b, 0x6a, 0x41, 0x36, 0x57, 0x70, 0x52, 0x36, 0x45, 0x69, 0x5a, 0x41,
402     0x68, 0x6d, 0x2b, 0x50, 0x64, 0x78, 0x75, 0x73, 0x5a, 0x35, 0x78, 0x66,
403     0x41, 0x75, 0x52, 0x5a, 0x4c, 0x64, 0x4b, 0x79, 0x30, 0x62, 0x67, 0x78,
404     0x6e, 0x31, 0x66, 0x33, 0x34, 0x38, 0x52, 0x77, 0x68, 0x2b, 0x45, 0x51,
405     0x4e, 0x61, 0x45, 0x4d, 0x38, 0x0a, 0x30, 0x54, 0x47, 0x63, 0x6e, 0x77,
406     0x35, 0x69, 0x6a, 0x77, 0x4b, 0x6d, 0x53, 0x77, 0x35, 0x79, 0x79, 0x48,
407     0x50, 0x44, 0x57, 0x64, 0x69, 0x48, 0x7a, 0x6f, 0x71, 0x45, 0x42, 0x6c,
408     0x68, 0x41, 0x66, 0x38, 0x4e, 0x6c, 0x32, 0x32, 0x59, 0x54, 0x58, 0x61,
409     0x78, 0x2f, 0x63, 0x6c, 0x73, 0x63, 0x2f, 0x70, 0x75, 0x2f, 0x52, 0x52,
410     0x4c, 0x41, 0x64, 0x77, 0x49, 0x56, 0x41, 0x49, 0x45, 0x67, 0x0a, 0x51,
411     0x71, 0x57, 0x52, 0x66, 0x2f, 0x31, 0x45, 0x49, 0x5a, 0x5a, 0x63, 0x67,
412     0x4d, 0x36, 0x35, 0x51, 0x70, 0x64, 0x36, 0x35, 0x59, 0x75, 0x78, 0x41,
413     0x6f, 0x47, 0x42, 0x41, 0x4b, 0x42, 0x61, 0x75, 0x56, 0x2f, 0x52, 0x75,
414     0x6c, 0x6f, 0x46, 0x48, 0x6f, 0x53, 0x79, 0x35, 0x69, 0x57, 0x58, 0x45,
415     0x53, 0x44, 0x79, 0x77, 0x69, 0x53, 0x33, 0x38, 0x30, 0x74, 0x4e, 0x35,
416     0x39, 0x37, 0x34, 0x0a, 0x47, 0x75, 0x6b, 0x47, 0x77, 0x6f, 0x59, 0x64,
417     0x5a, 0x6f, 0x35, 0x75, 0x53, 0x49, 0x48, 0x36, 0x61, 0x68, 0x70, 0x65,
418     0x4e, 0x53, 0x65, 0x66, 0x30, 0x4d, 0x62, 0x48, 0x47, 0x41, 0x7a, 0x72,
419     0x37, 0x5a, 0x56, 0x45, 0x6e, 0x68, 0x43, 0x51, 0x66, 0x52, 0x41, 0x77,
420     0x48, 0x31, 0x67, 0x52, 0x76, 0x53, 0x48, 0x6f, 0x71, 0x2f, 0x52, 0x62,
421     0x6d, 0x63, 0x76, 0x74, 0x64, 0x33, 0x72, 0x2b, 0x0a, 0x51, 0x74, 0x51,
422     0x48, 0x4f, 0x77, 0x76, 0x51, 0x48, 0x67, 0x4c, 0x41, 0x79, 0x6e, 0x68,
423     0x49, 0x34, 0x69, 0x37, 0x33, 0x63, 0x37, 0x39, 0x34, 0x63, 0x7a, 0x48,
424     0x61, 0x52, 0x2b, 0x34, 0x33, 0x39, 0x62, 0x6d, 0x63, 0x61, 0x53, 0x77,
425     0x44, 0x6e, 0x51, 0x64, 0x75, 0x52, 0x4d, 0x38, 0x35, 0x4d, 0x68, 0x6f,
426     0x2f, 0x6a, 0x69, 0x69, 0x5a, 0x7a, 0x41, 0x56, 0x50, 0x78, 0x42, 0x6d,
427     0x47, 0x0a, 0x50, 0x4f, 0x49, 0x4d, 0x57, 0x4e, 0x58, 0x58, 0x41, 0x6f,
428     0x47, 0x41, 0x49, 0x36, 0x45, 0x70, 0x35, 0x49, 0x45, 0x37, 0x79, 0x6e,
429     0x33, 0x4a, 0x7a, 0x6b, 0x58, 0x4f, 0x39, 0x42, 0x36, 0x74, 0x43, 0x33,
430     0x62, 0x62, 0x44, 0x4d, 0x2b, 0x5a, 0x7a, 0x75, 0x75, 0x49, 0x6e, 0x77,
431     0x5a, 0x4c, 0x62, 0x74, 0x5a, 0x38, 0x6c, 0x69, 0x6d, 0x37, 0x44, 0x73,
432     0x71, 0x61, 0x62, 0x67, 0x34, 0x6b, 0x0a, 0x32, 0x59, 0x62, 0x45, 0x34,
433     0x52, 0x39, 0x35, 0x42, 0x6e, 0x66, 0x77, 0x6e, 0x6a, 0x73, 0x79, 0x6c,
434     0x38, 0x30, 0x6d, 0x71, 0x2f, 0x44, 0x62, 0x51, 0x4e, 0x35, 0x6c, 0x41,
435     0x48, 0x42, 0x76, 0x6a, 0x44, 0x72, 0x6b, 0x43, 0x36, 0x49, 0x74, 0x6f,
436     0x6a, 0x42, 0x47, 0x4b, 0x49, 0x33, 0x2b, 0x69, 0x49, 0x72, 0x71, 0x47,
437     0x55, 0x45, 0x4a, 0x64, 0x78, 0x76, 0x6c, 0x34, 0x75, 0x6c, 0x6a, 0x0a,
438     0x46, 0x30, 0x50, 0x6d, 0x53, 0x44, 0x37, 0x7a, 0x76, 0x49, 0x47, 0x38,
439     0x42, 0x66, 0x6f, 0x63, 0x4b, 0x4f, 0x65, 0x6c, 0x2b, 0x45, 0x48, 0x48,
440     0x30, 0x59, 0x72, 0x79, 0x45, 0x78, 0x69, 0x57, 0x36, 0x6b, 0x72, 0x56,
441     0x31, 0x4b, 0x57, 0x32, 0x5a, 0x52, 0x6d, 0x4a, 0x72, 0x71, 0x53, 0x46,
442     0x77, 0x36, 0x4b, 0x43, 0x6a, 0x56, 0x30, 0x43, 0x46, 0x46, 0x51, 0x46,
443     0x62, 0x50, 0x66, 0x55, 0x0a, 0x78, 0x79, 0x35, 0x50, 0x6d, 0x4b, 0x79,
444     0x74, 0x4a, 0x6d, 0x58, 0x52, 0x38, 0x42, 0x6d, 0x70, 0x70, 0x6b, 0x49,
445     0x4f, 0x0a, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x44,
446     0x53, 0x41, 0x20, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x20, 0x4b,
447     0x45, 0x59, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x0a
448 };
449 
450 /*
451  * -----BEGIN CERTIFICATE-----
452  * MIICqTCCAmegAwIBAgIJAILDGUk37fWGMAsGCWCGSAFlAwQDAjASMRAwDgYDVQQK
453  * DAdBY21lIENvMB4XDTE2MTIyNTEzMjUzNloXDTI2MTIyNTEzMjUzNlowEjEQMA4G
454  * A1UECgwHQWNtZSBDbzCCAbcwggEsBgcqhkjOOAQBMIIBHwKBgQDdkFKzNABLOha7
455  * Eqj7004+p5fhtR6bxpujToMmSZTYi8igVVXPWzf03ULKS5UKjA6WpR6EiZAhm+Pd
456  * xusZ5xfAuRZLdKy0bgxn1f348Rwh+EQNaEM80TGcnw5ijwKmSw5yyHPDWdiHzoqE
457  * BlhAf8Nl22YTXax/clsc/pu/RRLAdwIVAIEgQqWRf/1EIZZcgM65Qpd65YuxAoGB
458  * AKBauV/RuloFHoSy5iWXESDywiS380tN5974GukGwoYdZo5uSIH6ahpeNSef0MbH
459  * GAzr7ZVEnhCQfRAwH1gRvSHoq/Rbmcvtd3r+QtQHOwvQHgLAynhI4i73c794czHa
460  * R+439bmcaSwDnQduRM85Mho/jiiZzAVPxBmGPOIMWNXXA4GEAAKBgCOhKeSBO8p9
461  * yc5FzvQerQt22wzPmc7riJ8GS27WfJYpuw7Kmm4OJNmGxOEfeQZ38J47MpfNJqvw
462  * 20DeZQBwb4w65AuiLaIwRiiN/oiK6hlBCXcb5eLpYxdD5kg+87yBvAX6HCjnpfhB
463  * x9GK8hMYlupK1dSltmUZia6khcOigo1do0UwQzAJBgNVHRMEAjAAMAsGA1UdDwQE
464  * AwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAUBgNVHREEDTALgglsb2NhbGhvc3Qw
465  * CwYJYIZIAWUDBAMCAy8AMCwCFClxInXTRWNJEWdi5ilNr/fbM1bKAhQy4B7wtmfd
466  * I+zV6g3w9qBkNqStpA==
467  * -----END CERTIFICATE-----
468  */
469 static const char DSACertPEM[] = {
470     0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x43,
471     0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d,
472     0x2d, 0x2d, 0x2d, 0x0a, 0x4d, 0x49, 0x49, 0x43, 0x71, 0x54, 0x43, 0x43,
473     0x41, 0x6d, 0x65, 0x67, 0x41, 0x77, 0x49, 0x42, 0x41, 0x67, 0x49, 0x4a,
474     0x41, 0x49, 0x4c, 0x44, 0x47, 0x55, 0x6b, 0x33, 0x37, 0x66, 0x57, 0x47,
475     0x4d, 0x41, 0x73, 0x47, 0x43, 0x57, 0x43, 0x47, 0x53, 0x41, 0x46, 0x6c,
476     0x41, 0x77, 0x51, 0x44, 0x41, 0x6a, 0x41, 0x53, 0x4d, 0x52, 0x41, 0x77,
477     0x44, 0x67, 0x59, 0x44, 0x56, 0x51, 0x51, 0x4b, 0x0a, 0x44, 0x41, 0x64,
478     0x42, 0x59, 0x32, 0x31, 0x6c, 0x49, 0x45, 0x4e, 0x76, 0x4d, 0x42, 0x34,
479     0x58, 0x44, 0x54, 0x45, 0x32, 0x4d, 0x54, 0x49, 0x79, 0x4e, 0x54, 0x45,
480     0x7a, 0x4d, 0x6a, 0x55, 0x7a, 0x4e, 0x6c, 0x6f, 0x58, 0x44, 0x54, 0x49,
481     0x32, 0x4d, 0x54, 0x49, 0x79, 0x4e, 0x54, 0x45, 0x7a, 0x4d, 0x6a, 0x55,
482     0x7a, 0x4e, 0x6c, 0x6f, 0x77, 0x45, 0x6a, 0x45, 0x51, 0x4d, 0x41, 0x34,
483     0x47, 0x0a, 0x41, 0x31, 0x55, 0x45, 0x43, 0x67, 0x77, 0x48, 0x51, 0x57,
484     0x4e, 0x74, 0x5a, 0x53, 0x42, 0x44, 0x62, 0x7a, 0x43, 0x43, 0x41, 0x62,
485     0x63, 0x77, 0x67, 0x67, 0x45, 0x73, 0x42, 0x67, 0x63, 0x71, 0x68, 0x6b,
486     0x6a, 0x4f, 0x4f, 0x41, 0x51, 0x42, 0x4d, 0x49, 0x49, 0x42, 0x48, 0x77,
487     0x4b, 0x42, 0x67, 0x51, 0x44, 0x64, 0x6b, 0x46, 0x4b, 0x7a, 0x4e, 0x41,
488     0x42, 0x4c, 0x4f, 0x68, 0x61, 0x37, 0x0a, 0x45, 0x71, 0x6a, 0x37, 0x30,
489     0x30, 0x34, 0x2b, 0x70, 0x35, 0x66, 0x68, 0x74, 0x52, 0x36, 0x62, 0x78,
490     0x70, 0x75, 0x6a, 0x54, 0x6f, 0x4d, 0x6d, 0x53, 0x5a, 0x54, 0x59, 0x69,
491     0x38, 0x69, 0x67, 0x56, 0x56, 0x58, 0x50, 0x57, 0x7a, 0x66, 0x30, 0x33,
492     0x55, 0x4c, 0x4b, 0x53, 0x35, 0x55, 0x4b, 0x6a, 0x41, 0x36, 0x57, 0x70,
493     0x52, 0x36, 0x45, 0x69, 0x5a, 0x41, 0x68, 0x6d, 0x2b, 0x50, 0x64, 0x0a,
494     0x78, 0x75, 0x73, 0x5a, 0x35, 0x78, 0x66, 0x41, 0x75, 0x52, 0x5a, 0x4c,
495     0x64, 0x4b, 0x79, 0x30, 0x62, 0x67, 0x78, 0x6e, 0x31, 0x66, 0x33, 0x34,
496     0x38, 0x52, 0x77, 0x68, 0x2b, 0x45, 0x51, 0x4e, 0x61, 0x45, 0x4d, 0x38,
497     0x30, 0x54, 0x47, 0x63, 0x6e, 0x77, 0x35, 0x69, 0x6a, 0x77, 0x4b, 0x6d,
498     0x53, 0x77, 0x35, 0x79, 0x79, 0x48, 0x50, 0x44, 0x57, 0x64, 0x69, 0x48,
499     0x7a, 0x6f, 0x71, 0x45, 0x0a, 0x42, 0x6c, 0x68, 0x41, 0x66, 0x38, 0x4e,
500     0x6c, 0x32, 0x32, 0x59, 0x54, 0x58, 0x61, 0x78, 0x2f, 0x63, 0x6c, 0x73,
501     0x63, 0x2f, 0x70, 0x75, 0x2f, 0x52, 0x52, 0x4c, 0x41, 0x64, 0x77, 0x49,
502     0x56, 0x41, 0x49, 0x45, 0x67, 0x51, 0x71, 0x57, 0x52, 0x66, 0x2f, 0x31,
503     0x45, 0x49, 0x5a, 0x5a, 0x63, 0x67, 0x4d, 0x36, 0x35, 0x51, 0x70, 0x64,
504     0x36, 0x35, 0x59, 0x75, 0x78, 0x41, 0x6f, 0x47, 0x42, 0x0a, 0x41, 0x4b,
505     0x42, 0x61, 0x75, 0x56, 0x2f, 0x52, 0x75, 0x6c, 0x6f, 0x46, 0x48, 0x6f,
506     0x53, 0x79, 0x35, 0x69, 0x57, 0x58, 0x45, 0x53, 0x44, 0x79, 0x77, 0x69,
507     0x53, 0x33, 0x38, 0x30, 0x74, 0x4e, 0x35, 0x39, 0x37, 0x34, 0x47, 0x75,
508     0x6b, 0x47, 0x77, 0x6f, 0x59, 0x64, 0x5a, 0x6f, 0x35, 0x75, 0x53, 0x49,
509     0x48, 0x36, 0x61, 0x68, 0x70, 0x65, 0x4e, 0x53, 0x65, 0x66, 0x30, 0x4d,
510     0x62, 0x48, 0x0a, 0x47, 0x41, 0x7a, 0x72, 0x37, 0x5a, 0x56, 0x45, 0x6e,
511     0x68, 0x43, 0x51, 0x66, 0x52, 0x41, 0x77, 0x48, 0x31, 0x67, 0x52, 0x76,
512     0x53, 0x48, 0x6f, 0x71, 0x2f, 0x52, 0x62, 0x6d, 0x63, 0x76, 0x74, 0x64,
513     0x33, 0x72, 0x2b, 0x51, 0x74, 0x51, 0x48, 0x4f, 0x77, 0x76, 0x51, 0x48,
514     0x67, 0x4c, 0x41, 0x79, 0x6e, 0x68, 0x49, 0x34, 0x69, 0x37, 0x33, 0x63,
515     0x37, 0x39, 0x34, 0x63, 0x7a, 0x48, 0x61, 0x0a, 0x52, 0x2b, 0x34, 0x33,
516     0x39, 0x62, 0x6d, 0x63, 0x61, 0x53, 0x77, 0x44, 0x6e, 0x51, 0x64, 0x75,
517     0x52, 0x4d, 0x38, 0x35, 0x4d, 0x68, 0x6f, 0x2f, 0x6a, 0x69, 0x69, 0x5a,
518     0x7a, 0x41, 0x56, 0x50, 0x78, 0x42, 0x6d, 0x47, 0x50, 0x4f, 0x49, 0x4d,
519     0x57, 0x4e, 0x58, 0x58, 0x41, 0x34, 0x47, 0x45, 0x41, 0x41, 0x4b, 0x42,
520     0x67, 0x43, 0x4f, 0x68, 0x4b, 0x65, 0x53, 0x42, 0x4f, 0x38, 0x70, 0x39,
521     0x0a, 0x79, 0x63, 0x35, 0x46, 0x7a, 0x76, 0x51, 0x65, 0x72, 0x51, 0x74,
522     0x32, 0x32, 0x77, 0x7a, 0x50, 0x6d, 0x63, 0x37, 0x72, 0x69, 0x4a, 0x38,
523     0x47, 0x53, 0x32, 0x37, 0x57, 0x66, 0x4a, 0x59, 0x70, 0x75, 0x77, 0x37,
524     0x4b, 0x6d, 0x6d, 0x34, 0x4f, 0x4a, 0x4e, 0x6d, 0x47, 0x78, 0x4f, 0x45,
525     0x66, 0x65, 0x51, 0x5a, 0x33, 0x38, 0x4a, 0x34, 0x37, 0x4d, 0x70, 0x66,
526     0x4e, 0x4a, 0x71, 0x76, 0x77, 0x0a, 0x32, 0x30, 0x44, 0x65, 0x5a, 0x51,
527     0x42, 0x77, 0x62, 0x34, 0x77, 0x36, 0x35, 0x41, 0x75, 0x69, 0x4c, 0x61,
528     0x49, 0x77, 0x52, 0x69, 0x69, 0x4e, 0x2f, 0x6f, 0x69, 0x4b, 0x36, 0x68,
529     0x6c, 0x42, 0x43, 0x58, 0x63, 0x62, 0x35, 0x65, 0x4c, 0x70, 0x59, 0x78,
530     0x64, 0x44, 0x35, 0x6b, 0x67, 0x2b, 0x38, 0x37, 0x79, 0x42, 0x76, 0x41,
531     0x58, 0x36, 0x48, 0x43, 0x6a, 0x6e, 0x70, 0x66, 0x68, 0x42, 0x0a, 0x78,
532     0x39, 0x47, 0x4b, 0x38, 0x68, 0x4d, 0x59, 0x6c, 0x75, 0x70, 0x4b, 0x31,
533     0x64, 0x53, 0x6c, 0x74, 0x6d, 0x55, 0x5a, 0x69, 0x61, 0x36, 0x6b, 0x68,
534     0x63, 0x4f, 0x69, 0x67, 0x6f, 0x31, 0x64, 0x6f, 0x30, 0x55, 0x77, 0x51,
535     0x7a, 0x41, 0x4a, 0x42, 0x67, 0x4e, 0x56, 0x48, 0x52, 0x4d, 0x45, 0x41,
536     0x6a, 0x41, 0x41, 0x4d, 0x41, 0x73, 0x47, 0x41, 0x31, 0x55, 0x64, 0x44,
537     0x77, 0x51, 0x45, 0x0a, 0x41, 0x77, 0x49, 0x46, 0x6f, 0x44, 0x41, 0x54,
538     0x42, 0x67, 0x4e, 0x56, 0x48, 0x53, 0x55, 0x45, 0x44, 0x44, 0x41, 0x4b,
539     0x42, 0x67, 0x67, 0x72, 0x42, 0x67, 0x45, 0x46, 0x42, 0x51, 0x63, 0x44,
540     0x41, 0x54, 0x41, 0x55, 0x42, 0x67, 0x4e, 0x56, 0x48, 0x52, 0x45, 0x45,
541     0x44, 0x54, 0x41, 0x4c, 0x67, 0x67, 0x6c, 0x73, 0x62, 0x32, 0x4e, 0x68,
542     0x62, 0x47, 0x68, 0x76, 0x63, 0x33, 0x51, 0x77, 0x0a, 0x43, 0x77, 0x59,
543     0x4a, 0x59, 0x49, 0x5a, 0x49, 0x41, 0x57, 0x55, 0x44, 0x42, 0x41, 0x4d,
544     0x43, 0x41, 0x79, 0x38, 0x41, 0x4d, 0x43, 0x77, 0x43, 0x46, 0x43, 0x6c,
545     0x78, 0x49, 0x6e, 0x58, 0x54, 0x52, 0x57, 0x4e, 0x4a, 0x45, 0x57, 0x64,
546     0x69, 0x35, 0x69, 0x6c, 0x4e, 0x72, 0x2f, 0x66, 0x62, 0x4d, 0x31, 0x62,
547     0x4b, 0x41, 0x68, 0x51, 0x79, 0x34, 0x42, 0x37, 0x77, 0x74, 0x6d, 0x66,
548     0x64, 0x0a, 0x49, 0x2b, 0x7a, 0x56, 0x36, 0x67, 0x33, 0x77, 0x39, 0x71,
549     0x42, 0x6b, 0x4e, 0x71, 0x53, 0x74, 0x70, 0x41, 0x3d, 0x3d, 0x0a, 0x2d,
550     0x2d, 0x2d, 0x2d, 0x2d, 0x45, 0x4e, 0x44, 0x20, 0x43, 0x45, 0x52, 0x54,
551     0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d,
552     0x0a
553 };
554 #endif
555 
556 /* unused, to avoid warning. */
557 static int idx;
558 
559 #define FUZZTIME 1485898104
560 
561 #define TIME_IMPL(t)       \
562     {                      \
563         if (t != NULL)     \
564             *t = FUZZTIME; \
565         return FUZZTIME;   \
566     }
567 
568 /*
569  * This might not work in all cases (and definitely not on Windows
570  * because of the way linkers are) and callees can still get the
571  * current time instead of the fixed time. This will just result
572  * in things not being fully reproducible and have a slightly
573  * different coverage.
574  */
575 #if !defined(_WIN32)
576 time_t time(time_t *t) TIME_IMPL(t)
577 #endif
578 
579     int FuzzerInitialize(int *argc, char ***argv)
580 {
581     STACK_OF(SSL_COMP) *comp_methods;
582 
583     FuzzerSetRand();
584     OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS | OPENSSL_INIT_ASYNC, NULL);
585     OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL);
586     ERR_clear_error();
587     CRYPTO_free_ex_index(0, -1);
588     idx = SSL_get_ex_data_X509_STORE_CTX_idx();
589     comp_methods = SSL_COMP_get_compression_methods();
590     if (comp_methods != NULL)
591         sk_SSL_COMP_sort(comp_methods);
592 
593     return 1;
594 }
595 
596 int FuzzerTestOneInput(const uint8_t *buf, size_t len)
597 {
598     SSL *server;
599     BIO *in;
600     BIO *out;
601 #if !defined(OPENSSL_NO_EC) \
602     || (!defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0))
603     BIO *bio_buf;
604 #endif
605     SSL_CTX *ctx;
606     int ret;
607 #ifndef OPENSSL_NO_DEPRECATED_3_0
608     RSA *privkey;
609 #endif
610     const uint8_t *bufp;
611 #if !defined(OPENSSL_NO_DEPRECATED_3_0)
612     EVP_PKEY *pkey;
613 #endif
614     X509 *cert;
615 #ifndef OPENSSL_NO_DEPRECATED_3_0
616 #ifndef OPENSSL_NO_EC
617     EC_KEY *ecdsakey = NULL;
618 #endif
619 #endif
620 #if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0)
621     DSA *dsakey = NULL;
622 #endif
623     uint8_t opt;
624 
625     if (len < 2)
626         return 0;
627 
628     /* This only fuzzes the initial flow from the client so far. */
629     ctx = SSL_CTX_new(SSLv23_method());
630 
631     ret = SSL_CTX_set_min_proto_version(ctx, 0);
632     OPENSSL_assert(ret == 1);
633     ret = SSL_CTX_set_cipher_list(ctx, "ALL:eNULL:@SECLEVEL=0");
634     OPENSSL_assert(ret == 1);
635 
636 #ifndef OPENSSL_NO_DEPRECATED_3_0
637     /* RSA */
638     bufp = kRSAPrivateKeyDER;
639     privkey = d2i_RSAPrivateKey(NULL, &bufp, sizeof(kRSAPrivateKeyDER));
640     OPENSSL_assert(privkey != NULL);
641     pkey = EVP_PKEY_new();
642     EVP_PKEY_assign_RSA(pkey, privkey);
643     ret = SSL_CTX_use_PrivateKey(ctx, pkey);
644     OPENSSL_assert(ret == 1);
645     EVP_PKEY_free(pkey);
646 #endif
647 
648     bufp = kCertificateDER;
649     cert = d2i_X509(NULL, &bufp, sizeof(kCertificateDER));
650     OPENSSL_assert(cert != NULL);
651     ret = SSL_CTX_use_certificate(ctx, cert);
652     OPENSSL_assert(ret == 1);
653     X509_free(cert);
654 
655 #ifndef OPENSSL_NO_EC
656 #ifndef OPENSSL_NO_DEPRECATED_3_0
657     /* ECDSA */
658     bio_buf = BIO_new(BIO_s_mem());
659     OPENSSL_assert((size_t)BIO_write(bio_buf, ECDSAPrivateKeyPEM, sizeof(ECDSAPrivateKeyPEM)) == sizeof(ECDSAPrivateKeyPEM));
660     ecdsakey = PEM_read_bio_ECPrivateKey(bio_buf, NULL, NULL, NULL);
661     ERR_print_errors_fp(stderr);
662     OPENSSL_assert(ecdsakey != NULL);
663     BIO_free(bio_buf);
664     pkey = EVP_PKEY_new();
665     EVP_PKEY_assign_EC_KEY(pkey, ecdsakey);
666     ret = SSL_CTX_use_PrivateKey(ctx, pkey);
667     OPENSSL_assert(ret == 1);
668     EVP_PKEY_free(pkey);
669 #endif
670     bio_buf = BIO_new(BIO_s_mem());
671     OPENSSL_assert((size_t)BIO_write(bio_buf, ECDSACertPEM, sizeof(ECDSACertPEM)) == sizeof(ECDSACertPEM));
672     cert = PEM_read_bio_X509(bio_buf, NULL, NULL, NULL);
673     OPENSSL_assert(cert != NULL);
674     BIO_free(bio_buf);
675     ret = SSL_CTX_use_certificate(ctx, cert);
676     OPENSSL_assert(ret == 1);
677     X509_free(cert);
678 #endif
679 
680 #if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_DEPRECATED_3_0)
681     /* DSA */
682     bio_buf = BIO_new(BIO_s_mem());
683     OPENSSL_assert((size_t)BIO_write(bio_buf, DSAPrivateKeyPEM, sizeof(DSAPrivateKeyPEM)) == sizeof(DSAPrivateKeyPEM));
684     dsakey = PEM_read_bio_DSAPrivateKey(bio_buf, NULL, NULL, NULL);
685     ERR_print_errors_fp(stderr);
686     OPENSSL_assert(dsakey != NULL);
687     BIO_free(bio_buf);
688     pkey = EVP_PKEY_new();
689     EVP_PKEY_assign_DSA(pkey, dsakey);
690     ret = SSL_CTX_use_PrivateKey(ctx, pkey);
691     OPENSSL_assert(ret == 1);
692     EVP_PKEY_free(pkey);
693 
694     bio_buf = BIO_new(BIO_s_mem());
695     OPENSSL_assert((size_t)BIO_write(bio_buf, DSACertPEM, sizeof(DSACertPEM)) == sizeof(DSACertPEM));
696     cert = PEM_read_bio_X509(bio_buf, NULL, NULL, NULL);
697     OPENSSL_assert(cert != NULL);
698     BIO_free(bio_buf);
699     ret = SSL_CTX_use_certificate(ctx, cert);
700     OPENSSL_assert(ret == 1);
701     X509_free(cert);
702 #endif
703 
704     server = SSL_new(ctx);
705     in = BIO_new(BIO_s_mem());
706     out = BIO_new(BIO_s_mem());
707     SSL_set_bio(server, in, out);
708     SSL_set_accept_state(server);
709 
710     opt = (uint8_t)buf[len - 1];
711     len--;
712 
713     OPENSSL_assert((size_t)BIO_write(in, buf, len) == len);
714 
715     if ((opt & 0x01) != 0) {
716         do {
717             char early_buf[16384];
718             size_t early_len;
719             ret = SSL_read_early_data(server, early_buf, sizeof(early_buf), &early_len);
720 
721             if (ret != SSL_READ_EARLY_DATA_SUCCESS)
722                 break;
723         } while (1);
724     }
725 
726     if (SSL_do_handshake(server) == 1) {
727         /* Keep reading application data until error or EOF. */
728         uint8_t tmp[1024];
729         for (;;) {
730             if (SSL_read(server, tmp, sizeof(tmp)) <= 0) {
731                 break;
732             }
733         }
734     }
735     SSL_free(server);
736     ERR_clear_error();
737     SSL_CTX_free(ctx);
738 
739     return 0;
740 }
741 
742 void FuzzerCleanup(void)
743 {
744     FuzzerClearRand();
745 }
746