1 /* Automatically generated code; do not modify directly. */
9 const unsigned char *ip
;
13 t0_parse7E_unsigned(const unsigned char **p
)
22 x
= (x
<< 7) | (uint32_t)(y
& 0x7F);
30 t0_parse7E_signed(const unsigned char **p
)
35 neg
= ((**p
) >> 6) & 1;
41 x
= (x
<< 7) | (uint32_t)(y
& 0x7F);
44 return -(int32_t)~x
- 1;
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)
61 static const uint8_t t0_datablock
[];
64 void br_x509_decoder_init_main(void *t0ctx
);
66 void br_x509_decoder_run(void *t0ctx
);
78 #define CTX ((br_x509_decoder_context *)((unsigned char *)t0ctx - offsetof(br_x509_decoder_context, cpu)))
79 #define CONTEXT_NAME br_x509_decoder_context
81 /* see bearssl_x509.h */
83 br_x509_decoder_init(br_x509_decoder_context
*ctx
,
84 void (*append_dn
)(void *ctx
, const void *buf
, size_t len
),
87 memset(ctx
, 0, sizeof *ctx
);
93 ctx
->append_dn
= append_dn
;
94 ctx
->append_dn_ctx
= append_dn_ctx
;
95 ctx
->cpu
.dp
= &ctx
->dp_stack
[0];
96 ctx
->cpu
.rp
= &ctx
->rp_stack
[0];
97 br_x509_decoder_init_main(&ctx
->cpu
);
98 br_x509_decoder_run(&ctx
->cpu
);
101 /* see bearssl_x509.h */
103 br_x509_decoder_push(br_x509_decoder_context
*ctx
,
104 const void *data
, size_t len
)
108 br_x509_decoder_run(&ctx
->cpu
);
113 static const uint8_t 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
132 static const uint8_t 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, 0x87, 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
263 static const uint16_t t0_caddr
[] = {
352 #define T0_INTERPRETED 39
354 #define T0_ENTER(ip, rp, slot) do { \
355 const unsigned char *t0_newip; \
357 t0_newip = &t0_codeblock[t0_caddr[(slot) - T0_INTERPRETED]]; \
358 t0_lnum = t0_parse7E_unsigned(&t0_newip); \
360 *((rp) ++) = (uint32_t)((ip) - &t0_codeblock[0]) + (t0_lnum << 16); \
364 #define T0_DEFENTRY(name, slot) \
368 t0_context *t0ctx = ctx; \
369 t0ctx->ip = &t0_codeblock[0]; \
370 T0_ENTER(t0ctx->ip, t0ctx->rp, slot); \
373 T0_DEFENTRY(br_x509_decoder_init_main
, 92)
376 br_x509_decoder_run(void *t0ctx
)
379 const unsigned char *ip
;
381 #define T0_LOCAL(x) (*(rp - 2 - (x)))
382 #define T0_POP() (*-- dp)
383 #define T0_POPi() (*(int32_t *)(-- dp))
384 #define T0_PEEK(x) (*(dp - 1 - (x)))
385 #define T0_PEEKi(x) (*(int32_t *)(dp - 1 - (x)))
386 #define T0_PUSH(v) do { *dp = (v); dp ++; } while (0)
387 #define T0_PUSHi(v) do { *(int32_t *)dp = (v); dp ++; } while (0)
388 #define T0_RPOP() (*-- rp)
389 #define T0_RPOPi() (*(int32_t *)(-- rp))
390 #define T0_RPUSH(v) do { *rp = (v); rp ++; } while (0)
391 #define T0_RPUSHi(v) do { *(int32_t *)rp = (v); rp ++; } while (0)
392 #define T0_ROLL(x) do { \
393 size_t t0len = (size_t)(x); \
394 uint32_t t0tmp = *(dp - 1 - t0len); \
395 memmove(dp - t0len - 1, dp - t0len, t0len * sizeof *dp); \
398 #define T0_SWAP() do { \
399 uint32_t t0tmp = *(dp - 2); \
400 *(dp - 2) = *(dp - 1); \
403 #define T0_ROT() do { \
404 uint32_t t0tmp = *(dp - 3); \
405 *(dp - 3) = *(dp - 2); \
406 *(dp - 2) = *(dp - 1); \
409 #define T0_NROT() do { \
410 uint32_t t0tmp = *(dp - 1); \
411 *(dp - 1) = *(dp - 2); \
412 *(dp - 2) = *(dp - 3); \
415 #define T0_PICK(x) do { \
416 uint32_t t0depth = (x); \
417 T0_PUSH(T0_PEEK(t0depth)); \
419 #define T0_CO() do { \
422 #define T0_RET() break
424 dp
= ((t0_context
*)t0ctx
)->dp
;
425 rp
= ((t0_context
*)t0ctx
)->rp
;
426 ip
= ((t0_context
*)t0ctx
)->ip
;
430 t0x
= t0_parse7E_unsigned(&ip
);
431 if (t0x
< T0_INTERPRETED
) {
443 ip
= &t0_codeblock
[t0x
];
445 case 1: /* literal constant */
446 T0_PUSHi(t0_parse7E_signed(&ip
));
448 case 2: /* read local */
449 T0_PUSH(T0_LOCAL(t0_parse7E_unsigned(&ip
)));
451 case 3: /* write local */
452 T0_LOCAL(t0_parse7E_unsigned(&ip
)) = T0_POP();
455 t0off
= t0_parse7E_signed(&ip
);
458 case 5: /* jump if */
459 t0off
= t0_parse7E_signed(&ip
);
464 case 6: /* jump if not */
465 t0off
= t0_parse7E_signed(&ip
);
473 int32_t b
= T0_POPi();
474 int32_t a
= T0_POPi();
482 uint32_t b
= T0_POP();
483 uint32_t a
= T0_POP();
491 uint32_t b
= T0_POP();
492 uint32_t a
= T0_POP();
500 uint32_t b
= T0_POP();
501 uint32_t a
= T0_POP();
514 int32_t b
= T0_POPi();
515 int32_t a
= T0_POPi();
523 int32_t b
= T0_POPi();
524 int32_t a
= T0_POPi();
525 T0_PUSH(-(uint32_t)(a
< b
));
532 int c
= (int)T0_POPi();
533 uint32_t x
= T0_POP();
541 int32_t b
= T0_POPi();
542 int32_t a
= T0_POPi();
543 T0_PUSH(-(uint32_t)(a
<= b
));
550 uint32_t b
= T0_POP();
551 uint32_t a
= T0_POP();
552 T0_PUSH(-(uint32_t)(a
!= b
));
559 uint32_t b
= T0_POP();
560 uint32_t a
= T0_POP();
561 T0_PUSH(-(uint32_t)(a
== b
));
568 int32_t b
= T0_POPi();
569 int32_t a
= T0_POPi();
570 T0_PUSH(-(uint32_t)(a
> b
));
577 int32_t b
= T0_POPi();
578 int32_t a
= T0_POPi();
579 T0_PUSH(-(uint32_t)(a
>= b
));
586 int c
= (int)T0_POPi();
587 int32_t x
= T0_POPi();
595 uint32_t b
= T0_POP();
596 uint32_t a
= T0_POP();
609 size_t qlen
= T0_POP();
610 uint32_t curve
= T0_POP();
611 CTX
->pkey
.key_type
= BR_KEYTYPE_EC
;
612 CTX
->pkey
.key
.ec
.curve
= curve
;
613 CTX
->pkey
.key
.ec
.q
= CTX
->pkey_data
;
614 CTX
->pkey
.key
.ec
.qlen
= qlen
;
621 size_t elen
= T0_POP();
622 size_t nlen
= T0_POP();
623 CTX
->pkey
.key_type
= BR_KEYTYPE_RSA
;
624 CTX
->pkey
.key
.rsa
.n
= CTX
->pkey_data
;
625 CTX
->pkey
.key
.rsa
.nlen
= nlen
;
626 CTX
->pkey
.key
.rsa
.e
= CTX
->pkey_data
+ nlen
;
627 CTX
->pkey
.key
.rsa
.elen
= elen
;
634 size_t addr
= T0_POP();
635 T0_PUSH(t0_datablock
[addr
]);
652 const unsigned char *a2
= &t0_datablock
[T0_POP()];
653 const unsigned char *a1
= &CTX
->pad
[0];
657 x
= -(memcmp(a1
+ 1, a2
+ 1, len
) == 0);
661 T0_PUSH((uint32_t)x
);
668 CTX
->err
= T0_POPi();
676 uint32_t a
= T0_POP();
684 uint32_t b
= T0_POP();
685 uint32_t a
= T0_POP();
696 /* read-blob-inner */
698 uint32_t len
= T0_POP();
699 uint32_t addr
= T0_POP();
700 size_t clen
= CTX
->hlen
;
705 memcpy((unsigned char *)CTX
+ addr
, CTX
->hbuf
, clen
);
707 if (CTX
->copy_dn
&& CTX
->append_dn
) {
708 CTX
->append_dn(CTX
->append_dn_ctx
, CTX
->hbuf
, clen
);
712 T0_PUSH(addr
+ clen
);
720 if (CTX
->hlen
== 0) {
723 unsigned char x
= *CTX
->hbuf
++;
724 if (CTX
->copy_dn
&& CTX
->append_dn
) {
725 CTX
->append_dn(CTX
->append_dn_ctx
, &x
, 1);
741 uint32_t addr
= T0_POP();
742 *(uint32_t *)((unsigned char *)CTX
+ addr
) = T0_POP();
749 uint32_t addr
= T0_POP();
750 *((unsigned char *)CTX
+ addr
) = (unsigned char)T0_POP();
762 T0_ENTER(ip
, rp
, t0x
);
766 ((t0_context
*)t0ctx
)->dp
= dp
;
767 ((t0_context
*)t0ctx
)->rp
= rp
;
768 ((t0_context
*)t0ctx
)->ip
= ip
;