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 unsigned char 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 *)(void *)((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 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
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
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)
375 #define T0_NEXT(t0ipp) (*(*(t0ipp)) ++)
378 br_x509_decoder_run(void *t0ctx
)
381 const unsigned char *ip
;
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); \
400 #define T0_SWAP() do { \
401 uint32_t t0tmp = *(dp - 2); \
402 *(dp - 2) = *(dp - 1); \
405 #define T0_ROT() do { \
406 uint32_t t0tmp = *(dp - 3); \
407 *(dp - 3) = *(dp - 2); \
408 *(dp - 2) = *(dp - 1); \
411 #define T0_NROT() do { \
412 uint32_t t0tmp = *(dp - 1); \
413 *(dp - 1) = *(dp - 2); \
414 *(dp - 2) = *(dp - 3); \
417 #define T0_PICK(x) do { \
418 uint32_t t0depth = (x); \
419 T0_PUSH(T0_PEEK(t0depth)); \
421 #define T0_CO() do { \
424 #define T0_RET() goto t0_next
426 dp
= ((t0_context
*)t0ctx
)->dp
;
427 rp
= ((t0_context
*)t0ctx
)->rp
;
428 ip
= ((t0_context
*)t0ctx
)->ip
;
435 if (t0x
< T0_INTERPRETED
) {
447 ip
= &t0_codeblock
[t0x
];
449 case 1: /* literal constant */
450 T0_PUSHi(t0_parse7E_signed(&ip
));
452 case 2: /* read local */
453 T0_PUSH(T0_LOCAL(t0_parse7E_unsigned(&ip
)));
455 case 3: /* write local */
456 T0_LOCAL(t0_parse7E_unsigned(&ip
)) = T0_POP();
459 t0off
= t0_parse7E_signed(&ip
);
462 case 5: /* jump if */
463 t0off
= t0_parse7E_signed(&ip
);
468 case 6: /* jump if not */
469 t0off
= t0_parse7E_signed(&ip
);
477 int32_t b
= T0_POPi();
478 int32_t a
= T0_POPi();
486 uint32_t b
= T0_POP();
487 uint32_t a
= T0_POP();
495 uint32_t b
= T0_POP();
496 uint32_t a
= T0_POP();
504 uint32_t b
= T0_POP();
505 uint32_t a
= T0_POP();
518 int32_t b
= T0_POPi();
519 int32_t a
= T0_POPi();
527 int32_t b
= T0_POPi();
528 int32_t a
= T0_POPi();
529 T0_PUSH(-(uint32_t)(a
< b
));
536 int c
= (int)T0_POPi();
537 uint32_t x
= T0_POP();
545 int32_t b
= T0_POPi();
546 int32_t a
= T0_POPi();
547 T0_PUSH(-(uint32_t)(a
<= b
));
554 uint32_t b
= T0_POP();
555 uint32_t a
= T0_POP();
556 T0_PUSH(-(uint32_t)(a
!= b
));
563 uint32_t b
= T0_POP();
564 uint32_t a
= T0_POP();
565 T0_PUSH(-(uint32_t)(a
== b
));
572 int32_t b
= T0_POPi();
573 int32_t a
= T0_POPi();
574 T0_PUSH(-(uint32_t)(a
> b
));
581 int32_t b
= T0_POPi();
582 int32_t a
= T0_POPi();
583 T0_PUSH(-(uint32_t)(a
>= b
));
590 int c
= (int)T0_POPi();
591 int32_t x
= T0_POPi();
599 uint32_t b
= T0_POP();
600 uint32_t a
= T0_POP();
613 size_t qlen
= T0_POP();
614 uint32_t curve
= T0_POP();
615 CTX
->pkey
.key_type
= BR_KEYTYPE_EC
;
616 CTX
->pkey
.key
.ec
.curve
= curve
;
617 CTX
->pkey
.key
.ec
.q
= CTX
->pkey_data
;
618 CTX
->pkey
.key
.ec
.qlen
= qlen
;
625 size_t elen
= T0_POP();
626 size_t nlen
= T0_POP();
627 CTX
->pkey
.key_type
= BR_KEYTYPE_RSA
;
628 CTX
->pkey
.key
.rsa
.n
= CTX
->pkey_data
;
629 CTX
->pkey
.key
.rsa
.nlen
= nlen
;
630 CTX
->pkey
.key
.rsa
.e
= CTX
->pkey_data
+ nlen
;
631 CTX
->pkey
.key
.rsa
.elen
= elen
;
638 size_t addr
= T0_POP();
639 T0_PUSH(t0_datablock
[addr
]);
656 const unsigned char *a2
= &t0_datablock
[T0_POP()];
657 const unsigned char *a1
= &CTX
->pad
[0];
661 x
= -(memcmp(a1
+ 1, a2
+ 1, len
) == 0);
665 T0_PUSH((uint32_t)x
);
672 CTX
->err
= T0_POPi();
680 uint32_t a
= T0_POP();
688 uint32_t b
= T0_POP();
689 uint32_t a
= T0_POP();
700 /* read-blob-inner */
702 uint32_t len
= T0_POP();
703 uint32_t addr
= T0_POP();
704 size_t clen
= CTX
->hlen
;
709 memcpy((unsigned char *)CTX
+ addr
, CTX
->hbuf
, clen
);
711 if (CTX
->copy_dn
&& CTX
->append_dn
) {
712 CTX
->append_dn(CTX
->append_dn_ctx
, CTX
->hbuf
, clen
);
716 T0_PUSH(addr
+ clen
);
724 if (CTX
->hlen
== 0) {
727 unsigned char x
= *CTX
->hbuf
++;
728 if (CTX
->copy_dn
&& CTX
->append_dn
) {
729 CTX
->append_dn(CTX
->append_dn_ctx
, &x
, 1);
745 uint32_t addr
= T0_POP();
746 *(uint32_t *)(void *)((unsigned char *)CTX
+ addr
) = T0_POP();
753 uint32_t addr
= T0_POP();
754 *((unsigned char *)CTX
+ addr
) = (unsigned char)T0_POP();
766 T0_ENTER(ip
, rp
, t0x
);
770 ((t0_context
*)t0ctx
)->dp
= dp
;
771 ((t0_context
*)t0ctx
)->rp
= rp
;
772 ((t0_context
*)t0ctx
)->ip
= ip
;