10957b409SSimon J. Gerraty /* Automatically generated code; do not modify directly. */
20957b409SSimon J. Gerraty
30957b409SSimon J. Gerraty #include <stddef.h>
40957b409SSimon J. Gerraty #include <stdint.h>
50957b409SSimon J. Gerraty
60957b409SSimon J. Gerraty typedef struct {
70957b409SSimon J. Gerraty uint32_t *dp;
80957b409SSimon J. Gerraty uint32_t *rp;
90957b409SSimon J. Gerraty const unsigned char *ip;
100957b409SSimon J. Gerraty } t0_context;
110957b409SSimon J. Gerraty
120957b409SSimon J. Gerraty static uint32_t
t0_parse7E_unsigned(const unsigned char ** p)130957b409SSimon J. Gerraty t0_parse7E_unsigned(const unsigned char **p)
140957b409SSimon J. Gerraty {
150957b409SSimon J. Gerraty uint32_t x;
160957b409SSimon J. Gerraty
170957b409SSimon J. Gerraty x = 0;
180957b409SSimon J. Gerraty for (;;) {
190957b409SSimon J. Gerraty unsigned y;
200957b409SSimon J. Gerraty
210957b409SSimon J. Gerraty y = *(*p) ++;
220957b409SSimon J. Gerraty x = (x << 7) | (uint32_t)(y & 0x7F);
230957b409SSimon J. Gerraty if (y < 0x80) {
240957b409SSimon J. Gerraty return x;
250957b409SSimon J. Gerraty }
260957b409SSimon J. Gerraty }
270957b409SSimon J. Gerraty }
280957b409SSimon J. Gerraty
290957b409SSimon J. Gerraty static int32_t
t0_parse7E_signed(const unsigned char ** p)300957b409SSimon J. Gerraty t0_parse7E_signed(const unsigned char **p)
310957b409SSimon J. Gerraty {
320957b409SSimon J. Gerraty int neg;
330957b409SSimon J. Gerraty uint32_t x;
340957b409SSimon J. Gerraty
350957b409SSimon J. Gerraty neg = ((**p) >> 6) & 1;
360957b409SSimon J. Gerraty x = (uint32_t)-neg;
370957b409SSimon J. Gerraty for (;;) {
380957b409SSimon J. Gerraty unsigned y;
390957b409SSimon J. Gerraty
400957b409SSimon J. Gerraty y = *(*p) ++;
410957b409SSimon J. Gerraty x = (x << 7) | (uint32_t)(y & 0x7F);
420957b409SSimon J. Gerraty if (y < 0x80) {
430957b409SSimon J. Gerraty if (neg) {
440957b409SSimon J. Gerraty return -(int32_t)~x - 1;
450957b409SSimon J. Gerraty } else {
460957b409SSimon J. Gerraty return (int32_t)x;
470957b409SSimon J. Gerraty }
480957b409SSimon J. Gerraty }
490957b409SSimon J. Gerraty }
500957b409SSimon J. Gerraty }
510957b409SSimon J. Gerraty
520957b409SSimon J. Gerraty #define T0_VBYTE(x, n) (unsigned char)((((uint32_t)(x) >> (n)) & 0x7F) | 0x80)
530957b409SSimon J. Gerraty #define T0_FBYTE(x, n) (unsigned char)(((uint32_t)(x) >> (n)) & 0x7F)
540957b409SSimon J. Gerraty #define T0_SBYTE(x) (unsigned char)((((uint32_t)(x) >> 28) + 0xF8) ^ 0xF8)
550957b409SSimon J. Gerraty #define T0_INT1(x) T0_FBYTE(x, 0)
560957b409SSimon J. Gerraty #define T0_INT2(x) T0_VBYTE(x, 7), T0_FBYTE(x, 0)
570957b409SSimon J. Gerraty #define T0_INT3(x) T0_VBYTE(x, 14), T0_VBYTE(x, 7), T0_FBYTE(x, 0)
580957b409SSimon J. Gerraty #define T0_INT4(x) T0_VBYTE(x, 21), T0_VBYTE(x, 14), T0_VBYTE(x, 7), T0_FBYTE(x, 0)
590957b409SSimon J. Gerraty #define T0_INT5(x) T0_SBYTE(x), T0_VBYTE(x, 21), T0_VBYTE(x, 14), T0_VBYTE(x, 7), T0_FBYTE(x, 0)
600957b409SSimon J. Gerraty
610957b409SSimon J. Gerraty /* static const unsigned char t0_datablock[]; */
620957b409SSimon J. Gerraty
630957b409SSimon J. Gerraty
640957b409SSimon J. Gerraty void br_skey_decoder_init_main(void *t0ctx);
650957b409SSimon J. Gerraty
660957b409SSimon J. Gerraty void br_skey_decoder_run(void *t0ctx);
670957b409SSimon J. Gerraty
680957b409SSimon J. Gerraty
690957b409SSimon J. Gerraty
700957b409SSimon J. Gerraty #include "inner.h"
710957b409SSimon J. Gerraty
720957b409SSimon J. Gerraty
730957b409SSimon J. Gerraty
740957b409SSimon J. Gerraty
750957b409SSimon J. Gerraty
760957b409SSimon J. Gerraty #include "inner.h"
770957b409SSimon J. Gerraty
780957b409SSimon J. Gerraty #define CTX ((br_skey_decoder_context *)(void *)((unsigned char *)t0ctx - offsetof(br_skey_decoder_context, cpu)))
790957b409SSimon J. Gerraty #define CONTEXT_NAME br_skey_decoder_context
800957b409SSimon J. Gerraty
810957b409SSimon J. Gerraty /* see bearssl_x509.h */
820957b409SSimon J. Gerraty void
br_skey_decoder_init(br_skey_decoder_context * ctx)830957b409SSimon J. Gerraty br_skey_decoder_init(br_skey_decoder_context *ctx)
840957b409SSimon J. Gerraty {
850957b409SSimon J. Gerraty memset(ctx, 0, sizeof *ctx);
860957b409SSimon J. Gerraty ctx->cpu.dp = &ctx->dp_stack[0];
870957b409SSimon J. Gerraty ctx->cpu.rp = &ctx->rp_stack[0];
880957b409SSimon J. Gerraty br_skey_decoder_init_main(&ctx->cpu);
890957b409SSimon J. Gerraty br_skey_decoder_run(&ctx->cpu);
900957b409SSimon J. Gerraty }
910957b409SSimon J. Gerraty
920957b409SSimon J. Gerraty /* see bearssl_x509.h */
930957b409SSimon J. Gerraty void
br_skey_decoder_push(br_skey_decoder_context * ctx,const void * data,size_t len)940957b409SSimon J. Gerraty br_skey_decoder_push(br_skey_decoder_context *ctx,
950957b409SSimon J. Gerraty const void *data, size_t len)
960957b409SSimon J. Gerraty {
970957b409SSimon J. Gerraty ctx->hbuf = data;
980957b409SSimon J. Gerraty ctx->hlen = len;
990957b409SSimon J. Gerraty br_skey_decoder_run(&ctx->cpu);
1000957b409SSimon J. Gerraty }
1010957b409SSimon J. Gerraty
1020957b409SSimon J. Gerraty
1030957b409SSimon J. Gerraty
1040957b409SSimon J. Gerraty static const unsigned char t0_datablock[] = {
1050957b409SSimon J. Gerraty 0x00, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x07,
1060957b409SSimon J. Gerraty 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x08, 0x2A, 0x86, 0x48, 0xCE,
1070957b409SSimon J. Gerraty 0x3D, 0x03, 0x01, 0x07, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x22, 0x05, 0x2B,
1080957b409SSimon J. Gerraty 0x81, 0x04, 0x00, 0x23
1090957b409SSimon J. Gerraty };
1100957b409SSimon J. Gerraty
1110957b409SSimon J. Gerraty static const unsigned char t0_codeblock[] = {
1120957b409SSimon J. Gerraty 0x00, 0x01, 0x01, 0x07, 0x00, 0x00, 0x01, 0x01, 0x08, 0x00, 0x00, 0x13,
1130957b409SSimon J. Gerraty 0x13, 0x00, 0x00, 0x01, T0_INT1(BR_ERR_X509_BAD_TAG_CLASS), 0x00, 0x00,
1140957b409SSimon J. Gerraty 0x01, T0_INT1(BR_ERR_X509_BAD_TAG_VALUE), 0x00, 0x00, 0x01,
1150957b409SSimon J. Gerraty T0_INT1(BR_ERR_X509_EXTRA_ELEMENT), 0x00, 0x00, 0x01,
1160957b409SSimon J. Gerraty T0_INT1(BR_ERR_X509_INDEFINITE_LENGTH), 0x00, 0x00, 0x01,
1170957b409SSimon J. Gerraty T0_INT1(BR_ERR_X509_INNER_TRUNC), 0x00, 0x00, 0x01,
1180957b409SSimon J. Gerraty T0_INT1(BR_ERR_X509_INVALID_VALUE), 0x00, 0x00, 0x01,
1190957b409SSimon J. Gerraty T0_INT1(BR_ERR_X509_LIMIT_EXCEEDED), 0x00, 0x00, 0x01,
1200957b409SSimon J. Gerraty T0_INT1(BR_ERR_X509_NOT_CONSTRUCTED), 0x00, 0x00, 0x01,
1210957b409SSimon J. Gerraty T0_INT1(BR_ERR_X509_NOT_PRIMITIVE), 0x00, 0x00, 0x01,
1220957b409SSimon J. Gerraty T0_INT1(BR_ERR_X509_OVERFLOW), 0x00, 0x00, 0x01,
1230957b409SSimon J. Gerraty T0_INT1(BR_ERR_X509_UNEXPECTED), 0x00, 0x00, 0x01,
1240957b409SSimon J. Gerraty T0_INT1(BR_ERR_X509_UNSUPPORTED), 0x00, 0x00, 0x01,
1250957b409SSimon J. Gerraty T0_INT1(BR_KEYTYPE_EC), 0x00, 0x00, 0x01, T0_INT1(BR_KEYTYPE_RSA),
1260957b409SSimon J. Gerraty 0x00, 0x00, 0x01, T0_INT2(offsetof(CONTEXT_NAME, key_data)), 0x00,
1270957b409SSimon J. Gerraty 0x00, 0x01, T0_INT2(offsetof(CONTEXT_NAME, key_type)), 0x00, 0x00,
1280957b409SSimon J. Gerraty 0x33, 0x48, 0x00, 0x00, 0x01, T0_INT2(offsetof(CONTEXT_NAME, pad)),
1290957b409SSimon J. Gerraty 0x00, 0x00, 0x01, 0x13, 0x00, 0x00, 0x01, 0x1C, 0x00, 0x00, 0x01, 0x22,
1300957b409SSimon J. Gerraty 0x00, 0x00, 0x05, 0x02, 0x2C, 0x16, 0x00, 0x00, 0x06, 0x02, 0x2D, 0x16,
1310957b409SSimon J. Gerraty 0x00, 0x00, 0x01, 0x10, 0x3D, 0x00, 0x00, 0x0D, 0x05, 0x02, 0x2F, 0x16,
1320957b409SSimon J. Gerraty 0x3A, 0x00, 0x00, 0x0D, 0x05, 0x02, 0x2F, 0x16, 0x3B, 0x00, 0x00, 0x06,
1330957b409SSimon J. Gerraty 0x02, 0x27, 0x16, 0x00, 0x01, 0x03, 0x00, 0x54, 0x57, 0x01, 0x02, 0x3E,
1340957b409SSimon J. Gerraty 0x55, 0x23, 0x06, 0x02, 0x30, 0x16, 0x57, 0x01, 0x04, 0x3E, 0x02, 0x00,
1350957b409SSimon J. Gerraty 0x41, 0x3F, 0x00, 0x02, 0x03, 0x00, 0x53, 0x14, 0x14, 0x03, 0x01, 0x48,
1360957b409SSimon J. Gerraty 0x0E, 0x06, 0x02, 0x30, 0x16, 0x33, 0x4C, 0x58, 0x01, 0x7F, 0x19, 0x0D,
1370957b409SSimon J. Gerraty 0x06, 0x04, 0x13, 0x13, 0x04, 0x29, 0x01, 0x20, 0x19, 0x0D, 0x06, 0x16,
1380957b409SSimon J. Gerraty 0x13, 0x3A, 0x53, 0x4D, 0x02, 0x00, 0x06, 0x09, 0x02, 0x00, 0x0C, 0x06,
1390957b409SSimon J. Gerraty 0x02, 0x2A, 0x16, 0x04, 0x02, 0x03, 0x00, 0x3F, 0x04, 0x0D, 0x01, 0x21,
1400957b409SSimon J. Gerraty 0x19, 0x0D, 0x06, 0x04, 0x13, 0x3A, 0x04, 0x03, 0x30, 0x16, 0x13, 0x5D,
1410957b409SSimon J. Gerraty 0x02, 0x00, 0x05, 0x02, 0x30, 0x16, 0x02, 0x00, 0x02, 0x01, 0x1D, 0x00,
1420957b409SSimon J. Gerraty 0x02, 0x53, 0x4B, 0x05, 0x02, 0x30, 0x16, 0x5B, 0x15, 0x06, 0x07, 0x5D,
1430957b409SSimon J. Gerraty 0x01, 0x7F, 0x03, 0x01, 0x04, 0x16, 0x46, 0x15, 0x06, 0x10, 0x01, 0x00,
1440957b409SSimon J. Gerraty 0x03, 0x01, 0x14, 0x06, 0x03, 0x4D, 0x04, 0x02, 0x01, 0x00, 0x03, 0x00,
1450957b409SSimon J. Gerraty 0x04, 0x02, 0x30, 0x16, 0x3F, 0x57, 0x01, 0x04, 0x3E, 0x53, 0x02, 0x01,
1460957b409SSimon J. Gerraty 0x06, 0x03, 0x43, 0x04, 0x03, 0x02, 0x00, 0x40, 0x3F, 0x5D, 0x02, 0x01,
1470957b409SSimon J. Gerraty 0x06, 0x03, 0x32, 0x04, 0x01, 0x31, 0x00, 0x00, 0x54, 0x57, 0x01, 0x02,
1480957b409SSimon J. Gerraty 0x3E, 0x55, 0x06, 0x02, 0x30, 0x16, 0x57, 0x01, 0x02, 0x3E, 0x44, 0x3F,
1490957b409SSimon J. Gerraty 0x00, 0x07, 0x35, 0x50, 0x14, 0x05, 0x02, 0x2F, 0x16, 0x23, 0x01, 0x03,
1500957b409SSimon J. Gerraty 0x0B, 0x33, 0x17, 0x47, 0x07, 0x03, 0x00, 0x4F, 0x4F, 0x35, 0x4E, 0x14,
1510957b409SSimon J. Gerraty 0x14, 0x03, 0x01, 0x03, 0x02, 0x51, 0x14, 0x03, 0x03, 0x02, 0x02, 0x07,
1520957b409SSimon J. Gerraty 0x14, 0x03, 0x02, 0x51, 0x14, 0x03, 0x04, 0x02, 0x02, 0x07, 0x14, 0x03,
1530957b409SSimon J. Gerraty 0x02, 0x51, 0x14, 0x03, 0x05, 0x02, 0x02, 0x07, 0x14, 0x03, 0x02, 0x51,
1540957b409SSimon J. Gerraty 0x03, 0x06, 0x02, 0x00, 0x02, 0x01, 0x02, 0x03, 0x02, 0x04, 0x02, 0x05,
1550957b409SSimon J. Gerraty 0x02, 0x06, 0x1E, 0x00, 0x00, 0x19, 0x19, 0x00, 0x00, 0x01, 0x0B, 0x00,
1560957b409SSimon J. Gerraty 0x00, 0x01, 0x00, 0x20, 0x14, 0x06, 0x08, 0x01, 0x01, 0x21, 0x20, 0x22,
1570957b409SSimon J. Gerraty 0x20, 0x04, 0x75, 0x13, 0x00, 0x00, 0x01,
158*cc9e6590SSimon J. Gerraty T0_INT2(3 * BR_X509_BUFSIZE_SIG), 0x00, 0x01, 0x01, 0x87, 0xFF, 0xFF,
1590957b409SSimon J. Gerraty 0x7F, 0x54, 0x57, 0x01, 0x02, 0x3E, 0x55, 0x01, 0x01, 0x0E, 0x06, 0x02,
1600957b409SSimon J. Gerraty 0x30, 0x16, 0x57, 0x01, 0x02, 0x19, 0x0D, 0x06, 0x06, 0x13, 0x3B, 0x44,
1610957b409SSimon J. Gerraty 0x32, 0x04, 0x1C, 0x01, 0x04, 0x19, 0x0D, 0x06, 0x08, 0x13, 0x3B, 0x01,
1620957b409SSimon J. Gerraty 0x00, 0x41, 0x31, 0x04, 0x0E, 0x01, 0x10, 0x19, 0x0D, 0x06, 0x05, 0x13,
1630957b409SSimon J. Gerraty 0x3A, 0x42, 0x04, 0x03, 0x30, 0x16, 0x13, 0x03, 0x00, 0x3F, 0x02, 0x00,
1640957b409SSimon J. Gerraty 0x34, 0x1F, 0x5A, 0x27, 0x16, 0x00, 0x01, 0x45, 0x0A, 0x06, 0x02, 0x29,
1650957b409SSimon J. Gerraty 0x16, 0x14, 0x03, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x57, 0x01, 0x06,
1660957b409SSimon J. Gerraty 0x3E, 0x56, 0x00, 0x00, 0x20, 0x14, 0x06, 0x07, 0x1A, 0x14, 0x06, 0x01,
1670957b409SSimon J. Gerraty 0x12, 0x04, 0x76, 0x24, 0x00, 0x00, 0x4B, 0x05, 0x02, 0x30, 0x16, 0x37,
1680957b409SSimon J. Gerraty 0x15, 0x06, 0x04, 0x01, 0x17, 0x04, 0x12, 0x38, 0x15, 0x06, 0x04, 0x01,
1690957b409SSimon J. Gerraty 0x18, 0x04, 0x0A, 0x39, 0x15, 0x06, 0x04, 0x01, 0x19, 0x04, 0x02, 0x30,
1700957b409SSimon J. Gerraty 0x16, 0x00, 0x00, 0x1C, 0x57, 0x01, 0x02, 0x3E, 0x09, 0x50, 0x00, 0x00,
1710957b409SSimon J. Gerraty 0x35, 0x4E, 0x13, 0x00, 0x03, 0x14, 0x03, 0x00, 0x03, 0x01, 0x03, 0x02,
1720957b409SSimon J. Gerraty 0x53, 0x59, 0x14, 0x01, 0x81, 0x00, 0x0F, 0x06, 0x02, 0x2E, 0x16, 0x14,
1730957b409SSimon J. Gerraty 0x01, 0x00, 0x0D, 0x06, 0x0B, 0x13, 0x14, 0x05, 0x04, 0x13, 0x01, 0x00,
1740957b409SSimon J. Gerraty 0x00, 0x59, 0x04, 0x6F, 0x02, 0x01, 0x14, 0x05, 0x02, 0x2B, 0x16, 0x23,
1750957b409SSimon J. Gerraty 0x03, 0x01, 0x02, 0x02, 0x1F, 0x02, 0x02, 0x22, 0x03, 0x02, 0x14, 0x06,
1760957b409SSimon J. Gerraty 0x03, 0x59, 0x04, 0x68, 0x13, 0x02, 0x00, 0x02, 0x01, 0x08, 0x00, 0x00,
1770957b409SSimon J. Gerraty 0x14, 0x35, 0x1C, 0x08, 0x20, 0x1C, 0x07, 0x20, 0x4E, 0x00, 0x01, 0x59,
1780957b409SSimon J. Gerraty 0x14, 0x01, 0x81, 0x00, 0x0A, 0x06, 0x01, 0x00, 0x01, 0x81, 0x00, 0x08,
1790957b409SSimon J. Gerraty 0x14, 0x05, 0x02, 0x28, 0x16, 0x03, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01,
1800957b409SSimon J. Gerraty 0x00, 0x0E, 0x06, 0x19, 0x02, 0x00, 0x23, 0x03, 0x00, 0x14, 0x01, 0x83,
1810957b409SSimon J. Gerraty 0xFF, 0xFF, 0x7F, 0x0E, 0x06, 0x02, 0x29, 0x16, 0x01, 0x08, 0x0B, 0x20,
1820957b409SSimon J. Gerraty 0x59, 0x1C, 0x07, 0x04, 0x60, 0x00, 0x00, 0x52, 0x4A, 0x00, 0x00, 0x57,
1830957b409SSimon J. Gerraty 0x3C, 0x53, 0x00, 0x01, 0x53, 0x14, 0x05, 0x02, 0x2E, 0x16, 0x59, 0x14,
1840957b409SSimon J. Gerraty 0x01, 0x81, 0x00, 0x0F, 0x06, 0x02, 0x2E, 0x16, 0x03, 0x00, 0x14, 0x06,
1850957b409SSimon J. Gerraty 0x16, 0x59, 0x02, 0x00, 0x14, 0x01, 0x87, 0xFF, 0xFF, 0x7F, 0x0F, 0x06,
1860957b409SSimon J. Gerraty 0x02, 0x2E, 0x16, 0x01, 0x08, 0x0B, 0x07, 0x03, 0x00, 0x04, 0x67, 0x13,
1870957b409SSimon J. Gerraty 0x02, 0x00, 0x00, 0x00, 0x53, 0x14, 0x01, 0x81, 0x7F, 0x0E, 0x06, 0x08,
1880957b409SSimon J. Gerraty 0x5C, 0x01, 0x00, 0x36, 0x1F, 0x01, 0x00, 0x00, 0x14, 0x36, 0x1F, 0x36,
1890957b409SSimon J. Gerraty 0x22, 0x4C, 0x01, 0x7F, 0x00, 0x01, 0x59, 0x03, 0x00, 0x02, 0x00, 0x01,
1900957b409SSimon J. Gerraty 0x05, 0x10, 0x01, 0x01, 0x11, 0x18, 0x02, 0x00, 0x01, 0x06, 0x10, 0x14,
1910957b409SSimon J. Gerraty 0x01, 0x01, 0x11, 0x06, 0x02, 0x25, 0x16, 0x01, 0x04, 0x0B, 0x02, 0x00,
1920957b409SSimon J. Gerraty 0x01, 0x1F, 0x11, 0x14, 0x01, 0x1F, 0x0D, 0x06, 0x02, 0x26, 0x16, 0x07,
1930957b409SSimon J. Gerraty 0x00, 0x00, 0x14, 0x05, 0x05, 0x01, 0x00, 0x01, 0x7F, 0x00, 0x57, 0x00,
1940957b409SSimon J. Gerraty 0x00, 0x14, 0x05, 0x02, 0x29, 0x16, 0x23, 0x5A, 0x00, 0x00, 0x1B, 0x14,
1950957b409SSimon J. Gerraty 0x01, 0x00, 0x0F, 0x06, 0x01, 0x00, 0x13, 0x12, 0x04, 0x74, 0x00, 0x01,
1960957b409SSimon J. Gerraty 0x01, 0x00, 0x00, 0x5D, 0x13, 0x00, 0x00, 0x14, 0x06, 0x07, 0x5E, 0x14,
1970957b409SSimon J. Gerraty 0x06, 0x01, 0x12, 0x04, 0x76, 0x00, 0x00, 0x01, 0x00, 0x19, 0x1A, 0x09,
1980957b409SSimon J. Gerraty 0x24, 0x00
1990957b409SSimon J. Gerraty };
2000957b409SSimon J. Gerraty
2010957b409SSimon J. Gerraty static const uint16_t t0_caddr[] = {
2020957b409SSimon J. Gerraty 0,
2030957b409SSimon J. Gerraty 5,
2040957b409SSimon J. Gerraty 10,
2050957b409SSimon J. Gerraty 14,
2060957b409SSimon J. Gerraty 18,
2070957b409SSimon J. Gerraty 22,
2080957b409SSimon J. Gerraty 26,
2090957b409SSimon J. Gerraty 30,
2100957b409SSimon J. Gerraty 34,
2110957b409SSimon J. Gerraty 38,
2120957b409SSimon J. Gerraty 42,
2130957b409SSimon J. Gerraty 46,
2140957b409SSimon J. Gerraty 50,
2150957b409SSimon J. Gerraty 54,
2160957b409SSimon J. Gerraty 58,
2170957b409SSimon J. Gerraty 62,
2180957b409SSimon J. Gerraty 66,
2190957b409SSimon J. Gerraty 70,
2200957b409SSimon J. Gerraty 75,
2210957b409SSimon J. Gerraty 80,
2220957b409SSimon J. Gerraty 84,
2230957b409SSimon J. Gerraty 89,
2240957b409SSimon J. Gerraty 93,
2250957b409SSimon J. Gerraty 97,
2260957b409SSimon J. Gerraty 101,
2270957b409SSimon J. Gerraty 107,
2280957b409SSimon J. Gerraty 113,
2290957b409SSimon J. Gerraty 118,
2300957b409SSimon J. Gerraty 126,
2310957b409SSimon J. Gerraty 134,
2320957b409SSimon J. Gerraty 140,
2330957b409SSimon J. Gerraty 163,
2340957b409SSimon J. Gerraty 244,
2350957b409SSimon J. Gerraty 311,
2360957b409SSimon J. Gerraty 329,
2370957b409SSimon J. Gerraty 404,
2380957b409SSimon J. Gerraty 408,
2390957b409SSimon J. Gerraty 412,
2400957b409SSimon J. Gerraty 429,
2410957b409SSimon J. Gerraty 434,
2420957b409SSimon J. Gerraty 505,
2430957b409SSimon J. Gerraty 519,
2440957b409SSimon J. Gerraty 526,
2450957b409SSimon J. Gerraty 540,
2460957b409SSimon J. Gerraty 573,
2470957b409SSimon J. Gerraty 582,
2480957b409SSimon J. Gerraty 587,
2490957b409SSimon J. Gerraty 654,
2500957b409SSimon J. Gerraty 665,
2510957b409SSimon J. Gerraty 721,
2520957b409SSimon J. Gerraty 725,
2530957b409SSimon J. Gerraty 730,
2540957b409SSimon J. Gerraty 778,
2550957b409SSimon J. Gerraty 804,
2560957b409SSimon J. Gerraty 848,
2570957b409SSimon J. Gerraty 859,
2580957b409SSimon J. Gerraty 868,
2590957b409SSimon J. Gerraty 881,
2600957b409SSimon J. Gerraty 885,
2610957b409SSimon J. Gerraty 889,
2620957b409SSimon J. Gerraty 901
2630957b409SSimon J. Gerraty };
2640957b409SSimon J. Gerraty
2650957b409SSimon J. Gerraty #define T0_INTERPRETED 34
2660957b409SSimon J. Gerraty
2670957b409SSimon J. Gerraty #define T0_ENTER(ip, rp, slot) do { \
2680957b409SSimon J. Gerraty const unsigned char *t0_newip; \
2690957b409SSimon J. Gerraty uint32_t t0_lnum; \
2700957b409SSimon J. Gerraty t0_newip = &t0_codeblock[t0_caddr[(slot) - T0_INTERPRETED]]; \
2710957b409SSimon J. Gerraty t0_lnum = t0_parse7E_unsigned(&t0_newip); \
2720957b409SSimon J. Gerraty (rp) += t0_lnum; \
2730957b409SSimon J. Gerraty *((rp) ++) = (uint32_t)((ip) - &t0_codeblock[0]) + (t0_lnum << 16); \
2740957b409SSimon J. Gerraty (ip) = t0_newip; \
2750957b409SSimon J. Gerraty } while (0)
2760957b409SSimon J. Gerraty
2770957b409SSimon J. Gerraty #define T0_DEFENTRY(name, slot) \
2780957b409SSimon J. Gerraty void \
2790957b409SSimon J. Gerraty name(void *ctx) \
2800957b409SSimon J. Gerraty { \
2810957b409SSimon J. Gerraty t0_context *t0ctx = ctx; \
2820957b409SSimon J. Gerraty t0ctx->ip = &t0_codeblock[0]; \
2830957b409SSimon J. Gerraty T0_ENTER(t0ctx->ip, t0ctx->rp, slot); \
2840957b409SSimon J. Gerraty }
2850957b409SSimon J. Gerraty
2860957b409SSimon J. Gerraty T0_DEFENTRY(br_skey_decoder_init_main, 73)
2870957b409SSimon J. Gerraty
2880957b409SSimon J. Gerraty #define T0_NEXT(t0ipp) (*(*(t0ipp)) ++)
2890957b409SSimon J. Gerraty
2900957b409SSimon J. Gerraty void
br_skey_decoder_run(void * t0ctx)2910957b409SSimon J. Gerraty br_skey_decoder_run(void *t0ctx)
2920957b409SSimon J. Gerraty {
2930957b409SSimon J. Gerraty uint32_t *dp, *rp;
2940957b409SSimon J. Gerraty const unsigned char *ip;
2950957b409SSimon J. Gerraty
2960957b409SSimon J. Gerraty #define T0_LOCAL(x) (*(rp - 2 - (x)))
2970957b409SSimon J. Gerraty #define T0_POP() (*-- dp)
2980957b409SSimon J. Gerraty #define T0_POPi() (*(int32_t *)(-- dp))
2990957b409SSimon J. Gerraty #define T0_PEEK(x) (*(dp - 1 - (x)))
3000957b409SSimon J. Gerraty #define T0_PEEKi(x) (*(int32_t *)(dp - 1 - (x)))
3010957b409SSimon J. Gerraty #define T0_PUSH(v) do { *dp = (v); dp ++; } while (0)
3020957b409SSimon J. Gerraty #define T0_PUSHi(v) do { *(int32_t *)dp = (v); dp ++; } while (0)
3030957b409SSimon J. Gerraty #define T0_RPOP() (*-- rp)
3040957b409SSimon J. Gerraty #define T0_RPOPi() (*(int32_t *)(-- rp))
3050957b409SSimon J. Gerraty #define T0_RPUSH(v) do { *rp = (v); rp ++; } while (0)
3060957b409SSimon J. Gerraty #define T0_RPUSHi(v) do { *(int32_t *)rp = (v); rp ++; } while (0)
3070957b409SSimon J. Gerraty #define T0_ROLL(x) do { \
3080957b409SSimon J. Gerraty size_t t0len = (size_t)(x); \
3090957b409SSimon J. Gerraty uint32_t t0tmp = *(dp - 1 - t0len); \
3100957b409SSimon J. Gerraty memmove(dp - t0len - 1, dp - t0len, t0len * sizeof *dp); \
3110957b409SSimon J. Gerraty *(dp - 1) = t0tmp; \
3120957b409SSimon J. Gerraty } while (0)
3130957b409SSimon J. Gerraty #define T0_SWAP() do { \
3140957b409SSimon J. Gerraty uint32_t t0tmp = *(dp - 2); \
3150957b409SSimon J. Gerraty *(dp - 2) = *(dp - 1); \
3160957b409SSimon J. Gerraty *(dp - 1) = t0tmp; \
3170957b409SSimon J. Gerraty } while (0)
3180957b409SSimon J. Gerraty #define T0_ROT() do { \
3190957b409SSimon J. Gerraty uint32_t t0tmp = *(dp - 3); \
3200957b409SSimon J. Gerraty *(dp - 3) = *(dp - 2); \
3210957b409SSimon J. Gerraty *(dp - 2) = *(dp - 1); \
3220957b409SSimon J. Gerraty *(dp - 1) = t0tmp; \
3230957b409SSimon J. Gerraty } while (0)
3240957b409SSimon J. Gerraty #define T0_NROT() do { \
3250957b409SSimon J. Gerraty uint32_t t0tmp = *(dp - 1); \
3260957b409SSimon J. Gerraty *(dp - 1) = *(dp - 2); \
3270957b409SSimon J. Gerraty *(dp - 2) = *(dp - 3); \
3280957b409SSimon J. Gerraty *(dp - 3) = t0tmp; \
3290957b409SSimon J. Gerraty } while (0)
3300957b409SSimon J. Gerraty #define T0_PICK(x) do { \
3310957b409SSimon J. Gerraty uint32_t t0depth = (x); \
3320957b409SSimon J. Gerraty T0_PUSH(T0_PEEK(t0depth)); \
3330957b409SSimon J. Gerraty } while (0)
3340957b409SSimon J. Gerraty #define T0_CO() do { \
3350957b409SSimon J. Gerraty goto t0_exit; \
3360957b409SSimon J. Gerraty } while (0)
3370957b409SSimon J. Gerraty #define T0_RET() goto t0_next
3380957b409SSimon J. Gerraty
3390957b409SSimon J. Gerraty dp = ((t0_context *)t0ctx)->dp;
3400957b409SSimon J. Gerraty rp = ((t0_context *)t0ctx)->rp;
3410957b409SSimon J. Gerraty ip = ((t0_context *)t0ctx)->ip;
3420957b409SSimon J. Gerraty goto t0_next;
3430957b409SSimon J. Gerraty for (;;) {
3440957b409SSimon J. Gerraty uint32_t t0x;
3450957b409SSimon J. Gerraty
3460957b409SSimon J. Gerraty t0_next:
3470957b409SSimon J. Gerraty t0x = T0_NEXT(&ip);
3480957b409SSimon J. Gerraty if (t0x < T0_INTERPRETED) {
3490957b409SSimon J. Gerraty switch (t0x) {
3500957b409SSimon J. Gerraty int32_t t0off;
3510957b409SSimon J. Gerraty
3520957b409SSimon J. Gerraty case 0: /* ret */
3530957b409SSimon J. Gerraty t0x = T0_RPOP();
3540957b409SSimon J. Gerraty rp -= (t0x >> 16);
3550957b409SSimon J. Gerraty t0x &= 0xFFFF;
3560957b409SSimon J. Gerraty if (t0x == 0) {
3570957b409SSimon J. Gerraty ip = NULL;
3580957b409SSimon J. Gerraty goto t0_exit;
3590957b409SSimon J. Gerraty }
3600957b409SSimon J. Gerraty ip = &t0_codeblock[t0x];
3610957b409SSimon J. Gerraty break;
3620957b409SSimon J. Gerraty case 1: /* literal constant */
3630957b409SSimon J. Gerraty T0_PUSHi(t0_parse7E_signed(&ip));
3640957b409SSimon J. Gerraty break;
3650957b409SSimon J. Gerraty case 2: /* read local */
3660957b409SSimon J. Gerraty T0_PUSH(T0_LOCAL(t0_parse7E_unsigned(&ip)));
3670957b409SSimon J. Gerraty break;
3680957b409SSimon J. Gerraty case 3: /* write local */
3690957b409SSimon J. Gerraty T0_LOCAL(t0_parse7E_unsigned(&ip)) = T0_POP();
3700957b409SSimon J. Gerraty break;
3710957b409SSimon J. Gerraty case 4: /* jump */
3720957b409SSimon J. Gerraty t0off = t0_parse7E_signed(&ip);
3730957b409SSimon J. Gerraty ip += t0off;
3740957b409SSimon J. Gerraty break;
3750957b409SSimon J. Gerraty case 5: /* jump if */
3760957b409SSimon J. Gerraty t0off = t0_parse7E_signed(&ip);
3770957b409SSimon J. Gerraty if (T0_POP()) {
3780957b409SSimon J. Gerraty ip += t0off;
3790957b409SSimon J. Gerraty }
3800957b409SSimon J. Gerraty break;
3810957b409SSimon J. Gerraty case 6: /* jump if not */
3820957b409SSimon J. Gerraty t0off = t0_parse7E_signed(&ip);
3830957b409SSimon J. Gerraty if (!T0_POP()) {
3840957b409SSimon J. Gerraty ip += t0off;
3850957b409SSimon J. Gerraty }
3860957b409SSimon J. Gerraty break;
3870957b409SSimon J. Gerraty case 7: {
3880957b409SSimon J. Gerraty /* + */
3890957b409SSimon J. Gerraty
3900957b409SSimon J. Gerraty uint32_t b = T0_POP();
3910957b409SSimon J. Gerraty uint32_t a = T0_POP();
3920957b409SSimon J. Gerraty T0_PUSH(a + b);
3930957b409SSimon J. Gerraty
3940957b409SSimon J. Gerraty }
3950957b409SSimon J. Gerraty break;
3960957b409SSimon J. Gerraty case 8: {
3970957b409SSimon J. Gerraty /* - */
3980957b409SSimon J. Gerraty
3990957b409SSimon J. Gerraty uint32_t b = T0_POP();
4000957b409SSimon J. Gerraty uint32_t a = T0_POP();
4010957b409SSimon J. Gerraty T0_PUSH(a - b);
4020957b409SSimon J. Gerraty
4030957b409SSimon J. Gerraty }
4040957b409SSimon J. Gerraty break;
4050957b409SSimon J. Gerraty case 9: {
4060957b409SSimon J. Gerraty /* -rot */
4070957b409SSimon J. Gerraty T0_NROT();
4080957b409SSimon J. Gerraty }
4090957b409SSimon J. Gerraty break;
4100957b409SSimon J. Gerraty case 10: {
4110957b409SSimon J. Gerraty /* < */
4120957b409SSimon J. Gerraty
4130957b409SSimon J. Gerraty int32_t b = T0_POPi();
4140957b409SSimon J. Gerraty int32_t a = T0_POPi();
4150957b409SSimon J. Gerraty T0_PUSH(-(uint32_t)(a < b));
4160957b409SSimon J. Gerraty
4170957b409SSimon J. Gerraty }
4180957b409SSimon J. Gerraty break;
4190957b409SSimon J. Gerraty case 11: {
4200957b409SSimon J. Gerraty /* << */
4210957b409SSimon J. Gerraty
4220957b409SSimon J. Gerraty int c = (int)T0_POPi();
4230957b409SSimon J. Gerraty uint32_t x = T0_POP();
4240957b409SSimon J. Gerraty T0_PUSH(x << c);
4250957b409SSimon J. Gerraty
4260957b409SSimon J. Gerraty }
4270957b409SSimon J. Gerraty break;
4280957b409SSimon J. Gerraty case 12: {
4290957b409SSimon J. Gerraty /* <> */
4300957b409SSimon J. Gerraty
4310957b409SSimon J. Gerraty uint32_t b = T0_POP();
4320957b409SSimon J. Gerraty uint32_t a = T0_POP();
4330957b409SSimon J. Gerraty T0_PUSH(-(uint32_t)(a != b));
4340957b409SSimon J. Gerraty
4350957b409SSimon J. Gerraty }
4360957b409SSimon J. Gerraty break;
4370957b409SSimon J. Gerraty case 13: {
4380957b409SSimon J. Gerraty /* = */
4390957b409SSimon J. Gerraty
4400957b409SSimon J. Gerraty uint32_t b = T0_POP();
4410957b409SSimon J. Gerraty uint32_t a = T0_POP();
4420957b409SSimon J. Gerraty T0_PUSH(-(uint32_t)(a == b));
4430957b409SSimon J. Gerraty
4440957b409SSimon J. Gerraty }
4450957b409SSimon J. Gerraty break;
4460957b409SSimon J. Gerraty case 14: {
4470957b409SSimon J. Gerraty /* > */
4480957b409SSimon J. Gerraty
4490957b409SSimon J. Gerraty int32_t b = T0_POPi();
4500957b409SSimon J. Gerraty int32_t a = T0_POPi();
4510957b409SSimon J. Gerraty T0_PUSH(-(uint32_t)(a > b));
4520957b409SSimon J. Gerraty
4530957b409SSimon J. Gerraty }
4540957b409SSimon J. Gerraty break;
4550957b409SSimon J. Gerraty case 15: {
4560957b409SSimon J. Gerraty /* >= */
4570957b409SSimon J. Gerraty
4580957b409SSimon J. Gerraty int32_t b = T0_POPi();
4590957b409SSimon J. Gerraty int32_t a = T0_POPi();
4600957b409SSimon J. Gerraty T0_PUSH(-(uint32_t)(a >= b));
4610957b409SSimon J. Gerraty
4620957b409SSimon J. Gerraty }
4630957b409SSimon J. Gerraty break;
4640957b409SSimon J. Gerraty case 16: {
4650957b409SSimon J. Gerraty /* >> */
4660957b409SSimon J. Gerraty
4670957b409SSimon J. Gerraty int c = (int)T0_POPi();
4680957b409SSimon J. Gerraty int32_t x = T0_POPi();
4690957b409SSimon J. Gerraty T0_PUSHi(x >> c);
4700957b409SSimon J. Gerraty
4710957b409SSimon J. Gerraty }
4720957b409SSimon J. Gerraty break;
4730957b409SSimon J. Gerraty case 17: {
4740957b409SSimon J. Gerraty /* and */
4750957b409SSimon J. Gerraty
4760957b409SSimon J. Gerraty uint32_t b = T0_POP();
4770957b409SSimon J. Gerraty uint32_t a = T0_POP();
4780957b409SSimon J. Gerraty T0_PUSH(a & b);
4790957b409SSimon J. Gerraty
4800957b409SSimon J. Gerraty }
4810957b409SSimon J. Gerraty break;
4820957b409SSimon J. Gerraty case 18: {
4830957b409SSimon J. Gerraty /* co */
4840957b409SSimon J. Gerraty T0_CO();
4850957b409SSimon J. Gerraty }
4860957b409SSimon J. Gerraty break;
4870957b409SSimon J. Gerraty case 19: {
4880957b409SSimon J. Gerraty /* drop */
4890957b409SSimon J. Gerraty (void)T0_POP();
4900957b409SSimon J. Gerraty }
4910957b409SSimon J. Gerraty break;
4920957b409SSimon J. Gerraty case 20: {
4930957b409SSimon J. Gerraty /* dup */
4940957b409SSimon J. Gerraty T0_PUSH(T0_PEEK(0));
4950957b409SSimon J. Gerraty }
4960957b409SSimon J. Gerraty break;
4970957b409SSimon J. Gerraty case 21: {
4980957b409SSimon J. Gerraty /* eqOID */
4990957b409SSimon J. Gerraty
5000957b409SSimon J. Gerraty const unsigned char *a2 = &t0_datablock[T0_POP()];
5010957b409SSimon J. Gerraty const unsigned char *a1 = &CTX->pad[0];
5020957b409SSimon J. Gerraty size_t len = a1[0];
5030957b409SSimon J. Gerraty int x;
5040957b409SSimon J. Gerraty if (len == a2[0]) {
5050957b409SSimon J. Gerraty x = -(memcmp(a1 + 1, a2 + 1, len) == 0);
5060957b409SSimon J. Gerraty } else {
5070957b409SSimon J. Gerraty x = 0;
5080957b409SSimon J. Gerraty }
5090957b409SSimon J. Gerraty T0_PUSH((uint32_t)x);
5100957b409SSimon J. Gerraty
5110957b409SSimon J. Gerraty }
5120957b409SSimon J. Gerraty break;
5130957b409SSimon J. Gerraty case 22: {
5140957b409SSimon J. Gerraty /* fail */
5150957b409SSimon J. Gerraty
5160957b409SSimon J. Gerraty CTX->err = T0_POPi();
5170957b409SSimon J. Gerraty T0_CO();
5180957b409SSimon J. Gerraty
5190957b409SSimon J. Gerraty }
5200957b409SSimon J. Gerraty break;
5210957b409SSimon J. Gerraty case 23: {
5220957b409SSimon J. Gerraty /* get8 */
5230957b409SSimon J. Gerraty
5240957b409SSimon J. Gerraty uint32_t addr = T0_POP();
5250957b409SSimon J. Gerraty T0_PUSH(*((unsigned char *)CTX + addr));
5260957b409SSimon J. Gerraty
5270957b409SSimon J. Gerraty }
5280957b409SSimon J. Gerraty break;
5290957b409SSimon J. Gerraty case 24: {
5300957b409SSimon J. Gerraty /* neg */
5310957b409SSimon J. Gerraty
5320957b409SSimon J. Gerraty uint32_t a = T0_POP();
5330957b409SSimon J. Gerraty T0_PUSH(-a);
5340957b409SSimon J. Gerraty
5350957b409SSimon J. Gerraty }
5360957b409SSimon J. Gerraty break;
5370957b409SSimon J. Gerraty case 25: {
5380957b409SSimon J. Gerraty /* over */
5390957b409SSimon J. Gerraty T0_PUSH(T0_PEEK(1));
5400957b409SSimon J. Gerraty }
5410957b409SSimon J. Gerraty break;
5420957b409SSimon J. Gerraty case 26: {
5430957b409SSimon J. Gerraty /* read-blob-inner */
5440957b409SSimon J. Gerraty
5450957b409SSimon J. Gerraty uint32_t len = T0_POP();
5460957b409SSimon J. Gerraty uint32_t addr = T0_POP();
5470957b409SSimon J. Gerraty size_t clen = CTX->hlen;
5480957b409SSimon J. Gerraty if (clen > len) {
5490957b409SSimon J. Gerraty clen = (size_t)len;
5500957b409SSimon J. Gerraty }
5510957b409SSimon J. Gerraty if (addr != 0) {
5520957b409SSimon J. Gerraty memcpy((unsigned char *)CTX + addr, CTX->hbuf, clen);
5530957b409SSimon J. Gerraty }
5540957b409SSimon J. Gerraty CTX->hbuf += clen;
5550957b409SSimon J. Gerraty CTX->hlen -= clen;
5560957b409SSimon J. Gerraty T0_PUSH(addr + clen);
5570957b409SSimon J. Gerraty T0_PUSH(len - clen);
5580957b409SSimon J. Gerraty
5590957b409SSimon J. Gerraty }
5600957b409SSimon J. Gerraty break;
5610957b409SSimon J. Gerraty case 27: {
5620957b409SSimon J. Gerraty /* read8-low */
5630957b409SSimon J. Gerraty
5640957b409SSimon J. Gerraty if (CTX->hlen == 0) {
5650957b409SSimon J. Gerraty T0_PUSHi(-1);
5660957b409SSimon J. Gerraty } else {
5670957b409SSimon J. Gerraty CTX->hlen --;
5680957b409SSimon J. Gerraty T0_PUSH(*CTX->hbuf ++);
5690957b409SSimon J. Gerraty }
5700957b409SSimon J. Gerraty
5710957b409SSimon J. Gerraty }
5720957b409SSimon J. Gerraty break;
5730957b409SSimon J. Gerraty case 28: {
5740957b409SSimon J. Gerraty /* rot */
5750957b409SSimon J. Gerraty T0_ROT();
5760957b409SSimon J. Gerraty }
5770957b409SSimon J. Gerraty break;
5780957b409SSimon J. Gerraty case 29: {
5790957b409SSimon J. Gerraty /* set-ec-key */
5800957b409SSimon J. Gerraty
5810957b409SSimon J. Gerraty size_t xlen = T0_POP();
5820957b409SSimon J. Gerraty uint32_t curve = T0_POP();
5830957b409SSimon J. Gerraty CTX->key.ec.curve = curve;
5840957b409SSimon J. Gerraty CTX->key.ec.x = CTX->key_data;
5850957b409SSimon J. Gerraty CTX->key.ec.xlen = xlen;
5860957b409SSimon J. Gerraty
5870957b409SSimon J. Gerraty }
5880957b409SSimon J. Gerraty break;
5890957b409SSimon J. Gerraty case 30: {
5900957b409SSimon J. Gerraty /* set-rsa-key */
5910957b409SSimon J. Gerraty
5920957b409SSimon J. Gerraty size_t iqlen = T0_POP();
5930957b409SSimon J. Gerraty size_t dqlen = T0_POP();
5940957b409SSimon J. Gerraty size_t dplen = T0_POP();
5950957b409SSimon J. Gerraty size_t qlen = T0_POP();
5960957b409SSimon J. Gerraty size_t plen = T0_POP();
5970957b409SSimon J. Gerraty uint32_t n_bitlen = T0_POP();
5980957b409SSimon J. Gerraty size_t off;
5990957b409SSimon J. Gerraty
6000957b409SSimon J. Gerraty CTX->key.rsa.n_bitlen = n_bitlen;
6010957b409SSimon J. Gerraty CTX->key.rsa.p = CTX->key_data;
6020957b409SSimon J. Gerraty CTX->key.rsa.plen = plen;
6030957b409SSimon J. Gerraty off = plen;
6040957b409SSimon J. Gerraty CTX->key.rsa.q = CTX->key_data + off;
6050957b409SSimon J. Gerraty CTX->key.rsa.qlen = qlen;
6060957b409SSimon J. Gerraty off += qlen;
6070957b409SSimon J. Gerraty CTX->key.rsa.dp = CTX->key_data + off;
6080957b409SSimon J. Gerraty CTX->key.rsa.dplen = dplen;
6090957b409SSimon J. Gerraty off += dplen;
6100957b409SSimon J. Gerraty CTX->key.rsa.dq = CTX->key_data + off;
6110957b409SSimon J. Gerraty CTX->key.rsa.dqlen = dqlen;
6120957b409SSimon J. Gerraty off += dqlen;
6130957b409SSimon J. Gerraty CTX->key.rsa.iq = CTX->key_data + off;
6140957b409SSimon J. Gerraty CTX->key.rsa.iqlen = iqlen;
6150957b409SSimon J. Gerraty
6160957b409SSimon J. Gerraty }
6170957b409SSimon J. Gerraty break;
6180957b409SSimon J. Gerraty case 31: {
6190957b409SSimon J. Gerraty /* set8 */
6200957b409SSimon J. Gerraty
6210957b409SSimon J. Gerraty uint32_t addr = T0_POP();
6220957b409SSimon J. Gerraty *((unsigned char *)CTX + addr) = (unsigned char)T0_POP();
6230957b409SSimon J. Gerraty
6240957b409SSimon J. Gerraty }
6250957b409SSimon J. Gerraty break;
6260957b409SSimon J. Gerraty case 32: {
6270957b409SSimon J. Gerraty /* swap */
6280957b409SSimon J. Gerraty T0_SWAP();
6290957b409SSimon J. Gerraty }
6300957b409SSimon J. Gerraty break;
6310957b409SSimon J. Gerraty case 33: {
6320957b409SSimon J. Gerraty /* u>> */
6330957b409SSimon J. Gerraty
6340957b409SSimon J. Gerraty int c = (int)T0_POPi();
6350957b409SSimon J. Gerraty uint32_t x = T0_POP();
6360957b409SSimon J. Gerraty T0_PUSH(x >> c);
6370957b409SSimon J. Gerraty
6380957b409SSimon J. Gerraty }
6390957b409SSimon J. Gerraty break;
6400957b409SSimon J. Gerraty }
6410957b409SSimon J. Gerraty
6420957b409SSimon J. Gerraty } else {
6430957b409SSimon J. Gerraty T0_ENTER(ip, rp, t0x);
6440957b409SSimon J. Gerraty }
6450957b409SSimon J. Gerraty }
6460957b409SSimon J. Gerraty t0_exit:
6470957b409SSimon J. Gerraty ((t0_context *)t0ctx)->dp = dp;
6480957b409SSimon J. Gerraty ((t0_context *)t0ctx)->rp = rp;
6490957b409SSimon J. Gerraty ((t0_context *)t0ctx)->ip = ip;
6500957b409SSimon J. Gerraty }
651