Path: blob/main/contrib/bearssl/src/x509/x509_decoder.c
39488 views
/* Automatically generated code; do not modify directly. */12#include <stddef.h>3#include <stdint.h>45typedef struct {6uint32_t *dp;7uint32_t *rp;8const unsigned char *ip;9} t0_context;1011static uint32_t12t0_parse7E_unsigned(const unsigned char **p)13{14uint32_t x;1516x = 0;17for (;;) {18unsigned y;1920y = *(*p) ++;21x = (x << 7) | (uint32_t)(y & 0x7F);22if (y < 0x80) {23return x;24}25}26}2728static int32_t29t0_parse7E_signed(const unsigned char **p)30{31int neg;32uint32_t x;3334neg = ((**p) >> 6) & 1;35x = (uint32_t)-neg;36for (;;) {37unsigned y;3839y = *(*p) ++;40x = (x << 7) | (uint32_t)(y & 0x7F);41if (y < 0x80) {42if (neg) {43return -(int32_t)~x - 1;44} else {45return (int32_t)x;46}47}48}49}5051#define T0_VBYTE(x, n) (unsigned char)((((uint32_t)(x) >> (n)) & 0x7F) | 0x80)52#define T0_FBYTE(x, n) (unsigned char)(((uint32_t)(x) >> (n)) & 0x7F)53#define T0_SBYTE(x) (unsigned char)((((uint32_t)(x) >> 28) + 0xF8) ^ 0xF8)54#define T0_INT1(x) T0_FBYTE(x, 0)55#define T0_INT2(x) T0_VBYTE(x, 7), T0_FBYTE(x, 0)56#define T0_INT3(x) T0_VBYTE(x, 14), T0_VBYTE(x, 7), T0_FBYTE(x, 0)57#define T0_INT4(x) T0_VBYTE(x, 21), T0_VBYTE(x, 14), T0_VBYTE(x, 7), T0_FBYTE(x, 0)58#define T0_INT5(x) T0_SBYTE(x), T0_VBYTE(x, 21), T0_VBYTE(x, 14), T0_VBYTE(x, 7), T0_FBYTE(x, 0)5960/* static const unsigned char t0_datablock[]; */616263void br_x509_decoder_init_main(void *t0ctx);6465void br_x509_decoder_run(void *t0ctx);66676869#include "inner.h"707172737475#include "inner.h"7677#define CTX ((br_x509_decoder_context *)(void *)((unsigned char *)t0ctx - offsetof(br_x509_decoder_context, cpu)))78#define CONTEXT_NAME br_x509_decoder_context7980/* see bearssl_x509.h */81void82br_x509_decoder_init(br_x509_decoder_context *ctx,83void (*append_dn)(void *ctx, const void *buf, size_t len),84void *append_dn_ctx)85{86memset(ctx, 0, sizeof *ctx);87/* obsolete88ctx->err = 0;89ctx->hbuf = NULL;90ctx->hlen = 0;91*/92ctx->append_dn = append_dn;93ctx->append_dn_ctx = append_dn_ctx;94ctx->cpu.dp = &ctx->dp_stack[0];95ctx->cpu.rp = &ctx->rp_stack[0];96br_x509_decoder_init_main(&ctx->cpu);97br_x509_decoder_run(&ctx->cpu);98}99100/* see bearssl_x509.h */101void102br_x509_decoder_push(br_x509_decoder_context *ctx,103const void *data, size_t len)104{105ctx->hbuf = data;106ctx->hlen = len;107br_x509_decoder_run(&ctx->cpu);108}109110111112static const unsigned char t0_datablock[] = {1130x00, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x09,1140x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x09, 0x2A, 0x86,1150x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0E, 0x09, 0x2A, 0x86, 0x48, 0x86,1160xF7, 0x0D, 0x01, 0x01, 0x0B, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,1170x01, 0x01, 0x0C, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01,1180x0D, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x08, 0x2A, 0x86,1190x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22,1200x05, 0x2B, 0x81, 0x04, 0x00, 0x23, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D,1210x04, 0x01, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x01, 0x08,1220x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02, 0x08, 0x2A, 0x86, 0x48,1230xCE, 0x3D, 0x04, 0x03, 0x03, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04,1240x03, 0x04, 0x00, 0x1F, 0x03, 0xFC, 0x07, 0x7F, 0x0B, 0x5E, 0x0F, 0x1F,1250x12, 0xFE, 0x16, 0xBF, 0x1A, 0x9F, 0x1E, 0x7E, 0x22, 0x3F, 0x26, 0x1E,1260x29, 0xDF, 0x00, 0x1F, 0x03, 0xFD, 0x07, 0x9F, 0x0B, 0x7E, 0x0F, 0x3F,1270x13, 0x1E, 0x16, 0xDF, 0x1A, 0xBF, 0x1E, 0x9E, 0x22, 0x5F, 0x26, 0x3E,1280x29, 0xFF, 0x03, 0x55, 0x1D, 0x13129};130131static const unsigned char t0_codeblock[] = {1320x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x11, 0x00, 0x00, 0x01,1330x01, 0x09, 0x00, 0x00, 0x01, 0x01, 0x0A, 0x00, 0x00, 0x1A, 0x1A, 0x00,1340x00, 0x01, T0_INT1(BR_ERR_X509_BAD_BOOLEAN), 0x00, 0x00, 0x01,135T0_INT1(BR_ERR_X509_BAD_TAG_CLASS), 0x00, 0x00, 0x01,136T0_INT1(BR_ERR_X509_BAD_TAG_VALUE), 0x00, 0x00, 0x01,137T0_INT1(BR_ERR_X509_BAD_TIME), 0x00, 0x00, 0x01,138T0_INT1(BR_ERR_X509_EXTRA_ELEMENT), 0x00, 0x00, 0x01,139T0_INT1(BR_ERR_X509_INDEFINITE_LENGTH), 0x00, 0x00, 0x01,140T0_INT1(BR_ERR_X509_INNER_TRUNC), 0x00, 0x00, 0x01,141T0_INT1(BR_ERR_X509_LIMIT_EXCEEDED), 0x00, 0x00, 0x01,142T0_INT1(BR_ERR_X509_NOT_CONSTRUCTED), 0x00, 0x00, 0x01,143T0_INT1(BR_ERR_X509_NOT_PRIMITIVE), 0x00, 0x00, 0x01,144T0_INT1(BR_ERR_X509_OVERFLOW), 0x00, 0x00, 0x01,145T0_INT1(BR_ERR_X509_PARTIAL_BYTE), 0x00, 0x00, 0x01,146T0_INT1(BR_ERR_X509_UNEXPECTED), 0x00, 0x00, 0x01,147T0_INT1(BR_ERR_X509_UNSUPPORTED), 0x00, 0x00, 0x01,148T0_INT1(BR_KEYTYPE_EC), 0x00, 0x00, 0x01, T0_INT1(BR_KEYTYPE_RSA),1490x00, 0x00, 0x01, T0_INT2(offsetof(CONTEXT_NAME, copy_dn)), 0x00, 0x00,1500x01, T0_INT2(offsetof(CONTEXT_NAME, decoded)), 0x00, 0x00, 0x01,151T0_INT2(offsetof(CONTEXT_NAME, isCA)), 0x00, 0x00, 0x01,152T0_INT2(offsetof(br_x509_decoder_context, pkey_data)), 0x01,153T0_INT2(BR_X509_BUFSIZE_KEY), 0x00, 0x00, 0x01,154T0_INT2(offsetof(CONTEXT_NAME, notafter_days)), 0x00, 0x00, 0x01,155T0_INT2(offsetof(CONTEXT_NAME, notafter_seconds)), 0x00, 0x00, 0x01,156T0_INT2(offsetof(CONTEXT_NAME, notbefore_days)), 0x00, 0x00, 0x01,157T0_INT2(offsetof(CONTEXT_NAME, notbefore_seconds)), 0x00, 0x00, 0x01,158T0_INT2(offsetof(CONTEXT_NAME, pad)), 0x00, 0x00, 0x01,159T0_INT2(offsetof(CONTEXT_NAME, signer_hash_id)), 0x00, 0x00, 0x01,160T0_INT2(offsetof(CONTEXT_NAME, signer_key_type)), 0x00, 0x00, 0x01,1610x80, 0x45, 0x00, 0x00, 0x01, 0x80, 0x4E, 0x00, 0x00, 0x01, 0x80, 0x54,1620x00, 0x00, 0x01, 0x81, 0x36, 0x00, 0x02, 0x03, 0x00, 0x03, 0x01, 0x1B,1630x02, 0x01, 0x13, 0x26, 0x02, 0x00, 0x0F, 0x15, 0x00, 0x00, 0x05, 0x02,1640x34, 0x1D, 0x00, 0x00, 0x06, 0x02, 0x35, 0x1D, 0x00, 0x00, 0x01, 0x10,1650x4F, 0x00, 0x00, 0x11, 0x05, 0x02, 0x38, 0x1D, 0x4C, 0x00, 0x00, 0x11,1660x05, 0x02, 0x38, 0x1D, 0x4D, 0x00, 0x00, 0x06, 0x02, 0x30, 0x1D, 0x00,1670x00, 0x1B, 0x19, 0x01, 0x08, 0x0E, 0x26, 0x29, 0x19, 0x09, 0x00, 0x00,1680x01, 0x30, 0x0A, 0x1B, 0x01, 0x00, 0x01, 0x09, 0x4B, 0x05, 0x02, 0x2F,1690x1D, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x01, 0x80, 0x5A, 0x00, 0x00,1700x01, 0x80, 0x62, 0x00, 0x00, 0x01, 0x80, 0x6B, 0x00, 0x00, 0x01, 0x80,1710x74, 0x00, 0x00, 0x01, 0x80, 0x7D, 0x00, 0x00, 0x01, 0x3D, 0x00, 0x00,1720x20, 0x11, 0x06, 0x04, 0x2B, 0x6B, 0x7A, 0x71, 0x00, 0x04, 0x01, 0x00,1730x3D, 0x25, 0x01, 0x00, 0x3C, 0x25, 0x01, 0x87, 0xFF, 0xFF, 0x7F, 0x6D,1740x6D, 0x70, 0x1B, 0x01, 0x20, 0x11, 0x06, 0x11, 0x1A, 0x4C, 0x6B, 0x70,1750x01, 0x02, 0x50, 0x6E, 0x01, 0x02, 0x12, 0x06, 0x02, 0x39, 0x1D, 0x51,1760x70, 0x01, 0x02, 0x50, 0x6C, 0x6D, 0x7A, 0x6D, 0x7A, 0x6D, 0x65, 0x43,1770x24, 0x42, 0x24, 0x65, 0x41, 0x24, 0x40, 0x24, 0x51, 0x01, 0x01, 0x3C,1780x25, 0x6D, 0x7A, 0x01, 0x00, 0x3C, 0x25, 0x6D, 0x6D, 0x60, 0x05, 0x02,1790x39, 0x1D, 0x74, 0x1C, 0x06, 0x1C, 0x7A, 0x61, 0x6D, 0x3F, 0x68, 0x03,1800x00, 0x3F, 0x26, 0x02, 0x00, 0x09, 0x26, 0x02, 0x00, 0x0A, 0x68, 0x03,1810x01, 0x51, 0x51, 0x02, 0x00, 0x02, 0x01, 0x18, 0x04, 0x1E, 0x5A, 0x1C,1820x06, 0x18, 0x64, 0x03, 0x02, 0x51, 0x61, 0x1B, 0x03, 0x03, 0x1B, 0x3F,1830x23, 0x0D, 0x06, 0x02, 0x33, 0x1D, 0x62, 0x02, 0x02, 0x02, 0x03, 0x17,1840x04, 0x02, 0x39, 0x1D, 0x51, 0x01, 0x00, 0x3E, 0x25, 0x71, 0x01, 0x21,1850x5B, 0x01, 0x22, 0x5B, 0x1B, 0x01, 0x23, 0x11, 0x06, 0x28, 0x1A, 0x4C,1860x6B, 0x6D, 0x1B, 0x06, 0x1D, 0x6D, 0x60, 0x1A, 0x70, 0x1B, 0x01, 0x01,1870x11, 0x06, 0x03, 0x63, 0x1A, 0x70, 0x01, 0x04, 0x50, 0x6B, 0x4A, 0x1C,1880x06, 0x03, 0x5F, 0x04, 0x01, 0x7B, 0x51, 0x51, 0x04, 0x60, 0x51, 0x51,1890x04, 0x08, 0x01, 0x7F, 0x11, 0x05, 0x02, 0x38, 0x1D, 0x1A, 0x51, 0x6D,1900x60, 0x06, 0x80, 0x63, 0x75, 0x1C, 0x06, 0x06, 0x01, 0x02, 0x3B, 0x04,1910x80, 0x57, 0x76, 0x1C, 0x06, 0x06, 0x01, 0x03, 0x3B, 0x04, 0x80, 0x4D,1920x77, 0x1C, 0x06, 0x06, 0x01, 0x04, 0x3B, 0x04, 0x80, 0x43, 0x78, 0x1C,1930x06, 0x05, 0x01, 0x05, 0x3B, 0x04, 0x3A, 0x79, 0x1C, 0x06, 0x05, 0x01,1940x06, 0x3B, 0x04, 0x31, 0x55, 0x1C, 0x06, 0x05, 0x01, 0x02, 0x3A, 0x04,1950x28, 0x56, 0x1C, 0x06, 0x05, 0x01, 0x03, 0x3A, 0x04, 0x1F, 0x57, 0x1C,1960x06, 0x05, 0x01, 0x04, 0x3A, 0x04, 0x16, 0x58, 0x1C, 0x06, 0x05, 0x01,1970x05, 0x3A, 0x04, 0x0D, 0x59, 0x1C, 0x06, 0x05, 0x01, 0x06, 0x3A, 0x04,1980x04, 0x01, 0x00, 0x01, 0x00, 0x04, 0x04, 0x01, 0x00, 0x01, 0x00, 0x46,1990x25, 0x45, 0x25, 0x7A, 0x61, 0x7A, 0x51, 0x1A, 0x01, 0x01, 0x3D, 0x25,2000x73, 0x30, 0x1D, 0x00, 0x00, 0x01, 0x81, 0x06, 0x00, 0x01, 0x54, 0x0D,2010x06, 0x02, 0x32, 0x1D, 0x1B, 0x03, 0x00, 0x0A, 0x02, 0x00, 0x00, 0x00,2020x6D, 0x71, 0x1B, 0x01, 0x01, 0x11, 0x06, 0x08, 0x63, 0x01, 0x01, 0x15,2030x3E, 0x25, 0x04, 0x01, 0x2B, 0x7A, 0x00, 0x00, 0x70, 0x01, 0x06, 0x50,2040x6F, 0x00, 0x00, 0x70, 0x01, 0x03, 0x50, 0x6B, 0x72, 0x06, 0x02, 0x37,2050x1D, 0x00, 0x00, 0x26, 0x1B, 0x06, 0x07, 0x21, 0x1B, 0x06, 0x01, 0x16,2060x04, 0x76, 0x2B, 0x00, 0x00, 0x01, 0x01, 0x50, 0x6A, 0x01, 0x01, 0x10,2070x06, 0x02, 0x2C, 0x1D, 0x72, 0x27, 0x00, 0x00, 0x60, 0x05, 0x02, 0x39,2080x1D, 0x47, 0x1C, 0x06, 0x04, 0x01, 0x17, 0x04, 0x12, 0x48, 0x1C, 0x06,2090x04, 0x01, 0x18, 0x04, 0x0A, 0x49, 0x1C, 0x06, 0x04, 0x01, 0x19, 0x04,2100x02, 0x39, 0x1D, 0x00, 0x04, 0x70, 0x1B, 0x01, 0x17, 0x01, 0x18, 0x4B,2110x05, 0x02, 0x2F, 0x1D, 0x01, 0x18, 0x11, 0x03, 0x00, 0x4D, 0x6B, 0x66,2120x02, 0x00, 0x06, 0x0C, 0x01, 0x80, 0x64, 0x08, 0x03, 0x01, 0x66, 0x02,2130x01, 0x09, 0x04, 0x0E, 0x1B, 0x01, 0x32, 0x0D, 0x06, 0x04, 0x01, 0x80,2140x64, 0x09, 0x01, 0x8E, 0x6C, 0x09, 0x03, 0x01, 0x02, 0x01, 0x01, 0x82,2150x6D, 0x08, 0x02, 0x01, 0x01, 0x03, 0x09, 0x01, 0x04, 0x0C, 0x09, 0x02,2160x01, 0x01, 0x80, 0x63, 0x09, 0x01, 0x80, 0x64, 0x0C, 0x0A, 0x02, 0x01,2170x01, 0x83, 0x0F, 0x09, 0x01, 0x83, 0x10, 0x0C, 0x09, 0x03, 0x03, 0x01,2180x01, 0x01, 0x0C, 0x67, 0x2A, 0x01, 0x01, 0x0E, 0x02, 0x01, 0x01, 0x04,2190x07, 0x28, 0x02, 0x01, 0x01, 0x80, 0x64, 0x07, 0x27, 0x02, 0x01, 0x01,2200x83, 0x10, 0x07, 0x28, 0x1F, 0x15, 0x06, 0x03, 0x01, 0x18, 0x09, 0x5D,2210x09, 0x52, 0x1B, 0x01, 0x05, 0x14, 0x02, 0x03, 0x09, 0x03, 0x03, 0x01,2220x1F, 0x15, 0x01, 0x01, 0x26, 0x67, 0x02, 0x03, 0x09, 0x2A, 0x03, 0x03,2230x01, 0x00, 0x01, 0x17, 0x67, 0x01, 0x9C, 0x10, 0x08, 0x03, 0x02, 0x01,2240x00, 0x01, 0x3B, 0x67, 0x01, 0x3C, 0x08, 0x02, 0x02, 0x09, 0x03, 0x02,2250x01, 0x00, 0x01, 0x3C, 0x67, 0x02, 0x02, 0x09, 0x03, 0x02, 0x72, 0x1B,2260x01, 0x2E, 0x11, 0x06, 0x0D, 0x1A, 0x72, 0x1B, 0x01, 0x30, 0x01, 0x39,2270x4B, 0x06, 0x03, 0x1A, 0x04, 0x74, 0x01, 0x80, 0x5A, 0x10, 0x06, 0x02,2280x2F, 0x1D, 0x51, 0x02, 0x03, 0x02, 0x02, 0x00, 0x01, 0x72, 0x53, 0x01,2290x0A, 0x08, 0x03, 0x00, 0x72, 0x53, 0x02, 0x00, 0x09, 0x00, 0x02, 0x03,2300x00, 0x03, 0x01, 0x66, 0x1B, 0x02, 0x01, 0x02, 0x00, 0x4B, 0x05, 0x02,2310x2F, 0x1D, 0x00, 0x00, 0x23, 0x70, 0x01, 0x02, 0x50, 0x0B, 0x69, 0x00,2320x03, 0x1B, 0x03, 0x00, 0x03, 0x01, 0x03, 0x02, 0x6B, 0x72, 0x1B, 0x01,2330x81, 0x00, 0x13, 0x06, 0x02, 0x36, 0x1D, 0x1B, 0x01, 0x00, 0x11, 0x06,2340x0B, 0x1A, 0x1B, 0x05, 0x04, 0x1A, 0x01, 0x00, 0x00, 0x72, 0x04, 0x6F,2350x02, 0x01, 0x1B, 0x05, 0x02, 0x33, 0x1D, 0x2A, 0x03, 0x01, 0x02, 0x02,2360x25, 0x02, 0x02, 0x29, 0x03, 0x02, 0x1B, 0x06, 0x03, 0x72, 0x04, 0x68,2370x1A, 0x02, 0x00, 0x02, 0x01, 0x0A, 0x00, 0x01, 0x72, 0x1B, 0x01, 0x81,2380x00, 0x0D, 0x06, 0x01, 0x00, 0x01, 0x81, 0x00, 0x0A, 0x1B, 0x05, 0x02,2390x31, 0x1D, 0x03, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x12, 0x06,2400x19, 0x02, 0x00, 0x2A, 0x03, 0x00, 0x1B, 0x01, 0x83, 0xFF, 0xFF, 0x7F,2410x12, 0x06, 0x02, 0x32, 0x1D, 0x01, 0x08, 0x0E, 0x26, 0x72, 0x23, 0x09,2420x04, 0x60, 0x00, 0x00, 0x6A, 0x5E, 0x00, 0x00, 0x6B, 0x7A, 0x00, 0x00,2430x70, 0x4E, 0x6B, 0x00, 0x01, 0x6B, 0x1B, 0x05, 0x02, 0x36, 0x1D, 0x72,2440x1B, 0x01, 0x81, 0x00, 0x13, 0x06, 0x02, 0x36, 0x1D, 0x03, 0x00, 0x1B,2450x06, 0x16, 0x72, 0x02, 0x00, 0x1B, 0x01, 0x87, 0xFF, 0xFF, 0x7F, 0x13,2460x06, 0x02, 0x36, 0x1D, 0x01, 0x08, 0x0E, 0x09, 0x03, 0x00, 0x04, 0x67,2470x1A, 0x02, 0x00, 0x00, 0x00, 0x6B, 0x1B, 0x01, 0x81, 0x7F, 0x12, 0x06,2480x08, 0x7A, 0x01, 0x00, 0x44, 0x25, 0x01, 0x00, 0x00, 0x1B, 0x44, 0x25,2490x44, 0x29, 0x62, 0x01, 0x7F, 0x00, 0x01, 0x72, 0x03, 0x00, 0x02, 0x00,2500x01, 0x05, 0x14, 0x01, 0x01, 0x15, 0x1E, 0x02, 0x00, 0x01, 0x06, 0x14,2510x1B, 0x01, 0x01, 0x15, 0x06, 0x02, 0x2D, 0x1D, 0x01, 0x04, 0x0E, 0x02,2520x00, 0x01, 0x1F, 0x15, 0x1B, 0x01, 0x1F, 0x11, 0x06, 0x02, 0x2E, 0x1D,2530x09, 0x00, 0x00, 0x1B, 0x05, 0x05, 0x01, 0x00, 0x01, 0x7F, 0x00, 0x70,2540x00, 0x00, 0x1B, 0x05, 0x02, 0x32, 0x1D, 0x2A, 0x73, 0x00, 0x00, 0x22,2550x1B, 0x01, 0x00, 0x13, 0x06, 0x01, 0x00, 0x1A, 0x16, 0x04, 0x74, 0x00,2560x01, 0x01, 0x00, 0x00, 0x01, 0x0B, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00,2570x01, 0x1F, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00,2580x7B, 0x1A, 0x00, 0x00, 0x1B, 0x06, 0x07, 0x7C, 0x1B, 0x06, 0x01, 0x16,2590x04, 0x76, 0x00, 0x00, 0x01, 0x00, 0x20, 0x21, 0x0B, 0x2B, 0x00260};261262static const uint16_t t0_caddr[] = {2630,2645,26510,26615,26720,26824,26928,27032,27136,27240,27344,27448,27552,27656,27760,27864,27968,28072,28176,28280,28384,28488,28593,28698,287103,288111,289116,290121,291126,292131,293136,294141,295146,296151,297156,298161,299166,300181,301187,302193,303198,304206,305214,306220,307231,308246,309250,310255,311260,312265,313270,314275,315279,316289,317620,318625,319639,320659,321666,322678,323692,324707,325740,326960,327974,328991,3291000,3301067,3311123,3321127,3331131,3341136,3351184,3361210,3371254,3381265,3391274,3401287,3411291,3421295,3431299,3441303,3451307,3461311,3471315,3481327349};350351#define T0_INTERPRETED 39352353#define T0_ENTER(ip, rp, slot) do { \354const unsigned char *t0_newip; \355uint32_t t0_lnum; \356t0_newip = &t0_codeblock[t0_caddr[(slot) - T0_INTERPRETED]]; \357t0_lnum = t0_parse7E_unsigned(&t0_newip); \358(rp) += t0_lnum; \359*((rp) ++) = (uint32_t)((ip) - &t0_codeblock[0]) + (t0_lnum << 16); \360(ip) = t0_newip; \361} while (0)362363#define T0_DEFENTRY(name, slot) \364void \365name(void *ctx) \366{ \367t0_context *t0ctx = ctx; \368t0ctx->ip = &t0_codeblock[0]; \369T0_ENTER(t0ctx->ip, t0ctx->rp, slot); \370}371372T0_DEFENTRY(br_x509_decoder_init_main, 92)373374#define T0_NEXT(t0ipp) (*(*(t0ipp)) ++)375376void377br_x509_decoder_run(void *t0ctx)378{379uint32_t *dp, *rp;380const unsigned char *ip;381382#define T0_LOCAL(x) (*(rp - 2 - (x)))383#define T0_POP() (*-- dp)384#define T0_POPi() (*(int32_t *)(-- dp))385#define T0_PEEK(x) (*(dp - 1 - (x)))386#define T0_PEEKi(x) (*(int32_t *)(dp - 1 - (x)))387#define T0_PUSH(v) do { *dp = (v); dp ++; } while (0)388#define T0_PUSHi(v) do { *(int32_t *)dp = (v); dp ++; } while (0)389#define T0_RPOP() (*-- rp)390#define T0_RPOPi() (*(int32_t *)(-- rp))391#define T0_RPUSH(v) do { *rp = (v); rp ++; } while (0)392#define T0_RPUSHi(v) do { *(int32_t *)rp = (v); rp ++; } while (0)393#define T0_ROLL(x) do { \394size_t t0len = (size_t)(x); \395uint32_t t0tmp = *(dp - 1 - t0len); \396memmove(dp - t0len - 1, dp - t0len, t0len * sizeof *dp); \397*(dp - 1) = t0tmp; \398} while (0)399#define T0_SWAP() do { \400uint32_t t0tmp = *(dp - 2); \401*(dp - 2) = *(dp - 1); \402*(dp - 1) = t0tmp; \403} while (0)404#define T0_ROT() do { \405uint32_t t0tmp = *(dp - 3); \406*(dp - 3) = *(dp - 2); \407*(dp - 2) = *(dp - 1); \408*(dp - 1) = t0tmp; \409} while (0)410#define T0_NROT() do { \411uint32_t t0tmp = *(dp - 1); \412*(dp - 1) = *(dp - 2); \413*(dp - 2) = *(dp - 3); \414*(dp - 3) = t0tmp; \415} while (0)416#define T0_PICK(x) do { \417uint32_t t0depth = (x); \418T0_PUSH(T0_PEEK(t0depth)); \419} while (0)420#define T0_CO() do { \421goto t0_exit; \422} while (0)423#define T0_RET() goto t0_next424425dp = ((t0_context *)t0ctx)->dp;426rp = ((t0_context *)t0ctx)->rp;427ip = ((t0_context *)t0ctx)->ip;428goto t0_next;429for (;;) {430uint32_t t0x;431432t0_next:433t0x = T0_NEXT(&ip);434if (t0x < T0_INTERPRETED) {435switch (t0x) {436int32_t t0off;437438case 0: /* ret */439t0x = T0_RPOP();440rp -= (t0x >> 16);441t0x &= 0xFFFF;442if (t0x == 0) {443ip = NULL;444goto t0_exit;445}446ip = &t0_codeblock[t0x];447break;448case 1: /* literal constant */449T0_PUSHi(t0_parse7E_signed(&ip));450break;451case 2: /* read local */452T0_PUSH(T0_LOCAL(t0_parse7E_unsigned(&ip)));453break;454case 3: /* write local */455T0_LOCAL(t0_parse7E_unsigned(&ip)) = T0_POP();456break;457case 4: /* jump */458t0off = t0_parse7E_signed(&ip);459ip += t0off;460break;461case 5: /* jump if */462t0off = t0_parse7E_signed(&ip);463if (T0_POP()) {464ip += t0off;465}466break;467case 6: /* jump if not */468t0off = t0_parse7E_signed(&ip);469if (!T0_POP()) {470ip += t0off;471}472break;473case 7: {474/* %25 */475476int32_t b = T0_POPi();477int32_t a = T0_POPi();478T0_PUSHi(a % b);479480}481break;482case 8: {483/* * */484485uint32_t b = T0_POP();486uint32_t a = T0_POP();487T0_PUSH(a * b);488489}490break;491case 9: {492/* + */493494uint32_t b = T0_POP();495uint32_t a = T0_POP();496T0_PUSH(a + b);497498}499break;500case 10: {501/* - */502503uint32_t b = T0_POP();504uint32_t a = T0_POP();505T0_PUSH(a - b);506507}508break;509case 11: {510/* -rot */511T0_NROT();512}513break;514case 12: {515/* / */516517int32_t b = T0_POPi();518int32_t a = T0_POPi();519T0_PUSHi(a / b);520521}522break;523case 13: {524/* < */525526int32_t b = T0_POPi();527int32_t a = T0_POPi();528T0_PUSH(-(uint32_t)(a < b));529530}531break;532case 14: {533/* << */534535int c = (int)T0_POPi();536uint32_t x = T0_POP();537T0_PUSH(x << c);538539}540break;541case 15: {542/* <= */543544int32_t b = T0_POPi();545int32_t a = T0_POPi();546T0_PUSH(-(uint32_t)(a <= b));547548}549break;550case 16: {551/* <> */552553uint32_t b = T0_POP();554uint32_t a = T0_POP();555T0_PUSH(-(uint32_t)(a != b));556557}558break;559case 17: {560/* = */561562uint32_t b = T0_POP();563uint32_t a = T0_POP();564T0_PUSH(-(uint32_t)(a == b));565566}567break;568case 18: {569/* > */570571int32_t b = T0_POPi();572int32_t a = T0_POPi();573T0_PUSH(-(uint32_t)(a > b));574575}576break;577case 19: {578/* >= */579580int32_t b = T0_POPi();581int32_t a = T0_POPi();582T0_PUSH(-(uint32_t)(a >= b));583584}585break;586case 20: {587/* >> */588589int c = (int)T0_POPi();590int32_t x = T0_POPi();591T0_PUSHi(x >> c);592593}594break;595case 21: {596/* and */597598uint32_t b = T0_POP();599uint32_t a = T0_POP();600T0_PUSH(a & b);601602}603break;604case 22: {605/* co */606T0_CO();607}608break;609case 23: {610/* copy-ec-pkey */611612size_t qlen = T0_POP();613uint32_t curve = T0_POP();614CTX->pkey.key_type = BR_KEYTYPE_EC;615CTX->pkey.key.ec.curve = curve;616CTX->pkey.key.ec.q = CTX->pkey_data;617CTX->pkey.key.ec.qlen = qlen;618619}620break;621case 24: {622/* copy-rsa-pkey */623624size_t elen = T0_POP();625size_t nlen = T0_POP();626CTX->pkey.key_type = BR_KEYTYPE_RSA;627CTX->pkey.key.rsa.n = CTX->pkey_data;628CTX->pkey.key.rsa.nlen = nlen;629CTX->pkey.key.rsa.e = CTX->pkey_data + nlen;630CTX->pkey.key.rsa.elen = elen;631632}633break;634case 25: {635/* data-get8 */636637size_t addr = T0_POP();638T0_PUSH(t0_datablock[addr]);639640}641break;642case 26: {643/* drop */644(void)T0_POP();645}646break;647case 27: {648/* dup */649T0_PUSH(T0_PEEK(0));650}651break;652case 28: {653/* eqOID */654655const unsigned char *a2 = &t0_datablock[T0_POP()];656const unsigned char *a1 = &CTX->pad[0];657size_t len = a1[0];658int x;659if (len == a2[0]) {660x = -(memcmp(a1 + 1, a2 + 1, len) == 0);661} else {662x = 0;663}664T0_PUSH((uint32_t)x);665666}667break;668case 29: {669/* fail */670671CTX->err = T0_POPi();672T0_CO();673674}675break;676case 30: {677/* neg */678679uint32_t a = T0_POP();680T0_PUSH(-a);681682}683break;684case 31: {685/* or */686687uint32_t b = T0_POP();688uint32_t a = T0_POP();689T0_PUSH(a | b);690691}692break;693case 32: {694/* over */695T0_PUSH(T0_PEEK(1));696}697break;698case 33: {699/* read-blob-inner */700701uint32_t len = T0_POP();702uint32_t addr = T0_POP();703size_t clen = CTX->hlen;704if (clen > len) {705clen = (size_t)len;706}707if (addr != 0) {708memcpy((unsigned char *)CTX + addr, CTX->hbuf, clen);709}710if (CTX->copy_dn && CTX->append_dn) {711CTX->append_dn(CTX->append_dn_ctx, CTX->hbuf, clen);712}713CTX->hbuf += clen;714CTX->hlen -= clen;715T0_PUSH(addr + clen);716T0_PUSH(len - clen);717718}719break;720case 34: {721/* read8-low */722723if (CTX->hlen == 0) {724T0_PUSHi(-1);725} else {726unsigned char x = *CTX->hbuf ++;727if (CTX->copy_dn && CTX->append_dn) {728CTX->append_dn(CTX->append_dn_ctx, &x, 1);729}730CTX->hlen --;731T0_PUSH(x);732}733734}735break;736case 35: {737/* rot */738T0_ROT();739}740break;741case 36: {742/* set32 */743744uint32_t addr = T0_POP();745*(uint32_t *)(void *)((unsigned char *)CTX + addr) = T0_POP();746747}748break;749case 37: {750/* set8 */751752uint32_t addr = T0_POP();753*((unsigned char *)CTX + addr) = (unsigned char)T0_POP();754755}756break;757case 38: {758/* swap */759T0_SWAP();760}761break;762}763764} else {765T0_ENTER(ip, rp, t0x);766}767}768t0_exit:769((t0_context *)t0ctx)->dp = dp;770((t0_context *)t0ctx)->rp = rp;771((t0_context *)t0ctx)->ip = ip;772}773774775