/ src / x509 / x509_decoder.c
x509_decoder.c
  1  /* Automatically generated code; do not modify directly. */
  2  
  3  #include <stddef.h>
  4  #include <stdint.h>
  5  
  6  typedef struct {
  7  	uint32_t *dp;
  8  	uint32_t *rp;
  9  	const unsigned char *ip;
 10  } t0_context;
 11  
 12  static uint32_t
 13  t0_parse7E_unsigned(const unsigned char **p)
 14  {
 15  	uint32_t x;
 16  
 17  	x = 0;
 18  	for (;;) {
 19  		unsigned y;
 20  
 21  		y = *(*p) ++;
 22  		x = (x << 7) | (uint32_t)(y & 0x7F);
 23  		if (y < 0x80) {
 24  			return x;
 25  		}
 26  	}
 27  }
 28  
 29  static int32_t
 30  t0_parse7E_signed(const unsigned char **p)
 31  {
 32  	int neg;
 33  	uint32_t x;
 34  
 35  	neg = ((**p) >> 6) & 1;
 36  	x = (uint32_t)-neg;
 37  	for (;;) {
 38  		unsigned y;
 39  
 40  		y = *(*p) ++;
 41  		x = (x << 7) | (uint32_t)(y & 0x7F);
 42  		if (y < 0x80) {
 43  			if (neg) {
 44  				return -(int32_t)~x - 1;
 45  			} else {
 46  				return (int32_t)x;
 47  			}
 48  		}
 49  	}
 50  }
 51  
 52  #define T0_VBYTE(x, n)   (unsigned char)((((uint32_t)(x) >> (n)) & 0x7F) | 0x80)
 53  #define T0_FBYTE(x, n)   (unsigned char)(((uint32_t)(x) >> (n)) & 0x7F)
 54  #define T0_SBYTE(x)      (unsigned char)((((uint32_t)(x) >> 28) + 0xF8) ^ 0xF8)
 55  #define T0_INT1(x)       T0_FBYTE(x, 0)
 56  #define T0_INT2(x)       T0_VBYTE(x, 7), T0_FBYTE(x, 0)
 57  #define T0_INT3(x)       T0_VBYTE(x, 14), T0_VBYTE(x, 7), T0_FBYTE(x, 0)
 58  #define T0_INT4(x)       T0_VBYTE(x, 21), T0_VBYTE(x, 14), T0_VBYTE(x, 7), T0_FBYTE(x, 0)
 59  #define T0_INT5(x)       T0_SBYTE(x), T0_VBYTE(x, 21), T0_VBYTE(x, 14), T0_VBYTE(x, 7), T0_FBYTE(x, 0)
 60  
 61  /* static const unsigned char t0_datablock[]; */
 62  
 63  
 64  void br_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  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  	memset(ctx, 0, sizeof *ctx);
 88  	/* obsolete
 89  	ctx->err = 0;
 90  	ctx->hbuf = NULL;
 91  	ctx->hlen = 0;
 92  	*/
 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);
 99  }
100  
101  /* see bearssl_x509.h */
102  void
103  br_x509_decoder_push(br_x509_decoder_context *ctx,
104  	const void *data, size_t len)
105  {
106  	ctx->hbuf = data;
107  	ctx->hlen = len;
108  	br_x509_decoder_run(&ctx->cpu);
109  }
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  T0_DEFENTRY(br_x509_decoder_init_main, 92)
374  
375  #define T0_NEXT(t0ipp)   (*(*(t0ipp)) ++)
376  
377  void
378  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  	dp = ((t0_context *)t0ctx)->dp;
427  	rp = ((t0_context *)t0ctx)->rp;
428  	ip = ((t0_context *)t0ctx)->ip;
429  	goto t0_next;
430  	for (;;) {
431  		uint32_t t0x;
432  
433  	t0_next:
434  		t0x = T0_NEXT(&ip);
435  		if (t0x < T0_INTERPRETED) {
436  			switch (t0x) {
437  				int32_t t0off;
438  
439  			case 0: /* ret */
440  				t0x = T0_RPOP();
441  				rp -= (t0x >> 16);
442  				t0x &= 0xFFFF;
443  				if (t0x == 0) {
444  					ip = NULL;
445  					goto t0_exit;
446  				}
447  				ip = &t0_codeblock[t0x];
448  				break;
449  			case 1: /* literal constant */
450  				T0_PUSHi(t0_parse7E_signed(&ip));
451  				break;
452  			case 2: /* read local */
453  				T0_PUSH(T0_LOCAL(t0_parse7E_unsigned(&ip)));
454  				break;
455  			case 3: /* write local */
456  				T0_LOCAL(t0_parse7E_unsigned(&ip)) = T0_POP();
457  				break;
458  			case 4: /* jump */
459  				t0off = t0_parse7E_signed(&ip);
460  				ip += t0off;
461  				break;
462  			case 5: /* jump if */
463  				t0off = t0_parse7E_signed(&ip);
464  				if (T0_POP()) {
465  					ip += t0off;
466  				}
467  				break;
468  			case 6: /* jump if not */
469  				t0off = t0_parse7E_signed(&ip);
470  				if (!T0_POP()) {
471  					ip += t0off;
472  				}
473  				break;
474  			case 7: {
475  				/* %25 */
476  
477  	int32_t b = T0_POPi();
478  	int32_t a = T0_POPi();
479  	T0_PUSHi(a % b);
480  
481  				}
482  				break;
483  			case 8: {
484  				/* * */
485  
486  	uint32_t b = T0_POP();
487  	uint32_t a = T0_POP();
488  	T0_PUSH(a * b);
489  
490  				}
491  				break;
492  			case 9: {
493  				/* + */
494  
495  	uint32_t b = T0_POP();
496  	uint32_t a = T0_POP();
497  	T0_PUSH(a + b);
498  
499  				}
500  				break;
501  			case 10: {
502  				/* - */
503  
504  	uint32_t b = T0_POP();
505  	uint32_t a = T0_POP();
506  	T0_PUSH(a - b);
507  
508  				}
509  				break;
510  			case 11: {
511  				/* -rot */
512   T0_NROT(); 
513  				}
514  				break;
515  			case 12: {
516  				/* / */
517  
518  	int32_t b = T0_POPi();
519  	int32_t a = T0_POPi();
520  	T0_PUSHi(a / b);
521  
522  				}
523  				break;
524  			case 13: {
525  				/* < */
526  
527  	int32_t b = T0_POPi();
528  	int32_t a = T0_POPi();
529  	T0_PUSH(-(uint32_t)(a < b));
530  
531  				}
532  				break;
533  			case 14: {
534  				/* << */
535  
536  	int c = (int)T0_POPi();
537  	uint32_t x = T0_POP();
538  	T0_PUSH(x << c);
539  
540  				}
541  				break;
542  			case 15: {
543  				/* <= */
544  
545  	int32_t b = T0_POPi();
546  	int32_t a = T0_POPi();
547  	T0_PUSH(-(uint32_t)(a <= b));
548  
549  				}
550  				break;
551  			case 16: {
552  				/* <> */
553  
554  	uint32_t b = T0_POP();
555  	uint32_t a = T0_POP();
556  	T0_PUSH(-(uint32_t)(a != b));
557  
558  				}
559  				break;
560  			case 17: {
561  				/* = */
562  
563  	uint32_t b = T0_POP();
564  	uint32_t a = T0_POP();
565  	T0_PUSH(-(uint32_t)(a == b));
566  
567  				}
568  				break;
569  			case 18: {
570  				/* > */
571  
572  	int32_t b = T0_POPi();
573  	int32_t a = T0_POPi();
574  	T0_PUSH(-(uint32_t)(a > b));
575  
576  				}
577  				break;
578  			case 19: {
579  				/* >= */
580  
581  	int32_t b = T0_POPi();
582  	int32_t a = T0_POPi();
583  	T0_PUSH(-(uint32_t)(a >= b));
584  
585  				}
586  				break;
587  			case 20: {
588  				/* >> */
589  
590  	int c = (int)T0_POPi();
591  	int32_t x = T0_POPi();
592  	T0_PUSHi(x >> c);
593  
594  				}
595  				break;
596  			case 21: {
597  				/* and */
598  
599  	uint32_t b = T0_POP();
600  	uint32_t a = T0_POP();
601  	T0_PUSH(a & b);
602  
603  				}
604  				break;
605  			case 22: {
606  				/* co */
607   T0_CO(); 
608  				}
609  				break;
610  			case 23: {
611  				/* copy-ec-pkey */
612  
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;
619  
620  				}
621  				break;
622  			case 24: {
623  				/* copy-rsa-pkey */
624  
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;
632  
633  				}
634  				break;
635  			case 25: {
636  				/* data-get8 */
637  
638  	size_t addr = T0_POP();
639  	T0_PUSH(t0_datablock[addr]);
640  
641  				}
642  				break;
643  			case 26: {
644  				/* drop */
645   (void)T0_POP(); 
646  				}
647  				break;
648  			case 27: {
649  				/* dup */
650   T0_PUSH(T0_PEEK(0)); 
651  				}
652  				break;
653  			case 28: {
654  				/* eqOID */
655  
656  	const unsigned char *a2 = &t0_datablock[T0_POP()];
657  	const unsigned char *a1 = &CTX->pad[0];
658  	size_t len = a1[0];
659  	int x;
660  	if (len == a2[0]) {
661  		x = -(memcmp(a1 + 1, a2 + 1, len) == 0);
662  	} else {
663  		x = 0;
664  	}
665  	T0_PUSH((uint32_t)x);
666  
667  				}
668  				break;
669  			case 29: {
670  				/* fail */
671  
672  	CTX->err = T0_POPi();
673  	T0_CO();
674  
675  				}
676  				break;
677  			case 30: {
678  				/* neg */
679  
680  	uint32_t a = T0_POP();
681  	T0_PUSH(-a);
682  
683  				}
684  				break;
685  			case 31: {
686  				/* or */
687  
688  	uint32_t b = T0_POP();
689  	uint32_t a = T0_POP();
690  	T0_PUSH(a | b);
691  
692  				}
693  				break;
694  			case 32: {
695  				/* over */
696   T0_PUSH(T0_PEEK(1)); 
697  				}
698  				break;
699  			case 33: {
700  				/* read-blob-inner */
701  
702  	uint32_t len = T0_POP();
703  	uint32_t addr = T0_POP();
704  	size_t clen = CTX->hlen;
705  	if (clen > len) {
706  		clen = (size_t)len;
707  	}
708  	if (addr != 0) {
709  		memcpy((unsigned char *)CTX + addr, CTX->hbuf, clen);
710  	}
711  	if (CTX->copy_dn && CTX->append_dn) {
712  		CTX->append_dn(CTX->append_dn_ctx, CTX->hbuf, clen);
713  	}
714  	CTX->hbuf += clen;
715  	CTX->hlen -= clen;
716  	T0_PUSH(addr + clen);
717  	T0_PUSH(len - clen);
718  
719  				}
720  				break;
721  			case 34: {
722  				/* read8-low */
723  
724  	if (CTX->hlen == 0) {
725  		T0_PUSHi(-1);
726  	} else {
727  		unsigned char x = *CTX->hbuf ++;
728  		if (CTX->copy_dn && CTX->append_dn) {
729  			CTX->append_dn(CTX->append_dn_ctx, &x, 1);
730  		}
731  		CTX->hlen --;
732  		T0_PUSH(x);
733  	}
734  
735  				}
736  				break;
737  			case 35: {
738  				/* rot */
739   T0_ROT(); 
740  				}
741  				break;
742  			case 36: {
743  				/* set32 */
744  
745  	uint32_t addr = T0_POP();
746  	*(uint32_t *)(void *)((unsigned char *)CTX + addr) = T0_POP();
747  
748  				}
749  				break;
750  			case 37: {
751  				/* set8 */
752  
753  	uint32_t addr = T0_POP();
754  	*((unsigned char *)CTX + addr) = (unsigned char)T0_POP();
755  
756  				}
757  				break;
758  			case 38: {
759  				/* swap */
760   T0_SWAP(); 
761  				}
762  				break;
763  			}
764  
765  		} else {
766  			T0_ENTER(ip, rp, t0x);
767  		}
768  	}
769  t0_exit:
770  	((t0_context *)t0ctx)->dp = dp;
771  	((t0_context *)t0ctx)->rp = rp;
772  	((t0_context *)t0ctx)->ip = ip;
773  }