Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/bearssl/src/ssl/ssl_hs_client.c
39488 views
1
/* Automatically generated code; do not modify directly. */
2
3
#include <stddef.h>
4
#include <stdint.h>
5
6
typedef struct {
7
uint32_t *dp;
8
uint32_t *rp;
9
const unsigned char *ip;
10
} t0_context;
11
12
static uint32_t
13
t0_parse7E_unsigned(const unsigned char **p)
14
{
15
uint32_t x;
16
17
x = 0;
18
for (;;) {
19
unsigned y;
20
21
y = *(*p) ++;
22
x = (x << 7) | (uint32_t)(y & 0x7F);
23
if (y < 0x80) {
24
return x;
25
}
26
}
27
}
28
29
static int32_t
30
t0_parse7E_signed(const unsigned char **p)
31
{
32
int neg;
33
uint32_t x;
34
35
neg = ((**p) >> 6) & 1;
36
x = (uint32_t)-neg;
37
for (;;) {
38
unsigned y;
39
40
y = *(*p) ++;
41
x = (x << 7) | (uint32_t)(y & 0x7F);
42
if (y < 0x80) {
43
if (neg) {
44
return -(int32_t)~x - 1;
45
} else {
46
return (int32_t)x;
47
}
48
}
49
}
50
}
51
52
#define T0_VBYTE(x, n) (unsigned char)((((uint32_t)(x) >> (n)) & 0x7F) | 0x80)
53
#define T0_FBYTE(x, n) (unsigned char)(((uint32_t)(x) >> (n)) & 0x7F)
54
#define T0_SBYTE(x) (unsigned char)((((uint32_t)(x) >> 28) + 0xF8) ^ 0xF8)
55
#define T0_INT1(x) T0_FBYTE(x, 0)
56
#define T0_INT2(x) T0_VBYTE(x, 7), T0_FBYTE(x, 0)
57
#define T0_INT3(x) T0_VBYTE(x, 14), T0_VBYTE(x, 7), T0_FBYTE(x, 0)
58
#define T0_INT4(x) T0_VBYTE(x, 21), T0_VBYTE(x, 14), T0_VBYTE(x, 7), T0_FBYTE(x, 0)
59
#define T0_INT5(x) T0_SBYTE(x), T0_VBYTE(x, 21), T0_VBYTE(x, 14), T0_VBYTE(x, 7), T0_FBYTE(x, 0)
60
61
/* static const unsigned char t0_datablock[]; */
62
63
64
void br_ssl_hs_client_init_main(void *t0ctx);
65
66
void br_ssl_hs_client_run(void *t0ctx);
67
68
69
70
#include <stddef.h>
71
#include <string.h>
72
73
#include "inner.h"
74
75
/*
76
* This macro evaluates to a pointer to the current engine context.
77
*/
78
#define ENG ((br_ssl_engine_context *)(void *)((unsigned char *)t0ctx - offsetof(br_ssl_engine_context, cpu)))
79
80
81
82
83
84
/*
85
* This macro evaluates to a pointer to the client context, under that
86
* specific name. It must be noted that since the engine context is the
87
* first field of the br_ssl_client_context structure ('eng'), then
88
* pointers values of both types are interchangeable, modulo an
89
* appropriate cast. This also means that "addresses" computed as offsets
90
* within the structure work for both kinds of context.
91
*/
92
#define CTX ((br_ssl_client_context *)ENG)
93
94
/*
95
* Generate the pre-master secret for RSA key exchange, and encrypt it
96
* with the server's public key. Returned value is either the encrypted
97
* data length (in bytes), or -x on error, with 'x' being an error code.
98
*
99
* This code assumes that the public key has been already verified (it
100
* was properly obtained by the X.509 engine, and it has the right type,
101
* i.e. it is of type RSA and suitable for encryption).
102
*/
103
static int
104
make_pms_rsa(br_ssl_client_context *ctx, int prf_id)
105
{
106
const br_x509_class **xc;
107
const br_x509_pkey *pk;
108
const unsigned char *n;
109
unsigned char *pms;
110
size_t nlen, u;
111
112
xc = ctx->eng.x509ctx;
113
pk = (*xc)->get_pkey(xc, NULL);
114
115
/*
116
* Compute actual RSA key length, in case there are leading zeros.
117
*/
118
n = pk->key.rsa.n;
119
nlen = pk->key.rsa.nlen;
120
while (nlen > 0 && *n == 0) {
121
n ++;
122
nlen --;
123
}
124
125
/*
126
* We need at least 59 bytes (48 bytes for pre-master secret, and
127
* 11 bytes for the PKCS#1 type 2 padding). Note that the X.509
128
* minimal engine normally blocks RSA keys shorter than 128 bytes,
129
* so this is mostly for public keys provided explicitly by the
130
* caller.
131
*/
132
if (nlen < 59) {
133
return -BR_ERR_X509_WEAK_PUBLIC_KEY;
134
}
135
if (nlen > sizeof ctx->eng.pad) {
136
return -BR_ERR_LIMIT_EXCEEDED;
137
}
138
139
/*
140
* Make PMS.
141
*/
142
pms = ctx->eng.pad + nlen - 48;
143
br_enc16be(pms, ctx->eng.version_max);
144
br_hmac_drbg_generate(&ctx->eng.rng, pms + 2, 46);
145
br_ssl_engine_compute_master(&ctx->eng, prf_id, pms, 48);
146
147
/*
148
* Apply PKCS#1 type 2 padding.
149
*/
150
ctx->eng.pad[0] = 0x00;
151
ctx->eng.pad[1] = 0x02;
152
ctx->eng.pad[nlen - 49] = 0x00;
153
br_hmac_drbg_generate(&ctx->eng.rng, ctx->eng.pad + 2, nlen - 51);
154
for (u = 2; u < nlen - 49; u ++) {
155
while (ctx->eng.pad[u] == 0) {
156
br_hmac_drbg_generate(&ctx->eng.rng,
157
&ctx->eng.pad[u], 1);
158
}
159
}
160
161
/*
162
* Compute RSA encryption.
163
*/
164
if (!ctx->irsapub(ctx->eng.pad, nlen, &pk->key.rsa)) {
165
return -BR_ERR_LIMIT_EXCEEDED;
166
}
167
return (int)nlen;
168
}
169
170
/*
171
* OID for hash functions in RSA signatures.
172
*/
173
static const unsigned char *HASH_OID[] = {
174
BR_HASH_OID_SHA1,
175
BR_HASH_OID_SHA224,
176
BR_HASH_OID_SHA256,
177
BR_HASH_OID_SHA384,
178
BR_HASH_OID_SHA512
179
};
180
181
/*
182
* Check the RSA signature on the ServerKeyExchange message.
183
*
184
* hash hash function ID (2 to 6), or 0 for MD5+SHA-1 (with RSA only)
185
* use_rsa non-zero for RSA signature, zero for ECDSA
186
* sig_len signature length (in bytes); signature value is in the pad
187
*
188
* Returned value is 0 on success, or an error code.
189
*/
190
static int
191
verify_SKE_sig(br_ssl_client_context *ctx,
192
int hash, int use_rsa, size_t sig_len)
193
{
194
const br_x509_class **xc;
195
const br_x509_pkey *pk;
196
br_multihash_context mhc;
197
unsigned char hv[64], head[4];
198
size_t hv_len;
199
200
xc = ctx->eng.x509ctx;
201
pk = (*xc)->get_pkey(xc, NULL);
202
br_multihash_zero(&mhc);
203
br_multihash_copyimpl(&mhc, &ctx->eng.mhash);
204
br_multihash_init(&mhc);
205
br_multihash_update(&mhc,
206
ctx->eng.client_random, sizeof ctx->eng.client_random);
207
br_multihash_update(&mhc,
208
ctx->eng.server_random, sizeof ctx->eng.server_random);
209
head[0] = 3;
210
head[1] = 0;
211
head[2] = ctx->eng.ecdhe_curve;
212
head[3] = ctx->eng.ecdhe_point_len;
213
br_multihash_update(&mhc, head, sizeof head);
214
br_multihash_update(&mhc,
215
ctx->eng.ecdhe_point, ctx->eng.ecdhe_point_len);
216
if (hash) {
217
hv_len = br_multihash_out(&mhc, hash, hv);
218
if (hv_len == 0) {
219
return BR_ERR_INVALID_ALGORITHM;
220
}
221
} else {
222
if (!br_multihash_out(&mhc, br_md5_ID, hv)
223
|| !br_multihash_out(&mhc, br_sha1_ID, hv + 16))
224
{
225
return BR_ERR_INVALID_ALGORITHM;
226
}
227
hv_len = 36;
228
}
229
if (use_rsa) {
230
unsigned char tmp[64];
231
const unsigned char *hash_oid;
232
233
if (hash) {
234
hash_oid = HASH_OID[hash - 2];
235
} else {
236
hash_oid = NULL;
237
}
238
if (!ctx->eng.irsavrfy(ctx->eng.pad, sig_len,
239
hash_oid, hv_len, &pk->key.rsa, tmp)
240
|| memcmp(tmp, hv, hv_len) != 0)
241
{
242
return BR_ERR_BAD_SIGNATURE;
243
}
244
} else {
245
if (!ctx->eng.iecdsa(ctx->eng.iec, hv, hv_len, &pk->key.ec,
246
ctx->eng.pad, sig_len))
247
{
248
return BR_ERR_BAD_SIGNATURE;
249
}
250
}
251
return 0;
252
}
253
254
/*
255
* Perform client-side ECDH (or ECDHE). The point that should be sent to
256
* the server is written in the pad; returned value is either the point
257
* length (in bytes), or -x on error, with 'x' being an error code.
258
*
259
* The point _from_ the server is taken from ecdhe_point[] if 'ecdhe'
260
* is non-zero, or from the X.509 engine context if 'ecdhe' is zero
261
* (for static ECDH).
262
*/
263
static int
264
make_pms_ecdh(br_ssl_client_context *ctx, unsigned ecdhe, int prf_id)
265
{
266
int curve;
267
unsigned char key[66], point[133];
268
const unsigned char *order, *point_src;
269
size_t glen, olen, point_len, xoff, xlen;
270
unsigned char mask;
271
272
if (ecdhe) {
273
curve = ctx->eng.ecdhe_curve;
274
point_src = ctx->eng.ecdhe_point;
275
point_len = ctx->eng.ecdhe_point_len;
276
} else {
277
const br_x509_class **xc;
278
const br_x509_pkey *pk;
279
280
xc = ctx->eng.x509ctx;
281
pk = (*xc)->get_pkey(xc, NULL);
282
curve = pk->key.ec.curve;
283
point_src = pk->key.ec.q;
284
point_len = pk->key.ec.qlen;
285
}
286
if ((ctx->eng.iec->supported_curves & ((uint32_t)1 << curve)) == 0) {
287
return -BR_ERR_INVALID_ALGORITHM;
288
}
289
290
/*
291
* We need to generate our key, as a non-zero random value which
292
* is lower than the curve order, in a "large enough" range. We
293
* force top bit to 0 and bottom bit to 1, which guarantees that
294
* the value is in the proper range.
295
*/
296
order = ctx->eng.iec->order(curve, &olen);
297
mask = 0xFF;
298
while (mask >= order[0]) {
299
mask >>= 1;
300
}
301
br_hmac_drbg_generate(&ctx->eng.rng, key, olen);
302
key[0] &= mask;
303
key[olen - 1] |= 0x01;
304
305
/*
306
* Compute the common ECDH point, whose X coordinate is the
307
* pre-master secret.
308
*/
309
ctx->eng.iec->generator(curve, &glen);
310
if (glen != point_len) {
311
return -BR_ERR_INVALID_ALGORITHM;
312
}
313
314
memcpy(point, point_src, glen);
315
if (!ctx->eng.iec->mul(point, glen, key, olen, curve)) {
316
return -BR_ERR_INVALID_ALGORITHM;
317
}
318
319
/*
320
* The pre-master secret is the X coordinate.
321
*/
322
xoff = ctx->eng.iec->xoff(curve, &xlen);
323
br_ssl_engine_compute_master(&ctx->eng, prf_id, point + xoff, xlen);
324
325
ctx->eng.iec->mulgen(point, key, olen, curve);
326
memcpy(ctx->eng.pad, point, glen);
327
return (int)glen;
328
}
329
330
/*
331
* Perform full static ECDH. This occurs only in the context of client
332
* authentication with certificates: the server uses an EC public key,
333
* the cipher suite is of type ECDH (not ECDHE), the server requested a
334
* client certificate and accepts static ECDH, the client has a
335
* certificate with an EC public key in the same curve, and accepts
336
* static ECDH as well.
337
*
338
* Returned value is 0 on success, -1 on error.
339
*/
340
static int
341
make_pms_static_ecdh(br_ssl_client_context *ctx, int prf_id)
342
{
343
unsigned char point[133];
344
size_t point_len;
345
const br_x509_class **xc;
346
const br_x509_pkey *pk;
347
348
xc = ctx->eng.x509ctx;
349
pk = (*xc)->get_pkey(xc, NULL);
350
point_len = pk->key.ec.qlen;
351
if (point_len > sizeof point) {
352
return -1;
353
}
354
memcpy(point, pk->key.ec.q, point_len);
355
if (!(*ctx->client_auth_vtable)->do_keyx(
356
ctx->client_auth_vtable, point, &point_len))
357
{
358
return -1;
359
}
360
br_ssl_engine_compute_master(&ctx->eng,
361
prf_id, point, point_len);
362
return 0;
363
}
364
365
/*
366
* Compute the client-side signature. This is invoked only when a
367
* signature-based client authentication was selected. The computed
368
* signature is in the pad; its length (in bytes) is returned. On
369
* error, 0 is returned.
370
*/
371
static size_t
372
make_client_sign(br_ssl_client_context *ctx)
373
{
374
size_t hv_len;
375
376
/*
377
* Compute hash of handshake messages so far. This "cannot" fail
378
* because the list of supported hash functions provided to the
379
* client certificate handler was trimmed to include only the
380
* hash functions that the multi-hasher supports.
381
*/
382
if (ctx->hash_id) {
383
hv_len = br_multihash_out(&ctx->eng.mhash,
384
ctx->hash_id, ctx->eng.pad);
385
} else {
386
br_multihash_out(&ctx->eng.mhash,
387
br_md5_ID, ctx->eng.pad);
388
br_multihash_out(&ctx->eng.mhash,
389
br_sha1_ID, ctx->eng.pad + 16);
390
hv_len = 36;
391
}
392
return (*ctx->client_auth_vtable)->do_sign(
393
ctx->client_auth_vtable, ctx->hash_id, hv_len,
394
ctx->eng.pad, sizeof ctx->eng.pad);
395
}
396
397
398
399
static const unsigned char t0_datablock[] = {
400
0x00, 0x00, 0x0A, 0x00, 0x24, 0x00, 0x2F, 0x01, 0x24, 0x00, 0x35, 0x02,
401
0x24, 0x00, 0x3C, 0x01, 0x44, 0x00, 0x3D, 0x02, 0x44, 0x00, 0x9C, 0x03,
402
0x04, 0x00, 0x9D, 0x04, 0x05, 0xC0, 0x03, 0x40, 0x24, 0xC0, 0x04, 0x41,
403
0x24, 0xC0, 0x05, 0x42, 0x24, 0xC0, 0x08, 0x20, 0x24, 0xC0, 0x09, 0x21,
404
0x24, 0xC0, 0x0A, 0x22, 0x24, 0xC0, 0x0D, 0x30, 0x24, 0xC0, 0x0E, 0x31,
405
0x24, 0xC0, 0x0F, 0x32, 0x24, 0xC0, 0x12, 0x10, 0x24, 0xC0, 0x13, 0x11,
406
0x24, 0xC0, 0x14, 0x12, 0x24, 0xC0, 0x23, 0x21, 0x44, 0xC0, 0x24, 0x22,
407
0x55, 0xC0, 0x25, 0x41, 0x44, 0xC0, 0x26, 0x42, 0x55, 0xC0, 0x27, 0x11,
408
0x44, 0xC0, 0x28, 0x12, 0x55, 0xC0, 0x29, 0x31, 0x44, 0xC0, 0x2A, 0x32,
409
0x55, 0xC0, 0x2B, 0x23, 0x04, 0xC0, 0x2C, 0x24, 0x05, 0xC0, 0x2D, 0x43,
410
0x04, 0xC0, 0x2E, 0x44, 0x05, 0xC0, 0x2F, 0x13, 0x04, 0xC0, 0x30, 0x14,
411
0x05, 0xC0, 0x31, 0x33, 0x04, 0xC0, 0x32, 0x34, 0x05, 0xC0, 0x9C, 0x06,
412
0x04, 0xC0, 0x9D, 0x07, 0x04, 0xC0, 0xA0, 0x08, 0x04, 0xC0, 0xA1, 0x09,
413
0x04, 0xC0, 0xAC, 0x26, 0x04, 0xC0, 0xAD, 0x27, 0x04, 0xC0, 0xAE, 0x28,
414
0x04, 0xC0, 0xAF, 0x29, 0x04, 0xCC, 0xA8, 0x15, 0x04, 0xCC, 0xA9, 0x25,
415
0x04, 0x00, 0x00
416
};
417
418
static const unsigned char t0_codeblock[] = {
419
0x00, 0x01, 0x00, 0x0A, 0x00, 0x00, 0x01, 0x00, 0x0D, 0x00, 0x00, 0x01,
420
0x00, 0x0E, 0x00, 0x00, 0x01, 0x00, 0x0F, 0x00, 0x00, 0x01, 0x01, 0x08,
421
0x00, 0x00, 0x01, 0x01, 0x09, 0x00, 0x00, 0x01, 0x02, 0x08, 0x00, 0x00,
422
0x01, 0x02, 0x09, 0x00, 0x00, 0x25, 0x25, 0x00, 0x00, 0x01,
423
T0_INT1(BR_ERR_BAD_CCS), 0x00, 0x00, 0x01,
424
T0_INT1(BR_ERR_BAD_CIPHER_SUITE), 0x00, 0x00, 0x01,
425
T0_INT1(BR_ERR_BAD_COMPRESSION), 0x00, 0x00, 0x01,
426
T0_INT1(BR_ERR_BAD_FINISHED), 0x00, 0x00, 0x01,
427
T0_INT1(BR_ERR_BAD_FRAGLEN), 0x00, 0x00, 0x01,
428
T0_INT1(BR_ERR_BAD_HANDSHAKE), 0x00, 0x00, 0x01,
429
T0_INT1(BR_ERR_BAD_HELLO_DONE), 0x00, 0x00, 0x01,
430
T0_INT1(BR_ERR_BAD_PARAM), 0x00, 0x00, 0x01,
431
T0_INT1(BR_ERR_BAD_SECRENEG), 0x00, 0x00, 0x01,
432
T0_INT1(BR_ERR_BAD_SNI), 0x00, 0x00, 0x01, T0_INT1(BR_ERR_BAD_VERSION),
433
0x00, 0x00, 0x01, T0_INT1(BR_ERR_EXTRA_EXTENSION), 0x00, 0x00, 0x01,
434
T0_INT1(BR_ERR_INVALID_ALGORITHM), 0x00, 0x00, 0x01,
435
T0_INT1(BR_ERR_LIMIT_EXCEEDED), 0x00, 0x00, 0x01, T0_INT1(BR_ERR_OK),
436
0x00, 0x00, 0x01, T0_INT1(BR_ERR_OVERSIZED_ID), 0x00, 0x00, 0x01,
437
T0_INT1(BR_ERR_RESUME_MISMATCH), 0x00, 0x00, 0x01,
438
T0_INT1(BR_ERR_UNEXPECTED), 0x00, 0x00, 0x01,
439
T0_INT1(BR_ERR_UNSUPPORTED_VERSION), 0x00, 0x00, 0x01,
440
T0_INT1(BR_ERR_WRONG_KEY_USAGE), 0x00, 0x00, 0x01,
441
T0_INT2(offsetof(br_ssl_engine_context, action)), 0x00, 0x00, 0x01,
442
T0_INT2(offsetof(br_ssl_engine_context, alert)), 0x00, 0x00, 0x01,
443
T0_INT2(offsetof(br_ssl_engine_context, application_data)), 0x00, 0x00,
444
0x01, T0_INT2(offsetof(br_ssl_client_context, auth_type)), 0x00, 0x00,
445
0x01,
446
T0_INT2(offsetof(br_ssl_engine_context, session) + offsetof(br_ssl_session_parameters, cipher_suite)),
447
0x00, 0x00, 0x01,
448
T0_INT2(offsetof(br_ssl_engine_context, client_random)), 0x00, 0x00,
449
0x01, T0_INT2(offsetof(br_ssl_engine_context, close_received)), 0x00,
450
0x00, 0x01, T0_INT2(offsetof(br_ssl_engine_context, ecdhe_curve)),
451
0x00, 0x00, 0x01,
452
T0_INT2(offsetof(br_ssl_engine_context, ecdhe_point)), 0x00, 0x00,
453
0x01, T0_INT2(offsetof(br_ssl_engine_context, ecdhe_point_len)), 0x00,
454
0x00, 0x01, T0_INT2(offsetof(br_ssl_engine_context, flags)), 0x00,
455
0x00, 0x01, T0_INT2(offsetof(br_ssl_client_context, hash_id)), 0x00,
456
0x00, 0x01, T0_INT2(offsetof(br_ssl_client_context, hashes)), 0x00,
457
0x00, 0x01, T0_INT2(offsetof(br_ssl_engine_context, log_max_frag_len)),
458
0x00, 0x00, 0x01,
459
T0_INT2(offsetof(br_ssl_client_context, min_clienthello_len)), 0x00,
460
0x00, 0x01, T0_INT2(offsetof(br_ssl_engine_context, pad)), 0x00, 0x00,
461
0x01, T0_INT2(offsetof(br_ssl_engine_context, protocol_names_num)),
462
0x00, 0x00, 0x01,
463
T0_INT2(offsetof(br_ssl_engine_context, record_type_in)), 0x00, 0x00,
464
0x01, T0_INT2(offsetof(br_ssl_engine_context, record_type_out)), 0x00,
465
0x00, 0x01, T0_INT2(offsetof(br_ssl_engine_context, reneg)), 0x00,
466
0x00, 0x01, T0_INT2(offsetof(br_ssl_engine_context, saved_finished)),
467
0x00, 0x00, 0x01,
468
T0_INT2(offsetof(br_ssl_engine_context, selected_protocol)), 0x00,
469
0x00, 0x01, T0_INT2(offsetof(br_ssl_engine_context, server_name)),
470
0x00, 0x00, 0x01,
471
T0_INT2(offsetof(br_ssl_engine_context, server_random)), 0x00, 0x00,
472
0x01,
473
T0_INT2(offsetof(br_ssl_engine_context, session) + offsetof(br_ssl_session_parameters, session_id)),
474
0x00, 0x00, 0x01,
475
T0_INT2(offsetof(br_ssl_engine_context, session) + offsetof(br_ssl_session_parameters, session_id_len)),
476
0x00, 0x00, 0x01,
477
T0_INT2(offsetof(br_ssl_engine_context, shutdown_recv)), 0x00, 0x00,
478
0x01, T0_INT2(offsetof(br_ssl_engine_context, suites_buf)), 0x00, 0x00,
479
0x01, T0_INT2(offsetof(br_ssl_engine_context, suites_num)), 0x00, 0x00,
480
0x01,
481
T0_INT2(offsetof(br_ssl_engine_context, session) + offsetof(br_ssl_session_parameters, version)),
482
0x00, 0x00, 0x01, T0_INT2(offsetof(br_ssl_engine_context, version_in)),
483
0x00, 0x00, 0x01,
484
T0_INT2(offsetof(br_ssl_engine_context, version_max)), 0x00, 0x00,
485
0x01, T0_INT2(offsetof(br_ssl_engine_context, version_min)), 0x00,
486
0x00, 0x01, T0_INT2(offsetof(br_ssl_engine_context, version_out)),
487
0x00, 0x00, 0x09, 0x26, 0x58, 0x06, 0x02, 0x68, 0x28, 0x00, 0x00, 0x06,
488
0x08, 0x2C, 0x0E, 0x05, 0x02, 0x71, 0x28, 0x04, 0x01, 0x3C, 0x00, 0x00,
489
0x01, 0x01, 0x00, 0x01, 0x03, 0x00, 0x99, 0x26, 0x5E, 0x44, 0x9D, 0x26,
490
0x05, 0x04, 0x60, 0x01, 0x00, 0x00, 0x02, 0x00, 0x0E, 0x06, 0x02, 0x9D,
491
0x00, 0x5E, 0x04, 0x6B, 0x00, 0x06, 0x02, 0x68, 0x28, 0x00, 0x00, 0x26,
492
0x89, 0x44, 0x05, 0x03, 0x01, 0x0C, 0x08, 0x44, 0x79, 0x2C, 0xAB, 0x1C,
493
0x84, 0x01, 0x0C, 0x31, 0x00, 0x00, 0x26, 0x1F, 0x01, 0x08, 0x0B, 0x44,
494
0x5C, 0x1F, 0x08, 0x00, 0x01, 0x03, 0x00, 0x77, 0x2E, 0x02, 0x00, 0x36,
495
0x17, 0x01, 0x01, 0x0B, 0x77, 0x3E, 0x29, 0x1A, 0x36, 0x06, 0x07, 0x02,
496
0x00, 0xCF, 0x03, 0x00, 0x04, 0x75, 0x01, 0x00, 0xC5, 0x02, 0x00, 0x26,
497
0x1A, 0x17, 0x06, 0x02, 0x6F, 0x28, 0xCF, 0x04, 0x76, 0x01, 0x01, 0x00,
498
0x77, 0x3E, 0x01, 0x16, 0x87, 0x3E, 0x01, 0x00, 0x8A, 0x3C, 0x34, 0xD5,
499
0x29, 0xB4, 0x06, 0x09, 0x01, 0x7F, 0xAF, 0x01, 0x7F, 0xD2, 0x04, 0x80,
500
0x53, 0xB1, 0x79, 0x2C, 0xA1, 0x01, T0_INT1(BR_KEYTYPE_SIGN), 0x17,
501
0x06, 0x01, 0xB5, 0xB8, 0x26, 0x01, 0x0D, 0x0E, 0x06, 0x07, 0x25, 0xB7,
502
0xB8, 0x01, 0x7F, 0x04, 0x02, 0x01, 0x00, 0x03, 0x00, 0x01, 0x0E, 0x0E,
503
0x05, 0x02, 0x72, 0x28, 0x06, 0x02, 0x67, 0x28, 0x33, 0x06, 0x02, 0x72,
504
0x28, 0x02, 0x00, 0x06, 0x1C, 0xD3, 0x80, 0x2E, 0x01, 0x81, 0x7F, 0x0E,
505
0x06, 0x0D, 0x25, 0x01, 0x10, 0xDE, 0x01, 0x00, 0xDD, 0x79, 0x2C, 0xAB,
506
0x24, 0x04, 0x04, 0xD6, 0x06, 0x01, 0xD4, 0x04, 0x01, 0xD6, 0x01, 0x7F,
507
0xD2, 0x01, 0x7F, 0xAF, 0x01, 0x01, 0x77, 0x3E, 0x01, 0x17, 0x87, 0x3E,
508
0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x9A, 0x01, 0x0C, 0x11, 0x01, 0x00,
509
0x38, 0x0E, 0x06, 0x05, 0x25, 0x01,
510
T0_INT1(BR_KEYTYPE_RSA | BR_KEYTYPE_KEYX), 0x04, 0x30, 0x01, 0x01,
511
0x38, 0x0E, 0x06, 0x05, 0x25, 0x01,
512
T0_INT1(BR_KEYTYPE_RSA | BR_KEYTYPE_SIGN), 0x04, 0x25, 0x01, 0x02,
513
0x38, 0x0E, 0x06, 0x05, 0x25, 0x01,
514
T0_INT1(BR_KEYTYPE_EC | BR_KEYTYPE_SIGN), 0x04, 0x1A, 0x01, 0x03,
515
0x38, 0x0E, 0x06, 0x05, 0x25, 0x01,
516
T0_INT1(BR_KEYTYPE_EC | BR_KEYTYPE_KEYX), 0x04, 0x0F, 0x01, 0x04,
517
0x38, 0x0E, 0x06, 0x05, 0x25, 0x01,
518
T0_INT1(BR_KEYTYPE_EC | BR_KEYTYPE_KEYX), 0x04, 0x04, 0x01, 0x00,
519
0x44, 0x25, 0x00, 0x00, 0x82, 0x2E, 0x01, 0x0E, 0x0E, 0x06, 0x04, 0x01,
520
0x00, 0x04, 0x02, 0x01, 0x05, 0x00, 0x00, 0x40, 0x06, 0x04, 0x01, 0x06,
521
0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x88, 0x2E, 0x26, 0x06, 0x08, 0x01,
522
0x01, 0x09, 0x01, 0x11, 0x07, 0x04, 0x03, 0x25, 0x01, 0x05, 0x00, 0x01,
523
0x41, 0x03, 0x00, 0x25, 0x01, 0x00, 0x43, 0x06, 0x03, 0x02, 0x00, 0x08,
524
0x42, 0x06, 0x03, 0x02, 0x00, 0x08, 0x26, 0x06, 0x06, 0x01, 0x01, 0x0B,
525
0x01, 0x06, 0x08, 0x00, 0x00, 0x8B, 0x3F, 0x26, 0x06, 0x03, 0x01, 0x09,
526
0x08, 0x00, 0x01, 0x40, 0x26, 0x06, 0x1E, 0x01, 0x00, 0x03, 0x00, 0x26,
527
0x06, 0x0E, 0x26, 0x01, 0x01, 0x17, 0x02, 0x00, 0x08, 0x03, 0x00, 0x01,
528
0x01, 0x11, 0x04, 0x6F, 0x25, 0x02, 0x00, 0x01, 0x01, 0x0B, 0x01, 0x06,
529
0x08, 0x00, 0x00, 0x7F, 0x2D, 0x44, 0x11, 0x01, 0x01, 0x17, 0x35, 0x00,
530
0x00, 0x9F, 0xCE, 0x26, 0x01, 0x07, 0x17, 0x01, 0x00, 0x38, 0x0E, 0x06,
531
0x09, 0x25, 0x01, 0x10, 0x17, 0x06, 0x01, 0x9F, 0x04, 0x35, 0x01, 0x01,
532
0x38, 0x0E, 0x06, 0x2C, 0x25, 0x25, 0x01, 0x00, 0x77, 0x3E, 0xB3, 0x88,
533
0x2E, 0x01, 0x01, 0x0E, 0x01, 0x01, 0xA8, 0x37, 0x06, 0x17, 0x29, 0x1A,
534
0x36, 0x06, 0x04, 0xCE, 0x25, 0x04, 0x78, 0x01, 0x80, 0x64, 0xC5, 0x01,
535
0x01, 0x77, 0x3E, 0x01, 0x17, 0x87, 0x3E, 0x04, 0x01, 0x9F, 0x04, 0x03,
536
0x72, 0x28, 0x25, 0x04, 0xFF, 0x34, 0x01, 0x26, 0x03, 0x00, 0x09, 0x26,
537
0x58, 0x06, 0x02, 0x68, 0x28, 0x02, 0x00, 0x00, 0x00, 0x9A, 0x01, 0x0F,
538
0x17, 0x00, 0x00, 0x76, 0x2E, 0x01, 0x00, 0x38, 0x0E, 0x06, 0x10, 0x25,
539
0x26, 0x01, 0x01, 0x0D, 0x06, 0x03, 0x25, 0x01, 0x02, 0x76, 0x3E, 0x01,
540
0x00, 0x04, 0x21, 0x01, 0x01, 0x38, 0x0E, 0x06, 0x14, 0x25, 0x01, 0x00,
541
0x76, 0x3E, 0x26, 0x01, 0x80, 0x64, 0x0E, 0x06, 0x05, 0x01, 0x82, 0x00,
542
0x08, 0x28, 0x5A, 0x04, 0x07, 0x25, 0x01, 0x82, 0x00, 0x08, 0x28, 0x25,
543
0x00, 0x00, 0x01, 0x00, 0x2F, 0x06, 0x05, 0x3A, 0xAC, 0x37, 0x04, 0x78,
544
0x26, 0x06, 0x04, 0x01, 0x01, 0x8F, 0x3E, 0x00, 0x01, 0xBF, 0xAA, 0xBF,
545
0xAA, 0xC1, 0x84, 0x44, 0x26, 0x03, 0x00, 0xB6, 0x9B, 0x9B, 0x02, 0x00,
546
0x4D, 0x26, 0x58, 0x06, 0x0A, 0x01, 0x03, 0xA8, 0x06, 0x02, 0x72, 0x28,
547
0x25, 0x04, 0x03, 0x5C, 0x8A, 0x3C, 0x00, 0x00, 0x2F, 0x06, 0x0B, 0x86,
548
0x2E, 0x01, 0x14, 0x0D, 0x06, 0x02, 0x72, 0x28, 0x04, 0x11, 0xCE, 0x01,
549
0x07, 0x17, 0x26, 0x01, 0x02, 0x0D, 0x06, 0x06, 0x06, 0x02, 0x72, 0x28,
550
0x04, 0x70, 0x25, 0xC2, 0x01, 0x01, 0x0D, 0x33, 0x37, 0x06, 0x02, 0x61,
551
0x28, 0x26, 0x01, 0x01, 0xC8, 0x36, 0xB2, 0x00, 0x01, 0xB8, 0x01, 0x0B,
552
0x0E, 0x05, 0x02, 0x72, 0x28, 0x26, 0x01, 0x03, 0x0E, 0x06, 0x08, 0xC0,
553
0x06, 0x02, 0x68, 0x28, 0x44, 0x25, 0x00, 0x44, 0x57, 0xC0, 0xAA, 0x26,
554
0x06, 0x23, 0xC0, 0xAA, 0x26, 0x56, 0x26, 0x06, 0x18, 0x26, 0x01, 0x82,
555
0x00, 0x0F, 0x06, 0x05, 0x01, 0x82, 0x00, 0x04, 0x01, 0x26, 0x03, 0x00,
556
0x84, 0x02, 0x00, 0xB6, 0x02, 0x00, 0x53, 0x04, 0x65, 0x9B, 0x54, 0x04,
557
0x5A, 0x9B, 0x9B, 0x55, 0x26, 0x06, 0x02, 0x35, 0x00, 0x25, 0x2B, 0x00,
558
0x00, 0x79, 0x2C, 0xA1, 0x01, 0x7F, 0xB0, 0x26, 0x58, 0x06, 0x02, 0x35,
559
0x28, 0x26, 0x05, 0x02, 0x72, 0x28, 0x38, 0x17, 0x0D, 0x06, 0x02, 0x74,
560
0x28, 0x3B, 0x00, 0x00, 0x9C, 0xB8, 0x01, 0x14, 0x0D, 0x06, 0x02, 0x72,
561
0x28, 0x84, 0x01, 0x0C, 0x08, 0x01, 0x0C, 0xB6, 0x9B, 0x84, 0x26, 0x01,
562
0x0C, 0x08, 0x01, 0x0C, 0x30, 0x05, 0x02, 0x64, 0x28, 0x00, 0x00, 0xB9,
563
0x06, 0x02, 0x72, 0x28, 0x06, 0x02, 0x66, 0x28, 0x00, 0x0A, 0xB8, 0x01,
564
0x02, 0x0E, 0x05, 0x02, 0x72, 0x28, 0xBF, 0x03, 0x00, 0x02, 0x00, 0x95,
565
0x2C, 0x0A, 0x02, 0x00, 0x94, 0x2C, 0x0F, 0x37, 0x06, 0x02, 0x73, 0x28,
566
0x02, 0x00, 0x93, 0x2C, 0x0D, 0x06, 0x02, 0x6B, 0x28, 0x02, 0x00, 0x96,
567
0x3C, 0x8C, 0x01, 0x20, 0xB6, 0x01, 0x00, 0x03, 0x01, 0xC1, 0x03, 0x02,
568
0x02, 0x02, 0x01, 0x20, 0x0F, 0x06, 0x02, 0x70, 0x28, 0x84, 0x02, 0x02,
569
0xB6, 0x02, 0x02, 0x8E, 0x2E, 0x0E, 0x02, 0x02, 0x01, 0x00, 0x0F, 0x17,
570
0x06, 0x0B, 0x8D, 0x84, 0x02, 0x02, 0x30, 0x06, 0x04, 0x01, 0x7F, 0x03,
571
0x01, 0x8D, 0x84, 0x02, 0x02, 0x31, 0x02, 0x02, 0x8E, 0x3E, 0x02, 0x00,
572
0x92, 0x02, 0x01, 0x98, 0xBF, 0x26, 0xC3, 0x58, 0x06, 0x02, 0x62, 0x28,
573
0x26, 0xCD, 0x02, 0x00, 0x01, 0x86, 0x03, 0x0A, 0x17, 0x06, 0x02, 0x62,
574
0x28, 0x79, 0x02, 0x01, 0x98, 0xC1, 0x06, 0x02, 0x63, 0x28, 0x26, 0x06,
575
0x81, 0x47, 0xBF, 0xAA, 0xA6, 0x03, 0x03, 0xA4, 0x03, 0x04, 0xA2, 0x03,
576
0x05, 0xA5, 0x03, 0x06, 0xA7, 0x03, 0x07, 0xA3, 0x03, 0x08, 0x27, 0x03,
577
0x09, 0x26, 0x06, 0x81, 0x18, 0xBF, 0x01, 0x00, 0x38, 0x0E, 0x06, 0x0F,
578
0x25, 0x02, 0x03, 0x05, 0x02, 0x6C, 0x28, 0x01, 0x00, 0x03, 0x03, 0xBE,
579
0x04, 0x80, 0x7F, 0x01, 0x01, 0x38, 0x0E, 0x06, 0x0F, 0x25, 0x02, 0x05,
580
0x05, 0x02, 0x6C, 0x28, 0x01, 0x00, 0x03, 0x05, 0xBC, 0x04, 0x80, 0x6A,
581
0x01, 0x83, 0xFE, 0x01, 0x38, 0x0E, 0x06, 0x0F, 0x25, 0x02, 0x04, 0x05,
582
0x02, 0x6C, 0x28, 0x01, 0x00, 0x03, 0x04, 0xBD, 0x04, 0x80, 0x53, 0x01,
583
0x0D, 0x38, 0x0E, 0x06, 0x0E, 0x25, 0x02, 0x06, 0x05, 0x02, 0x6C, 0x28,
584
0x01, 0x00, 0x03, 0x06, 0xBA, 0x04, 0x3F, 0x01, 0x0A, 0x38, 0x0E, 0x06,
585
0x0E, 0x25, 0x02, 0x07, 0x05, 0x02, 0x6C, 0x28, 0x01, 0x00, 0x03, 0x07,
586
0xBA, 0x04, 0x2B, 0x01, 0x0B, 0x38, 0x0E, 0x06, 0x0E, 0x25, 0x02, 0x08,
587
0x05, 0x02, 0x6C, 0x28, 0x01, 0x00, 0x03, 0x08, 0xBA, 0x04, 0x17, 0x01,
588
0x10, 0x38, 0x0E, 0x06, 0x0E, 0x25, 0x02, 0x09, 0x05, 0x02, 0x6C, 0x28,
589
0x01, 0x00, 0x03, 0x09, 0xAE, 0x04, 0x03, 0x6C, 0x28, 0x25, 0x04, 0xFE,
590
0x64, 0x02, 0x04, 0x06, 0x0D, 0x02, 0x04, 0x01, 0x05, 0x0F, 0x06, 0x02,
591
0x69, 0x28, 0x01, 0x01, 0x88, 0x3E, 0x9B, 0x04, 0x0C, 0xA4, 0x01, 0x05,
592
0x0F, 0x06, 0x02, 0x69, 0x28, 0x01, 0x01, 0x88, 0x3E, 0x9B, 0x02, 0x01,
593
0x00, 0x04, 0xB8, 0x01, 0x0C, 0x0E, 0x05, 0x02, 0x72, 0x28, 0xC1, 0x01,
594
0x03, 0x0E, 0x05, 0x02, 0x6D, 0x28, 0xBF, 0x26, 0x7C, 0x3E, 0x26, 0x01,
595
0x20, 0x10, 0x06, 0x02, 0x6D, 0x28, 0x40, 0x44, 0x11, 0x01, 0x01, 0x17,
596
0x05, 0x02, 0x6D, 0x28, 0xC1, 0x26, 0x01, 0x81, 0x05, 0x0F, 0x06, 0x02,
597
0x6D, 0x28, 0x26, 0x7E, 0x3E, 0x7D, 0x44, 0xB6, 0x92, 0x2C, 0x01, 0x86,
598
0x03, 0x10, 0x03, 0x00, 0x79, 0x2C, 0xCB, 0x03, 0x01, 0x01, 0x02, 0x03,
599
0x02, 0x02, 0x00, 0x06, 0x21, 0xC1, 0x26, 0x26, 0x01, 0x02, 0x0A, 0x44,
600
0x01, 0x06, 0x0F, 0x37, 0x06, 0x02, 0x6D, 0x28, 0x03, 0x02, 0xC1, 0x02,
601
0x01, 0x01, 0x01, 0x0B, 0x01, 0x03, 0x08, 0x0E, 0x05, 0x02, 0x6D, 0x28,
602
0x04, 0x08, 0x02, 0x01, 0x06, 0x04, 0x01, 0x00, 0x03, 0x02, 0xBF, 0x26,
603
0x03, 0x03, 0x26, 0x01, 0x84, 0x00, 0x0F, 0x06, 0x02, 0x6E, 0x28, 0x84,
604
0x44, 0xB6, 0x02, 0x02, 0x02, 0x01, 0x02, 0x03, 0x50, 0x26, 0x06, 0x01,
605
0x28, 0x25, 0x9B, 0x00, 0x02, 0x03, 0x00, 0x03, 0x01, 0x02, 0x00, 0x97,
606
0x02, 0x01, 0x02, 0x00, 0x39, 0x26, 0x01, 0x00, 0x0E, 0x06, 0x02, 0x60,
607
0x00, 0xD0, 0x04, 0x74, 0x02, 0x01, 0x00, 0x03, 0x00, 0xC1, 0xAA, 0x26,
608
0x06, 0x80, 0x43, 0xC1, 0x01, 0x01, 0x38, 0x0E, 0x06, 0x06, 0x25, 0x01,
609
0x81, 0x7F, 0x04, 0x2E, 0x01, 0x80, 0x40, 0x38, 0x0E, 0x06, 0x07, 0x25,
610
0x01, 0x83, 0xFE, 0x00, 0x04, 0x20, 0x01, 0x80, 0x41, 0x38, 0x0E, 0x06,
611
0x07, 0x25, 0x01, 0x84, 0x80, 0x00, 0x04, 0x12, 0x01, 0x80, 0x42, 0x38,
612
0x0E, 0x06, 0x07, 0x25, 0x01, 0x88, 0x80, 0x00, 0x04, 0x04, 0x01, 0x00,
613
0x44, 0x25, 0x02, 0x00, 0x37, 0x03, 0x00, 0x04, 0xFF, 0x39, 0x9B, 0x79,
614
0x2C, 0xC9, 0x05, 0x09, 0x02, 0x00, 0x01, 0x83, 0xFF, 0x7F, 0x17, 0x03,
615
0x00, 0x92, 0x2C, 0x01, 0x86, 0x03, 0x10, 0x06, 0x3A, 0xBB, 0x26, 0x81,
616
0x3D, 0x41, 0x25, 0x26, 0x01, 0x08, 0x0B, 0x37, 0x01, 0x8C, 0x80, 0x00,
617
0x37, 0x17, 0x02, 0x00, 0x17, 0x02, 0x00, 0x01, 0x8C, 0x80, 0x00, 0x17,
618
0x06, 0x19, 0x26, 0x01, 0x81, 0x7F, 0x17, 0x06, 0x05, 0x01, 0x84, 0x80,
619
0x00, 0x37, 0x26, 0x01, 0x83, 0xFE, 0x00, 0x17, 0x06, 0x05, 0x01, 0x88,
620
0x80, 0x00, 0x37, 0x03, 0x00, 0x04, 0x09, 0x02, 0x00, 0x01, 0x8C, 0x88,
621
0x01, 0x17, 0x03, 0x00, 0x16, 0xBF, 0xAA, 0x26, 0x06, 0x23, 0xBF, 0xAA,
622
0x26, 0x15, 0x26, 0x06, 0x18, 0x26, 0x01, 0x82, 0x00, 0x0F, 0x06, 0x05,
623
0x01, 0x82, 0x00, 0x04, 0x01, 0x26, 0x03, 0x01, 0x84, 0x02, 0x01, 0xB6,
624
0x02, 0x01, 0x12, 0x04, 0x65, 0x9B, 0x13, 0x04, 0x5A, 0x9B, 0x14, 0x9B,
625
0x02, 0x00, 0x2A, 0x00, 0x00, 0xB9, 0x26, 0x5A, 0x06, 0x07, 0x25, 0x06,
626
0x02, 0x66, 0x28, 0x04, 0x74, 0x00, 0x00, 0xC2, 0x01, 0x03, 0xC0, 0x44,
627
0x25, 0x44, 0x00, 0x00, 0xBF, 0xC6, 0x00, 0x03, 0x01, 0x00, 0x03, 0x00,
628
0xBF, 0xAA, 0x26, 0x06, 0x80, 0x50, 0xC1, 0x03, 0x01, 0xC1, 0x03, 0x02,
629
0x02, 0x01, 0x01, 0x08, 0x0E, 0x06, 0x16, 0x02, 0x02, 0x01, 0x0F, 0x0C,
630
0x06, 0x0D, 0x01, 0x01, 0x02, 0x02, 0x01, 0x10, 0x08, 0x0B, 0x02, 0x00,
631
0x37, 0x03, 0x00, 0x04, 0x2A, 0x02, 0x01, 0x01, 0x02, 0x10, 0x02, 0x01,
632
0x01, 0x06, 0x0C, 0x17, 0x02, 0x02, 0x01, 0x01, 0x0E, 0x02, 0x02, 0x01,
633
0x03, 0x0E, 0x37, 0x17, 0x06, 0x11, 0x02, 0x00, 0x01, 0x01, 0x02, 0x02,
634
0x5D, 0x01, 0x02, 0x0B, 0x02, 0x01, 0x08, 0x0B, 0x37, 0x03, 0x00, 0x04,
635
0xFF, 0x2C, 0x9B, 0x02, 0x00, 0x00, 0x00, 0xBF, 0x01, 0x01, 0x0E, 0x05,
636
0x02, 0x65, 0x28, 0xC1, 0x01, 0x08, 0x08, 0x82, 0x2E, 0x0E, 0x05, 0x02,
637
0x65, 0x28, 0x00, 0x00, 0xBF, 0x88, 0x2E, 0x05, 0x15, 0x01, 0x01, 0x0E,
638
0x05, 0x02, 0x69, 0x28, 0xC1, 0x01, 0x00, 0x0E, 0x05, 0x02, 0x69, 0x28,
639
0x01, 0x02, 0x88, 0x3E, 0x04, 0x1C, 0x01, 0x19, 0x0E, 0x05, 0x02, 0x69,
640
0x28, 0xC1, 0x01, 0x18, 0x0E, 0x05, 0x02, 0x69, 0x28, 0x84, 0x01, 0x18,
641
0xB6, 0x89, 0x84, 0x01, 0x18, 0x30, 0x05, 0x02, 0x69, 0x28, 0x00, 0x00,
642
0xBF, 0x06, 0x02, 0x6A, 0x28, 0x00, 0x00, 0x01, 0x02, 0x97, 0xC2, 0x01,
643
0x08, 0x0B, 0xC2, 0x08, 0x00, 0x00, 0x01, 0x03, 0x97, 0xC2, 0x01, 0x08,
644
0x0B, 0xC2, 0x08, 0x01, 0x08, 0x0B, 0xC2, 0x08, 0x00, 0x00, 0x01, 0x01,
645
0x97, 0xC2, 0x00, 0x00, 0x3A, 0x26, 0x58, 0x05, 0x01, 0x00, 0x25, 0xD0,
646
0x04, 0x76, 0x02, 0x03, 0x00, 0x91, 0x2E, 0x03, 0x01, 0x01, 0x00, 0x26,
647
0x02, 0x01, 0x0A, 0x06, 0x10, 0x26, 0x01, 0x01, 0x0B, 0x90, 0x08, 0x2C,
648
0x02, 0x00, 0x0E, 0x06, 0x01, 0x00, 0x5C, 0x04, 0x6A, 0x25, 0x01, 0x7F,
649
0x00, 0x00, 0x01, 0x15, 0x87, 0x3E, 0x44, 0x52, 0x25, 0x52, 0x25, 0x29,
650
0x00, 0x00, 0x01, 0x01, 0x44, 0xC4, 0x00, 0x00, 0x44, 0x38, 0x97, 0x44,
651
0x26, 0x06, 0x05, 0xC2, 0x25, 0x5D, 0x04, 0x78, 0x25, 0x00, 0x00, 0x26,
652
0x01, 0x81, 0xAC, 0x00, 0x0E, 0x06, 0x04, 0x25, 0x01, 0x7F, 0x00, 0x9A,
653
0x59, 0x00, 0x02, 0x03, 0x00, 0x79, 0x2C, 0x9A, 0x03, 0x01, 0x02, 0x01,
654
0x01, 0x0F, 0x17, 0x02, 0x01, 0x01, 0x04, 0x11, 0x01, 0x0F, 0x17, 0x02,
655
0x01, 0x01, 0x08, 0x11, 0x01, 0x0F, 0x17, 0x01, 0x00, 0x38, 0x0E, 0x06,
656
0x10, 0x25, 0x01, 0x00, 0x01, 0x18, 0x02, 0x00, 0x06, 0x03, 0x49, 0x04,
657
0x01, 0x4A, 0x04, 0x81, 0x0D, 0x01, 0x01, 0x38, 0x0E, 0x06, 0x10, 0x25,
658
0x01, 0x01, 0x01, 0x10, 0x02, 0x00, 0x06, 0x03, 0x49, 0x04, 0x01, 0x4A,
659
0x04, 0x80, 0x77, 0x01, 0x02, 0x38, 0x0E, 0x06, 0x10, 0x25, 0x01, 0x01,
660
0x01, 0x20, 0x02, 0x00, 0x06, 0x03, 0x49, 0x04, 0x01, 0x4A, 0x04, 0x80,
661
0x61, 0x01, 0x03, 0x38, 0x0E, 0x06, 0x0F, 0x25, 0x25, 0x01, 0x10, 0x02,
662
0x00, 0x06, 0x03, 0x47, 0x04, 0x01, 0x48, 0x04, 0x80, 0x4C, 0x01, 0x04,
663
0x38, 0x0E, 0x06, 0x0E, 0x25, 0x25, 0x01, 0x20, 0x02, 0x00, 0x06, 0x03,
664
0x47, 0x04, 0x01, 0x48, 0x04, 0x38, 0x01, 0x05, 0x38, 0x0E, 0x06, 0x0C,
665
0x25, 0x25, 0x02, 0x00, 0x06, 0x03, 0x4B, 0x04, 0x01, 0x4C, 0x04, 0x26,
666
0x26, 0x01, 0x09, 0x0F, 0x06, 0x02, 0x68, 0x28, 0x44, 0x25, 0x26, 0x01,
667
0x01, 0x17, 0x01, 0x04, 0x0B, 0x01, 0x10, 0x08, 0x44, 0x01, 0x08, 0x17,
668
0x01, 0x10, 0x44, 0x09, 0x02, 0x00, 0x06, 0x03, 0x45, 0x04, 0x01, 0x46,
669
0x00, 0x25, 0x00, 0x00, 0x9A, 0x01, 0x0C, 0x11, 0x01, 0x02, 0x0F, 0x00,
670
0x00, 0x9A, 0x01, 0x0C, 0x11, 0x26, 0x5B, 0x44, 0x01, 0x03, 0x0A, 0x17,
671
0x00, 0x00, 0x9A, 0x01, 0x0C, 0x11, 0x01, 0x01, 0x0E, 0x00, 0x00, 0x9A,
672
0x01, 0x0C, 0x11, 0x5A, 0x00, 0x00, 0x9A, 0x01, 0x81, 0x70, 0x17, 0x01,
673
0x20, 0x0D, 0x00, 0x00, 0x1B, 0x01, 0x00, 0x75, 0x2E, 0x26, 0x06, 0x22,
674
0x01, 0x01, 0x38, 0x0E, 0x06, 0x06, 0x25, 0x01, 0x00, 0x9E, 0x04, 0x14,
675
0x01, 0x02, 0x38, 0x0E, 0x06, 0x0D, 0x25, 0x77, 0x2E, 0x01, 0x01, 0x0E,
676
0x06, 0x03, 0x01, 0x10, 0x37, 0x04, 0x01, 0x25, 0x04, 0x01, 0x25, 0x7B,
677
0x2E, 0x05, 0x33, 0x2F, 0x06, 0x30, 0x86, 0x2E, 0x01, 0x14, 0x38, 0x0E,
678
0x06, 0x06, 0x25, 0x01, 0x02, 0x37, 0x04, 0x22, 0x01, 0x15, 0x38, 0x0E,
679
0x06, 0x09, 0x25, 0xAD, 0x06, 0x03, 0x01, 0x7F, 0x9E, 0x04, 0x13, 0x01,
680
0x16, 0x38, 0x0E, 0x06, 0x06, 0x25, 0x01, 0x01, 0x37, 0x04, 0x07, 0x25,
681
0x01, 0x04, 0x37, 0x01, 0x00, 0x25, 0x1A, 0x06, 0x03, 0x01, 0x08, 0x37,
682
0x00, 0x00, 0x1B, 0x26, 0x05, 0x13, 0x2F, 0x06, 0x10, 0x86, 0x2E, 0x01,
683
0x15, 0x0E, 0x06, 0x08, 0x25, 0xAD, 0x01, 0x00, 0x77, 0x3E, 0x04, 0x01,
684
0x20, 0x00, 0x00, 0xCE, 0x01, 0x07, 0x17, 0x01, 0x01, 0x0F, 0x06, 0x02,
685
0x72, 0x28, 0x00, 0x01, 0x03, 0x00, 0x29, 0x1A, 0x06, 0x05, 0x02, 0x00,
686
0x87, 0x3E, 0x00, 0xCE, 0x25, 0x04, 0x74, 0x00, 0x01, 0x14, 0xD1, 0x01,
687
0x01, 0xDE, 0x29, 0x26, 0x01, 0x00, 0xC8, 0x01, 0x16, 0xD1, 0xD7, 0x29,
688
0x00, 0x00, 0x01, 0x0B, 0xDE, 0x4E, 0x26, 0x26, 0x01, 0x03, 0x08, 0xDD,
689
0xDD, 0x18, 0x26, 0x58, 0x06, 0x02, 0x25, 0x00, 0xDD, 0x1D, 0x26, 0x06,
690
0x05, 0x84, 0x44, 0xD8, 0x04, 0x77, 0x25, 0x04, 0x6C, 0x00, 0x21, 0x01,
691
0x0F, 0xDE, 0x26, 0x92, 0x2C, 0x01, 0x86, 0x03, 0x10, 0x06, 0x0C, 0x01,
692
0x04, 0x08, 0xDD, 0x80, 0x2E, 0xDE, 0x78, 0x2E, 0xDE, 0x04, 0x02, 0x5E,
693
0xDD, 0x26, 0xDC, 0x84, 0x44, 0xD8, 0x00, 0x02, 0xA4, 0xA6, 0x08, 0xA2,
694
0x08, 0xA5, 0x08, 0xA7, 0x08, 0xA3, 0x08, 0x27, 0x08, 0x03, 0x00, 0x01,
695
0x01, 0xDE, 0x01, 0x27, 0x8E, 0x2E, 0x08, 0x91, 0x2E, 0x01, 0x01, 0x0B,
696
0x08, 0x02, 0x00, 0x06, 0x04, 0x5E, 0x02, 0x00, 0x08, 0x83, 0x2C, 0x38,
697
0x09, 0x26, 0x5B, 0x06, 0x24, 0x02, 0x00, 0x05, 0x04, 0x44, 0x5E, 0x44,
698
0x5F, 0x01, 0x04, 0x09, 0x26, 0x58, 0x06, 0x03, 0x25, 0x01, 0x00, 0x26,
699
0x01, 0x04, 0x08, 0x02, 0x00, 0x08, 0x03, 0x00, 0x44, 0x01, 0x04, 0x08,
700
0x38, 0x08, 0x44, 0x04, 0x03, 0x25, 0x01, 0x7F, 0x03, 0x01, 0xDD, 0x94,
701
0x2C, 0xDC, 0x7A, 0x01, 0x04, 0x19, 0x7A, 0x01, 0x04, 0x08, 0x01, 0x1C,
702
0x32, 0x7A, 0x01, 0x20, 0xD8, 0x8D, 0x8E, 0x2E, 0xDA, 0x91, 0x2E, 0x26,
703
0x01, 0x01, 0x0B, 0xDC, 0x90, 0x44, 0x26, 0x06, 0x0F, 0x5D, 0x38, 0x2C,
704
0x26, 0xC7, 0x05, 0x02, 0x62, 0x28, 0xDC, 0x44, 0x5E, 0x44, 0x04, 0x6E,
705
0x60, 0x01, 0x01, 0xDE, 0x01, 0x00, 0xDE, 0x02, 0x00, 0x06, 0x81, 0x5A,
706
0x02, 0x00, 0xDC, 0xA4, 0x06, 0x0E, 0x01, 0x83, 0xFE, 0x01, 0xDC, 0x89,
707
0xA4, 0x01, 0x04, 0x09, 0x26, 0xDC, 0x5D, 0xDA, 0xA6, 0x06, 0x16, 0x01,
708
0x00, 0xDC, 0x8B, 0xA6, 0x01, 0x04, 0x09, 0x26, 0xDC, 0x01, 0x02, 0x09,
709
0x26, 0xDC, 0x01, 0x00, 0xDE, 0x01, 0x03, 0x09, 0xD9, 0xA2, 0x06, 0x0C,
710
0x01, 0x01, 0xDC, 0x01, 0x01, 0xDC, 0x82, 0x2E, 0x01, 0x08, 0x09, 0xDE,
711
0xA5, 0x06, 0x19, 0x01, 0x0D, 0xDC, 0xA5, 0x01, 0x04, 0x09, 0x26, 0xDC,
712
0x01, 0x02, 0x09, 0xDC, 0x42, 0x06, 0x03, 0x01, 0x03, 0xDB, 0x43, 0x06,
713
0x03, 0x01, 0x01, 0xDB, 0xA7, 0x26, 0x06, 0x36, 0x01, 0x0A, 0xDC, 0x01,
714
0x04, 0x09, 0x26, 0xDC, 0x5F, 0xDC, 0x40, 0x01, 0x00, 0x26, 0x01, 0x82,
715
0x80, 0x80, 0x80, 0x00, 0x17, 0x06, 0x0A, 0x01, 0xFD, 0xFF, 0xFF, 0xFF,
716
0x7F, 0x17, 0x01, 0x1D, 0xDC, 0x26, 0x01, 0x20, 0x0A, 0x06, 0x0C, 0xA0,
717
0x11, 0x01, 0x01, 0x17, 0x06, 0x02, 0x26, 0xDC, 0x5C, 0x04, 0x6E, 0x60,
718
0x04, 0x01, 0x25, 0xA3, 0x06, 0x0A, 0x01, 0x0B, 0xDC, 0x01, 0x02, 0xDC,
719
0x01, 0x82, 0x00, 0xDC, 0x27, 0x26, 0x06, 0x1F, 0x01, 0x10, 0xDC, 0x01,
720
0x04, 0x09, 0x26, 0xDC, 0x5F, 0xDC, 0x85, 0x2C, 0x01, 0x00, 0xA0, 0x0F,
721
0x06, 0x0A, 0x26, 0x1E, 0x26, 0xDE, 0x84, 0x44, 0xD8, 0x5C, 0x04, 0x72,
722
0x60, 0x04, 0x01, 0x25, 0x02, 0x01, 0x58, 0x05, 0x11, 0x01, 0x15, 0xDC,
723
0x02, 0x01, 0x26, 0xDC, 0x26, 0x06, 0x06, 0x5D, 0x01, 0x00, 0xDE, 0x04,
724
0x77, 0x25, 0x00, 0x00, 0x01, 0x10, 0xDE, 0x79, 0x2C, 0x26, 0xCC, 0x06,
725
0x0C, 0xAB, 0x23, 0x26, 0x5E, 0xDD, 0x26, 0xDC, 0x84, 0x44, 0xD8, 0x04,
726
0x0D, 0x26, 0xCA, 0x44, 0xAB, 0x22, 0x26, 0x5C, 0xDD, 0x26, 0xDE, 0x84,
727
0x44, 0xD8, 0x00, 0x00, 0x9C, 0x01, 0x14, 0xDE, 0x01, 0x0C, 0xDD, 0x84,
728
0x01, 0x0C, 0xD8, 0x00, 0x00, 0x51, 0x26, 0x01, 0x00, 0x0E, 0x06, 0x02,
729
0x60, 0x00, 0xCE, 0x25, 0x04, 0x73, 0x00, 0x26, 0xDC, 0xD8, 0x00, 0x00,
730
0x26, 0xDE, 0xD8, 0x00, 0x01, 0x03, 0x00, 0x41, 0x25, 0x26, 0x01, 0x10,
731
0x17, 0x06, 0x06, 0x01, 0x04, 0xDE, 0x02, 0x00, 0xDE, 0x26, 0x01, 0x08,
732
0x17, 0x06, 0x06, 0x01, 0x03, 0xDE, 0x02, 0x00, 0xDE, 0x26, 0x01, 0x20,
733
0x17, 0x06, 0x06, 0x01, 0x05, 0xDE, 0x02, 0x00, 0xDE, 0x26, 0x01, 0x80,
734
0x40, 0x17, 0x06, 0x06, 0x01, 0x06, 0xDE, 0x02, 0x00, 0xDE, 0x01, 0x04,
735
0x17, 0x06, 0x06, 0x01, 0x02, 0xDE, 0x02, 0x00, 0xDE, 0x00, 0x00, 0x26,
736
0x01, 0x08, 0x4F, 0xDE, 0xDE, 0x00, 0x00, 0x26, 0x01, 0x10, 0x4F, 0xDE,
737
0xDC, 0x00, 0x00, 0x26, 0x52, 0x06, 0x02, 0x25, 0x00, 0xCE, 0x25, 0x04,
738
0x76
739
};
740
741
static const uint16_t t0_caddr[] = {
742
0,
743
5,
744
10,
745
15,
746
20,
747
25,
748
30,
749
35,
750
40,
751
44,
752
48,
753
52,
754
56,
755
60,
756
64,
757
68,
758
72,
759
76,
760
80,
761
84,
762
88,
763
92,
764
96,
765
100,
766
104,
767
108,
768
112,
769
116,
770
120,
771
124,
772
129,
773
134,
774
139,
775
144,
776
149,
777
154,
778
159,
779
164,
780
169,
781
174,
782
179,
783
184,
784
189,
785
194,
786
199,
787
204,
788
209,
789
214,
790
219,
791
224,
792
229,
793
234,
794
239,
795
244,
796
249,
797
254,
798
259,
799
264,
800
269,
801
274,
802
279,
803
284,
804
289,
805
294,
806
303,
807
316,
808
320,
809
345,
810
351,
811
370,
812
381,
813
422,
814
542,
815
546,
816
611,
817
626,
818
637,
819
655,
820
684,
821
694,
822
730,
823
740,
824
818,
825
832,
826
838,
827
897,
828
916,
829
951,
830
1000,
831
1076,
832
1103,
833
1134,
834
1145,
835
1497,
836
1644,
837
1668,
838
1884,
839
1898,
840
1907,
841
1911,
842
2006,
843
2027,
844
2083,
845
2090,
846
2101,
847
2117,
848
2123,
849
2134,
850
2169,
851
2181,
852
2187,
853
2202,
854
2218,
855
2411,
856
2420,
857
2433,
858
2442,
859
2449,
860
2459,
861
2565,
862
2590,
863
2603,
864
2619,
865
2637,
866
2669,
867
2703,
868
3071,
869
3107,
870
3120,
871
3134,
872
3139,
873
3144,
874
3210,
875
3218,
876
3226
877
};
878
879
#define T0_INTERPRETED 88
880
881
#define T0_ENTER(ip, rp, slot) do { \
882
const unsigned char *t0_newip; \
883
uint32_t t0_lnum; \
884
t0_newip = &t0_codeblock[t0_caddr[(slot) - T0_INTERPRETED]]; \
885
t0_lnum = t0_parse7E_unsigned(&t0_newip); \
886
(rp) += t0_lnum; \
887
*((rp) ++) = (uint32_t)((ip) - &t0_codeblock[0]) + (t0_lnum << 16); \
888
(ip) = t0_newip; \
889
} while (0)
890
891
#define T0_DEFENTRY(name, slot) \
892
void \
893
name(void *ctx) \
894
{ \
895
t0_context *t0ctx = ctx; \
896
t0ctx->ip = &t0_codeblock[0]; \
897
T0_ENTER(t0ctx->ip, t0ctx->rp, slot); \
898
}
899
900
T0_DEFENTRY(br_ssl_hs_client_init_main, 169)
901
902
#define T0_NEXT(t0ipp) (*(*(t0ipp)) ++)
903
904
void
905
br_ssl_hs_client_run(void *t0ctx)
906
{
907
uint32_t *dp, *rp;
908
const unsigned char *ip;
909
910
#define T0_LOCAL(x) (*(rp - 2 - (x)))
911
#define T0_POP() (*-- dp)
912
#define T0_POPi() (*(int32_t *)(-- dp))
913
#define T0_PEEK(x) (*(dp - 1 - (x)))
914
#define T0_PEEKi(x) (*(int32_t *)(dp - 1 - (x)))
915
#define T0_PUSH(v) do { *dp = (v); dp ++; } while (0)
916
#define T0_PUSHi(v) do { *(int32_t *)dp = (v); dp ++; } while (0)
917
#define T0_RPOP() (*-- rp)
918
#define T0_RPOPi() (*(int32_t *)(-- rp))
919
#define T0_RPUSH(v) do { *rp = (v); rp ++; } while (0)
920
#define T0_RPUSHi(v) do { *(int32_t *)rp = (v); rp ++; } while (0)
921
#define T0_ROLL(x) do { \
922
size_t t0len = (size_t)(x); \
923
uint32_t t0tmp = *(dp - 1 - t0len); \
924
memmove(dp - t0len - 1, dp - t0len, t0len * sizeof *dp); \
925
*(dp - 1) = t0tmp; \
926
} while (0)
927
#define T0_SWAP() do { \
928
uint32_t t0tmp = *(dp - 2); \
929
*(dp - 2) = *(dp - 1); \
930
*(dp - 1) = t0tmp; \
931
} while (0)
932
#define T0_ROT() do { \
933
uint32_t t0tmp = *(dp - 3); \
934
*(dp - 3) = *(dp - 2); \
935
*(dp - 2) = *(dp - 1); \
936
*(dp - 1) = t0tmp; \
937
} while (0)
938
#define T0_NROT() do { \
939
uint32_t t0tmp = *(dp - 1); \
940
*(dp - 1) = *(dp - 2); \
941
*(dp - 2) = *(dp - 3); \
942
*(dp - 3) = t0tmp; \
943
} while (0)
944
#define T0_PICK(x) do { \
945
uint32_t t0depth = (x); \
946
T0_PUSH(T0_PEEK(t0depth)); \
947
} while (0)
948
#define T0_CO() do { \
949
goto t0_exit; \
950
} while (0)
951
#define T0_RET() goto t0_next
952
953
dp = ((t0_context *)t0ctx)->dp;
954
rp = ((t0_context *)t0ctx)->rp;
955
ip = ((t0_context *)t0ctx)->ip;
956
goto t0_next;
957
for (;;) {
958
uint32_t t0x;
959
960
t0_next:
961
t0x = T0_NEXT(&ip);
962
if (t0x < T0_INTERPRETED) {
963
switch (t0x) {
964
int32_t t0off;
965
966
case 0: /* ret */
967
t0x = T0_RPOP();
968
rp -= (t0x >> 16);
969
t0x &= 0xFFFF;
970
if (t0x == 0) {
971
ip = NULL;
972
goto t0_exit;
973
}
974
ip = &t0_codeblock[t0x];
975
break;
976
case 1: /* literal constant */
977
T0_PUSHi(t0_parse7E_signed(&ip));
978
break;
979
case 2: /* read local */
980
T0_PUSH(T0_LOCAL(t0_parse7E_unsigned(&ip)));
981
break;
982
case 3: /* write local */
983
T0_LOCAL(t0_parse7E_unsigned(&ip)) = T0_POP();
984
break;
985
case 4: /* jump */
986
t0off = t0_parse7E_signed(&ip);
987
ip += t0off;
988
break;
989
case 5: /* jump if */
990
t0off = t0_parse7E_signed(&ip);
991
if (T0_POP()) {
992
ip += t0off;
993
}
994
break;
995
case 6: /* jump if not */
996
t0off = t0_parse7E_signed(&ip);
997
if (!T0_POP()) {
998
ip += t0off;
999
}
1000
break;
1001
case 7: {
1002
/* * */
1003
1004
uint32_t b = T0_POP();
1005
uint32_t a = T0_POP();
1006
T0_PUSH(a * b);
1007
1008
}
1009
break;
1010
case 8: {
1011
/* + */
1012
1013
uint32_t b = T0_POP();
1014
uint32_t a = T0_POP();
1015
T0_PUSH(a + b);
1016
1017
}
1018
break;
1019
case 9: {
1020
/* - */
1021
1022
uint32_t b = T0_POP();
1023
uint32_t a = T0_POP();
1024
T0_PUSH(a - b);
1025
1026
}
1027
break;
1028
case 10: {
1029
/* < */
1030
1031
int32_t b = T0_POPi();
1032
int32_t a = T0_POPi();
1033
T0_PUSH(-(uint32_t)(a < b));
1034
1035
}
1036
break;
1037
case 11: {
1038
/* << */
1039
1040
int c = (int)T0_POPi();
1041
uint32_t x = T0_POP();
1042
T0_PUSH(x << c);
1043
1044
}
1045
break;
1046
case 12: {
1047
/* <= */
1048
1049
int32_t b = T0_POPi();
1050
int32_t a = T0_POPi();
1051
T0_PUSH(-(uint32_t)(a <= b));
1052
1053
}
1054
break;
1055
case 13: {
1056
/* <> */
1057
1058
uint32_t b = T0_POP();
1059
uint32_t a = T0_POP();
1060
T0_PUSH(-(uint32_t)(a != b));
1061
1062
}
1063
break;
1064
case 14: {
1065
/* = */
1066
1067
uint32_t b = T0_POP();
1068
uint32_t a = T0_POP();
1069
T0_PUSH(-(uint32_t)(a == b));
1070
1071
}
1072
break;
1073
case 15: {
1074
/* > */
1075
1076
int32_t b = T0_POPi();
1077
int32_t a = T0_POPi();
1078
T0_PUSH(-(uint32_t)(a > b));
1079
1080
}
1081
break;
1082
case 16: {
1083
/* >= */
1084
1085
int32_t b = T0_POPi();
1086
int32_t a = T0_POPi();
1087
T0_PUSH(-(uint32_t)(a >= b));
1088
1089
}
1090
break;
1091
case 17: {
1092
/* >> */
1093
1094
int c = (int)T0_POPi();
1095
int32_t x = T0_POPi();
1096
T0_PUSHi(x >> c);
1097
1098
}
1099
break;
1100
case 18: {
1101
/* anchor-dn-append-name */
1102
1103
size_t len;
1104
1105
len = T0_POP();
1106
if (CTX->client_auth_vtable != NULL) {
1107
(*CTX->client_auth_vtable)->append_name(
1108
CTX->client_auth_vtable, ENG->pad, len);
1109
}
1110
1111
}
1112
break;
1113
case 19: {
1114
/* anchor-dn-end-name */
1115
1116
if (CTX->client_auth_vtable != NULL) {
1117
(*CTX->client_auth_vtable)->end_name(
1118
CTX->client_auth_vtable);
1119
}
1120
1121
}
1122
break;
1123
case 20: {
1124
/* anchor-dn-end-name-list */
1125
1126
if (CTX->client_auth_vtable != NULL) {
1127
(*CTX->client_auth_vtable)->end_name_list(
1128
CTX->client_auth_vtable);
1129
}
1130
1131
}
1132
break;
1133
case 21: {
1134
/* anchor-dn-start-name */
1135
1136
size_t len;
1137
1138
len = T0_POP();
1139
if (CTX->client_auth_vtable != NULL) {
1140
(*CTX->client_auth_vtable)->start_name(
1141
CTX->client_auth_vtable, len);
1142
}
1143
1144
}
1145
break;
1146
case 22: {
1147
/* anchor-dn-start-name-list */
1148
1149
if (CTX->client_auth_vtable != NULL) {
1150
(*CTX->client_auth_vtable)->start_name_list(
1151
CTX->client_auth_vtable);
1152
}
1153
1154
}
1155
break;
1156
case 23: {
1157
/* and */
1158
1159
uint32_t b = T0_POP();
1160
uint32_t a = T0_POP();
1161
T0_PUSH(a & b);
1162
1163
}
1164
break;
1165
case 24: {
1166
/* begin-cert */
1167
1168
if (ENG->chain_len == 0) {
1169
T0_PUSHi(-1);
1170
} else {
1171
ENG->cert_cur = ENG->chain->data;
1172
ENG->cert_len = ENG->chain->data_len;
1173
ENG->chain ++;
1174
ENG->chain_len --;
1175
T0_PUSH(ENG->cert_len);
1176
}
1177
1178
}
1179
break;
1180
case 25: {
1181
/* bzero */
1182
1183
size_t len = (size_t)T0_POP();
1184
void *addr = (unsigned char *)ENG + (size_t)T0_POP();
1185
memset(addr, 0, len);
1186
1187
}
1188
break;
1189
case 26: {
1190
/* can-output? */
1191
1192
T0_PUSHi(-(ENG->hlen_out > 0));
1193
1194
}
1195
break;
1196
case 27: {
1197
/* co */
1198
T0_CO();
1199
}
1200
break;
1201
case 28: {
1202
/* compute-Finished-inner */
1203
1204
int prf_id = T0_POP();
1205
int from_client = T0_POPi();
1206
unsigned char tmp[48];
1207
br_tls_prf_seed_chunk seed;
1208
1209
br_tls_prf_impl prf = br_ssl_engine_get_PRF(ENG, prf_id);
1210
seed.data = tmp;
1211
if (ENG->session.version >= BR_TLS12) {
1212
seed.len = br_multihash_out(&ENG->mhash, prf_id, tmp);
1213
} else {
1214
br_multihash_out(&ENG->mhash, br_md5_ID, tmp);
1215
br_multihash_out(&ENG->mhash, br_sha1_ID, tmp + 16);
1216
seed.len = 36;
1217
}
1218
prf(ENG->pad, 12, ENG->session.master_secret,
1219
sizeof ENG->session.master_secret,
1220
from_client ? "client finished" : "server finished",
1221
1, &seed);
1222
1223
}
1224
break;
1225
case 29: {
1226
/* copy-cert-chunk */
1227
1228
size_t clen;
1229
1230
clen = ENG->cert_len;
1231
if (clen > sizeof ENG->pad) {
1232
clen = sizeof ENG->pad;
1233
}
1234
memcpy(ENG->pad, ENG->cert_cur, clen);
1235
ENG->cert_cur += clen;
1236
ENG->cert_len -= clen;
1237
T0_PUSH(clen);
1238
1239
}
1240
break;
1241
case 30: {
1242
/* copy-protocol-name */
1243
1244
size_t idx = T0_POP();
1245
size_t len = strlen(ENG->protocol_names[idx]);
1246
memcpy(ENG->pad, ENG->protocol_names[idx], len);
1247
T0_PUSH(len);
1248
1249
}
1250
break;
1251
case 31: {
1252
/* data-get8 */
1253
1254
size_t addr = T0_POP();
1255
T0_PUSH(t0_datablock[addr]);
1256
1257
}
1258
break;
1259
case 32: {
1260
/* discard-input */
1261
1262
ENG->hlen_in = 0;
1263
1264
}
1265
break;
1266
case 33: {
1267
/* do-client-sign */
1268
1269
size_t sig_len;
1270
1271
sig_len = make_client_sign(CTX);
1272
if (sig_len == 0) {
1273
br_ssl_engine_fail(ENG, BR_ERR_INVALID_ALGORITHM);
1274
T0_CO();
1275
}
1276
T0_PUSH(sig_len);
1277
1278
}
1279
break;
1280
case 34: {
1281
/* do-ecdh */
1282
1283
unsigned prf_id = T0_POP();
1284
unsigned ecdhe = T0_POP();
1285
int x;
1286
1287
x = make_pms_ecdh(CTX, ecdhe, prf_id);
1288
if (x < 0) {
1289
br_ssl_engine_fail(ENG, -x);
1290
T0_CO();
1291
} else {
1292
T0_PUSH(x);
1293
}
1294
1295
}
1296
break;
1297
case 35: {
1298
/* do-rsa-encrypt */
1299
1300
int x;
1301
1302
x = make_pms_rsa(CTX, T0_POP());
1303
if (x < 0) {
1304
br_ssl_engine_fail(ENG, -x);
1305
T0_CO();
1306
} else {
1307
T0_PUSH(x);
1308
}
1309
1310
}
1311
break;
1312
case 36: {
1313
/* do-static-ecdh */
1314
1315
unsigned prf_id = T0_POP();
1316
1317
if (make_pms_static_ecdh(CTX, prf_id) < 0) {
1318
br_ssl_engine_fail(ENG, BR_ERR_INVALID_ALGORITHM);
1319
T0_CO();
1320
}
1321
1322
}
1323
break;
1324
case 37: {
1325
/* drop */
1326
(void)T0_POP();
1327
}
1328
break;
1329
case 38: {
1330
/* dup */
1331
T0_PUSH(T0_PEEK(0));
1332
}
1333
break;
1334
case 39: {
1335
/* ext-ALPN-length */
1336
1337
size_t u, len;
1338
1339
if (ENG->protocol_names_num == 0) {
1340
T0_PUSH(0);
1341
T0_RET();
1342
}
1343
len = 6;
1344
for (u = 0; u < ENG->protocol_names_num; u ++) {
1345
len += 1 + strlen(ENG->protocol_names[u]);
1346
}
1347
T0_PUSH(len);
1348
1349
}
1350
break;
1351
case 40: {
1352
/* fail */
1353
1354
br_ssl_engine_fail(ENG, (int)T0_POPi());
1355
T0_CO();
1356
1357
}
1358
break;
1359
case 41: {
1360
/* flush-record */
1361
1362
br_ssl_engine_flush_record(ENG);
1363
1364
}
1365
break;
1366
case 42: {
1367
/* get-client-chain */
1368
1369
uint32_t auth_types;
1370
1371
auth_types = T0_POP();
1372
if (CTX->client_auth_vtable != NULL) {
1373
br_ssl_client_certificate ux;
1374
1375
(*CTX->client_auth_vtable)->choose(CTX->client_auth_vtable,
1376
CTX, auth_types, &ux);
1377
CTX->auth_type = (unsigned char)ux.auth_type;
1378
CTX->hash_id = (unsigned char)ux.hash_id;
1379
ENG->chain = ux.chain;
1380
ENG->chain_len = ux.chain_len;
1381
} else {
1382
CTX->hash_id = 0;
1383
ENG->chain_len = 0;
1384
}
1385
1386
}
1387
break;
1388
case 43: {
1389
/* get-key-type-usages */
1390
1391
const br_x509_class *xc;
1392
const br_x509_pkey *pk;
1393
unsigned usages;
1394
1395
xc = *(ENG->x509ctx);
1396
pk = xc->get_pkey(ENG->x509ctx, &usages);
1397
if (pk == NULL) {
1398
T0_PUSH(0);
1399
} else {
1400
T0_PUSH(pk->key_type | usages);
1401
}
1402
1403
}
1404
break;
1405
case 44: {
1406
/* get16 */
1407
1408
size_t addr = (size_t)T0_POP();
1409
T0_PUSH(*(uint16_t *)(void *)((unsigned char *)ENG + addr));
1410
1411
}
1412
break;
1413
case 45: {
1414
/* get32 */
1415
1416
size_t addr = (size_t)T0_POP();
1417
T0_PUSH(*(uint32_t *)(void *)((unsigned char *)ENG + addr));
1418
1419
}
1420
break;
1421
case 46: {
1422
/* get8 */
1423
1424
size_t addr = (size_t)T0_POP();
1425
T0_PUSH(*((unsigned char *)ENG + addr));
1426
1427
}
1428
break;
1429
case 47: {
1430
/* has-input? */
1431
1432
T0_PUSHi(-(ENG->hlen_in != 0));
1433
1434
}
1435
break;
1436
case 48: {
1437
/* memcmp */
1438
1439
size_t len = (size_t)T0_POP();
1440
void *addr2 = (unsigned char *)ENG + (size_t)T0_POP();
1441
void *addr1 = (unsigned char *)ENG + (size_t)T0_POP();
1442
int x = memcmp(addr1, addr2, len);
1443
T0_PUSH((uint32_t)-(x == 0));
1444
1445
}
1446
break;
1447
case 49: {
1448
/* memcpy */
1449
1450
size_t len = (size_t)T0_POP();
1451
void *src = (unsigned char *)ENG + (size_t)T0_POP();
1452
void *dst = (unsigned char *)ENG + (size_t)T0_POP();
1453
memcpy(dst, src, len);
1454
1455
}
1456
break;
1457
case 50: {
1458
/* mkrand */
1459
1460
size_t len = (size_t)T0_POP();
1461
void *addr = (unsigned char *)ENG + (size_t)T0_POP();
1462
br_hmac_drbg_generate(&ENG->rng, addr, len);
1463
1464
}
1465
break;
1466
case 51: {
1467
/* more-incoming-bytes? */
1468
1469
T0_PUSHi(ENG->hlen_in != 0 || !br_ssl_engine_recvrec_finished(ENG));
1470
1471
}
1472
break;
1473
case 52: {
1474
/* multihash-init */
1475
1476
br_multihash_init(&ENG->mhash);
1477
1478
}
1479
break;
1480
case 53: {
1481
/* neg */
1482
1483
uint32_t a = T0_POP();
1484
T0_PUSH(-a);
1485
1486
}
1487
break;
1488
case 54: {
1489
/* not */
1490
1491
uint32_t a = T0_POP();
1492
T0_PUSH(~a);
1493
1494
}
1495
break;
1496
case 55: {
1497
/* or */
1498
1499
uint32_t b = T0_POP();
1500
uint32_t a = T0_POP();
1501
T0_PUSH(a | b);
1502
1503
}
1504
break;
1505
case 56: {
1506
/* over */
1507
T0_PUSH(T0_PEEK(1));
1508
}
1509
break;
1510
case 57: {
1511
/* read-chunk-native */
1512
1513
size_t clen = ENG->hlen_in;
1514
if (clen > 0) {
1515
uint32_t addr, len;
1516
1517
len = T0_POP();
1518
addr = T0_POP();
1519
if ((size_t)len < clen) {
1520
clen = (size_t)len;
1521
}
1522
memcpy((unsigned char *)ENG + addr, ENG->hbuf_in, clen);
1523
if (ENG->record_type_in == BR_SSL_HANDSHAKE) {
1524
br_multihash_update(&ENG->mhash, ENG->hbuf_in, clen);
1525
}
1526
T0_PUSH(addr + (uint32_t)clen);
1527
T0_PUSH(len - (uint32_t)clen);
1528
ENG->hbuf_in += clen;
1529
ENG->hlen_in -= clen;
1530
}
1531
1532
}
1533
break;
1534
case 58: {
1535
/* read8-native */
1536
1537
if (ENG->hlen_in > 0) {
1538
unsigned char x;
1539
1540
x = *ENG->hbuf_in ++;
1541
if (ENG->record_type_in == BR_SSL_HANDSHAKE) {
1542
br_multihash_update(&ENG->mhash, &x, 1);
1543
}
1544
T0_PUSH(x);
1545
ENG->hlen_in --;
1546
} else {
1547
T0_PUSHi(-1);
1548
}
1549
1550
}
1551
break;
1552
case 59: {
1553
/* set-server-curve */
1554
1555
const br_x509_class *xc;
1556
const br_x509_pkey *pk;
1557
1558
xc = *(ENG->x509ctx);
1559
pk = xc->get_pkey(ENG->x509ctx, NULL);
1560
CTX->server_curve =
1561
(pk->key_type == BR_KEYTYPE_EC) ? pk->key.ec.curve : 0;
1562
1563
}
1564
break;
1565
case 60: {
1566
/* set16 */
1567
1568
size_t addr = (size_t)T0_POP();
1569
*(uint16_t *)(void *)((unsigned char *)ENG + addr) = (uint16_t)T0_POP();
1570
1571
}
1572
break;
1573
case 61: {
1574
/* set32 */
1575
1576
size_t addr = (size_t)T0_POP();
1577
*(uint32_t *)(void *)((unsigned char *)ENG + addr) = (uint32_t)T0_POP();
1578
1579
}
1580
break;
1581
case 62: {
1582
/* set8 */
1583
1584
size_t addr = (size_t)T0_POP();
1585
*((unsigned char *)ENG + addr) = (unsigned char)T0_POP();
1586
1587
}
1588
break;
1589
case 63: {
1590
/* strlen */
1591
1592
void *str = (unsigned char *)ENG + (size_t)T0_POP();
1593
T0_PUSH((uint32_t)strlen(str));
1594
1595
}
1596
break;
1597
case 64: {
1598
/* supported-curves */
1599
1600
uint32_t x = ENG->iec == NULL ? 0 : ENG->iec->supported_curves;
1601
T0_PUSH(x);
1602
1603
}
1604
break;
1605
case 65: {
1606
/* supported-hash-functions */
1607
1608
int i;
1609
unsigned x, num;
1610
1611
x = 0;
1612
num = 0;
1613
for (i = br_sha1_ID; i <= br_sha512_ID; i ++) {
1614
if (br_multihash_getimpl(&ENG->mhash, i)) {
1615
x |= 1U << i;
1616
num ++;
1617
}
1618
}
1619
T0_PUSH(x);
1620
T0_PUSH(num);
1621
1622
}
1623
break;
1624
case 66: {
1625
/* supports-ecdsa? */
1626
1627
T0_PUSHi(-(ENG->iecdsa != 0));
1628
1629
}
1630
break;
1631
case 67: {
1632
/* supports-rsa-sign? */
1633
1634
T0_PUSHi(-(ENG->irsavrfy != 0));
1635
1636
}
1637
break;
1638
case 68: {
1639
/* swap */
1640
T0_SWAP();
1641
}
1642
break;
1643
case 69: {
1644
/* switch-aesccm-in */
1645
1646
int is_client, prf_id;
1647
unsigned cipher_key_len, tag_len;
1648
1649
tag_len = T0_POP();
1650
cipher_key_len = T0_POP();
1651
prf_id = T0_POP();
1652
is_client = T0_POP();
1653
br_ssl_engine_switch_ccm_in(ENG, is_client, prf_id,
1654
ENG->iaes_ctrcbc, cipher_key_len, tag_len);
1655
1656
}
1657
break;
1658
case 70: {
1659
/* switch-aesccm-out */
1660
1661
int is_client, prf_id;
1662
unsigned cipher_key_len, tag_len;
1663
1664
tag_len = T0_POP();
1665
cipher_key_len = T0_POP();
1666
prf_id = T0_POP();
1667
is_client = T0_POP();
1668
br_ssl_engine_switch_ccm_out(ENG, is_client, prf_id,
1669
ENG->iaes_ctrcbc, cipher_key_len, tag_len);
1670
1671
}
1672
break;
1673
case 71: {
1674
/* switch-aesgcm-in */
1675
1676
int is_client, prf_id;
1677
unsigned cipher_key_len;
1678
1679
cipher_key_len = T0_POP();
1680
prf_id = T0_POP();
1681
is_client = T0_POP();
1682
br_ssl_engine_switch_gcm_in(ENG, is_client, prf_id,
1683
ENG->iaes_ctr, cipher_key_len);
1684
1685
}
1686
break;
1687
case 72: {
1688
/* switch-aesgcm-out */
1689
1690
int is_client, prf_id;
1691
unsigned cipher_key_len;
1692
1693
cipher_key_len = T0_POP();
1694
prf_id = T0_POP();
1695
is_client = T0_POP();
1696
br_ssl_engine_switch_gcm_out(ENG, is_client, prf_id,
1697
ENG->iaes_ctr, cipher_key_len);
1698
1699
}
1700
break;
1701
case 73: {
1702
/* switch-cbc-in */
1703
1704
int is_client, prf_id, mac_id, aes;
1705
unsigned cipher_key_len;
1706
1707
cipher_key_len = T0_POP();
1708
aes = T0_POP();
1709
mac_id = T0_POP();
1710
prf_id = T0_POP();
1711
is_client = T0_POP();
1712
br_ssl_engine_switch_cbc_in(ENG, is_client, prf_id, mac_id,
1713
aes ? ENG->iaes_cbcdec : ENG->ides_cbcdec, cipher_key_len);
1714
1715
}
1716
break;
1717
case 74: {
1718
/* switch-cbc-out */
1719
1720
int is_client, prf_id, mac_id, aes;
1721
unsigned cipher_key_len;
1722
1723
cipher_key_len = T0_POP();
1724
aes = T0_POP();
1725
mac_id = T0_POP();
1726
prf_id = T0_POP();
1727
is_client = T0_POP();
1728
br_ssl_engine_switch_cbc_out(ENG, is_client, prf_id, mac_id,
1729
aes ? ENG->iaes_cbcenc : ENG->ides_cbcenc, cipher_key_len);
1730
1731
}
1732
break;
1733
case 75: {
1734
/* switch-chapol-in */
1735
1736
int is_client, prf_id;
1737
1738
prf_id = T0_POP();
1739
is_client = T0_POP();
1740
br_ssl_engine_switch_chapol_in(ENG, is_client, prf_id);
1741
1742
}
1743
break;
1744
case 76: {
1745
/* switch-chapol-out */
1746
1747
int is_client, prf_id;
1748
1749
prf_id = T0_POP();
1750
is_client = T0_POP();
1751
br_ssl_engine_switch_chapol_out(ENG, is_client, prf_id);
1752
1753
}
1754
break;
1755
case 77: {
1756
/* test-protocol-name */
1757
1758
size_t len = T0_POP();
1759
size_t u;
1760
1761
for (u = 0; u < ENG->protocol_names_num; u ++) {
1762
const char *name;
1763
1764
name = ENG->protocol_names[u];
1765
if (len == strlen(name) && memcmp(ENG->pad, name, len) == 0) {
1766
T0_PUSH(u);
1767
T0_RET();
1768
}
1769
}
1770
T0_PUSHi(-1);
1771
1772
}
1773
break;
1774
case 78: {
1775
/* total-chain-length */
1776
1777
size_t u;
1778
uint32_t total;
1779
1780
total = 0;
1781
for (u = 0; u < ENG->chain_len; u ++) {
1782
total += 3 + (uint32_t)ENG->chain[u].data_len;
1783
}
1784
T0_PUSH(total);
1785
1786
}
1787
break;
1788
case 79: {
1789
/* u>> */
1790
1791
int c = (int)T0_POPi();
1792
uint32_t x = T0_POP();
1793
T0_PUSH(x >> c);
1794
1795
}
1796
break;
1797
case 80: {
1798
/* verify-SKE-sig */
1799
1800
size_t sig_len = T0_POP();
1801
int use_rsa = T0_POPi();
1802
int hash = T0_POPi();
1803
1804
T0_PUSH(verify_SKE_sig(CTX, hash, use_rsa, sig_len));
1805
1806
}
1807
break;
1808
case 81: {
1809
/* write-blob-chunk */
1810
1811
size_t clen = ENG->hlen_out;
1812
if (clen > 0) {
1813
uint32_t addr, len;
1814
1815
len = T0_POP();
1816
addr = T0_POP();
1817
if ((size_t)len < clen) {
1818
clen = (size_t)len;
1819
}
1820
memcpy(ENG->hbuf_out, (unsigned char *)ENG + addr, clen);
1821
if (ENG->record_type_out == BR_SSL_HANDSHAKE) {
1822
br_multihash_update(&ENG->mhash, ENG->hbuf_out, clen);
1823
}
1824
T0_PUSH(addr + (uint32_t)clen);
1825
T0_PUSH(len - (uint32_t)clen);
1826
ENG->hbuf_out += clen;
1827
ENG->hlen_out -= clen;
1828
}
1829
1830
}
1831
break;
1832
case 82: {
1833
/* write8-native */
1834
1835
unsigned char x;
1836
1837
x = (unsigned char)T0_POP();
1838
if (ENG->hlen_out > 0) {
1839
if (ENG->record_type_out == BR_SSL_HANDSHAKE) {
1840
br_multihash_update(&ENG->mhash, &x, 1);
1841
}
1842
*ENG->hbuf_out ++ = x;
1843
ENG->hlen_out --;
1844
T0_PUSHi(-1);
1845
} else {
1846
T0_PUSHi(0);
1847
}
1848
1849
}
1850
break;
1851
case 83: {
1852
/* x509-append */
1853
1854
const br_x509_class *xc;
1855
size_t len;
1856
1857
xc = *(ENG->x509ctx);
1858
len = T0_POP();
1859
xc->append(ENG->x509ctx, ENG->pad, len);
1860
1861
}
1862
break;
1863
case 84: {
1864
/* x509-end-cert */
1865
1866
const br_x509_class *xc;
1867
1868
xc = *(ENG->x509ctx);
1869
xc->end_cert(ENG->x509ctx);
1870
1871
}
1872
break;
1873
case 85: {
1874
/* x509-end-chain */
1875
1876
const br_x509_class *xc;
1877
1878
xc = *(ENG->x509ctx);
1879
T0_PUSH(xc->end_chain(ENG->x509ctx));
1880
1881
}
1882
break;
1883
case 86: {
1884
/* x509-start-cert */
1885
1886
const br_x509_class *xc;
1887
1888
xc = *(ENG->x509ctx);
1889
xc->start_cert(ENG->x509ctx, T0_POP());
1890
1891
}
1892
break;
1893
case 87: {
1894
/* x509-start-chain */
1895
1896
const br_x509_class *xc;
1897
uint32_t bc;
1898
1899
bc = T0_POP();
1900
xc = *(ENG->x509ctx);
1901
xc->start_chain(ENG->x509ctx, bc ? ENG->server_name : NULL);
1902
1903
}
1904
break;
1905
}
1906
1907
} else {
1908
T0_ENTER(ip, rp, t0x);
1909
}
1910
}
1911
t0_exit:
1912
((t0_context *)t0ctx)->dp = dp;
1913
((t0_context *)t0ctx)->rp = rp;
1914
((t0_context *)t0ctx)->ip = ip;
1915
}
1916
1917