• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Based on BoringSSL's server.c fuzzer */
2 
3 #ifdef __cplusplus
4 extern "C" {
5 #endif
6 
7 #include <assert.h>
8 #include <openssl/err.h>
9 #include <openssl/rand.h>
10 #include <openssl/ssl.h>
11 #include <openssl/tls1.h>
12 #include <stdint.h>
13 #include <string.h>
14 #include <unistd.h>
15 
16 #include <hf_ssl_lib.h>
17 #include <libhfuzz/libhfuzz.h>
18 
19 static const uint8_t kCertificateDER[] = {0x30, 0x82, 0x06, 0x3a, 0x30, 0x82, 0x04, 0x22, 0xa0,
20     0x03, 0x02, 0x01, 0x02, 0x02, 0x14, 0x0f, 0x2d, 0x4d, 0xdd, 0x2f, 0xa5, 0xc0, 0x5f, 0x5a, 0xd3,
21     0x6e, 0x9f, 0xbe, 0x29, 0x68, 0xe9, 0x24, 0x72, 0x6c, 0xeb, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
22     0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x8d, 0x31, 0x0b, 0x30, 0x09,
23     0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x41, 0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55,
24     0x04, 0x08, 0x0c, 0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, 0x21,
25     0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x18, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65,
26     0x74, 0x20, 0x57, 0x69, 0x64, 0x67, 0x69, 0x74, 0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c, 0x74,
27     0x64, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x18, 0x4f, 0x72, 0x67, 0x61,
28     0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x55, 0x6e, 0x69, 0x74, 0x20,
29     0x4e, 0x61, 0x6d, 0x65, 0x31, 0x23, 0x30, 0x21, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1a, 0x6e,
30     0x6f, 0x6e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x6e, 0x6f, 0x6e, 0x65, 0x78,
31     0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x61, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x39, 0x30,
32     0x35, 0x30, 0x38, 0x31, 0x32, 0x35, 0x33, 0x33, 0x32, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x30, 0x35,
33     0x30, 0x37, 0x31, 0x32, 0x35, 0x33, 0x33, 0x32, 0x5a, 0x30, 0x81, 0xa2, 0x31, 0x0b, 0x30, 0x09,
34     0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x41, 0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55,
35     0x04, 0x08, 0x0c, 0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, 0x0f,
36     0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x06, 0x53, 0x69, 0x64, 0x6e, 0x65, 0x79, 0x31,
37     0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x18, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
38     0x65, 0x74, 0x20, 0x57, 0x69, 0x64, 0x67, 0x69, 0x74, 0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c,
39     0x74, 0x64, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x18, 0x4f, 0x72, 0x67,
40     0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x55, 0x6e, 0x69, 0x74,
41     0x20, 0x4e, 0x61, 0x6d, 0x65, 0x31, 0x27, 0x30, 0x25, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1e,
42     0x6e, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x6e, 0x6f, 0x6e, 0x65,
43     0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x30, 0x82,
44     0x02, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05,
45     0x00, 0x03, 0x82, 0x02, 0x0f, 0x00, 0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xd0,
46     0x4f, 0xad, 0x4c, 0x85, 0x07, 0x3a, 0x17, 0xf7, 0x09, 0x6d, 0xc1, 0x15, 0x13, 0x61, 0x44, 0x97,
47     0xe7, 0x09, 0x85, 0x16, 0x11, 0xd3, 0xbb, 0x20, 0x42, 0xc0, 0xfa, 0x07, 0xed, 0x5c, 0x02, 0xc4,
48     0x46, 0x3b, 0x64, 0x77, 0xc1, 0x1b, 0xa4, 0x90, 0xc3, 0xd5, 0x16, 0x48, 0x9b, 0xc3, 0x86, 0xbf,
49     0xf7, 0xd5, 0x9d, 0x15, 0x7b, 0x3b, 0xb3, 0x30, 0x51, 0x97, 0x40, 0x4e, 0x4e, 0xfc, 0x3a, 0x25,
50     0xb9, 0x0e, 0x04, 0x81, 0xb7, 0x7f, 0x88, 0xe3, 0xfe, 0x4f, 0x35, 0x5f, 0x5b, 0x41, 0xd8, 0x12,
51     0x05, 0x18, 0xb6, 0x3b, 0x7d, 0x8d, 0x12, 0x8c, 0xa5, 0x9d, 0x75, 0x8b, 0xaf, 0xb6, 0x41, 0x5b,
52     0x8b, 0x28, 0x51, 0x1b, 0x06, 0xa9, 0xf1, 0xca, 0x5b, 0x10, 0x75, 0xad, 0x60, 0xd4, 0x5f, 0x65,
53     0x93, 0x4c, 0x8c, 0x09, 0xfc, 0xdc, 0x7c, 0xaf, 0xb0, 0xc7, 0x37, 0x4c, 0x4b, 0xe4, 0x22, 0x89,
54     0x9b, 0x0d, 0xd5, 0x34, 0x73, 0xc2, 0xe3, 0x3d, 0xa7, 0x26, 0x4c, 0x94, 0xaf, 0x8a, 0x26, 0x5b,
55     0xea, 0x45, 0x55, 0xe4, 0x6d, 0x4b, 0xd7, 0xc9, 0xce, 0xf5, 0xec, 0x55, 0x8e, 0x68, 0x9a, 0x1e,
56     0xf1, 0x96, 0x0a, 0x8e, 0x1e, 0xd2, 0xdf, 0x09, 0x93, 0x18, 0x02, 0x13, 0x29, 0x7d, 0x4d, 0x1e,
57     0x32, 0x6a, 0x75, 0x62, 0x32, 0x9f, 0x0e, 0x08, 0x7e, 0xbb, 0x25, 0xc6, 0x46, 0xa2, 0x29, 0x85,
58     0x9c, 0x49, 0xd4, 0xfa, 0x6b, 0x11, 0x41, 0x4e, 0x77, 0x4d, 0x5a, 0x14, 0xe1, 0xef, 0x78, 0x07,
59     0x31, 0xe2, 0xdf, 0xdb, 0xaa, 0xef, 0x51, 0x10, 0x7a, 0x78, 0x85, 0x23, 0x34, 0x02, 0x27, 0x2d,
60     0x3c, 0x3e, 0x82, 0x44, 0x2d, 0x63, 0x0e, 0x95, 0x63, 0x4f, 0xf0, 0x42, 0x9e, 0x8d, 0x41, 0x9a,
61     0x11, 0x97, 0xc2, 0x41, 0x75, 0xaf, 0x0c, 0x7a, 0xda, 0x8d, 0x5b, 0x1c, 0x78, 0xcd, 0xa9, 0xbf,
62     0x88, 0xab, 0x5d, 0x37, 0x2e, 0x24, 0xec, 0x56, 0x0f, 0x8e, 0x30, 0x47, 0xb5, 0x4d, 0x5e, 0xbe,
63     0x1d, 0x0c, 0xe5, 0xb5, 0x9b, 0xe3, 0xf9, 0xc1, 0x96, 0xe1, 0xef, 0x1d, 0x8b, 0x63, 0x4b, 0xc4,
64     0xee, 0x35, 0xe1, 0x65, 0x48, 0x63, 0x2d, 0x6a, 0x2b, 0xb4, 0xde, 0x50, 0x8b, 0xbe, 0x47, 0x0b,
65     0x8d, 0x8e, 0xfd, 0x0f, 0x30, 0xdf, 0x66, 0xec, 0x16, 0xa4, 0x62, 0x34, 0x78, 0x09, 0x6b, 0xb0,
66     0xbb, 0xc5, 0x55, 0x71, 0x93, 0xd2, 0x6b, 0xa7, 0xce, 0x01, 0x58, 0x5a, 0xa6, 0x97, 0x95, 0xb3,
67     0x86, 0x9e, 0x78, 0xd5, 0x4a, 0xb2, 0x0c, 0xc2, 0xa0, 0xad, 0x30, 0x77, 0x48, 0x9f, 0xd4, 0xc8,
68     0x62, 0x27, 0x83, 0x7e, 0xbb, 0x42, 0xf4, 0x29, 0xb4, 0x49, 0x8a, 0x6c, 0x4a, 0xec, 0x24, 0x47,
69     0xd5, 0x53, 0x8a, 0xa2, 0x8c, 0x94, 0xd2, 0x02, 0x9f, 0xf1, 0x5e, 0xe7, 0x5a, 0x03, 0xff, 0x2a,
70     0x09, 0xfd, 0xcb, 0x47, 0xe8, 0x3f, 0x8f, 0x54, 0xe3, 0x9e, 0xef, 0x19, 0x36, 0xe9, 0xcb, 0x38,
71     0x6a, 0x76, 0xf7, 0x55, 0x9d, 0x1b, 0xd6, 0x87, 0x4c, 0xfb, 0xd1, 0x5f, 0xe6, 0x9a, 0xef, 0xa6,
72     0x61, 0xad, 0xcb, 0x70, 0x63, 0x33, 0x7f, 0x26, 0x44, 0x29, 0x20, 0xcc, 0xf7, 0xb8, 0xd3, 0x59,
73     0xc2, 0x86, 0xeb, 0xda, 0xea, 0x64, 0xd7, 0x13, 0x5b, 0x61, 0x08, 0x38, 0x6f, 0x24, 0xf7, 0x17,
74     0xc8, 0x8c, 0x5c, 0x9f, 0xfc, 0x12, 0x73, 0x86, 0x53, 0xd9, 0x85, 0x54, 0x8d, 0x12, 0x49, 0xd5,
75     0x6b, 0x01, 0xc0, 0x84, 0x93, 0x48, 0x20, 0x1f, 0x98, 0x33, 0x53, 0x39, 0xf0, 0x21, 0x71, 0x3d,
76     0x3c, 0x9c, 0xba, 0x0d, 0x99, 0x75, 0x7f, 0x91, 0xed, 0x22, 0xac, 0xcf, 0xa1, 0x57, 0x38, 0x94,
77     0xb0, 0x85, 0xff, 0x8c, 0x9b, 0xdc, 0x20, 0xac, 0xa4, 0xc0, 0x22, 0x79, 0xa2, 0xe4, 0x1d, 0x02,
78     0x03, 0x01, 0x00, 0x01, 0xa3, 0x7b, 0x30, 0x79, 0x30, 0x09, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04,
79     0x02, 0x30, 0x00, 0x30, 0x2c, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x86, 0xf8, 0x42, 0x01, 0x0d,
80     0x04, 0x1f, 0x16, 0x1d, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x53, 0x4c, 0x20, 0x47, 0x65, 0x6e, 0x65,
81     0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
82     0x65, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x43, 0x8c, 0x8e, 0x2f,
83     0xe6, 0xa5, 0xfc, 0x81, 0xa1, 0x21, 0x71, 0x60, 0x24, 0x97, 0xb0, 0x22, 0xf2, 0x3b, 0xc2, 0xfc,
84     0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xb4, 0x59, 0x44,
85     0x9c, 0xe3, 0x18, 0xd1, 0x69, 0x15, 0x4a, 0x38, 0x8b, 0x82, 0x0d, 0x19, 0x83, 0x1f, 0xe0, 0x02,
86     0x37, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00,
87     0x03, 0x82, 0x02, 0x01, 0x00, 0x36, 0xb9, 0x48, 0x88, 0x84, 0xe9, 0xec, 0x49, 0x50, 0xe5, 0x43,
88     0x3e, 0x6f, 0x46, 0xef, 0x76, 0x8e, 0x5e, 0x34, 0xf7, 0x17, 0x6b, 0x87, 0x3d, 0xa3, 0x9b, 0x4e,
89     0x89, 0xfe, 0x9d, 0xc0, 0x1d, 0x80, 0xbd, 0xbd, 0x37, 0xd8, 0x46, 0x4a, 0x70, 0x40, 0xa0, 0x34,
90     0xd0, 0xa2, 0x6b, 0x56, 0x1c, 0x35, 0xd3, 0x20, 0xeb, 0x99, 0x09, 0x0d, 0x91, 0xd8, 0x1c, 0x8b,
91     0x73, 0xdd, 0x98, 0x28, 0xb3, 0xfd, 0x69, 0xfe, 0xdb, 0xd6, 0x9a, 0x21, 0xce, 0x6c, 0xc0, 0xa3,
92     0xd4, 0xcc, 0x4c, 0xaa, 0xb2, 0x5e, 0x09, 0xab, 0x6b, 0x1c, 0xf2, 0x88, 0xfc, 0xb8, 0x1c, 0x34,
93     0x78, 0x27, 0x0b, 0xb3, 0xfc, 0x6c, 0x56, 0xb4, 0xf8, 0xba, 0xb3, 0xb4, 0x87, 0x52, 0xa8, 0xf7,
94     0xf3, 0xde, 0x96, 0x74, 0x72, 0xcd, 0xf6, 0x01, 0x44, 0x04, 0x20, 0x60, 0x10, 0xd8, 0xc2, 0xab,
95     0x9a, 0x07, 0x11, 0xf9, 0x2e, 0xc1, 0xff, 0x5d, 0x2e, 0xf5, 0xe4, 0xf0, 0x57, 0x52, 0x20, 0x8f,
96     0x6b, 0x1d, 0x5f, 0x87, 0x31, 0x33, 0x5d, 0x75, 0x3f, 0x23, 0xd3, 0x60, 0x94, 0x7b, 0x1d, 0x66,
97     0xcc, 0x43, 0xe4, 0xd8, 0xe0, 0xca, 0x82, 0xd9, 0x66, 0x01, 0x4b, 0xfc, 0x73, 0xc0, 0x7b, 0xa5,
98     0xaf, 0x4a, 0x0f, 0x1d, 0x4e, 0xbb, 0x7c, 0x53, 0x60, 0x81, 0x71, 0x4f, 0x0c, 0x4b, 0x25, 0x6e,
99     0xca, 0xc7, 0x60, 0xaa, 0x0f, 0x62, 0x31, 0x27, 0x40, 0x84, 0x72, 0x05, 0x39, 0x00, 0x94, 0x77,
100     0x46, 0xdb, 0x04, 0x51, 0xaf, 0x58, 0x7b, 0x1a, 0x4c, 0x05, 0x88, 0x77, 0x25, 0x24, 0x88, 0x72,
101     0x9b, 0xd3, 0xea, 0x9f, 0xfe, 0x23, 0x2f, 0x6e, 0xb6, 0xba, 0xfc, 0x35, 0x1f, 0xbe, 0x0d, 0x79,
102     0x47, 0xfb, 0x47, 0xb0, 0x5a, 0x93, 0x23, 0x9c, 0x09, 0x23, 0x37, 0x65, 0x18, 0xe6, 0x0c, 0x6a,
103     0x74, 0xcb, 0x75, 0xc7, 0x22, 0x29, 0xdd, 0xfb, 0x4f, 0xf1, 0xe7, 0x33, 0xcf, 0xa9, 0x62, 0xb3,
104     0x06, 0xda, 0x28, 0x20, 0x4d, 0x73, 0xd3, 0xc5, 0xbb, 0x6c, 0xb0, 0x44, 0x34, 0xbf, 0x15, 0x29,
105     0x71, 0x8f, 0xac, 0xa1, 0xd3, 0xf5, 0x29, 0xb6, 0x42, 0x87, 0xbd, 0xd3, 0xae, 0xea, 0x8c, 0xc0,
106     0xa8, 0xc2, 0xe1, 0xa4, 0x74, 0x8c, 0x21, 0x6d, 0x91, 0xa3, 0x98, 0x41, 0xf3, 0xb9, 0x84, 0x88,
107     0x51, 0x22, 0xb4, 0x6f, 0xdb, 0x06, 0xa2, 0xfc, 0x56, 0x85, 0xa9, 0xed, 0xce, 0x1d, 0x70, 0xb1,
108     0x5c, 0xec, 0x49, 0xc1, 0x48, 0x9f, 0x9d, 0x27, 0x1f, 0xa0, 0x90, 0x9d, 0xab, 0x74, 0x4f, 0xb7,
109     0x27, 0x60, 0xe7, 0xc3, 0xac, 0xf2, 0xfd, 0x6b, 0x5d, 0x59, 0xa8, 0x24, 0xfc, 0xbd, 0xb3, 0xe5,
110     0x3b, 0x36, 0xc4, 0x56, 0x7e, 0x56, 0x11, 0x41, 0xce, 0xc2, 0xd2, 0xe2, 0x6e, 0x2b, 0xae, 0xad,
111     0x71, 0xce, 0x93, 0x03, 0x28, 0x80, 0x33, 0xf2, 0xf6, 0xe5, 0x9c, 0x3f, 0xe2, 0x20, 0x4c, 0xfa,
112     0x05, 0xdd, 0xb3, 0xff, 0x76, 0x81, 0x18, 0x01, 0x7a, 0x89, 0xa1, 0x0b, 0x72, 0x0e, 0x07, 0x1e,
113     0xd6, 0x08, 0x42, 0xc8, 0xf9, 0xc8, 0xf7, 0x0e, 0x64, 0x65, 0x69, 0xc2, 0x3c, 0xab, 0x13, 0xc9,
114     0xd7, 0xf2, 0x3c, 0x02, 0xd4, 0x78, 0xcd, 0xa3, 0x3e, 0xdf, 0xd9, 0x6e, 0xd8, 0x80, 0xaa, 0xba,
115     0x8c, 0xe4, 0x1f, 0xb9, 0x01, 0xbb, 0x94, 0x22, 0x66, 0x71, 0x62, 0x30, 0xfc, 0xa4, 0x49, 0xe1,
116     0x12, 0x24, 0xf1, 0x89, 0x5e, 0xca, 0xe3, 0xba, 0x20, 0x99, 0x86, 0x20, 0xfd, 0x99, 0xa1, 0xd8,
117     0x52, 0x10, 0xd1, 0xff, 0xc3, 0x40, 0x27, 0x56, 0xfd, 0xf0, 0xfd, 0xb8, 0x8b, 0x54, 0x03, 0xc6,
118     0xa3, 0xff, 0xe0, 0xf7, 0xaa, 0x03, 0x85, 0x03, 0xae, 0x4a, 0xc1, 0xe6, 0x56, 0xeb, 0x2a, 0x10,
119     0xef, 0x48, 0x32, 0x04, 0x64};
120 
121 static const uint8_t kRSAPrivateKeyDER[] = {0x30, 0x82, 0x09, 0x28, 0x02, 0x01, 0x00, 0x02, 0x82,
122     0x02, 0x01, 0x00, 0xd0, 0x4f, 0xad, 0x4c, 0x85, 0x07, 0x3a, 0x17, 0xf7, 0x09, 0x6d, 0xc1, 0x15,
123     0x13, 0x61, 0x44, 0x97, 0xe7, 0x09, 0x85, 0x16, 0x11, 0xd3, 0xbb, 0x20, 0x42, 0xc0, 0xfa, 0x07,
124     0xed, 0x5c, 0x02, 0xc4, 0x46, 0x3b, 0x64, 0x77, 0xc1, 0x1b, 0xa4, 0x90, 0xc3, 0xd5, 0x16, 0x48,
125     0x9b, 0xc3, 0x86, 0xbf, 0xf7, 0xd5, 0x9d, 0x15, 0x7b, 0x3b, 0xb3, 0x30, 0x51, 0x97, 0x40, 0x4e,
126     0x4e, 0xfc, 0x3a, 0x25, 0xb9, 0x0e, 0x04, 0x81, 0xb7, 0x7f, 0x88, 0xe3, 0xfe, 0x4f, 0x35, 0x5f,
127     0x5b, 0x41, 0xd8, 0x12, 0x05, 0x18, 0xb6, 0x3b, 0x7d, 0x8d, 0x12, 0x8c, 0xa5, 0x9d, 0x75, 0x8b,
128     0xaf, 0xb6, 0x41, 0x5b, 0x8b, 0x28, 0x51, 0x1b, 0x06, 0xa9, 0xf1, 0xca, 0x5b, 0x10, 0x75, 0xad,
129     0x60, 0xd4, 0x5f, 0x65, 0x93, 0x4c, 0x8c, 0x09, 0xfc, 0xdc, 0x7c, 0xaf, 0xb0, 0xc7, 0x37, 0x4c,
130     0x4b, 0xe4, 0x22, 0x89, 0x9b, 0x0d, 0xd5, 0x34, 0x73, 0xc2, 0xe3, 0x3d, 0xa7, 0x26, 0x4c, 0x94,
131     0xaf, 0x8a, 0x26, 0x5b, 0xea, 0x45, 0x55, 0xe4, 0x6d, 0x4b, 0xd7, 0xc9, 0xce, 0xf5, 0xec, 0x55,
132     0x8e, 0x68, 0x9a, 0x1e, 0xf1, 0x96, 0x0a, 0x8e, 0x1e, 0xd2, 0xdf, 0x09, 0x93, 0x18, 0x02, 0x13,
133     0x29, 0x7d, 0x4d, 0x1e, 0x32, 0x6a, 0x75, 0x62, 0x32, 0x9f, 0x0e, 0x08, 0x7e, 0xbb, 0x25, 0xc6,
134     0x46, 0xa2, 0x29, 0x85, 0x9c, 0x49, 0xd4, 0xfa, 0x6b, 0x11, 0x41, 0x4e, 0x77, 0x4d, 0x5a, 0x14,
135     0xe1, 0xef, 0x78, 0x07, 0x31, 0xe2, 0xdf, 0xdb, 0xaa, 0xef, 0x51, 0x10, 0x7a, 0x78, 0x85, 0x23,
136     0x34, 0x02, 0x27, 0x2d, 0x3c, 0x3e, 0x82, 0x44, 0x2d, 0x63, 0x0e, 0x95, 0x63, 0x4f, 0xf0, 0x42,
137     0x9e, 0x8d, 0x41, 0x9a, 0x11, 0x97, 0xc2, 0x41, 0x75, 0xaf, 0x0c, 0x7a, 0xda, 0x8d, 0x5b, 0x1c,
138     0x78, 0xcd, 0xa9, 0xbf, 0x88, 0xab, 0x5d, 0x37, 0x2e, 0x24, 0xec, 0x56, 0x0f, 0x8e, 0x30, 0x47,
139     0xb5, 0x4d, 0x5e, 0xbe, 0x1d, 0x0c, 0xe5, 0xb5, 0x9b, 0xe3, 0xf9, 0xc1, 0x96, 0xe1, 0xef, 0x1d,
140     0x8b, 0x63, 0x4b, 0xc4, 0xee, 0x35, 0xe1, 0x65, 0x48, 0x63, 0x2d, 0x6a, 0x2b, 0xb4, 0xde, 0x50,
141     0x8b, 0xbe, 0x47, 0x0b, 0x8d, 0x8e, 0xfd, 0x0f, 0x30, 0xdf, 0x66, 0xec, 0x16, 0xa4, 0x62, 0x34,
142     0x78, 0x09, 0x6b, 0xb0, 0xbb, 0xc5, 0x55, 0x71, 0x93, 0xd2, 0x6b, 0xa7, 0xce, 0x01, 0x58, 0x5a,
143     0xa6, 0x97, 0x95, 0xb3, 0x86, 0x9e, 0x78, 0xd5, 0x4a, 0xb2, 0x0c, 0xc2, 0xa0, 0xad, 0x30, 0x77,
144     0x48, 0x9f, 0xd4, 0xc8, 0x62, 0x27, 0x83, 0x7e, 0xbb, 0x42, 0xf4, 0x29, 0xb4, 0x49, 0x8a, 0x6c,
145     0x4a, 0xec, 0x24, 0x47, 0xd5, 0x53, 0x8a, 0xa2, 0x8c, 0x94, 0xd2, 0x02, 0x9f, 0xf1, 0x5e, 0xe7,
146     0x5a, 0x03, 0xff, 0x2a, 0x09, 0xfd, 0xcb, 0x47, 0xe8, 0x3f, 0x8f, 0x54, 0xe3, 0x9e, 0xef, 0x19,
147     0x36, 0xe9, 0xcb, 0x38, 0x6a, 0x76, 0xf7, 0x55, 0x9d, 0x1b, 0xd6, 0x87, 0x4c, 0xfb, 0xd1, 0x5f,
148     0xe6, 0x9a, 0xef, 0xa6, 0x61, 0xad, 0xcb, 0x70, 0x63, 0x33, 0x7f, 0x26, 0x44, 0x29, 0x20, 0xcc,
149     0xf7, 0xb8, 0xd3, 0x59, 0xc2, 0x86, 0xeb, 0xda, 0xea, 0x64, 0xd7, 0x13, 0x5b, 0x61, 0x08, 0x38,
150     0x6f, 0x24, 0xf7, 0x17, 0xc8, 0x8c, 0x5c, 0x9f, 0xfc, 0x12, 0x73, 0x86, 0x53, 0xd9, 0x85, 0x54,
151     0x8d, 0x12, 0x49, 0xd5, 0x6b, 0x01, 0xc0, 0x84, 0x93, 0x48, 0x20, 0x1f, 0x98, 0x33, 0x53, 0x39,
152     0xf0, 0x21, 0x71, 0x3d, 0x3c, 0x9c, 0xba, 0x0d, 0x99, 0x75, 0x7f, 0x91, 0xed, 0x22, 0xac, 0xcf,
153     0xa1, 0x57, 0x38, 0x94, 0xb0, 0x85, 0xff, 0x8c, 0x9b, 0xdc, 0x20, 0xac, 0xa4, 0xc0, 0x22, 0x79,
154     0xa2, 0xe4, 0x1d, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x02, 0x00, 0x36, 0x5f, 0x35, 0xaa,
155     0xad, 0x66, 0x4f, 0x81, 0x85, 0xd7, 0x8e, 0x30, 0x41, 0xa2, 0x07, 0x57, 0x72, 0x16, 0xb9, 0xe3,
156     0x64, 0xf9, 0x4e, 0x3c, 0x9f, 0x95, 0x0c, 0xed, 0xb6, 0x37, 0xfc, 0x36, 0x34, 0xa8, 0xe8, 0x43,
157     0xb7, 0x06, 0x4e, 0x82, 0xcb, 0xce, 0x71, 0xc6, 0x19, 0x39, 0x9e, 0xf5, 0x83, 0x11, 0xdb, 0x4d,
158     0xdf, 0x17, 0x85, 0x63, 0xa6, 0x0f, 0x05, 0xdd, 0xa1, 0x12, 0xf8, 0xbe, 0xec, 0xad, 0xba, 0xbc,
159     0xee, 0x66, 0xc9, 0x01, 0x20, 0x11, 0x76, 0xf7, 0x45, 0x66, 0x7a, 0x6f, 0x3d, 0x74, 0xdb, 0x18,
160     0x65, 0xba, 0xc5, 0xa1, 0xbb, 0xd8, 0x56, 0x9b, 0x21, 0xd4, 0xc1, 0x4b, 0x99, 0xeb, 0x5e, 0xa0,
161     0x9c, 0xdf, 0x46, 0x68, 0x78, 0x1b, 0x00, 0xd6, 0xd6, 0x64, 0x59, 0xca, 0x74, 0xa6, 0xd7, 0xea,
162     0x0d, 0x89, 0x54, 0xbb, 0xae, 0xd8, 0x03, 0x87, 0xa9, 0x80, 0x7d, 0x91, 0x8e, 0x3d, 0x4c, 0x85,
163     0x03, 0xe5, 0xdb, 0x4e, 0x98, 0xff, 0x11, 0xfe, 0x17, 0x29, 0x22, 0x74, 0x14, 0xb5, 0xb7, 0x57,
164     0x4e, 0x02, 0x41, 0x33, 0x97, 0xd7, 0x4f, 0x55, 0x5a, 0x97, 0x8b, 0x31, 0xff, 0x35, 0xab, 0xa6,
165     0x21, 0xa6, 0x66, 0x00, 0x15, 0x6d, 0xb1, 0x6c, 0x89, 0x37, 0xe1, 0x1e, 0xc9, 0xec, 0xfa, 0xe0,
166     0x9c, 0xba, 0xfd, 0xcd, 0x19, 0xe6, 0x8a, 0x4e, 0xb7, 0xcc, 0x23, 0xf3, 0x96, 0x8e, 0x4e, 0xaf,
167     0x2a, 0x95, 0xdb, 0xb1, 0x22, 0x1b, 0xfd, 0xb2, 0xaf, 0x94, 0xb1, 0x7e, 0xb0, 0xd2, 0x12, 0x97,
168     0xbf, 0xac, 0x84, 0x3e, 0xb2, 0x80, 0x65, 0x08, 0xcb, 0x41, 0x7d, 0xf6, 0x5f, 0xd6, 0x43, 0xb2,
169     0x98, 0xbd, 0x08, 0x07, 0xfc, 0x72, 0x29, 0xa1, 0x5a, 0xa2, 0x2b, 0xd8, 0x9d, 0xb0, 0x4d, 0xde,
170     0x44, 0x5b, 0xc5, 0x4f, 0x0a, 0x9a, 0x15, 0x1f, 0x5c, 0xf5, 0x23, 0x28, 0xdc, 0xb7, 0x34, 0x87,
171     0x24, 0xf0, 0xfe, 0xc0, 0xe6, 0x0d, 0xf9, 0xc5, 0xd6, 0x6a, 0x15, 0x82, 0x40, 0x2c, 0x2e, 0xa2,
172     0x2d, 0x02, 0x15, 0x6c, 0x90, 0x21, 0x55, 0x09, 0x4d, 0x6b, 0x51, 0x1e, 0xa8, 0x63, 0x1f, 0x7e,
173     0x0c, 0x7b, 0x18, 0xad, 0xcc, 0x91, 0x52, 0xbe, 0x4f, 0x0f, 0xb0, 0xdd, 0xb9, 0xbe, 0x27, 0x6a,
174     0x25, 0x06, 0x63, 0x16, 0x91, 0x61, 0xae, 0x1a, 0xcf, 0xef, 0xc0, 0x99, 0x10, 0x3a, 0x37, 0x9c,
175     0x5f, 0x2e, 0x84, 0xa4, 0xee, 0xae, 0xcb, 0x2b, 0x06, 0x4c, 0x3b, 0x13, 0x30, 0x2e, 0x14, 0xb9,
176     0x04, 0x84, 0x55, 0x00, 0xf2, 0xcc, 0xeb, 0x42, 0x7c, 0x89, 0xf8, 0x8f, 0x1a, 0x52, 0x7f, 0xec,
177     0xc3, 0x4c, 0x5a, 0xee, 0xe3, 0x2e, 0x47, 0xaa, 0xbb, 0xd7, 0x62, 0xc6, 0x0c, 0x34, 0x63, 0x52,
178     0xf3, 0x09, 0xb3, 0x35, 0x8e, 0xb2, 0x8b, 0x57, 0x2b, 0x33, 0x69, 0x8e, 0xa7, 0x9d, 0x02, 0x86,
179     0x9b, 0x2e, 0xbc, 0x14, 0x56, 0x17, 0xda, 0xd6, 0x09, 0x9e, 0x35, 0x8b, 0x82, 0x53, 0x89, 0xe5,
180     0x7a, 0x22, 0x2d, 0x64, 0x0e, 0xb3, 0xff, 0x51, 0xa5, 0x01, 0x15, 0x5a, 0x8c, 0x77, 0xf6, 0xa8,
181     0x2e, 0x67, 0x63, 0x82, 0x68, 0x32, 0x9c, 0xa3, 0xe7, 0x08, 0x52, 0x6a, 0x3a, 0x57, 0x37, 0xfa,
182     0x08, 0x81, 0x5e, 0x0d, 0x5a, 0xa0, 0x1c, 0x89, 0x88, 0xfc, 0x2c, 0x6b, 0xfc, 0x04, 0x3e, 0xa3,
183     0x64, 0x55, 0x72, 0xf5, 0x15, 0x4d, 0x2a, 0x2b, 0x34, 0x21, 0xc9, 0xca, 0xf4, 0xf3, 0x03, 0x9c,
184     0x24, 0x4c, 0x11, 0x78, 0xd4, 0xd2, 0x92, 0xe7, 0xd7, 0x5d, 0xe1, 0x04, 0x98, 0xa6, 0xf6, 0xc7,
185     0x20, 0x4e, 0x72, 0x1c, 0x70, 0xbb, 0x1c, 0xcb, 0xa4, 0x86, 0x07, 0x3d, 0xab, 0x01, 0x7c, 0x7d,
186     0xc1, 0x90, 0x55, 0x3d, 0xd3, 0x66, 0xbb, 0x59, 0xb2, 0x6c, 0x82, 0x41, 0x02, 0x82, 0x01, 0x01,
187     0x00, 0xf4, 0x95, 0x3e, 0x30, 0x1a, 0x3f, 0x6b, 0xd4, 0x3b, 0xe8, 0x10, 0x54, 0xf4, 0xba, 0xd9,
188     0xf3, 0xd8, 0x93, 0x7b, 0xb0, 0xb7, 0x13, 0x6e, 0x26, 0x5d, 0x1f, 0x24, 0x9c, 0x6b, 0xee, 0xa6,
189     0x8f, 0x8c, 0x18, 0x18, 0x5c, 0xe5, 0xad, 0x28, 0xb5, 0x30, 0x85, 0x2e, 0x49, 0x42, 0x05, 0x79,
190     0x56, 0xdb, 0x9b, 0xcc, 0xd4, 0x24, 0xcc, 0x6c, 0xd4, 0x51, 0x49, 0xe6, 0x67, 0x98, 0xf6, 0xb7,
191     0x31, 0x00, 0x8f, 0xfc, 0x48, 0x1b, 0xb4, 0x83, 0x0e, 0x52, 0x65, 0xe9, 0x74, 0x9a, 0x3c, 0x3d,
192     0x52, 0x63, 0xf7, 0x73, 0x64, 0xf0, 0xbd, 0x88, 0xbb, 0x55, 0xbf, 0xdb, 0x82, 0x44, 0x52, 0x4e,
193     0xdf, 0x15, 0x69, 0x43, 0xda, 0x83, 0xb0, 0xe1, 0xf6, 0x28, 0xf9, 0xaa, 0x66, 0x74, 0xce, 0xad,
194     0xfd, 0x9f, 0x3a, 0x77, 0x78, 0x85, 0x7d, 0xda, 0xd7, 0xff, 0x94, 0x24, 0xba, 0x47, 0x3b, 0xc5,
195     0xda, 0xb2, 0xae, 0xdd, 0x70, 0x3c, 0x23, 0x39, 0xc9, 0xb6, 0x73, 0xdf, 0x0a, 0xa6, 0x78, 0x68,
196     0xfd, 0x05, 0x4c, 0x3a, 0x61, 0xc3, 0x87, 0x1e, 0x1c, 0x7e, 0x7d, 0x31, 0x6b, 0x44, 0x46, 0x4e,
197     0x98, 0xb5, 0xad, 0xa9, 0xf6, 0x4c, 0xc9, 0xf8, 0x56, 0x0b, 0xd9, 0x5b, 0x15, 0x05, 0xc6, 0xe6,
198     0xee, 0x41, 0xce, 0x6a, 0x9a, 0xf1, 0x1b, 0x17, 0xf9, 0xf6, 0x78, 0xe1, 0xa4, 0x15, 0x5a, 0x77,
199     0x35, 0x10, 0x1b, 0x60, 0x61, 0xa1, 0x3f, 0x0a, 0x88, 0x65, 0x2c, 0x28, 0x65, 0x3c, 0x20, 0x9f,
200     0x72, 0xc3, 0xa6, 0xdb, 0x02, 0x1b, 0x36, 0xd9, 0xf3, 0x78, 0x36, 0x88, 0x35, 0x93, 0x69, 0xf2,
201     0x49, 0xd4, 0x37, 0x10, 0xcd, 0x8d, 0xc5, 0x53, 0x43, 0x9e, 0x26, 0x24, 0x9b, 0x92, 0xc5, 0xb1,
202     0x63, 0x13, 0x53, 0x2e, 0xda, 0x7a, 0x16, 0x17, 0x9d, 0xac, 0xc1, 0x4f, 0x4d, 0x90, 0x54, 0x98,
203     0x69, 0x02, 0x82, 0x01, 0x01, 0x00, 0xda, 0x08, 0xfc, 0xf5, 0xa8, 0xa5, 0xfe, 0xc6, 0x70, 0x31,
204     0x5f, 0x17, 0x27, 0x47, 0xbb, 0xe0, 0x24, 0x25, 0x86, 0x93, 0x7d, 0xea, 0x63, 0x59, 0x40, 0x29,
205     0xb8, 0xcb, 0x3f, 0xc6, 0x7b, 0xa2, 0xba, 0x69, 0x3a, 0x62, 0x2b, 0x01, 0x10, 0xf8, 0xca, 0x4a,
206     0x51, 0x8c, 0xcc, 0x77, 0x7c, 0x05, 0x21, 0x40, 0x02, 0xbf, 0x1a, 0x55, 0x7a, 0xf8, 0x10, 0x55,
207     0xcd, 0xce, 0x19, 0x72, 0x49, 0xaf, 0xcb, 0xbf, 0x8e, 0xa5, 0xda, 0x1f, 0xc8, 0xb6, 0x91, 0x6c,
208     0x22, 0xe0, 0x86, 0xed, 0xd9, 0x54, 0x2c, 0x4f, 0xbb, 0x1e, 0x87, 0x98, 0x6c, 0x31, 0xd9, 0xdb,
209     0xe8, 0xd3, 0x77, 0x59, 0x03, 0x27, 0x29, 0x71, 0xf4, 0xe1, 0xa6, 0xd3, 0xee, 0x4e, 0xd0, 0x9c,
210     0xc4, 0x8a, 0x02, 0x49, 0xe3, 0xbc, 0xe5, 0xce, 0xad, 0x63, 0x66, 0x96, 0x9c, 0x0e, 0x84, 0x1b,
211     0x6c, 0x3d, 0x53, 0x4e, 0x73, 0x44, 0xdd, 0x2f, 0xb1, 0xc4, 0x2b, 0x07, 0x08, 0x0f, 0x84, 0x18,
212     0x28, 0x52, 0xc4, 0x64, 0x6c, 0x5d, 0xe6, 0x82, 0x4a, 0xef, 0x9a, 0x4a, 0xcb, 0xeb, 0x00, 0x0a,
213     0x83, 0xd3, 0xae, 0x37, 0xa7, 0x6c, 0xda, 0x37, 0xa2, 0x7e, 0xa7, 0x08, 0x37, 0x73, 0xc1, 0x6a,
214     0xc3, 0x2c, 0x60, 0xbb, 0xc4, 0x98, 0xe8, 0x66, 0xc5, 0x86, 0xfd, 0xd0, 0x0a, 0x49, 0x4d, 0xa6,
215     0x7f, 0x9b, 0x20, 0xa1, 0x7b, 0xae, 0x54, 0x2d, 0x3c, 0xa0, 0xa6, 0x11, 0xf4, 0xb1, 0xde, 0x1b,
216     0x19, 0x4f, 0x4a, 0xc8, 0x5e, 0x2d, 0x33, 0x23, 0xc5, 0xc7, 0xa9, 0x61, 0x5f, 0x58, 0x59, 0x45,
217     0x3c, 0xee, 0xfb, 0xe4, 0x40, 0x6a, 0xc2, 0x8d, 0x4a, 0xd2, 0x90, 0x16, 0x6c, 0xb8, 0x1f, 0x9a,
218     0x5f, 0x54, 0xf3, 0xae, 0x7c, 0x43, 0xad, 0x7e, 0xde, 0xe4, 0xb0, 0x9d, 0xe8, 0xef, 0x75, 0xbf,
219     0x9a, 0x21, 0x4c, 0x76, 0xd7, 0x95, 0x02, 0x82, 0x01, 0x01, 0x00, 0xe1, 0x82, 0x41, 0xa6, 0x84,
220     0x6c, 0xf9, 0x74, 0xe4, 0x0f, 0x62, 0x0f, 0x92, 0xde, 0x3d, 0x5b, 0x11, 0xd3, 0x59, 0xf6, 0x63,
221     0xb6, 0xac, 0x96, 0xfe, 0xc1, 0x5a, 0x36, 0x47, 0x65, 0xf1, 0x78, 0xe5, 0x48, 0xca, 0x1d, 0xcd,
222     0x3e, 0xcd, 0x0b, 0xd2, 0xc2, 0xd9, 0x1c, 0x7e, 0x9d, 0x21, 0x75, 0xae, 0x62, 0x86, 0x87, 0x0b,
223     0xae, 0xd8, 0xa1, 0x22, 0x9a, 0x2a, 0xb0, 0x56, 0x5f, 0x14, 0x25, 0x40, 0x49, 0x81, 0xe8, 0xd2,
224     0x72, 0xab, 0x6b, 0xa7, 0x19, 0x84, 0x19, 0x18, 0xa4, 0x76, 0x3d, 0xe3, 0x22, 0x22, 0xe9, 0x6c,
225     0xf6, 0xb4, 0x7d, 0x55, 0xe0, 0xe1, 0xf9, 0xc8, 0x18, 0xc3, 0xd3, 0xf8, 0x9f, 0xe8, 0x0a, 0x2f,
226     0xe6, 0x05, 0x51, 0xbc, 0x12, 0x06, 0xc5, 0x14, 0xea, 0x03, 0x8e, 0x97, 0x23, 0x87, 0x48, 0x3e,
227     0x7c, 0xfe, 0x2c, 0xad, 0xdf, 0xdf, 0xc5, 0x49, 0x2c, 0x99, 0x8e, 0xbd, 0xb5, 0x71, 0x42, 0xac,
228     0x90, 0x26, 0x16, 0x0f, 0xfd, 0xe2, 0x26, 0xa5, 0xba, 0xdb, 0xc2, 0x7f, 0x01, 0xfb, 0xca, 0x6c,
229     0x47, 0xc6, 0xc1, 0xaa, 0xf6, 0xaf, 0x7c, 0x21, 0xa5, 0x59, 0x8e, 0x7f, 0xe4, 0xb1, 0x93, 0x00,
230     0xd6, 0x2f, 0xfc, 0xd6, 0x4c, 0x00, 0x28, 0xef, 0xfc, 0xa6, 0xac, 0x03, 0x4c, 0xd9, 0x0a, 0x27,
231     0x48, 0x3d, 0xe1, 0x21, 0x19, 0xef, 0xa2, 0x24, 0x76, 0x16, 0xf7, 0x7b, 0xf4, 0x61, 0xf7, 0x62,
232     0x7f, 0x07, 0xad, 0x1e, 0xeb, 0x8a, 0x0b, 0x5d, 0x57, 0x0e, 0xec, 0xf7, 0xec, 0x7e, 0x7e, 0x00,
233     0xad, 0xa0, 0x63, 0x55, 0xf1, 0xa1, 0xc1, 0x14, 0x3c, 0x59, 0x43, 0x2d, 0x41, 0xe0, 0x62, 0x46,
234     0x57, 0x2c, 0x20, 0x6a, 0x4e, 0xec, 0xed, 0xec, 0x74, 0x0e, 0xcc, 0x34, 0xe3, 0x3b, 0x8e, 0x01,
235     0x87, 0x21, 0x1b, 0x26, 0x4f, 0xce, 0x58, 0xcb, 0xbc, 0xd4, 0x11, 0x02, 0x82, 0x01, 0x00, 0x71,
236     0x71, 0xa9, 0xc4, 0x5b, 0xca, 0x7a, 0xa4, 0x5f, 0x2d, 0xa1, 0x0f, 0x57, 0xf5, 0xbf, 0xf0, 0x20,
237     0x7e, 0x91, 0xe5, 0xdd, 0xe6, 0xfd, 0x68, 0x2b, 0xb5, 0x49, 0x9c, 0x1f, 0x03, 0xb3, 0xc2, 0x78,
238     0x81, 0x55, 0xca, 0x4c, 0x1b, 0xd2, 0xeb, 0xcf, 0xbd, 0x19, 0x6f, 0x4b, 0xd7, 0x83, 0x64, 0xdb,
239     0xe7, 0x05, 0x46, 0xcf, 0x79, 0xd8, 0x70, 0x87, 0x77, 0x4d, 0x8c, 0xc5, 0xba, 0xac, 0x52, 0x56,
240     0x8d, 0xc5, 0xb7, 0xcf, 0xa5, 0x27, 0xf6, 0xad, 0xf5, 0x78, 0xb4, 0x20, 0x20, 0x53, 0x2a, 0xb3,
241     0x9f, 0x8c, 0x79, 0x97, 0x0d, 0x9c, 0x85, 0xd7, 0x97, 0xcf, 0x2d, 0x6f, 0xf4, 0x95, 0x6a, 0x63,
242     0xeb, 0x12, 0x01, 0xf2, 0x9e, 0x64, 0x69, 0x07, 0xab, 0xf9, 0xaa, 0xe1, 0x03, 0xf7, 0x05, 0x8b,
243     0x00, 0x9d, 0x40, 0x91, 0xd9, 0x1d, 0x3b, 0x84, 0x4b, 0x0c, 0x67, 0x60, 0x17, 0xfa, 0x6b, 0xc3,
244     0x36, 0x14, 0xa5, 0x3f, 0xc9, 0xf9, 0xcc, 0xb0, 0xeb, 0x2c, 0xd7, 0xdb, 0xad, 0x70, 0xa0, 0xee,
245     0xd5, 0xae, 0x0d, 0xba, 0xd6, 0xde, 0x00, 0xd8, 0xd5, 0x9f, 0xbf, 0x9c, 0xef, 0x02, 0x22, 0xe5,
246     0xeb, 0x7a, 0x95, 0xb1, 0x6c, 0xda, 0x05, 0x55, 0x86, 0xaa, 0x24, 0x45, 0xf4, 0x8c, 0x97, 0x0e,
247     0x9c, 0xa2, 0x7b, 0xd9, 0x45, 0xcc, 0x84, 0x55, 0x6d, 0xa3, 0x09, 0x60, 0xd2, 0x04, 0x9b, 0x30,
248     0xdb, 0x14, 0xa7, 0x75, 0xa0, 0xf4, 0x13, 0x33, 0xc0, 0x1f, 0xcc, 0x1c, 0xd9, 0xe1, 0xfe, 0x5c,
249     0x94, 0x69, 0x4c, 0xb8, 0x79, 0x9c, 0x75, 0x48, 0x85, 0x78, 0xed, 0xd3, 0x8b, 0xf0, 0x64, 0x5b,
250     0xf3, 0xce, 0x11, 0x7e, 0xbc, 0xdc, 0x36, 0x74, 0xe3, 0x0a, 0x65, 0x16, 0x21, 0x1c, 0x30, 0xce,
251     0x6d, 0xab, 0xa5, 0x8b, 0xab, 0xad, 0xce, 0x22, 0x12, 0xde, 0x2c, 0x23, 0x2f, 0xd6, 0x7d, 0x02,
252     0x82, 0x01, 0x00, 0x32, 0x49, 0xcb, 0x68, 0x2e, 0x6c, 0x15, 0xf4, 0xb7, 0x79, 0x38, 0x2c, 0xb2,
253     0xfc, 0x6c, 0x88, 0x6a, 0x8f, 0xe7, 0xff, 0x22, 0x6f, 0xa6, 0x24, 0xda, 0x41, 0x07, 0xdd, 0x63,
254     0xa2, 0x9c, 0x7d, 0xa4, 0x38, 0xb4, 0xe6, 0x61, 0xcb, 0x6d, 0x30, 0x34, 0x5c, 0xdd, 0x5d, 0x9d,
255     0xfc, 0x74, 0x0d, 0x35, 0xe5, 0x58, 0xf6, 0x1e, 0x2e, 0x48, 0x0f, 0xa9, 0x3e, 0x67, 0x62, 0xfe,
256     0xe3, 0xed, 0x59, 0xc6, 0xfa, 0x85, 0x17, 0x9d, 0x4b, 0xeb, 0x80, 0xff, 0xf5, 0xf1, 0x90, 0x92,
257     0x26, 0x2a, 0x96, 0xc4, 0xe5, 0x2a, 0x08, 0x36, 0x28, 0xf7, 0x94, 0x39, 0xd5, 0x0d, 0x8a, 0x00,
258     0xb1, 0x81, 0x81, 0xb9, 0xec, 0xca, 0x0e, 0x50, 0xc0, 0xd8, 0xfe, 0x42, 0x43, 0x1a, 0xd9, 0x19,
259     0xae, 0x60, 0x0a, 0x87, 0xf6, 0x64, 0xae, 0x80, 0x7c, 0xc6, 0xa0, 0x75, 0x48, 0xcc, 0xf2, 0xe6,
260     0x5d, 0xc7, 0x6e, 0x55, 0x36, 0x9e, 0xbf, 0xea, 0xf5, 0x94, 0x53, 0xc6, 0x1c, 0x8d, 0x42, 0xbf,
261     0xac, 0x31, 0xc7, 0xa3, 0x27, 0x3b, 0x66, 0x96, 0x5b, 0xf5, 0x91, 0x32, 0x38, 0x6a, 0x23, 0x4a,
262     0x4c, 0x7c, 0xcb, 0xbd, 0xb4, 0x4b, 0x50, 0xc6, 0x4d, 0xaf, 0x32, 0x08, 0x99, 0x7c, 0x31, 0x5c,
263     0x60, 0x62, 0xc2, 0x84, 0xc8, 0x4a, 0xe6, 0x16, 0xfe, 0x4d, 0xe8, 0x9d, 0x01, 0x79, 0x0b, 0x68,
264     0x13, 0x08, 0x3e, 0x64, 0xf4, 0x90, 0x8f, 0xb5, 0xa7, 0x3b, 0x54, 0x2e, 0x3d, 0x84, 0x7c, 0x91,
265     0x4d, 0x61, 0xa0, 0xce, 0xc3, 0x6f, 0x85, 0x0e, 0x49, 0xba, 0x70, 0xb9, 0xba, 0x11, 0x3c, 0x03,
266     0x70, 0x8a, 0x1f, 0xdb, 0xd5, 0xb9, 0xd2, 0x3b, 0x6b, 0x42, 0x06, 0x7b, 0xc0, 0xd9, 0x19, 0xd0,
267     0x7e, 0xc9, 0x7b, 0x87, 0x7f, 0xe8, 0x4b, 0x64, 0x15, 0xb1, 0x51, 0x0e, 0x34, 0x39, 0xb8, 0x9b,
268     0xfc, 0x95, 0x9d};
269 
270 static const uint8_t kRSACACertDER[] = {0x30, 0x82, 0x05, 0xfd, 0x30, 0x82, 0x03, 0xe5, 0xa0, 0x03,
271     0x02, 0x01, 0x02, 0x02, 0x14, 0x0f, 0x2d, 0x4d, 0xdd, 0x2f, 0xa5, 0xc0, 0x5f, 0x5a, 0xd3, 0x6e,
272     0x9f, 0xbe, 0x29, 0x68, 0xe9, 0x24, 0x72, 0x6c, 0xe9, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48,
273     0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x8d, 0x31, 0x0b, 0x30, 0x09, 0x06,
274     0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x41, 0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04,
275     0x08, 0x0c, 0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, 0x21, 0x30,
276     0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x18, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74,
277     0x20, 0x57, 0x69, 0x64, 0x67, 0x69, 0x74, 0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c, 0x74, 0x64,
278     0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x18, 0x4f, 0x72, 0x67, 0x61, 0x6e,
279     0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x55, 0x6e, 0x69, 0x74, 0x20, 0x4e,
280     0x61, 0x6d, 0x65, 0x31, 0x23, 0x30, 0x21, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1a, 0x6e, 0x6f,
281     0x6e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x6e, 0x6f, 0x6e, 0x65, 0x78, 0x69,
282     0x73, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x61, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x39, 0x30, 0x35,
283     0x30, 0x38, 0x31, 0x32, 0x34, 0x30, 0x32, 0x30, 0x5a, 0x17, 0x0d, 0x32, 0x39, 0x30, 0x35, 0x30,
284     0x37, 0x31, 0x32, 0x34, 0x30, 0x32, 0x30, 0x5a, 0x30, 0x81, 0x8d, 0x31, 0x0b, 0x30, 0x09, 0x06,
285     0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x41, 0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04,
286     0x08, 0x0c, 0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, 0x21, 0x30,
287     0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x18, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74,
288     0x20, 0x57, 0x69, 0x64, 0x67, 0x69, 0x74, 0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c, 0x74, 0x64,
289     0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x18, 0x4f, 0x72, 0x67, 0x61, 0x6e,
290     0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x55, 0x6e, 0x69, 0x74, 0x20, 0x4e,
291     0x61, 0x6d, 0x65, 0x31, 0x23, 0x30, 0x21, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1a, 0x6e, 0x6f,
292     0x6e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x6e, 0x6f, 0x6e, 0x65, 0x78, 0x69,
293     0x73, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x61, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0d, 0x06, 0x09,
294     0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0f, 0x00,
295     0x30, 0x82, 0x02, 0x0a, 0x02, 0x82, 0x02, 0x01, 0x00, 0xd4, 0xa4, 0x24, 0xe8, 0xac, 0xef, 0xab,
296     0xb4, 0xfd, 0x30, 0x45, 0xb3, 0x2f, 0x5f, 0x28, 0xa7, 0xa7, 0x55, 0x8a, 0x73, 0x6c, 0x29, 0x70,
297     0x99, 0xb8, 0x13, 0x65, 0x68, 0xd2, 0x96, 0x71, 0x04, 0xc6, 0x52, 0x8e, 0xc9, 0x3e, 0xa0, 0xcb,
298     0x11, 0x9c, 0xbe, 0x04, 0x66, 0x41, 0x2b, 0x85, 0x4d, 0xac, 0x2f, 0x87, 0xef, 0x7b, 0x47, 0x0b,
299     0x79, 0xe3, 0x37, 0xd0, 0x9e, 0xb4, 0xfa, 0x8f, 0x94, 0x95, 0x4d, 0x41, 0x45, 0x5c, 0x75, 0x1b,
300     0x1c, 0xc5, 0x1d, 0xa8, 0x3b, 0x0e, 0x87, 0x9c, 0x06, 0xc5, 0xe6, 0x19, 0x0e, 0x00, 0x88, 0xb4,
301     0xfa, 0xf0, 0x3c, 0x57, 0x03, 0xd9, 0xbf, 0xee, 0x64, 0x8a, 0x22, 0x66, 0xeb, 0x4c, 0x91, 0xb3,
302     0x09, 0xac, 0x13, 0x50, 0xd6, 0x41, 0x5b, 0x4f, 0x7e, 0x06, 0x9a, 0xa6, 0x9b, 0x1f, 0x07, 0x95,
303     0xd0, 0xe9, 0x9e, 0x43, 0xb4, 0xe1, 0x60, 0xf0, 0x37, 0x53, 0xce, 0x73, 0xea, 0x6e, 0xad, 0x4f,
304     0x73, 0xe0, 0x8b, 0x24, 0xf4, 0x6b, 0xec, 0xfc, 0x09, 0xbc, 0xed, 0x88, 0x8b, 0x92, 0xa5, 0xfe,
305     0x1d, 0x51, 0x3c, 0x51, 0xe0, 0x0f, 0xb1, 0xe9, 0x9d, 0xf5, 0x24, 0x86, 0xb3, 0xd3, 0x98, 0x53,
306     0x81, 0x44, 0x6e, 0x02, 0x33, 0xe1, 0x04, 0xa3, 0x8d, 0xc9, 0x50, 0xa1, 0xff, 0x8b, 0x93, 0x37,
307     0xfc, 0x9c, 0xff, 0xd9, 0x8d, 0x07, 0x30, 0xdb, 0xeb, 0x6f, 0x77, 0xfb, 0x5f, 0x1b, 0xea, 0x5f,
308     0x30, 0xf6, 0x30, 0xa9, 0x7b, 0xb7, 0x08, 0xed, 0x60, 0x3f, 0xb7, 0x98, 0x42, 0xcd, 0x28, 0xf8,
309     0x5b, 0x68, 0x13, 0xf9, 0x31, 0x9a, 0x6c, 0x31, 0x58, 0x59, 0x1a, 0xcd, 0x2f, 0xa0, 0x5b, 0x0b,
310     0xdc, 0xdb, 0xf6, 0xc0, 0x51, 0x77, 0xce, 0x65, 0xa7, 0x81, 0x29, 0x68, 0xa4, 0xf7, 0x6a, 0x23,
311     0xb5, 0xf2, 0x82, 0xae, 0x6a, 0x80, 0xaf, 0x46, 0xa3, 0xfa, 0xc1, 0xee, 0x69, 0x22, 0x2a, 0x00,
312     0xa4, 0x22, 0x93, 0x70, 0x70, 0x5d, 0x0b, 0xc6, 0x7d, 0x04, 0x4d, 0x68, 0x95, 0xd6, 0xaf, 0x8f,
313     0x08, 0x16, 0x97, 0x64, 0x57, 0x3f, 0xb0, 0x6d, 0x1a, 0xd6, 0xc3, 0xf8, 0xbe, 0x73, 0xe4, 0x8d,
314     0x39, 0x25, 0xff, 0x68, 0x2d, 0xb8, 0x0c, 0xf5, 0xd1, 0xa0, 0xe2, 0xd2, 0x41, 0x1d, 0xda, 0xbe,
315     0xe9, 0x8a, 0x30, 0x9b, 0x0e, 0xed, 0xc7, 0x8c, 0xee, 0x97, 0xda, 0x5f, 0xe4, 0x18, 0x28, 0x07,
316     0x53, 0xce, 0x1a, 0xff, 0x86, 0x1c, 0xc6, 0xe0, 0x0b, 0xab, 0x51, 0x95, 0xef, 0xe2, 0xdb, 0x23,
317     0x0a, 0x01, 0xb5, 0x51, 0x3e, 0x5a, 0xc1, 0x32, 0xe6, 0xf2, 0xb1, 0x59, 0xe1, 0xbb, 0xaa, 0x77,
318     0x4e, 0xae, 0xfa, 0x4d, 0x3c, 0x18, 0x1a, 0xdf, 0xe7, 0xde, 0x3e, 0x66, 0xc6, 0xcf, 0xbd, 0x9b,
319     0xa8, 0x5a, 0x8c, 0xa1, 0x80, 0x7c, 0x3d, 0x89, 0x45, 0x40, 0x54, 0x25, 0xfa, 0x93, 0xff, 0xde,
320     0x49, 0x56, 0x54, 0x45, 0x13, 0xce, 0x55, 0xb2, 0xbb, 0x19, 0x47, 0x7f, 0x5e, 0x5e, 0xd3, 0xd9,
321     0xdc, 0x01, 0x5c, 0x12, 0x58, 0xdc, 0x47, 0x67, 0x6c, 0xc8, 0xbb, 0x9e, 0xa1, 0x75, 0xd1, 0x17,
322     0x07, 0x07, 0x9b, 0xc4, 0x4a, 0xdd, 0x4c, 0x52, 0x48, 0x64, 0x1b, 0x64, 0x1b, 0x1a, 0x37, 0xe6,
323     0x51, 0xeb, 0x0c, 0xf5, 0x49, 0x78, 0x71, 0x6a, 0x11, 0x68, 0xbf, 0x59, 0x09, 0xeb, 0x4b, 0x3a,
324     0xfa, 0xbe, 0x75, 0x96, 0x07, 0x7a, 0xa6, 0xd0, 0x45, 0xb6, 0x49, 0xe7, 0x7a, 0xcc, 0xdf, 0xc7,
325     0x20, 0xe8, 0xa5, 0xb6, 0xf4, 0x4f, 0x7a, 0x3b, 0xa0, 0x94, 0x9b, 0x00, 0xa8, 0x88, 0xe1, 0x4a,
326     0x2d, 0x91, 0xfa, 0x5a, 0x00, 0xf2, 0x49, 0xf0, 0xba, 0x08, 0xed, 0x7a, 0xcc, 0x87, 0x01, 0xf0,
327     0x84, 0xee, 0x49, 0x45, 0x7f, 0x7f, 0x71, 0x9a, 0x71, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x53,
328     0x30, 0x51, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xb4, 0x59, 0x44,
329     0x9c, 0xe3, 0x18, 0xd1, 0x69, 0x15, 0x4a, 0x38, 0x8b, 0x82, 0x0d, 0x19, 0x83, 0x1f, 0xe0, 0x02,
330     0x37, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xb4, 0x59,
331     0x44, 0x9c, 0xe3, 0x18, 0xd1, 0x69, 0x15, 0x4a, 0x38, 0x8b, 0x82, 0x0d, 0x19, 0x83, 0x1f, 0xe0,
332     0x02, 0x37, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03,
333     0x01, 0x01, 0xff, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b,
334     0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x09, 0xbc, 0xf2, 0x4f, 0x06, 0x98, 0xf7, 0x8a, 0xfb,
335     0x49, 0xc7, 0x78, 0x7c, 0xd7, 0x00, 0x00, 0x51, 0x75, 0x91, 0xdb, 0xd0, 0xd2, 0x9c, 0x61, 0xeb,
336     0xe5, 0x15, 0x80, 0x50, 0xc8, 0xed, 0x50, 0x5c, 0x0e, 0x3b, 0x77, 0x51, 0x48, 0x44, 0xc4, 0xce,
337     0x81, 0x9a, 0x60, 0x1c, 0xf1, 0xc2, 0x25, 0xfc, 0xcd, 0x7d, 0xf8, 0x2f, 0xf9, 0xcf, 0x21, 0x28,
338     0x36, 0xa3, 0xc5, 0x15, 0x99, 0x75, 0x5b, 0x13, 0x65, 0xb8, 0x28, 0x1d, 0xde, 0x18, 0xaf, 0x1b,
339     0xd8, 0x6f, 0xd8, 0x83, 0xbf, 0xbb, 0xa9, 0x13, 0x44, 0xfe, 0x4a, 0x19, 0xac, 0x18, 0x00, 0x94,
340     0x3f, 0xdc, 0xe4, 0x34, 0x73, 0x44, 0xbf, 0x9f, 0x1b, 0x01, 0x70, 0xd5, 0x92, 0x2b, 0xce, 0x1c,
341     0x63, 0xc5, 0xfb, 0x6b, 0x0e, 0xe0, 0x8d, 0x48, 0x59, 0x5c, 0xcd, 0xac, 0x62, 0x9a, 0xd0, 0xf0,
342     0xa8, 0xe7, 0x35, 0x02, 0x95, 0xc9, 0x3f, 0x65, 0xab, 0x76, 0x38, 0xab, 0x18, 0x32, 0x64, 0xa7,
343     0x14, 0x53, 0xc8, 0xaf, 0x49, 0x61, 0xaa, 0x94, 0x05, 0xd1, 0xaa, 0xd6, 0xea, 0x34, 0xda, 0xc8,
344     0x73, 0xdb, 0xad, 0x48, 0xd8, 0xcc, 0x5a, 0x44, 0xda, 0xa6, 0x0b, 0xbb, 0xc4, 0x7b, 0xce, 0x0f,
345     0x5f, 0xa6, 0x46, 0xe5, 0x90, 0xfb, 0xf0, 0xa5, 0x04, 0x0c, 0x32, 0xa8, 0x54, 0xdc, 0x62, 0x97,
346     0x57, 0x4a, 0xdf, 0xb3, 0x03, 0x42, 0x64, 0xe8, 0x43, 0xc2, 0xdb, 0x38, 0x73, 0x6f, 0x67, 0x7d,
347     0x6d, 0x56, 0x2f, 0x51, 0x41, 0x8f, 0x84, 0x82, 0x7e, 0x25, 0x04, 0xe2, 0x37, 0x68, 0xf8, 0x35,
348     0x6a, 0x71, 0x3c, 0xde, 0xf7, 0x18, 0xb4, 0x4f, 0xbd, 0xfc, 0x73, 0x81, 0x96, 0x72, 0x03, 0x47,
349     0x7c, 0x04, 0x6d, 0x76, 0x56, 0x7f, 0x27, 0x2a, 0x46, 0x20, 0x75, 0x7f, 0x0c, 0xb1, 0xd6, 0xcc,
350     0x9d, 0x99, 0xcc, 0x7d, 0x23, 0x43, 0xed, 0xe2, 0xf4, 0x08, 0x4d, 0xe7, 0xf3, 0xdb, 0x0e, 0x69,
351     0xfd, 0x4b, 0xb4, 0xce, 0x5e, 0x83, 0xd7, 0x0c, 0xd5, 0x43, 0x9b, 0x18, 0x9d, 0x67, 0x5b, 0x13,
352     0xce, 0x50, 0x11, 0x1d, 0xa6, 0x31, 0x24, 0x6b, 0xae, 0x23, 0x41, 0xae, 0x90, 0xbb, 0x80, 0x2a,
353     0x92, 0x78, 0xe8, 0x45, 0xc0, 0xde, 0xb5, 0xe7, 0x10, 0xb0, 0xac, 0x99, 0x7d, 0x3e, 0x2a, 0x38,
354     0x4d, 0xb9, 0x96, 0x5d, 0x38, 0x49, 0xf1, 0x3f, 0xb8, 0x74, 0xc2, 0x3f, 0x53, 0x93, 0x7a, 0x1d,
355     0x60, 0x1f, 0xb0, 0x19, 0xd1, 0xee, 0x06, 0x16, 0x68, 0x1c, 0x26, 0xa2, 0xad, 0xfd, 0xfd, 0x99,
356     0x01, 0xab, 0xe1, 0xfa, 0xac, 0x9f, 0x79, 0xe7, 0xfb, 0xe4, 0xd9, 0xe4, 0xb6, 0x9f, 0xa5, 0xc2,
357     0x80, 0x9e, 0x04, 0x32, 0x2f, 0x52, 0xbc, 0x39, 0xff, 0x38, 0xa8, 0x14, 0x81, 0x98, 0xef, 0x99,
358     0x86, 0x3f, 0x13, 0x8d, 0x2e, 0xb8, 0xc5, 0xcc, 0x2b, 0xd9, 0xb5, 0x20, 0x21, 0x32, 0x82, 0xf4,
359     0x5a, 0x37, 0xb2, 0x08, 0xaa, 0xec, 0x3f, 0x47, 0x06, 0x84, 0x55, 0x8d, 0xf3, 0xb4, 0xf3, 0xea,
360     0x41, 0x56, 0x58, 0xc9, 0x1a, 0x88, 0x11, 0x93, 0x4c, 0xc5, 0x59, 0x14, 0x0e, 0x54, 0x6e, 0x5f,
361     0x2b, 0x62, 0x2f, 0x5d, 0xbd, 0xfe, 0x07, 0x37, 0x2c, 0xc4, 0x6d, 0x30, 0x58, 0xb9, 0x02, 0xe7,
362     0x81, 0xf8, 0x96, 0x8e, 0xbd, 0x9a, 0x03, 0x4b, 0xc1, 0x0d, 0x66, 0x28, 0xdd, 0x2f, 0xb7, 0x58,
363     0xeb, 0xb8, 0x49, 0xa3, 0x91, 0xf3, 0x60, 0xe6, 0x36, 0x15, 0xb1, 0xfb, 0xb6, 0xf3, 0x54, 0x3f,
364     0x7b, 0x1d, 0x10, 0xa4, 0x5a, 0x41, 0xba, 0x47, 0x92, 0xc5, 0xeb, 0x6a, 0x3b, 0xc6, 0xeb, 0xbc,
365     0x05, 0x97, 0xc0, 0x77, 0xc8, 0x89, 0x4f, 0xf0, 0xee, 0xfa, 0xaf, 0xbe, 0x90, 0x05, 0xc4, 0x3e,
366     0x48, 0x82, 0x09, 0x17, 0xf1, 0x3d, 0x8b};
367 
368 static const uint8_t kECCACertDER[] = {0x30, 0x82, 0x02, 0xfd, 0x30, 0x82, 0x02, 0x5e, 0xa0, 0x03,
369     0x02, 0x01, 0x02, 0x02, 0x14, 0x47, 0x96, 0xf7, 0x19, 0x12, 0x8f, 0x46, 0x3b, 0xd1, 0x98, 0xe6,
370     0xd6, 0xc4, 0x5a, 0x79, 0x3f, 0xe9, 0xde, 0x4e, 0x4b, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48,
371     0xce, 0x3d, 0x04, 0x03, 0x02, 0x30, 0x81, 0x8f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04,
372     0x06, 0x13, 0x02, 0x41, 0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x0a,
373     0x53, 0x6f, 0x6d, 0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03,
374     0x55, 0x04, 0x0a, 0x0c, 0x18, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x57, 0x69,
375     0x64, 0x67, 0x69, 0x74, 0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c, 0x74, 0x64, 0x31, 0x21, 0x30,
376     0x1f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x18, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61,
377     0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x55, 0x6e, 0x69, 0x74, 0x20, 0x4e, 0x61, 0x6d, 0x65,
378     0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1c, 0x6e, 0x6f, 0x6e, 0x65, 0x78,
379     0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x6e, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65,
380     0x6e, 0x74, 0x2e, 0x65, 0x63, 0x63, 0x61, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x39, 0x30, 0x35, 0x30,
381     0x38, 0x31, 0x32, 0x34, 0x37, 0x31, 0x31, 0x5a, 0x17, 0x0d, 0x33, 0x39, 0x30, 0x35, 0x30, 0x33,
382     0x31, 0x32, 0x34, 0x37, 0x31, 0x31, 0x5a, 0x30, 0x81, 0x8f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03,
383     0x55, 0x04, 0x06, 0x13, 0x02, 0x41, 0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08,
384     0x0c, 0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, 0x21, 0x30, 0x1f,
385     0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x18, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20,
386     0x57, 0x69, 0x64, 0x67, 0x69, 0x74, 0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c, 0x74, 0x64, 0x31,
387     0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x18, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69,
388     0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x55, 0x6e, 0x69, 0x74, 0x20, 0x4e, 0x61,
389     0x6d, 0x65, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1c, 0x6e, 0x6f, 0x6e,
390     0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x6e, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x73,
391     0x74, 0x65, 0x6e, 0x74, 0x2e, 0x65, 0x63, 0x63, 0x61, 0x30, 0x81, 0x9b, 0x30, 0x10, 0x06, 0x07,
392     0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x23, 0x03, 0x81,
393     0x86, 0x00, 0x04, 0x01, 0xf3, 0x42, 0x76, 0xea, 0xca, 0x37, 0x6b, 0x80, 0xb4, 0x26, 0x42, 0x9f,
394     0x26, 0x0b, 0xfe, 0x8b, 0x94, 0x4a, 0x56, 0x48, 0x56, 0x78, 0xda, 0x65, 0x07, 0xa6, 0x92, 0x63,
395     0xdc, 0x33, 0x9f, 0x2f, 0x67, 0xaa, 0xc7, 0xf2, 0x77, 0xba, 0x4a, 0x65, 0xe7, 0x6b, 0x5b, 0x79,
396     0x8a, 0x92, 0xe2, 0xd1, 0x99, 0x8f, 0x6d, 0x08, 0x50, 0x9f, 0x2f, 0xe9, 0x39, 0xff, 0xee, 0xa1,
397     0xf7, 0x3b, 0x4f, 0xb1, 0x96, 0x01, 0xbc, 0xda, 0xa9, 0x21, 0x1b, 0x15, 0xb1, 0x24, 0x59, 0x38,
398     0x3a, 0xee, 0x46, 0x31, 0x51, 0xae, 0xd8, 0x63, 0x0f, 0x5a, 0xae, 0xa5, 0xfa, 0x12, 0x2e, 0xbb,
399     0x71, 0x71, 0xe5, 0x85, 0xa3, 0x4b, 0x90, 0x47, 0xbb, 0xa9, 0xa5, 0x55, 0x10, 0xeb, 0xe7, 0xf5,
400     0x34, 0xe7, 0x3a, 0xd7, 0xb2, 0xaa, 0xad, 0x86, 0x8d, 0x29, 0xb9, 0xe9, 0x3b, 0xc4, 0x6b, 0x2c,
401     0x23, 0x3f, 0x08, 0x37, 0xac, 0xeb, 0x6b, 0xa3, 0x53, 0x30, 0x51, 0x30, 0x1d, 0x06, 0x03, 0x55,
402     0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xcc, 0x8b, 0x62, 0xc3, 0x62, 0x94, 0x1e, 0x17, 0x51, 0x32,
403     0xd5, 0x95, 0x2f, 0xaf, 0x20, 0x68, 0x9d, 0x67, 0xc2, 0xb0, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d,
404     0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xcc, 0x8b, 0x62, 0xc3, 0x62, 0x94, 0x1e, 0x17, 0x51,
405     0x32, 0xd5, 0x95, 0x2f, 0xaf, 0x20, 0x68, 0x9d, 0x67, 0xc2, 0xb0, 0x30, 0x0f, 0x06, 0x03, 0x55,
406     0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0a, 0x06, 0x08,
407     0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x81, 0x8c, 0x00, 0x30, 0x81, 0x88, 0x02,
408     0x42, 0x01, 0x91, 0xfa, 0xdc, 0xb9, 0x61, 0x21, 0x29, 0x01, 0xd0, 0xd0, 0x07, 0xa6, 0xed, 0x77,
409     0xa6, 0x81, 0x27, 0x13, 0x4d, 0x74, 0x96, 0xbd, 0x0a, 0x97, 0xeb, 0xd0, 0x02, 0x77, 0x90, 0x80,
410     0xdf, 0xc1, 0xd3, 0xd3, 0x3c, 0xe5, 0x30, 0x6d, 0xba, 0x5a, 0xcf, 0x22, 0x70, 0x13, 0xad, 0x44,
411     0x46, 0xbb, 0x6c, 0xdf, 0x27, 0x8a, 0x00, 0xf9, 0xc6, 0xa4, 0x87, 0x71, 0xeb, 0x19, 0x93, 0x13,
412     0x6d, 0xcb, 0x2d, 0x02, 0x42, 0x01, 0x22, 0x3a, 0x74, 0xe9, 0xee, 0x1b, 0x09, 0xe0, 0xc7, 0xd5,
413     0x78, 0xf2, 0x0c, 0x45, 0x30, 0x23, 0x48, 0xcc, 0x6a, 0x5f, 0x63, 0x32, 0xb7, 0x34, 0xf2, 0xfb,
414     0xf4, 0x68, 0x16, 0xbd, 0x2e, 0xea, 0x88, 0x11, 0x3b, 0xd0, 0x4e, 0xc3, 0x6a, 0x1a, 0xa4, 0x6d,
415     0xb7, 0x63, 0x2f, 0x7b, 0x65, 0x24, 0xde, 0xbd, 0x1a, 0x00, 0xaf, 0x46, 0xa2, 0x7c, 0xbc, 0x08,
416     0x38, 0xcd, 0x12, 0x8a, 0x63, 0x4d, 0x3b};
417 
418 static const uint8_t kDSACertDER[] = {0x30, 0x82, 0x03, 0xdf, 0x30, 0x82, 0x03, 0x9c, 0xa0, 0x03,
419     0x02, 0x01, 0x02, 0x02, 0x14, 0x60, 0xe4, 0x10, 0x21, 0xe4, 0xc9, 0xaa, 0xf4, 0x6f, 0x72, 0x62,
420     0xd1, 0x9f, 0x6e, 0x11, 0xc9, 0xee, 0x65, 0xd4, 0x62, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48,
421     0x01, 0x65, 0x03, 0x04, 0x03, 0x02, 0x30, 0x81, 0x9f, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55,
422     0x04, 0x06, 0x13, 0x02, 0x41, 0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c,
423     0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, 0x0f, 0x30, 0x0d, 0x06,
424     0x03, 0x55, 0x04, 0x07, 0x0c, 0x06, 0x53, 0x69, 0x64, 0x6e, 0x65, 0x79, 0x31, 0x21, 0x30, 0x1f,
425     0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x18, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20,
426     0x57, 0x69, 0x64, 0x67, 0x69, 0x74, 0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c, 0x74, 0x64, 0x31,
427     0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x18, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69,
428     0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x55, 0x6e, 0x69, 0x74, 0x20, 0x4e, 0x61,
429     0x6d, 0x65, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1b, 0x6e, 0x6f, 0x6e,
430     0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x6e, 0x6f, 0x6e, 0x65, 0x78, 0x69, 0x73,
431     0x74, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x73, 0x61, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x39, 0x30, 0x35,
432     0x30, 0x38, 0x31, 0x32, 0x34, 0x38, 0x33, 0x36, 0x5a, 0x17, 0x0d, 0x33, 0x39, 0x30, 0x35, 0x30,
433     0x33, 0x31, 0x32, 0x34, 0x38, 0x33, 0x36, 0x5a, 0x30, 0x81, 0x9f, 0x31, 0x0b, 0x30, 0x09, 0x06,
434     0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x41, 0x55, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04,
435     0x08, 0x0c, 0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x2d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x31, 0x0f, 0x30,
436     0x0d, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x06, 0x53, 0x69, 0x64, 0x6e, 0x65, 0x79, 0x31, 0x21,
437     0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x18, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65,
438     0x74, 0x20, 0x57, 0x69, 0x64, 0x67, 0x69, 0x74, 0x73, 0x20, 0x50, 0x74, 0x79, 0x20, 0x4c, 0x74,
439     0x64, 0x31, 0x21, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x18, 0x4f, 0x72, 0x67, 0x61,
440     0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x55, 0x6e, 0x69, 0x74, 0x20,
441     0x4e, 0x61, 0x6d, 0x65, 0x31, 0x24, 0x30, 0x22, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x1b, 0x6e,
442     0x6f, 0x6e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x6e, 0x6f, 0x6e, 0x65, 0x78,
443     0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x73, 0x61, 0x30, 0x82, 0x01, 0xb7, 0x30, 0x82,
444     0x01, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x38, 0x04, 0x01, 0x30, 0x82, 0x01, 0x1f, 0x02,
445     0x81, 0x81, 0x00, 0xb2, 0xf2, 0xb3, 0x0d, 0x25, 0x1c, 0x01, 0x78, 0x24, 0xaf, 0x21, 0x37, 0xe1,
446     0x07, 0x1a, 0xd6, 0x3f, 0xc5, 0x5c, 0x94, 0x4e, 0xf9, 0x82, 0x11, 0x4a, 0x42, 0xf8, 0xbc, 0x86,
447     0x21, 0xd7, 0xe1, 0xef, 0x21, 0x50, 0xad, 0x79, 0x26, 0xab, 0x38, 0xb6, 0xd9, 0x46, 0x0f, 0xef,
448     0xa3, 0x74, 0x3f, 0x3b, 0x10, 0x55, 0x67, 0x81, 0xfc, 0xe5, 0x48, 0x94, 0x33, 0xdd, 0x2c, 0x0a,
449     0x7e, 0x0b, 0x23, 0x07, 0x89, 0x96, 0x09, 0x8c, 0xcd, 0x22, 0xfc, 0xdc, 0x09, 0x6f, 0x62, 0xec,
450     0x0f, 0x5a, 0x0e, 0x02, 0x1c, 0x74, 0x02, 0x04, 0xb9, 0x52, 0x0a, 0xae, 0x95, 0x85, 0xea, 0x2b,
451     0xee, 0x99, 0xbd, 0x7c, 0xf4, 0x27, 0xb7, 0xaf, 0x86, 0x3e, 0x0c, 0x69, 0x55, 0x51, 0x8f, 0x05,
452     0xcf, 0x4e, 0xde, 0xfd, 0xb0, 0x98, 0xbb, 0xdd, 0x55, 0xa4, 0x53, 0xc5, 0x98, 0x31, 0xde, 0x8d,
453     0xa9, 0xcf, 0x4b, 0x02, 0x15, 0x00, 0x9a, 0x11, 0xba, 0xd8, 0x08, 0x2b, 0x64, 0x4f, 0x5b, 0xaf,
454     0x2f, 0xb8, 0x8b, 0x43, 0x9e, 0x8f, 0xc1, 0x04, 0xa2, 0x4d, 0x02, 0x81, 0x81, 0x00, 0xa8, 0x8f,
455     0xe1, 0xb3, 0xe3, 0xd5, 0x61, 0xa8, 0x57, 0xe0, 0x0c, 0x55, 0x95, 0xaf, 0x80, 0xf8, 0xe3, 0xf8,
456     0x73, 0xfe, 0x30, 0x3d, 0xf0, 0x10, 0x10, 0xa9, 0x11, 0x94, 0xc8, 0x98, 0x44, 0x25, 0x79, 0xa5,
457     0x1a, 0xe9, 0x57, 0xe3, 0x0d, 0x57, 0x3a, 0x49, 0xc1, 0x4c, 0x7f, 0x01, 0x21, 0x6c, 0x15, 0xd5,
458     0xdb, 0x73, 0x41, 0xbc, 0x4b, 0xf2, 0x8e, 0xe0, 0x30, 0x55, 0xda, 0x86, 0xac, 0x23, 0x78, 0x7a,
459     0x7a, 0xef, 0xb4, 0x84, 0xbf, 0x9f, 0x02, 0x77, 0xe6, 0x44, 0x54, 0xca, 0xac, 0x2a, 0x6b, 0xfd,
460     0x58, 0xfa, 0xbe, 0xc2, 0xeb, 0x02, 0xf0, 0xce, 0x32, 0x2e, 0x1c, 0x5f, 0xca, 0xdd, 0xe9, 0xf6,
461     0x67, 0xf7, 0x4f, 0xa4, 0xe5, 0x2b, 0x27, 0xec, 0xaa, 0x47, 0xfd, 0xfb, 0x63, 0x9c, 0x3f, 0xba,
462     0xdc, 0xda, 0xd2, 0x18, 0xd6, 0x8d, 0x65, 0xf5, 0x8d, 0xc5, 0x97, 0x78, 0xcc, 0x6f, 0x03, 0x81,
463     0x84, 0x00, 0x02, 0x81, 0x80, 0x70, 0x3d, 0xfa, 0x84, 0x2a, 0x3c, 0xad, 0x9c, 0xfa, 0x86, 0x39,
464     0xaf, 0xa9, 0xdb, 0x4f, 0x94, 0x27, 0x12, 0xa7, 0x60, 0x5b, 0xa8, 0xe9, 0x30, 0x19, 0x5d, 0xf8,
465     0x0d, 0x20, 0x90, 0x61, 0x9f, 0xd7, 0xf8, 0xa9, 0xbe, 0x5f, 0x2d, 0x31, 0x38, 0x5a, 0xb4, 0xaa,
466     0x25, 0x6b, 0xb2, 0x37, 0x25, 0xdb, 0xc2, 0x50, 0xca, 0xaf, 0x44, 0xcb, 0x2e, 0x5f, 0x69, 0xc8,
467     0x56, 0x16, 0x0e, 0x90, 0x20, 0x94, 0xc8, 0x43, 0x86, 0x5b, 0x52, 0x6c, 0xd4, 0x74, 0xd0, 0x76,
468     0xec, 0xe4, 0x81, 0xcc, 0x21, 0x30, 0xf9, 0x75, 0x54, 0xd9, 0xf3, 0xd0, 0x83, 0x46, 0x63, 0x96,
469     0xf9, 0x60, 0x1a, 0xa7, 0xeb, 0xe2, 0xe4, 0x7a, 0x89, 0x9d, 0xfa, 0x26, 0xc6, 0x22, 0xab, 0xee,
470     0x29, 0x43, 0x4d, 0x32, 0x5c, 0x01, 0x09, 0x18, 0xf6, 0xe4, 0x9f, 0xfd, 0xeb, 0xb7, 0x16, 0x08,
471     0xdd, 0x29, 0xbb, 0xce, 0x10, 0xa3, 0x53, 0x30, 0x51, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e,
472     0x04, 0x16, 0x04, 0x14, 0x04, 0x11, 0x5e, 0x1f, 0xd4, 0x92, 0x92, 0xea, 0xe3, 0x1c, 0xc2, 0x03,
473     0x6f, 0xc1, 0x80, 0x73, 0x2b, 0xa5, 0xa0, 0x3e, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04,
474     0x18, 0x30, 0x16, 0x80, 0x14, 0x04, 0x11, 0x5e, 0x1f, 0xd4, 0x92, 0x92, 0xea, 0xe3, 0x1c, 0xc2,
475     0x03, 0x6f, 0xc1, 0x80, 0x73, 0x2b, 0xa5, 0xa0, 0x3e, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13,
476     0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86,
477     0x48, 0x01, 0x65, 0x03, 0x04, 0x03, 0x02, 0x03, 0x30, 0x00, 0x30, 0x2d, 0x02, 0x14, 0x73, 0x18,
478     0xf9, 0x68, 0x26, 0xdb, 0x0d, 0xd5, 0x49, 0x52, 0x14, 0x50, 0xb4, 0xcf, 0x3a, 0x1f, 0x0d, 0x49,
479     0x8f, 0xe7, 0x02, 0x15, 0x00, 0x92, 0x6e, 0xb6, 0xce, 0x87, 0x1e, 0x7b, 0x68, 0xfc, 0x2e, 0xd3,
480     0xa9, 0x3d, 0xe1, 0x55, 0x39, 0xc0, 0x66, 0xe0, 0x20};
481 
482 static SSL_CTX* ctx = NULL;
483 
psk_callback(SSL * ssl,const char * identity,unsigned char * psk,unsigned int max_psk_len)484 unsigned int psk_callback(
485     SSL* ssl, const char* identity, unsigned char* psk, unsigned int max_psk_len) {
486     memset(psk, 'A', max_psk_len);
487     return max_psk_len;
488 }
489 
490 #if defined(HF_SSL_IS_OPENSSL)
srp_callback(SSL * s,int * ad,void * arg)491 static int srp_callback(SSL* s, int* ad, void* arg) {
492     if (strcmp(SSL_get_srp_username(s), "USER") != 0) {
493         *ad = SSL_AD_INTERNAL_ERROR;
494         return SSL3_AL_FATAL;
495     }
496     if (SSL_set_srp_server_param_pw(s, "USER", "PASS", "1024") < 0) {
497         *ad = SSL_AD_INTERNAL_ERROR;
498         return SSL3_AL_FATAL;
499     }
500     return SSL_ERROR_NONE;
501 }
502 #endif /* defined(HF_SSL_IS_OPENSSL) */
503 
alpn_callback(SSL * ssl,const unsigned char ** out,unsigned char * outlen,const unsigned char * in,unsigned int inlen,void * arg)504 int alpn_callback(SSL* ssl, const unsigned char** out, unsigned char* outlen,
505     const unsigned char* in, unsigned int inlen, void* arg) {
506     *out = &in[1];
507     *outlen = in[0];
508     return SSL_TLSEXT_ERR_OK;
509 }
510 
npn_callback(SSL * ssl,const uint8_t ** out,unsigned * out_len,void * arg)511 static int npn_callback(SSL* ssl, const uint8_t** out, unsigned* out_len, void* arg) {
512     static const uint8_t kProtocols[] = {
513         0x01,
514         'a',
515         0x02,
516         'a',
517         'a',
518         0x03,
519         'a',
520         'a',
521         'a',
522     };
523     *out = kProtocols;
524     *out_len = sizeof(kProtocols);
525     return SSL_TLSEXT_ERR_OK;
526 }
527 
session_id_callback(const SSL * ssl,unsigned char * id,unsigned int * id_len)528 static int session_id_callback(
529 #if defined(HF_SSL_IS_LIBRESSL)
530     const
531 #endif /* defined(HF_SSL_IS_LIBRESSL) */
532     SSL* ssl,
533     unsigned char* id, unsigned int* id_len) {
534     static unsigned char sess_cnt = 'A';
535     memset(id, sess_cnt++, *id_len);
536     return 1;
537 }
538 
LLVMFuzzerInitialize(int * argc,char *** argv)539 int LLVMFuzzerInitialize(int* argc, char*** argv) {
540     HFInit();
541     HFResetRand();
542 
543     ctx = SSL_CTX_new(SSLv23_method());
544     const uint8_t* bufp = kRSAPrivateKeyDER;
545     RSA* privkey = d2i_RSAPrivateKey(NULL, &bufp, sizeof(kRSAPrivateKeyDER));
546     assert(privkey != NULL);
547     EVP_PKEY* pkey = EVP_PKEY_new();
548     EVP_PKEY_assign_RSA(pkey, privkey);
549     int ret = SSL_CTX_use_PrivateKey(ctx, pkey);
550     assert(ret == 1);
551     EVP_PKEY_free(pkey);
552 
553     bufp = kCertificateDER;
554     X509* cert = d2i_X509(NULL, &bufp, sizeof(kCertificateDER));
555     assert(cert != NULL);
556     ret = SSL_CTX_use_certificate(ctx, cert);
557     assert(ret == 1);
558     X509_free(cert);
559 #if defined(HF_SSL_IS_BORINGSSL)
560     ret = SSL_CTX_set_cipher_list(ctx, "ALL");
561 #else
562     ret = SSL_CTX_set_cipher_list(ctx, "ALL:COMPLEMENTOFALL");
563 #endif  // defined(HF_SSL_IS_BORINGSSL)
564     assert(ret == 1);
565 
566     X509_STORE* store = X509_STORE_new();
567     assert(store != NULL);
568 
569     bufp = kRSACACertDER;
570     cert = d2i_X509(NULL, &bufp, sizeof(kRSACACertDER));
571     assert(cert != NULL);
572     ret = SSL_CTX_add_client_CA(ctx, cert);
573     assert(ret == 1);
574     ret = X509_STORE_add_cert(store, cert);
575     assert(ret == 1);
576     X509_free(cert);
577 
578     bufp = kECCACertDER;
579     cert = d2i_X509(NULL, &bufp, sizeof(kECCACertDER));
580     assert(cert != NULL);
581     ret = SSL_CTX_add_client_CA(ctx, cert);
582     assert(ret == 1);
583     ret = X509_STORE_add_cert(store, cert);
584     assert(ret == 1);
585     X509_free(cert);
586 
587     bufp = kDSACertDER;
588     cert = d2i_X509(NULL, &bufp, sizeof(kDSACertDER));
589     ret = SSL_CTX_add_client_CA(ctx, cert);
590     assert(ret == 1);
591     ret = X509_STORE_add_cert(store, cert);
592     assert(ret == 1);
593     X509_free(cert);
594 
595     SSL_CTX_set_cert_store(ctx, store);
596     SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);
597     SSL_CTX_set_verify_depth(ctx, 10);
598 
599 #if !defined(HF_SSL_IS_LIBRESSL)
600     SSL_CTX_set_psk_server_callback(ctx, psk_callback);
601     ret = SSL_CTX_use_psk_identity_hint(ctx, "ABCDEFUZZ");
602     assert(ret == 1);
603 #endif /* !defined(HF_SSL_IS_LIBRESSL) */
604 
605 #if defined(HF_SSL_IS_OPENSSL)
606     ret = SSL_CTX_set_srp_username_callback(ctx, srp_callback);
607     assert(ret == 1);
608     ret = SSL_CTX_set_srp_cb_arg(ctx, NULL);
609     assert(ret == 1);
610 #endif /* defined(HF_SSL_IS_OPENSSL) */
611 
612     SSL_CTX_set_alpn_select_cb(ctx, alpn_callback, NULL);
613     SSL_CTX_set_next_protos_advertised_cb(ctx, npn_callback, NULL);
614     SSL_CTX_set_ecdh_auto(ctx, 1);
615 #if defined(TLS1_3_VERSION)
616     SSL_CTX_set_min_proto_version(ctx, SSL3_VERSION);
617     SSL_CTX_set_max_proto_version(ctx, TLS1_3_VERSION);
618 #endif /* defined(TLS1_3_VERSION) */
619     SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_BOTH);
620     SSL_CTX_set_timeout(ctx, 3);
621 
622 #if defined(HF_SSL_IS_OPENSSL_GE_1_1)
623     SSL_CTX_enable_ct(ctx, SSL_CT_VALIDATION_STRICT);
624     SSL_CTX_set_max_early_data(ctx, 1024);
625 #endif /* defined(HF_SSL_IS_OPENSSL_GE_1_1) */
626 
627 #if defined(HF_SSL_IS_OPENSSL_GE_1_1) || defined(HF_SSL_IS_LIBRESSL)
628     SSL_CTX_set_dh_auto(ctx, 1);
629     SSL_CTX_set_generate_session_id(ctx, session_id_callback);
630 #endif /* defined(HF_SSL_IS_OPENSSL_GE_1_1) || defined(HF_SSL_IS_LIBRESSL) */
631 
632     long opts = SSL_CTX_get_options(ctx);
633     opts |= SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION;
634     opts |= SSL_OP_LEGACY_SERVER_CONNECT;
635     opts |= SSL_OP_ALL;
636     SSL_CTX_set_options(ctx, opts);
637 
638     return 1;
639 }
640 
RAND_reset_for_fuzzing(void)641 __attribute__((weak)) void RAND_reset_for_fuzzing(void){};
642 
LLVMFuzzerTestOneInput(const uint8_t * buf,size_t len)643 int LLVMFuzzerTestOneInput(const uint8_t* buf, size_t len) {
644     RAND_reset_for_fuzzing();
645 
646     SSL* server = SSL_new(ctx);
647 
648 #if defined(HF_SSL_FROM_STDIN)
649     BIO* in = BIO_new(BIO_s_fd());
650     BIO_set_fd(in, 0, BIO_NOCLOSE);
651 #else  /* defined(HF_SSL_FROM_STDIN) */
652     BIO* in = BIO_new(BIO_s_mem());
653     BIO_write(in, buf, len);
654 #endif /* defined(HF_SSL_FROM_STDIN) */
655 
656     BIO* out = BIO_new(BIO_s_fd());
657     BIO_set_fd(out, 1, BIO_NOCLOSE);
658 
659     SSL_set_bio(server, in, out);
660     SSL_set_accept_state(server);
661 
662 #if defined(HF_SSL_IS_OPENSSL_GE_1_1)
663     for (;;) {
664         size_t sz;
665         uint8_t edata_rbuf[128];
666         if (SSL_read_early_data(server, edata_rbuf, sizeof(edata_rbuf), &sz) !=
667             SSL_READ_EARLY_DATA_SUCCESS) {
668             break;
669         }
670     }
671 #endif  // defined(HF_SSL_IS_OPENSSL_GE_1_1)
672 
673     /* Try it two times to test SSL_clear() */
674     for (unsigned i = 0; i < 2; i++) {
675         if (SSL_do_handshake(server) == 1) {
676             uint8_t tmp[1024 * 1024];
677 
678             X509* peer;
679             if ((peer = SSL_get_peer_certificate(server)) != NULL) {
680                 long res = SSL_get_verify_result(server);
681                 if (res != X509_V_OK) {
682                     if (getenv("HFUZZ_SSL_ABORT_ON_VERIFY")) {
683                         fprintf(stderr, "verify: %ld\n", res);
684                         abort();
685                     }
686                 }
687                 X509_free(peer);
688             }
689             for (;;) {
690                 ssize_t r = SSL_read(server, tmp, sizeof(tmp));
691                 if (r <= 0) {
692                     break;
693                 }
694                 if (SSL_write(server, tmp, r) <= 0) {
695                     break;
696                 }
697                 SSL_set_mtu(server, 8);
698             }
699         } else {
700             ERR_print_errors_fp(stderr);
701             break;
702         }
703 
704         if (SSL_shutdown(server) != 1) {
705             break;
706         }
707         if (SSL_clear(server) != 1) {
708             break;
709         }
710     }
711     SSL_free(server);
712 
713     return 0;
714 }
715 
716 #ifdef __cplusplus
717 }
718 #endif
719