File Coverage

src/x509/x509_decoder.c
Criterion Covered Total %
statement 238 244 97.5
branch 25 30 83.3
condition n/a
subroutine n/a
pod n/a
total 263 274 95.9


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 659099           t0_parse7E_unsigned(const unsigned char **p)
14             {
15             uint32_t x;
16              
17 659099           x = 0;
18 0           for (;;) {
19             unsigned y;
20              
21 659099           y = *(*p) ++;
22 659099           x = (x << 7) | (uint32_t)(y & 0x7F);
23 659099 50         if (y < 0x80) {
24 659099           return x;
25             }
26             }
27             }
28              
29             static int32_t
30 638515           t0_parse7E_signed(const unsigned char **p)
31             {
32             int neg;
33             uint32_t x;
34              
35 638515           neg = ((**p) >> 6) & 1;
36 638515           x = (uint32_t)-neg;
37 22380           for (;;) {
38             unsigned y;
39              
40 660895           y = *(*p) ++;
41 660895           x = (x << 7) | (uint32_t)(y & 0x7F);
42 660895 100         if (y < 0x80) {
43 638515 100         if (neg) {
44 50062           return -(int32_t)~x - 1;
45             } else {
46 588453           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_x509_decoder_init_main(void *t0ctx);
65              
66             void br_x509_decoder_run(void *t0ctx);
67              
68              
69              
70             #include "inner.h"
71              
72              
73              
74              
75              
76             #include "inner.h"
77              
78             #define CTX ((br_x509_decoder_context *)(void *)((unsigned char *)t0ctx - offsetof(br_x509_decoder_context, cpu)))
79             #define CONTEXT_NAME br_x509_decoder_context
80              
81             /* see bearssl_x509.h */
82             void
83 152           br_x509_decoder_init(br_x509_decoder_context *ctx,
84             void (*append_dn)(void *ctx, const void *buf, size_t len),
85             void *append_dn_ctx)
86             {
87 152           memset(ctx, 0, sizeof *ctx);
88             /* obsolete
89             ctx->err = 0;
90             ctx->hbuf = NULL;
91             ctx->hlen = 0;
92             */
93 152           ctx->append_dn = append_dn;
94 152           ctx->append_dn_ctx = append_dn_ctx;
95 152           ctx->cpu.dp = &ctx->dp_stack[0];
96 152           ctx->cpu.rp = &ctx->rp_stack[0];
97 152           br_x509_decoder_init_main(&ctx->cpu);
98 152           br_x509_decoder_run(&ctx->cpu);
99 152           }
100              
101             /* see bearssl_x509.h */
102             void
103 152           br_x509_decoder_push(br_x509_decoder_context *ctx,
104             const void *data, size_t len)
105             {
106 152           ctx->hbuf = data;
107 152           ctx->hlen = len;
108 152           br_x509_decoder_run(&ctx->cpu);
109 152           }
110              
111              
112              
113             static const unsigned char t0_datablock[] = {
114             0x00, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x09,
115             0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x09, 0x2A, 0x86,
116             0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0E, 0x09, 0x2A, 0x86, 0x48, 0x86,
117             0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
118             0x01, 0x01, 0x0C, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01,
119             0x0D, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x08, 0x2A, 0x86,
120             0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22,
121             0x05, 0x2B, 0x81, 0x04, 0x00, 0x23, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D,
122             0x04, 0x01, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x01, 0x08,
123             0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x08, 0x2A, 0x86, 0x48,
124             0xCE, 0x3D, 0x04, 0x03, 0x03, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04,
125             0x03, 0x04, 0x00, 0x1F, 0x03, 0xFC, 0x07, 0x7F, 0x0B, 0x5E, 0x0F, 0x1F,
126             0x12, 0xFE, 0x16, 0xBF, 0x1A, 0x9F, 0x1E, 0x7E, 0x22, 0x3F, 0x26, 0x1E,
127             0x29, 0xDF, 0x00, 0x1F, 0x03, 0xFD, 0x07, 0x9F, 0x0B, 0x7E, 0x0F, 0x3F,
128             0x13, 0x1E, 0x16, 0xDF, 0x1A, 0xBF, 0x1E, 0x9E, 0x22, 0x5F, 0x26, 0x3E,
129             0x29, 0xFF, 0x03, 0x55, 0x1D, 0x13
130             };
131              
132             static const unsigned char t0_codeblock[] = {
133             0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x11, 0x00, 0x00, 0x01,
134             0x01, 0x09, 0x00, 0x00, 0x01, 0x01, 0x0A, 0x00, 0x00, 0x1A, 0x1A, 0x00,
135             0x00, 0x01, T0_INT1(BR_ERR_X509_BAD_BOOLEAN), 0x00, 0x00, 0x01,
136             T0_INT1(BR_ERR_X509_BAD_TAG_CLASS), 0x00, 0x00, 0x01,
137             T0_INT1(BR_ERR_X509_BAD_TAG_VALUE), 0x00, 0x00, 0x01,
138             T0_INT1(BR_ERR_X509_BAD_TIME), 0x00, 0x00, 0x01,
139             T0_INT1(BR_ERR_X509_EXTRA_ELEMENT), 0x00, 0x00, 0x01,
140             T0_INT1(BR_ERR_X509_INDEFINITE_LENGTH), 0x00, 0x00, 0x01,
141             T0_INT1(BR_ERR_X509_INNER_TRUNC), 0x00, 0x00, 0x01,
142             T0_INT1(BR_ERR_X509_LIMIT_EXCEEDED), 0x00, 0x00, 0x01,
143             T0_INT1(BR_ERR_X509_NOT_CONSTRUCTED), 0x00, 0x00, 0x01,
144             T0_INT1(BR_ERR_X509_NOT_PRIMITIVE), 0x00, 0x00, 0x01,
145             T0_INT1(BR_ERR_X509_OVERFLOW), 0x00, 0x00, 0x01,
146             T0_INT1(BR_ERR_X509_PARTIAL_BYTE), 0x00, 0x00, 0x01,
147             T0_INT1(BR_ERR_X509_UNEXPECTED), 0x00, 0x00, 0x01,
148             T0_INT1(BR_ERR_X509_UNSUPPORTED), 0x00, 0x00, 0x01,
149             T0_INT1(BR_KEYTYPE_EC), 0x00, 0x00, 0x01, T0_INT1(BR_KEYTYPE_RSA),
150             0x00, 0x00, 0x01, T0_INT2(offsetof(CONTEXT_NAME, copy_dn)), 0x00, 0x00,
151             0x01, T0_INT2(offsetof(CONTEXT_NAME, decoded)), 0x00, 0x00, 0x01,
152             T0_INT2(offsetof(CONTEXT_NAME, isCA)), 0x00, 0x00, 0x01,
153             T0_INT2(offsetof(br_x509_decoder_context, pkey_data)), 0x01,
154             T0_INT2(BR_X509_BUFSIZE_KEY), 0x00, 0x00, 0x01,
155             T0_INT2(offsetof(CONTEXT_NAME, notafter_days)), 0x00, 0x00, 0x01,
156             T0_INT2(offsetof(CONTEXT_NAME, notafter_seconds)), 0x00, 0x00, 0x01,
157             T0_INT2(offsetof(CONTEXT_NAME, notbefore_days)), 0x00, 0x00, 0x01,
158             T0_INT2(offsetof(CONTEXT_NAME, notbefore_seconds)), 0x00, 0x00, 0x01,
159             T0_INT2(offsetof(CONTEXT_NAME, pad)), 0x00, 0x00, 0x01,
160             T0_INT2(offsetof(CONTEXT_NAME, signer_hash_id)), 0x00, 0x00, 0x01,
161             T0_INT2(offsetof(CONTEXT_NAME, signer_key_type)), 0x00, 0x00, 0x01,
162             0x80, 0x45, 0x00, 0x00, 0x01, 0x80, 0x4E, 0x00, 0x00, 0x01, 0x80, 0x54,
163             0x00, 0x00, 0x01, 0x81, 0x36, 0x00, 0x02, 0x03, 0x00, 0x03, 0x01, 0x1B,
164             0x02, 0x01, 0x13, 0x26, 0x02, 0x00, 0x0F, 0x15, 0x00, 0x00, 0x05, 0x02,
165             0x34, 0x1D, 0x00, 0x00, 0x06, 0x02, 0x35, 0x1D, 0x00, 0x00, 0x01, 0x10,
166             0x4F, 0x00, 0x00, 0x11, 0x05, 0x02, 0x38, 0x1D, 0x4C, 0x00, 0x00, 0x11,
167             0x05, 0x02, 0x38, 0x1D, 0x4D, 0x00, 0x00, 0x06, 0x02, 0x30, 0x1D, 0x00,
168             0x00, 0x1B, 0x19, 0x01, 0x08, 0x0E, 0x26, 0x29, 0x19, 0x09, 0x00, 0x00,
169             0x01, 0x30, 0x0A, 0x1B, 0x01, 0x00, 0x01, 0x09, 0x4B, 0x05, 0x02, 0x2F,
170             0x1D, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x01, 0x80, 0x5A, 0x00, 0x00,
171             0x01, 0x80, 0x62, 0x00, 0x00, 0x01, 0x80, 0x6B, 0x00, 0x00, 0x01, 0x80,
172             0x74, 0x00, 0x00, 0x01, 0x80, 0x7D, 0x00, 0x00, 0x01, 0x3D, 0x00, 0x00,
173             0x20, 0x11, 0x06, 0x04, 0x2B, 0x6B, 0x7A, 0x71, 0x00, 0x04, 0x01, 0x00,
174             0x3D, 0x25, 0x01, 0x00, 0x3C, 0x25, 0x01, 0x87, 0xFF, 0xFF, 0x7F, 0x6D,
175             0x6D, 0x70, 0x1B, 0x01, 0x20, 0x11, 0x06, 0x11, 0x1A, 0x4C, 0x6B, 0x70,
176             0x01, 0x02, 0x50, 0x6E, 0x01, 0x02, 0x12, 0x06, 0x02, 0x39, 0x1D, 0x51,
177             0x70, 0x01, 0x02, 0x50, 0x6C, 0x6D, 0x7A, 0x6D, 0x7A, 0x6D, 0x65, 0x43,
178             0x24, 0x42, 0x24, 0x65, 0x41, 0x24, 0x40, 0x24, 0x51, 0x01, 0x01, 0x3C,
179             0x25, 0x6D, 0x7A, 0x01, 0x00, 0x3C, 0x25, 0x6D, 0x6D, 0x60, 0x05, 0x02,
180             0x39, 0x1D, 0x74, 0x1C, 0x06, 0x1C, 0x7A, 0x61, 0x6D, 0x3F, 0x68, 0x03,
181             0x00, 0x3F, 0x26, 0x02, 0x00, 0x09, 0x26, 0x02, 0x00, 0x0A, 0x68, 0x03,
182             0x01, 0x51, 0x51, 0x02, 0x00, 0x02, 0x01, 0x18, 0x04, 0x1E, 0x5A, 0x1C,
183             0x06, 0x18, 0x64, 0x03, 0x02, 0x51, 0x61, 0x1B, 0x03, 0x03, 0x1B, 0x3F,
184             0x23, 0x0D, 0x06, 0x02, 0x33, 0x1D, 0x62, 0x02, 0x02, 0x02, 0x03, 0x17,
185             0x04, 0x02, 0x39, 0x1D, 0x51, 0x01, 0x00, 0x3E, 0x25, 0x71, 0x01, 0x21,
186             0x5B, 0x01, 0x22, 0x5B, 0x1B, 0x01, 0x23, 0x11, 0x06, 0x28, 0x1A, 0x4C,
187             0x6B, 0x6D, 0x1B, 0x06, 0x1D, 0x6D, 0x60, 0x1A, 0x70, 0x1B, 0x01, 0x01,
188             0x11, 0x06, 0x03, 0x63, 0x1A, 0x70, 0x01, 0x04, 0x50, 0x6B, 0x4A, 0x1C,
189             0x06, 0x03, 0x5F, 0x04, 0x01, 0x7B, 0x51, 0x51, 0x04, 0x60, 0x51, 0x51,
190             0x04, 0x08, 0x01, 0x7F, 0x11, 0x05, 0x02, 0x38, 0x1D, 0x1A, 0x51, 0x6D,
191             0x60, 0x06, 0x80, 0x63, 0x75, 0x1C, 0x06, 0x06, 0x01, 0x02, 0x3B, 0x04,
192             0x80, 0x57, 0x76, 0x1C, 0x06, 0x06, 0x01, 0x03, 0x3B, 0x04, 0x80, 0x4D,
193             0x77, 0x1C, 0x06, 0x06, 0x01, 0x04, 0x3B, 0x04, 0x80, 0x43, 0x78, 0x1C,
194             0x06, 0x05, 0x01, 0x05, 0x3B, 0x04, 0x3A, 0x79, 0x1C, 0x06, 0x05, 0x01,
195             0x06, 0x3B, 0x04, 0x31, 0x55, 0x1C, 0x06, 0x05, 0x01, 0x02, 0x3A, 0x04,
196             0x28, 0x56, 0x1C, 0x06, 0x05, 0x01, 0x03, 0x3A, 0x04, 0x1F, 0x57, 0x1C,
197             0x06, 0x05, 0x01, 0x04, 0x3A, 0x04, 0x16, 0x58, 0x1C, 0x06, 0x05, 0x01,
198             0x05, 0x3A, 0x04, 0x0D, 0x59, 0x1C, 0x06, 0x05, 0x01, 0x06, 0x3A, 0x04,
199             0x04, 0x01, 0x00, 0x01, 0x00, 0x04, 0x04, 0x01, 0x00, 0x01, 0x00, 0x46,
200             0x25, 0x45, 0x25, 0x7A, 0x61, 0x7A, 0x51, 0x1A, 0x01, 0x01, 0x3D, 0x25,
201             0x73, 0x30, 0x1D, 0x00, 0x00, 0x01, 0x81, 0x06, 0x00, 0x01, 0x54, 0x0D,
202             0x06, 0x02, 0x32, 0x1D, 0x1B, 0x03, 0x00, 0x0A, 0x02, 0x00, 0x00, 0x00,
203             0x6D, 0x71, 0x1B, 0x01, 0x01, 0x11, 0x06, 0x08, 0x63, 0x01, 0x01, 0x15,
204             0x3E, 0x25, 0x04, 0x01, 0x2B, 0x7A, 0x00, 0x00, 0x70, 0x01, 0x06, 0x50,
205             0x6F, 0x00, 0x00, 0x70, 0x01, 0x03, 0x50, 0x6B, 0x72, 0x06, 0x02, 0x37,
206             0x1D, 0x00, 0x00, 0x26, 0x1B, 0x06, 0x07, 0x21, 0x1B, 0x06, 0x01, 0x16,
207             0x04, 0x76, 0x2B, 0x00, 0x00, 0x01, 0x01, 0x50, 0x6A, 0x01, 0x01, 0x10,
208             0x06, 0x02, 0x2C, 0x1D, 0x72, 0x27, 0x00, 0x00, 0x60, 0x05, 0x02, 0x39,
209             0x1D, 0x47, 0x1C, 0x06, 0x04, 0x01, 0x17, 0x04, 0x12, 0x48, 0x1C, 0x06,
210             0x04, 0x01, 0x18, 0x04, 0x0A, 0x49, 0x1C, 0x06, 0x04, 0x01, 0x19, 0x04,
211             0x02, 0x39, 0x1D, 0x00, 0x04, 0x70, 0x1B, 0x01, 0x17, 0x01, 0x18, 0x4B,
212             0x05, 0x02, 0x2F, 0x1D, 0x01, 0x18, 0x11, 0x03, 0x00, 0x4D, 0x6B, 0x66,
213             0x02, 0x00, 0x06, 0x0C, 0x01, 0x80, 0x64, 0x08, 0x03, 0x01, 0x66, 0x02,
214             0x01, 0x09, 0x04, 0x0E, 0x1B, 0x01, 0x32, 0x0D, 0x06, 0x04, 0x01, 0x80,
215             0x64, 0x09, 0x01, 0x8E, 0x6C, 0x09, 0x03, 0x01, 0x02, 0x01, 0x01, 0x82,
216             0x6D, 0x08, 0x02, 0x01, 0x01, 0x03, 0x09, 0x01, 0x04, 0x0C, 0x09, 0x02,
217             0x01, 0x01, 0x80, 0x63, 0x09, 0x01, 0x80, 0x64, 0x0C, 0x0A, 0x02, 0x01,
218             0x01, 0x83, 0x0F, 0x09, 0x01, 0x83, 0x10, 0x0C, 0x09, 0x03, 0x03, 0x01,
219             0x01, 0x01, 0x0C, 0x67, 0x2A, 0x01, 0x01, 0x0E, 0x02, 0x01, 0x01, 0x04,
220             0x07, 0x28, 0x02, 0x01, 0x01, 0x80, 0x64, 0x07, 0x27, 0x02, 0x01, 0x01,
221             0x83, 0x10, 0x07, 0x28, 0x1F, 0x15, 0x06, 0x03, 0x01, 0x18, 0x09, 0x5D,
222             0x09, 0x52, 0x1B, 0x01, 0x05, 0x14, 0x02, 0x03, 0x09, 0x03, 0x03, 0x01,
223             0x1F, 0x15, 0x01, 0x01, 0x26, 0x67, 0x02, 0x03, 0x09, 0x2A, 0x03, 0x03,
224             0x01, 0x00, 0x01, 0x17, 0x67, 0x01, 0x9C, 0x10, 0x08, 0x03, 0x02, 0x01,
225             0x00, 0x01, 0x3B, 0x67, 0x01, 0x3C, 0x08, 0x02, 0x02, 0x09, 0x03, 0x02,
226             0x01, 0x00, 0x01, 0x3C, 0x67, 0x02, 0x02, 0x09, 0x03, 0x02, 0x72, 0x1B,
227             0x01, 0x2E, 0x11, 0x06, 0x0D, 0x1A, 0x72, 0x1B, 0x01, 0x30, 0x01, 0x39,
228             0x4B, 0x06, 0x03, 0x1A, 0x04, 0x74, 0x01, 0x80, 0x5A, 0x10, 0x06, 0x02,
229             0x2F, 0x1D, 0x51, 0x02, 0x03, 0x02, 0x02, 0x00, 0x01, 0x72, 0x53, 0x01,
230             0x0A, 0x08, 0x03, 0x00, 0x72, 0x53, 0x02, 0x00, 0x09, 0x00, 0x02, 0x03,
231             0x00, 0x03, 0x01, 0x66, 0x1B, 0x02, 0x01, 0x02, 0x00, 0x4B, 0x05, 0x02,
232             0x2F, 0x1D, 0x00, 0x00, 0x23, 0x70, 0x01, 0x02, 0x50, 0x0B, 0x69, 0x00,
233             0x03, 0x1B, 0x03, 0x00, 0x03, 0x01, 0x03, 0x02, 0x6B, 0x72, 0x1B, 0x01,
234             0x81, 0x00, 0x13, 0x06, 0x02, 0x36, 0x1D, 0x1B, 0x01, 0x00, 0x11, 0x06,
235             0x0B, 0x1A, 0x1B, 0x05, 0x04, 0x1A, 0x01, 0x00, 0x00, 0x72, 0x04, 0x6F,
236             0x02, 0x01, 0x1B, 0x05, 0x02, 0x33, 0x1D, 0x2A, 0x03, 0x01, 0x02, 0x02,
237             0x25, 0x02, 0x02, 0x29, 0x03, 0x02, 0x1B, 0x06, 0x03, 0x72, 0x04, 0x68,
238             0x1A, 0x02, 0x00, 0x02, 0x01, 0x0A, 0x00, 0x01, 0x72, 0x1B, 0x01, 0x81,
239             0x00, 0x0D, 0x06, 0x01, 0x00, 0x01, 0x81, 0x00, 0x0A, 0x1B, 0x05, 0x02,
240             0x31, 0x1D, 0x03, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x12, 0x06,
241             0x19, 0x02, 0x00, 0x2A, 0x03, 0x00, 0x1B, 0x01, 0x83, 0xFF, 0xFF, 0x7F,
242             0x12, 0x06, 0x02, 0x32, 0x1D, 0x01, 0x08, 0x0E, 0x26, 0x72, 0x23, 0x09,
243             0x04, 0x60, 0x00, 0x00, 0x6A, 0x5E, 0x00, 0x00, 0x6B, 0x7A, 0x00, 0x00,
244             0x70, 0x4E, 0x6B, 0x00, 0x01, 0x6B, 0x1B, 0x05, 0x02, 0x36, 0x1D, 0x72,
245             0x1B, 0x01, 0x81, 0x00, 0x13, 0x06, 0x02, 0x36, 0x1D, 0x03, 0x00, 0x1B,
246             0x06, 0x16, 0x72, 0x02, 0x00, 0x1B, 0x01, 0x87, 0xFF, 0xFF, 0x7F, 0x13,
247             0x06, 0x02, 0x36, 0x1D, 0x01, 0x08, 0x0E, 0x09, 0x03, 0x00, 0x04, 0x67,
248             0x1A, 0x02, 0x00, 0x00, 0x00, 0x6B, 0x1B, 0x01, 0x81, 0x7F, 0x12, 0x06,
249             0x08, 0x7A, 0x01, 0x00, 0x44, 0x25, 0x01, 0x00, 0x00, 0x1B, 0x44, 0x25,
250             0x44, 0x29, 0x62, 0x01, 0x7F, 0x00, 0x01, 0x72, 0x03, 0x00, 0x02, 0x00,
251             0x01, 0x05, 0x14, 0x01, 0x01, 0x15, 0x1E, 0x02, 0x00, 0x01, 0x06, 0x14,
252             0x1B, 0x01, 0x01, 0x15, 0x06, 0x02, 0x2D, 0x1D, 0x01, 0x04, 0x0E, 0x02,
253             0x00, 0x01, 0x1F, 0x15, 0x1B, 0x01, 0x1F, 0x11, 0x06, 0x02, 0x2E, 0x1D,
254             0x09, 0x00, 0x00, 0x1B, 0x05, 0x05, 0x01, 0x00, 0x01, 0x7F, 0x00, 0x70,
255             0x00, 0x00, 0x1B, 0x05, 0x02, 0x32, 0x1D, 0x2A, 0x73, 0x00, 0x00, 0x22,
256             0x1B, 0x01, 0x00, 0x13, 0x06, 0x01, 0x00, 0x1A, 0x16, 0x04, 0x74, 0x00,
257             0x01, 0x01, 0x00, 0x00, 0x01, 0x0B, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00,
258             0x01, 0x1F, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00,
259             0x7B, 0x1A, 0x00, 0x00, 0x1B, 0x06, 0x07, 0x7C, 0x1B, 0x06, 0x01, 0x16,
260             0x04, 0x76, 0x00, 0x00, 0x01, 0x00, 0x20, 0x21, 0x0B, 0x2B, 0x00
261             };
262              
263             static const uint16_t t0_caddr[] = {
264             0,
265             5,
266             10,
267             15,
268             20,
269             24,
270             28,
271             32,
272             36,
273             40,
274             44,
275             48,
276             52,
277             56,
278             60,
279             64,
280             68,
281             72,
282             76,
283             80,
284             84,
285             88,
286             93,
287             98,
288             103,
289             111,
290             116,
291             121,
292             126,
293             131,
294             136,
295             141,
296             146,
297             151,
298             156,
299             161,
300             166,
301             181,
302             187,
303             193,
304             198,
305             206,
306             214,
307             220,
308             231,
309             246,
310             250,
311             255,
312             260,
313             265,
314             270,
315             275,
316             279,
317             289,
318             620,
319             625,
320             639,
321             659,
322             666,
323             678,
324             692,
325             707,
326             740,
327             960,
328             974,
329             991,
330             1000,
331             1067,
332             1123,
333             1127,
334             1131,
335             1136,
336             1184,
337             1210,
338             1254,
339             1265,
340             1274,
341             1287,
342             1291,
343             1295,
344             1299,
345             1303,
346             1307,
347             1311,
348             1315,
349             1327
350             };
351              
352             #define T0_INTERPRETED 39
353              
354             #define T0_ENTER(ip, rp, slot) do { \
355             const unsigned char *t0_newip; \
356             uint32_t t0_lnum; \
357             t0_newip = &t0_codeblock[t0_caddr[(slot) - T0_INTERPRETED]]; \
358             t0_lnum = t0_parse7E_unsigned(&t0_newip); \
359             (rp) += t0_lnum; \
360             *((rp) ++) = (uint32_t)((ip) - &t0_codeblock[0]) + (t0_lnum << 16); \
361             (ip) = t0_newip; \
362             } while (0)
363              
364             #define T0_DEFENTRY(name, slot) \
365             void \
366             name(void *ctx) \
367             { \
368             t0_context *t0ctx = ctx; \
369             t0ctx->ip = &t0_codeblock[0]; \
370             T0_ENTER(t0ctx->ip, t0ctx->rp, slot); \
371             }
372              
373 152           T0_DEFENTRY(br_x509_decoder_init_main, 92)
374              
375             #define T0_NEXT(t0ipp) (*(*(t0ipp)) ++)
376              
377             void
378 304           br_x509_decoder_run(void *t0ctx)
379             {
380             uint32_t *dp, *rp;
381             const unsigned char *ip;
382              
383             #define T0_LOCAL(x) (*(rp - 2 - (x)))
384             #define T0_POP() (*-- dp)
385             #define T0_POPi() (*(int32_t *)(-- dp))
386             #define T0_PEEK(x) (*(dp - 1 - (x)))
387             #define T0_PEEKi(x) (*(int32_t *)(dp - 1 - (x)))
388             #define T0_PUSH(v) do { *dp = (v); dp ++; } while (0)
389             #define T0_PUSHi(v) do { *(int32_t *)dp = (v); dp ++; } while (0)
390             #define T0_RPOP() (*-- rp)
391             #define T0_RPOPi() (*(int32_t *)(-- rp))
392             #define T0_RPUSH(v) do { *rp = (v); rp ++; } while (0)
393             #define T0_RPUSHi(v) do { *(int32_t *)rp = (v); rp ++; } while (0)
394             #define T0_ROLL(x) do { \
395             size_t t0len = (size_t)(x); \
396             uint32_t t0tmp = *(dp - 1 - t0len); \
397             memmove(dp - t0len - 1, dp - t0len, t0len * sizeof *dp); \
398             *(dp - 1) = t0tmp; \
399             } while (0)
400             #define T0_SWAP() do { \
401             uint32_t t0tmp = *(dp - 2); \
402             *(dp - 2) = *(dp - 1); \
403             *(dp - 1) = t0tmp; \
404             } while (0)
405             #define T0_ROT() do { \
406             uint32_t t0tmp = *(dp - 3); \
407             *(dp - 3) = *(dp - 2); \
408             *(dp - 2) = *(dp - 1); \
409             *(dp - 1) = t0tmp; \
410             } while (0)
411             #define T0_NROT() do { \
412             uint32_t t0tmp = *(dp - 1); \
413             *(dp - 1) = *(dp - 2); \
414             *(dp - 2) = *(dp - 3); \
415             *(dp - 3) = t0tmp; \
416             } while (0)
417             #define T0_PICK(x) do { \
418             uint32_t t0depth = (x); \
419             T0_PUSH(T0_PEEK(t0depth)); \
420             } while (0)
421             #define T0_CO() do { \
422             goto t0_exit; \
423             } while (0)
424             #define T0_RET() goto t0_next
425              
426 304           dp = ((t0_context *)t0ctx)->dp;
427 304           rp = ((t0_context *)t0ctx)->rp;
428 304           ip = ((t0_context *)t0ctx)->ip;
429 304           goto t0_next;
430 2399622           for (;;) {
431             uint32_t t0x;
432              
433 2399926           t0_next:
434 2399926           t0x = T0_NEXT(&ip);
435 2399926 100         if (t0x < T0_INTERPRETED) {
436 2044052           switch (t0x) {
437             int32_t t0off;
438              
439 355722           case 0: /* ret */
440 355722           t0x = T0_RPOP();
441 355722           rp -= (t0x >> 16);
442 355722           t0x &= 0xFFFF;
443 355722 50         if (t0x == 0) {
444 0           ip = NULL;
445 0           goto t0_exit;
446             }
447 355722           ip = &t0_codeblock[t0x];
448 355722           break;
449 312766           case 1: /* literal constant */
450 312766           T0_PUSHi(t0_parse7E_signed(&ip));
451 312766           break;
452 181180           case 2: /* read local */
453 181180           T0_PUSH(T0_LOCAL(t0_parse7E_unsigned(&ip)));
454 181180           break;
455 121893           case 3: /* write local */
456 121893           T0_LOCAL(t0_parse7E_unsigned(&ip)) = T0_POP();
457 121893           break;
458 50152           case 4: /* jump */
459 50152           t0off = t0_parse7E_signed(&ip);
460 50152           ip += t0off;
461 50152           break;
462 121721           case 5: /* jump if */
463 121721           t0off = t0_parse7E_signed(&ip);
464 121721 50         if (T0_POP()) {
465 121721           ip += t0off;
466             }
467 121721           break;
468 153876           case 6: /* jump if not */
469 153876           t0off = t0_parse7E_signed(&ip);
470 153876 100         if (!T0_POP()) {
471 36037           ip += t0off;
472             }
473 153876           break;
474 912           case 7: {
475             /* %25 */
476              
477 912           int32_t b = T0_POPi();
478 912           int32_t a = T0_POPi();
479 912           T0_PUSHi(a % b);
480              
481             }
482 912           break;
483 2740           case 8: {
484             /* * */
485              
486 2740           uint32_t b = T0_POP();
487 2740           uint32_t a = T0_POP();
488 2740           T0_PUSH(a * b);
489              
490             }
491 2740           break;
492 59033           case 9: {
493             /* + */
494              
495 59033           uint32_t b = T0_POP();
496 59033           uint32_t a = T0_POP();
497 59033           T0_PUSH(a + b);
498              
499             }
500 59033           break;
501 119713           case 10: {
502             /* - */
503              
504 119713           uint32_t b = T0_POP();
505 119713           uint32_t a = T0_POP();
506 119713           T0_PUSH(a - b);
507              
508             }
509 119713           break;
510 1548           case 11: {
511             /* -rot */
512 1548           T0_NROT();
513             }
514 1548           break;
515 912           case 12: {
516             /* / */
517              
518 912           int32_t b = T0_POPi();
519 912           int32_t a = T0_POPi();
520 912           T0_PUSHi(a / b);
521              
522             }
523 912           break;
524 10991           case 13: {
525             /* < */
526              
527 10991           int32_t b = T0_POPi();
528 10991           int32_t a = T0_POPi();
529 10991           T0_PUSH(-(uint32_t)(a < b));
530              
531             }
532 10991           break;
533 7927           case 14: {
534             /* << */
535              
536 7927           int c = (int)T0_POPi();
537 7927           uint32_t x = T0_POP();
538 7927           T0_PUSH(x << c);
539              
540             }
541 7927           break;
542 5476           case 15: {
543             /* <= */
544              
545 5476           int32_t b = T0_POPi();
546 5476           int32_t a = T0_POPi();
547 5476           T0_PUSH(-(uint32_t)(a <= b));
548              
549             }
550 5476           break;
551 1492           case 16: {
552             /* <> */
553              
554 1492           uint32_t b = T0_POP();
555 1492           uint32_t a = T0_POP();
556 1492           T0_PUSH(-(uint32_t)(a != b));
557              
558             }
559 1492           break;
560 13282           case 17: {
561             /* = */
562              
563 13282           uint32_t b = T0_POP();
564 13282           uint32_t a = T0_POP();
565 13282           T0_PUSH(-(uint32_t)(a == b));
566              
567             }
568 13282           break;
569 5505           case 18: {
570             /* > */
571              
572 5505           int32_t b = T0_POPi();
573 5505           int32_t a = T0_POPi();
574 5505           T0_PUSH(-(uint32_t)(a > b));
575              
576             }
577 5505           break;
578 68565           case 19: {
579             /* >= */
580              
581 68565           int32_t b = T0_POPi();
582 68565           int32_t a = T0_POPi();
583 68565           T0_PUSH(-(uint32_t)(a >= b));
584              
585             }
586 68565           break;
587 11388           case 20: {
588             /* >> */
589              
590 11388           int c = (int)T0_POPi();
591 11388           int32_t x = T0_POPi();
592 11388           T0_PUSHi(x >> c);
593              
594             }
595 11388           break;
596 22860           case 21: {
597             /* and */
598              
599 22860           uint32_t b = T0_POP();
600 22860           uint32_t a = T0_POP();
601 22860           T0_PUSH(a & b);
602              
603             }
604 22860           break;
605 304           case 22: {
606             /* co */
607 304           T0_CO();
608             }
609             break;
610 47           case 23: {
611             /* copy-ec-pkey */
612              
613 47           size_t qlen = T0_POP();
614 47           uint32_t curve = T0_POP();
615 47           CTX->pkey.key_type = BR_KEYTYPE_EC;
616 47           CTX->pkey.key.ec.curve = curve;
617 47           CTX->pkey.key.ec.q = CTX->pkey_data;
618 47           CTX->pkey.key.ec.qlen = qlen;
619              
620             }
621 47           break;
622 105           case 24: {
623             /* copy-rsa-pkey */
624              
625 105           size_t elen = T0_POP();
626 105           size_t nlen = T0_POP();
627 105           CTX->pkey.key_type = BR_KEYTYPE_RSA;
628 105           CTX->pkey.key.rsa.n = CTX->pkey_data;
629 105           CTX->pkey.key.rsa.nlen = nlen;
630 105           CTX->pkey.key.rsa.e = CTX->pkey_data + nlen;
631 105           CTX->pkey.key.rsa.elen = elen;
632              
633             }
634 105           break;
635 608           case 25: {
636             /* data-get8 */
637              
638 608           size_t addr = T0_POP();
639 608           T0_PUSH(t0_datablock[addr]);
640              
641             }
642 608           break;
643 7707           case 26: {
644             /* drop */
645 7707           (void)T0_POP();
646             }
647 7707           break;
648 262972           case 27: {
649             /* dup */
650 262972           T0_PUSH(T0_PEEK(0));
651             }
652 262972           break;
653 1526           case 28: {
654             /* eqOID */
655              
656 1526           const unsigned char *a2 = &t0_datablock[T0_POP()];
657 1526           const unsigned char *a1 = &CTX->pad[0];
658 1526           size_t len = a1[0];
659             int x;
660 1526 100         if (len == a2[0]) {
661 1142           x = -(memcmp(a1 + 1, a2 + 1, len) == 0);
662             } else {
663 384           x = 0;
664             }
665 1526           T0_PUSH((uint32_t)x);
666              
667             }
668 1526           break;
669 0           case 29: {
670             /* fail */
671              
672 0           CTX->err = T0_POPi();
673 0           T0_CO();
674              
675             }
676             break;
677 5542           case 30: {
678             /* neg */
679              
680 5542           uint32_t a = T0_POP();
681 5542           T0_PUSH(-a);
682              
683             }
684 5542           break;
685 304           case 31: {
686             /* or */
687              
688 304           uint32_t b = T0_POP();
689 304           uint32_t a = T0_POP();
690 304           T0_PUSH(a | b);
691              
692             }
693 304           break;
694 11842           case 32: {
695             /* over */
696 11842           T0_PUSH(T0_PEEK(1));
697             }
698 11842           break;
699 2252           case 33: {
700             /* read-blob-inner */
701              
702 2252           uint32_t len = T0_POP();
703 2252           uint32_t addr = T0_POP();
704 2252           size_t clen = CTX->hlen;
705 2252 100         if (clen > len) {
706 2100           clen = (size_t)len;
707             }
708 2252 100         if (addr != 0) {
709 914           memcpy((unsigned char *)CTX + addr, CTX->hbuf, clen);
710             }
711 2252 100         if (CTX->copy_dn && CTX->append_dn) {
    50          
712 152           CTX->append_dn(CTX->append_dn_ctx, CTX->hbuf, clen);
713             }
714 2252           CTX->hbuf += clen;
715 2252           CTX->hlen -= clen;
716 2252           T0_PUSH(addr + clen);
717 2252           T0_PUSH(len - clen);
718              
719             }
720 2252           break;
721 62727           case 34: {
722             /* read8-low */
723              
724 62727 100         if (CTX->hlen == 0) {
725 304           T0_PUSHi(-1);
726             } else {
727 62423           unsigned char x = *CTX->hbuf ++;
728 62423 100         if (CTX->copy_dn && CTX->append_dn) {
    50          
729 328           CTX->append_dn(CTX->append_dn_ctx, &x, 1);
730             }
731 62423           CTX->hlen --;
732 62423           T0_PUSH(x);
733             }
734              
735             }
736 62727           break;
737 2034           case 35: {
738             /* rot */
739 2034           T0_ROT();
740             }
741 2034           break;
742 608           case 36: {
743             /* set32 */
744              
745 608           uint32_t addr = T0_POP();
746 608           *(uint32_t *)(void *)((unsigned char *)CTX + addr) = T0_POP();
747              
748             }
749 608           break;
750 46835           case 37: {
751             /* set8 */
752              
753 46835           uint32_t addr = T0_POP();
754 46835           *((unsigned char *)CTX + addr) = (unsigned char)T0_POP();
755              
756             }
757 46835           break;
758 8985           case 38: {
759             /* swap */
760 8985           T0_SWAP();
761             }
762 8985           break;
763             }
764              
765             } else {
766 355874           T0_ENTER(ip, rp, t0x);
767             }
768             }
769 304           t0_exit:
770 304           ((t0_context *)t0ctx)->dp = dp;
771 304           ((t0_context *)t0ctx)->rp = rp;
772 304           ((t0_context *)t0ctx)->ip = ip;
773 304           }