File Coverage

src/ssl/ssl_hs_server.c
Criterion Covered Total %
statement 414 668 61.9
branch 54 130 41.5
condition n/a
subroutine n/a
pod n/a
total 468 798 58.6


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