Files
zk-regex/packages/circom/circuits/common/timestamp.circom
2023-09-26 07:43:23 +09:00

891 lines
27 KiB
Plaintext

pragma circom 2.1.5;
include "zk-regex-circom/circuits/regex_helpers.circom";
template TimestampRegex(msg_bytes) {
signal input msg[msg_bytes];
signal output out;
var num_bytes = msg_bytes+1;
signal in[num_bytes];
in[0]<==128;
for (var i = 0; i < msg_bytes; i++) {
in[i+1] <== msg[i];
}
component eq[147][num_bytes];
component lt[22][num_bytes];
component and[43][num_bytes];
component multi_or[9][num_bytes];
signal states[num_bytes+1][25];
component state_changed[num_bytes];
states[0][0] <== 1;
for (var i = 1; i < 25; i++) {
states[0][i] <== 0;
}
for (var i = 0; i < num_bytes; i++) {
state_changed[i] = MultiOR(24);
lt[0][i] = LessThan(8);
lt[0][i].in[0] <== 96;
lt[0][i].in[1] <== in[i];
lt[1][i] = LessThan(8);
lt[1][i].in[0] <== in[i];
lt[1][i].in[1] <== 123;
and[0][i] = AND();
and[0][i].a <== lt[0][i].out;
and[0][i].b <== lt[1][i].out;
and[1][i] = AND();
and[1][i].a <== states[i][1];
and[1][i].b <== and[0][i].out;
eq[0][i] = IsEqual();
eq[0][i].in[0] <== in[i];
eq[0][i].in[1] <== 97;
eq[1][i] = IsEqual();
eq[1][i].in[0] <== in[i];
eq[1][i].in[1] <== 98;
eq[2][i] = IsEqual();
eq[2][i].in[0] <== in[i];
eq[2][i].in[1] <== 99;
eq[3][i] = IsEqual();
eq[3][i].in[0] <== in[i];
eq[3][i].in[1] <== 100;
eq[4][i] = IsEqual();
eq[4][i].in[0] <== in[i];
eq[4][i].in[1] <== 101;
eq[5][i] = IsEqual();
eq[5][i].in[0] <== in[i];
eq[5][i].in[1] <== 102;
eq[6][i] = IsEqual();
eq[6][i].in[0] <== in[i];
eq[6][i].in[1] <== 103;
eq[7][i] = IsEqual();
eq[7][i].in[0] <== in[i];
eq[7][i].in[1] <== 104;
eq[8][i] = IsEqual();
eq[8][i].in[0] <== in[i];
eq[8][i].in[1] <== 105;
eq[9][i] = IsEqual();
eq[9][i].in[0] <== in[i];
eq[9][i].in[1] <== 106;
eq[10][i] = IsEqual();
eq[10][i].in[0] <== in[i];
eq[10][i].in[1] <== 107;
eq[11][i] = IsEqual();
eq[11][i].in[0] <== in[i];
eq[11][i].in[1] <== 108;
eq[12][i] = IsEqual();
eq[12][i].in[0] <== in[i];
eq[12][i].in[1] <== 109;
eq[13][i] = IsEqual();
eq[13][i].in[0] <== in[i];
eq[13][i].in[1] <== 110;
eq[14][i] = IsEqual();
eq[14][i].in[0] <== in[i];
eq[14][i].in[1] <== 111;
eq[15][i] = IsEqual();
eq[15][i].in[0] <== in[i];
eq[15][i].in[1] <== 112;
eq[16][i] = IsEqual();
eq[16][i].in[0] <== in[i];
eq[16][i].in[1] <== 113;
eq[17][i] = IsEqual();
eq[17][i].in[0] <== in[i];
eq[17][i].in[1] <== 114;
eq[18][i] = IsEqual();
eq[18][i].in[0] <== in[i];
eq[18][i].in[1] <== 115;
eq[19][i] = IsEqual();
eq[19][i].in[0] <== in[i];
eq[19][i].in[1] <== 117;
eq[20][i] = IsEqual();
eq[20][i].in[0] <== in[i];
eq[20][i].in[1] <== 118;
eq[21][i] = IsEqual();
eq[21][i].in[0] <== in[i];
eq[21][i].in[1] <== 119;
eq[22][i] = IsEqual();
eq[22][i].in[0] <== in[i];
eq[22][i].in[1] <== 120;
eq[23][i] = IsEqual();
eq[23][i].in[0] <== in[i];
eq[23][i].in[1] <== 121;
eq[24][i] = IsEqual();
eq[24][i].in[0] <== in[i];
eq[24][i].in[1] <== 122;
and[2][i] = AND();
and[2][i].a <== states[i][14];
multi_or[0][i] = MultiOR(25);
multi_or[0][i].in[0] <== eq[0][i].out;
multi_or[0][i].in[1] <== eq[1][i].out;
multi_or[0][i].in[2] <== eq[2][i].out;
multi_or[0][i].in[3] <== eq[3][i].out;
multi_or[0][i].in[4] <== eq[4][i].out;
multi_or[0][i].in[5] <== eq[5][i].out;
multi_or[0][i].in[6] <== eq[6][i].out;
multi_or[0][i].in[7] <== eq[7][i].out;
multi_or[0][i].in[8] <== eq[8][i].out;
multi_or[0][i].in[9] <== eq[9][i].out;
multi_or[0][i].in[10] <== eq[10][i].out;
multi_or[0][i].in[11] <== eq[11][i].out;
multi_or[0][i].in[12] <== eq[12][i].out;
multi_or[0][i].in[13] <== eq[13][i].out;
multi_or[0][i].in[14] <== eq[14][i].out;
multi_or[0][i].in[15] <== eq[15][i].out;
multi_or[0][i].in[16] <== eq[16][i].out;
multi_or[0][i].in[17] <== eq[17][i].out;
multi_or[0][i].in[18] <== eq[18][i].out;
multi_or[0][i].in[19] <== eq[19][i].out;
multi_or[0][i].in[20] <== eq[20][i].out;
multi_or[0][i].in[21] <== eq[21][i].out;
multi_or[0][i].in[22] <== eq[22][i].out;
multi_or[0][i].in[23] <== eq[23][i].out;
multi_or[0][i].in[24] <== eq[24][i].out;
and[2][i].b <== multi_or[0][i].out;
lt[2][i] = LessThan(8);
lt[2][i].in[0] <== 96;
lt[2][i].in[1] <== in[i];
lt[3][i] = LessThan(8);
lt[3][i].in[0] <== in[i];
lt[3][i].in[1] <== 123;
and[3][i] = AND();
and[3][i].a <== lt[2][i].out;
and[3][i].b <== lt[3][i].out;
and[4][i] = AND();
and[4][i].a <== states[i][16];
and[4][i].b <== and[3][i].out;
lt[4][i] = LessThan(8);
lt[4][i].in[0] <== 96;
lt[4][i].in[1] <== in[i];
lt[5][i] = LessThan(8);
lt[5][i].in[0] <== in[i];
lt[5][i].in[1] <== 123;
and[5][i] = AND();
and[5][i].a <== lt[4][i].out;
and[5][i].b <== lt[5][i].out;
and[6][i] = AND();
and[6][i].a <== states[i][22];
and[6][i].b <== and[5][i].out;
multi_or[1][i] = MultiOR(4);
multi_or[1][i].in[0] <== and[1][i].out;
multi_or[1][i].in[1] <== and[2][i].out;
multi_or[1][i].in[2] <== and[4][i].out;
multi_or[1][i].in[3] <== and[6][i].out;
states[i+1][1] <== multi_or[1][i].out;
state_changed[i].in[0] <== states[i+1][1];
eq[25][i] = IsEqual();
eq[25][i].in[0] <== in[i];
eq[25][i].in[1] <== 61;
and[7][i] = AND();
and[7][i].a <== states[i][1];
and[7][i].b <== eq[25][i].out;
states[i+1][2] <== and[7][i].out;
state_changed[i].in[1] <== states[i+1][2];
eq[26][i] = IsEqual();
eq[26][i].in[0] <== in[i];
eq[26][i].in[1] <== 100;
and[8][i] = AND();
and[8][i].a <== states[i][0];
and[8][i].b <== eq[26][i].out;
states[i+1][3] <== and[8][i].out;
state_changed[i].in[2] <== states[i+1][3];
lt[6][i] = LessThan(8);
lt[6][i].in[0] <== 47;
lt[6][i].in[1] <== in[i];
lt[7][i] = LessThan(8);
lt[7][i].in[0] <== in[i];
lt[7][i].in[1] <== 58;
and[9][i] = AND();
and[9][i].a <== lt[6][i].out;
and[9][i].b <== lt[7][i].out;
lt[8][i] = LessThan(8);
lt[8][i].in[0] <== 64;
lt[8][i].in[1] <== in[i];
lt[9][i] = LessThan(8);
lt[9][i].in[0] <== in[i];
lt[9][i].in[1] <== 127;
and[10][i] = AND();
and[10][i].a <== lt[8][i].out;
and[10][i].b <== lt[9][i].out;
eq[27][i] = IsEqual();
eq[27][i].in[0] <== in[i];
eq[27][i].in[1] <== 9;
eq[28][i] = IsEqual();
eq[28][i].in[0] <== in[i];
eq[28][i].in[1] <== 10;
eq[29][i] = IsEqual();
eq[29][i].in[0] <== in[i];
eq[29][i].in[1] <== 13;
eq[30][i] = IsEqual();
eq[30][i].in[0] <== in[i];
eq[30][i].in[1] <== 32;
eq[31][i] = IsEqual();
eq[31][i].in[0] <== in[i];
eq[31][i].in[1] <== 33;
eq[32][i] = IsEqual();
eq[32][i].in[0] <== in[i];
eq[32][i].in[1] <== 34;
eq[33][i] = IsEqual();
eq[33][i].in[0] <== in[i];
eq[33][i].in[1] <== 35;
eq[34][i] = IsEqual();
eq[34][i].in[0] <== in[i];
eq[34][i].in[1] <== 36;
eq[35][i] = IsEqual();
eq[35][i].in[0] <== in[i];
eq[35][i].in[1] <== 37;
eq[36][i] = IsEqual();
eq[36][i].in[0] <== in[i];
eq[36][i].in[1] <== 38;
eq[37][i] = IsEqual();
eq[37][i].in[0] <== in[i];
eq[37][i].in[1] <== 39;
eq[38][i] = IsEqual();
eq[38][i].in[0] <== in[i];
eq[38][i].in[1] <== 40;
eq[39][i] = IsEqual();
eq[39][i].in[0] <== in[i];
eq[39][i].in[1] <== 41;
eq[40][i] = IsEqual();
eq[40][i].in[0] <== in[i];
eq[40][i].in[1] <== 42;
eq[41][i] = IsEqual();
eq[41][i].in[0] <== in[i];
eq[41][i].in[1] <== 43;
eq[42][i] = IsEqual();
eq[42][i].in[0] <== in[i];
eq[42][i].in[1] <== 44;
eq[43][i] = IsEqual();
eq[43][i].in[0] <== in[i];
eq[43][i].in[1] <== 45;
eq[44][i] = IsEqual();
eq[44][i].in[0] <== in[i];
eq[44][i].in[1] <== 46;
eq[45][i] = IsEqual();
eq[45][i].in[0] <== in[i];
eq[45][i].in[1] <== 47;
eq[46][i] = IsEqual();
eq[46][i].in[0] <== in[i];
eq[46][i].in[1] <== 58;
eq[47][i] = IsEqual();
eq[47][i].in[0] <== in[i];
eq[47][i].in[1] <== 60;
eq[48][i] = IsEqual();
eq[48][i].in[0] <== in[i];
eq[48][i].in[1] <== 61;
eq[49][i] = IsEqual();
eq[49][i].in[0] <== in[i];
eq[49][i].in[1] <== 62;
eq[50][i] = IsEqual();
eq[50][i].in[0] <== in[i];
eq[50][i].in[1] <== 63;
eq[51][i] = IsEqual();
eq[51][i].in[0] <== in[i];
eq[51][i].in[1] <== 64;
and[11][i] = AND();
and[11][i].a <== states[i][2];
multi_or[2][i] = MultiOR(27);
multi_or[2][i].in[0] <== and[9][i].out;
multi_or[2][i].in[1] <== and[10][i].out;
multi_or[2][i].in[2] <== eq[27][i].out;
multi_or[2][i].in[3] <== eq[28][i].out;
multi_or[2][i].in[4] <== eq[29][i].out;
multi_or[2][i].in[5] <== eq[30][i].out;
multi_or[2][i].in[6] <== eq[31][i].out;
multi_or[2][i].in[7] <== eq[32][i].out;
multi_or[2][i].in[8] <== eq[33][i].out;
multi_or[2][i].in[9] <== eq[34][i].out;
multi_or[2][i].in[10] <== eq[35][i].out;
multi_or[2][i].in[11] <== eq[36][i].out;
multi_or[2][i].in[12] <== eq[37][i].out;
multi_or[2][i].in[13] <== eq[38][i].out;
multi_or[2][i].in[14] <== eq[39][i].out;
multi_or[2][i].in[15] <== eq[40][i].out;
multi_or[2][i].in[16] <== eq[41][i].out;
multi_or[2][i].in[17] <== eq[42][i].out;
multi_or[2][i].in[18] <== eq[43][i].out;
multi_or[2][i].in[19] <== eq[44][i].out;
multi_or[2][i].in[20] <== eq[45][i].out;
multi_or[2][i].in[21] <== eq[46][i].out;
multi_or[2][i].in[22] <== eq[47][i].out;
multi_or[2][i].in[23] <== eq[48][i].out;
multi_or[2][i].in[24] <== eq[49][i].out;
multi_or[2][i].in[25] <== eq[50][i].out;
multi_or[2][i].in[26] <== eq[51][i].out;
and[11][i].b <== multi_or[2][i].out;
lt[10][i] = LessThan(8);
lt[10][i].in[0] <== 47;
lt[10][i].in[1] <== in[i];
lt[11][i] = LessThan(8);
lt[11][i].in[0] <== in[i];
lt[11][i].in[1] <== 58;
and[12][i] = AND();
and[12][i].a <== lt[10][i].out;
and[12][i].b <== lt[11][i].out;
lt[12][i] = LessThan(8);
lt[12][i].in[0] <== 64;
lt[12][i].in[1] <== in[i];
lt[13][i] = LessThan(8);
lt[13][i].in[0] <== in[i];
lt[13][i].in[1] <== 127;
and[13][i] = AND();
and[13][i].a <== lt[12][i].out;
and[13][i].b <== lt[13][i].out;
eq[52][i] = IsEqual();
eq[52][i].in[0] <== in[i];
eq[52][i].in[1] <== 9;
eq[53][i] = IsEqual();
eq[53][i].in[0] <== in[i];
eq[53][i].in[1] <== 10;
eq[54][i] = IsEqual();
eq[54][i].in[0] <== in[i];
eq[54][i].in[1] <== 13;
eq[55][i] = IsEqual();
eq[55][i].in[0] <== in[i];
eq[55][i].in[1] <== 32;
eq[56][i] = IsEqual();
eq[56][i].in[0] <== in[i];
eq[56][i].in[1] <== 33;
eq[57][i] = IsEqual();
eq[57][i].in[0] <== in[i];
eq[57][i].in[1] <== 34;
eq[58][i] = IsEqual();
eq[58][i].in[0] <== in[i];
eq[58][i].in[1] <== 35;
eq[59][i] = IsEqual();
eq[59][i].in[0] <== in[i];
eq[59][i].in[1] <== 36;
eq[60][i] = IsEqual();
eq[60][i].in[0] <== in[i];
eq[60][i].in[1] <== 37;
eq[61][i] = IsEqual();
eq[61][i].in[0] <== in[i];
eq[61][i].in[1] <== 38;
eq[62][i] = IsEqual();
eq[62][i].in[0] <== in[i];
eq[62][i].in[1] <== 39;
eq[63][i] = IsEqual();
eq[63][i].in[0] <== in[i];
eq[63][i].in[1] <== 40;
eq[64][i] = IsEqual();
eq[64][i].in[0] <== in[i];
eq[64][i].in[1] <== 41;
eq[65][i] = IsEqual();
eq[65][i].in[0] <== in[i];
eq[65][i].in[1] <== 42;
eq[66][i] = IsEqual();
eq[66][i].in[0] <== in[i];
eq[66][i].in[1] <== 43;
eq[67][i] = IsEqual();
eq[67][i].in[0] <== in[i];
eq[67][i].in[1] <== 44;
eq[68][i] = IsEqual();
eq[68][i].in[0] <== in[i];
eq[68][i].in[1] <== 45;
eq[69][i] = IsEqual();
eq[69][i].in[0] <== in[i];
eq[69][i].in[1] <== 46;
eq[70][i] = IsEqual();
eq[70][i].in[0] <== in[i];
eq[70][i].in[1] <== 47;
eq[71][i] = IsEqual();
eq[71][i].in[0] <== in[i];
eq[71][i].in[1] <== 58;
eq[72][i] = IsEqual();
eq[72][i].in[0] <== in[i];
eq[72][i].in[1] <== 60;
eq[73][i] = IsEqual();
eq[73][i].in[0] <== in[i];
eq[73][i].in[1] <== 61;
eq[74][i] = IsEqual();
eq[74][i].in[0] <== in[i];
eq[74][i].in[1] <== 62;
eq[75][i] = IsEqual();
eq[75][i].in[0] <== in[i];
eq[75][i].in[1] <== 63;
eq[76][i] = IsEqual();
eq[76][i].in[0] <== in[i];
eq[76][i].in[1] <== 64;
and[14][i] = AND();
and[14][i].a <== states[i][4];
multi_or[3][i] = MultiOR(27);
multi_or[3][i].in[0] <== and[12][i].out;
multi_or[3][i].in[1] <== and[13][i].out;
multi_or[3][i].in[2] <== eq[52][i].out;
multi_or[3][i].in[3] <== eq[53][i].out;
multi_or[3][i].in[4] <== eq[54][i].out;
multi_or[3][i].in[5] <== eq[55][i].out;
multi_or[3][i].in[6] <== eq[56][i].out;
multi_or[3][i].in[7] <== eq[57][i].out;
multi_or[3][i].in[8] <== eq[58][i].out;
multi_or[3][i].in[9] <== eq[59][i].out;
multi_or[3][i].in[10] <== eq[60][i].out;
multi_or[3][i].in[11] <== eq[61][i].out;
multi_or[3][i].in[12] <== eq[62][i].out;
multi_or[3][i].in[13] <== eq[63][i].out;
multi_or[3][i].in[14] <== eq[64][i].out;
multi_or[3][i].in[15] <== eq[65][i].out;
multi_or[3][i].in[16] <== eq[66][i].out;
multi_or[3][i].in[17] <== eq[67][i].out;
multi_or[3][i].in[18] <== eq[68][i].out;
multi_or[3][i].in[19] <== eq[69][i].out;
multi_or[3][i].in[20] <== eq[70][i].out;
multi_or[3][i].in[21] <== eq[71][i].out;
multi_or[3][i].in[22] <== eq[72][i].out;
multi_or[3][i].in[23] <== eq[73][i].out;
multi_or[3][i].in[24] <== eq[74][i].out;
multi_or[3][i].in[25] <== eq[75][i].out;
multi_or[3][i].in[26] <== eq[76][i].out;
and[14][i].b <== multi_or[3][i].out;
lt[14][i] = LessThan(8);
lt[14][i].in[0] <== 64;
lt[14][i].in[1] <== in[i];
lt[15][i] = LessThan(8);
lt[15][i].in[0] <== in[i];
lt[15][i].in[1] <== 127;
and[15][i] = AND();
and[15][i].a <== lt[14][i].out;
and[15][i].b <== lt[15][i].out;
eq[77][i] = IsEqual();
eq[77][i].in[0] <== in[i];
eq[77][i].in[1] <== 9;
eq[78][i] = IsEqual();
eq[78][i].in[0] <== in[i];
eq[78][i].in[1] <== 10;
eq[79][i] = IsEqual();
eq[79][i].in[0] <== in[i];
eq[79][i].in[1] <== 13;
eq[80][i] = IsEqual();
eq[80][i].in[0] <== in[i];
eq[80][i].in[1] <== 32;
eq[81][i] = IsEqual();
eq[81][i].in[0] <== in[i];
eq[81][i].in[1] <== 33;
eq[82][i] = IsEqual();
eq[82][i].in[0] <== in[i];
eq[82][i].in[1] <== 34;
eq[83][i] = IsEqual();
eq[83][i].in[0] <== in[i];
eq[83][i].in[1] <== 35;
eq[84][i] = IsEqual();
eq[84][i].in[0] <== in[i];
eq[84][i].in[1] <== 36;
eq[85][i] = IsEqual();
eq[85][i].in[0] <== in[i];
eq[85][i].in[1] <== 37;
eq[86][i] = IsEqual();
eq[86][i].in[0] <== in[i];
eq[86][i].in[1] <== 38;
eq[87][i] = IsEqual();
eq[87][i].in[0] <== in[i];
eq[87][i].in[1] <== 39;
eq[88][i] = IsEqual();
eq[88][i].in[0] <== in[i];
eq[88][i].in[1] <== 40;
eq[89][i] = IsEqual();
eq[89][i].in[0] <== in[i];
eq[89][i].in[1] <== 41;
eq[90][i] = IsEqual();
eq[90][i].in[0] <== in[i];
eq[90][i].in[1] <== 42;
eq[91][i] = IsEqual();
eq[91][i].in[0] <== in[i];
eq[91][i].in[1] <== 43;
eq[92][i] = IsEqual();
eq[92][i].in[0] <== in[i];
eq[92][i].in[1] <== 44;
eq[93][i] = IsEqual();
eq[93][i].in[0] <== in[i];
eq[93][i].in[1] <== 45;
eq[94][i] = IsEqual();
eq[94][i].in[0] <== in[i];
eq[94][i].in[1] <== 46;
eq[95][i] = IsEqual();
eq[95][i].in[0] <== in[i];
eq[95][i].in[1] <== 47;
eq[96][i] = IsEqual();
eq[96][i].in[0] <== in[i];
eq[96][i].in[1] <== 58;
eq[97][i] = IsEqual();
eq[97][i].in[0] <== in[i];
eq[97][i].in[1] <== 60;
eq[98][i] = IsEqual();
eq[98][i].in[0] <== in[i];
eq[98][i].in[1] <== 61;
eq[99][i] = IsEqual();
eq[99][i].in[0] <== in[i];
eq[99][i].in[1] <== 62;
eq[100][i] = IsEqual();
eq[100][i].in[0] <== in[i];
eq[100][i].in[1] <== 63;
eq[101][i] = IsEqual();
eq[101][i].in[0] <== in[i];
eq[101][i].in[1] <== 64;
and[16][i] = AND();
and[16][i].a <== states[i][18];
multi_or[4][i] = MultiOR(26);
multi_or[4][i].in[0] <== and[15][i].out;
multi_or[4][i].in[1] <== eq[77][i].out;
multi_or[4][i].in[2] <== eq[78][i].out;
multi_or[4][i].in[3] <== eq[79][i].out;
multi_or[4][i].in[4] <== eq[80][i].out;
multi_or[4][i].in[5] <== eq[81][i].out;
multi_or[4][i].in[6] <== eq[82][i].out;
multi_or[4][i].in[7] <== eq[83][i].out;
multi_or[4][i].in[8] <== eq[84][i].out;
multi_or[4][i].in[9] <== eq[85][i].out;
multi_or[4][i].in[10] <== eq[86][i].out;
multi_or[4][i].in[11] <== eq[87][i].out;
multi_or[4][i].in[12] <== eq[88][i].out;
multi_or[4][i].in[13] <== eq[89][i].out;
multi_or[4][i].in[14] <== eq[90][i].out;
multi_or[4][i].in[15] <== eq[91][i].out;
multi_or[4][i].in[16] <== eq[92][i].out;
multi_or[4][i].in[17] <== eq[93][i].out;
multi_or[4][i].in[18] <== eq[94][i].out;
multi_or[4][i].in[19] <== eq[95][i].out;
multi_or[4][i].in[20] <== eq[96][i].out;
multi_or[4][i].in[21] <== eq[97][i].out;
multi_or[4][i].in[22] <== eq[98][i].out;
multi_or[4][i].in[23] <== eq[99][i].out;
multi_or[4][i].in[24] <== eq[100][i].out;
multi_or[4][i].in[25] <== eq[101][i].out;
and[16][i].b <== multi_or[4][i].out;
lt[16][i] = LessThan(8);
lt[16][i].in[0] <== 64;
lt[16][i].in[1] <== in[i];
lt[17][i] = LessThan(8);
lt[17][i].in[0] <== in[i];
lt[17][i].in[1] <== 127;
and[17][i] = AND();
and[17][i].a <== lt[16][i].out;
and[17][i].b <== lt[17][i].out;
eq[102][i] = IsEqual();
eq[102][i].in[0] <== in[i];
eq[102][i].in[1] <== 9;
eq[103][i] = IsEqual();
eq[103][i].in[0] <== in[i];
eq[103][i].in[1] <== 10;
eq[104][i] = IsEqual();
eq[104][i].in[0] <== in[i];
eq[104][i].in[1] <== 13;
eq[105][i] = IsEqual();
eq[105][i].in[0] <== in[i];
eq[105][i].in[1] <== 32;
eq[106][i] = IsEqual();
eq[106][i].in[0] <== in[i];
eq[106][i].in[1] <== 33;
eq[107][i] = IsEqual();
eq[107][i].in[0] <== in[i];
eq[107][i].in[1] <== 34;
eq[108][i] = IsEqual();
eq[108][i].in[0] <== in[i];
eq[108][i].in[1] <== 35;
eq[109][i] = IsEqual();
eq[109][i].in[0] <== in[i];
eq[109][i].in[1] <== 36;
eq[110][i] = IsEqual();
eq[110][i].in[0] <== in[i];
eq[110][i].in[1] <== 37;
eq[111][i] = IsEqual();
eq[111][i].in[0] <== in[i];
eq[111][i].in[1] <== 38;
eq[112][i] = IsEqual();
eq[112][i].in[0] <== in[i];
eq[112][i].in[1] <== 39;
eq[113][i] = IsEqual();
eq[113][i].in[0] <== in[i];
eq[113][i].in[1] <== 40;
eq[114][i] = IsEqual();
eq[114][i].in[0] <== in[i];
eq[114][i].in[1] <== 41;
eq[115][i] = IsEqual();
eq[115][i].in[0] <== in[i];
eq[115][i].in[1] <== 42;
eq[116][i] = IsEqual();
eq[116][i].in[0] <== in[i];
eq[116][i].in[1] <== 43;
eq[117][i] = IsEqual();
eq[117][i].in[0] <== in[i];
eq[117][i].in[1] <== 44;
eq[118][i] = IsEqual();
eq[118][i].in[0] <== in[i];
eq[118][i].in[1] <== 45;
eq[119][i] = IsEqual();
eq[119][i].in[0] <== in[i];
eq[119][i].in[1] <== 46;
eq[120][i] = IsEqual();
eq[120][i].in[0] <== in[i];
eq[120][i].in[1] <== 47;
eq[121][i] = IsEqual();
eq[121][i].in[0] <== in[i];
eq[121][i].in[1] <== 58;
eq[122][i] = IsEqual();
eq[122][i].in[0] <== in[i];
eq[122][i].in[1] <== 60;
eq[123][i] = IsEqual();
eq[123][i].in[0] <== in[i];
eq[123][i].in[1] <== 61;
eq[124][i] = IsEqual();
eq[124][i].in[0] <== in[i];
eq[124][i].in[1] <== 62;
eq[125][i] = IsEqual();
eq[125][i].in[0] <== in[i];
eq[125][i].in[1] <== 63;
eq[126][i] = IsEqual();
eq[126][i].in[0] <== in[i];
eq[126][i].in[1] <== 64;
and[18][i] = AND();
and[18][i].a <== states[i][23];
multi_or[5][i] = MultiOR(26);
multi_or[5][i].in[0] <== and[17][i].out;
multi_or[5][i].in[1] <== eq[102][i].out;
multi_or[5][i].in[2] <== eq[103][i].out;
multi_or[5][i].in[3] <== eq[104][i].out;
multi_or[5][i].in[4] <== eq[105][i].out;
multi_or[5][i].in[5] <== eq[106][i].out;
multi_or[5][i].in[6] <== eq[107][i].out;
multi_or[5][i].in[7] <== eq[108][i].out;
multi_or[5][i].in[8] <== eq[109][i].out;
multi_or[5][i].in[9] <== eq[110][i].out;
multi_or[5][i].in[10] <== eq[111][i].out;
multi_or[5][i].in[11] <== eq[112][i].out;
multi_or[5][i].in[12] <== eq[113][i].out;
multi_or[5][i].in[13] <== eq[114][i].out;
multi_or[5][i].in[14] <== eq[115][i].out;
multi_or[5][i].in[15] <== eq[116][i].out;
multi_or[5][i].in[16] <== eq[117][i].out;
multi_or[5][i].in[17] <== eq[118][i].out;
multi_or[5][i].in[18] <== eq[119][i].out;
multi_or[5][i].in[19] <== eq[120][i].out;
multi_or[5][i].in[20] <== eq[121][i].out;
multi_or[5][i].in[21] <== eq[122][i].out;
multi_or[5][i].in[22] <== eq[123][i].out;
multi_or[5][i].in[23] <== eq[124][i].out;
multi_or[5][i].in[24] <== eq[125][i].out;
multi_or[5][i].in[25] <== eq[126][i].out;
and[18][i].b <== multi_or[5][i].out;
multi_or[6][i] = MultiOR(4);
multi_or[6][i].in[0] <== and[11][i].out;
multi_or[6][i].in[1] <== and[14][i].out;
multi_or[6][i].in[2] <== and[16][i].out;
multi_or[6][i].in[3] <== and[18][i].out;
states[i+1][4] <== multi_or[6][i].out;
state_changed[i].in[3] <== states[i+1][4];
eq[127][i] = IsEqual();
eq[127][i].in[0] <== in[i];
eq[127][i].in[1] <== 107;
and[19][i] = AND();
and[19][i].a <== states[i][3];
and[19][i].b <== eq[127][i].out;
states[i+1][5] <== and[19][i].out;
state_changed[i].in[4] <== states[i+1][5];
eq[128][i] = IsEqual();
eq[128][i].in[0] <== in[i];
eq[128][i].in[1] <== 105;
and[20][i] = AND();
and[20][i].a <== states[i][5];
and[20][i].b <== eq[128][i].out;
states[i+1][6] <== and[20][i].out;
state_changed[i].in[5] <== states[i+1][6];
eq[129][i] = IsEqual();
eq[129][i].in[0] <== in[i];
eq[129][i].in[1] <== 109;
and[21][i] = AND();
and[21][i].a <== states[i][6];
and[21][i].b <== eq[129][i].out;
states[i+1][7] <== and[21][i].out;
state_changed[i].in[6] <== states[i+1][7];
eq[130][i] = IsEqual();
eq[130][i].in[0] <== in[i];
eq[130][i].in[1] <== 45;
and[22][i] = AND();
and[22][i].a <== states[i][7];
and[22][i].b <== eq[130][i].out;
states[i+1][8] <== and[22][i].out;
state_changed[i].in[7] <== states[i+1][8];
eq[131][i] = IsEqual();
eq[131][i].in[0] <== in[i];
eq[131][i].in[1] <== 115;
and[23][i] = AND();
and[23][i].a <== states[i][8];
and[23][i].b <== eq[131][i].out;
states[i+1][9] <== and[23][i].out;
state_changed[i].in[8] <== states[i+1][9];
eq[132][i] = IsEqual();
eq[132][i].in[0] <== in[i];
eq[132][i].in[1] <== 59;
and[24][i] = AND();
and[24][i].a <== states[i][4];
and[24][i].b <== eq[132][i].out;
states[i+1][10] <== and[24][i].out;
state_changed[i].in[9] <== states[i+1][10];
eq[133][i] = IsEqual();
eq[133][i].in[0] <== in[i];
eq[133][i].in[1] <== 105;
and[25][i] = AND();
and[25][i].a <== states[i][9];
and[25][i].b <== eq[133][i].out;
states[i+1][11] <== and[25][i].out;
state_changed[i].in[10] <== states[i+1][11];
eq[134][i] = IsEqual();
eq[134][i].in[0] <== in[i];
eq[134][i].in[1] <== 103;
and[26][i] = AND();
and[26][i].a <== states[i][11];
and[26][i].b <== eq[134][i].out;
states[i+1][12] <== and[26][i].out;
state_changed[i].in[11] <== states[i+1][12];
eq[135][i] = IsEqual();
eq[135][i].in[0] <== in[i];
eq[135][i].in[1] <== 110;
and[27][i] = AND();
and[27][i].a <== states[i][12];
and[27][i].b <== eq[135][i].out;
states[i+1][13] <== and[27][i].out;
state_changed[i].in[12] <== states[i+1][13];
eq[136][i] = IsEqual();
eq[136][i].in[0] <== in[i];
eq[136][i].in[1] <== 32;
and[28][i] = AND();
and[28][i].a <== states[i][10];
and[28][i].b <== eq[136][i].out;
eq[137][i] = IsEqual();
eq[137][i].in[0] <== in[i];
eq[137][i].in[1] <== 32;
and[29][i] = AND();
and[29][i].a <== states[i][24];
and[29][i].b <== eq[137][i].out;
multi_or[7][i] = MultiOR(2);
multi_or[7][i].in[0] <== and[28][i].out;
multi_or[7][i].in[1] <== and[29][i].out;
states[i+1][14] <== multi_or[7][i].out;
state_changed[i].in[13] <== states[i+1][14];
eq[138][i] = IsEqual();
eq[138][i].in[0] <== in[i];
eq[138][i].in[1] <== 97;
and[30][i] = AND();
and[30][i].a <== states[i][13];
and[30][i].b <== eq[138][i].out;
states[i+1][15] <== and[30][i].out;
state_changed[i].in[14] <== states[i+1][15];
eq[139][i] = IsEqual();
eq[139][i].in[0] <== in[i];
eq[139][i].in[1] <== 116;
and[31][i] = AND();
and[31][i].a <== states[i][14];
and[31][i].b <== eq[139][i].out;
states[i+1][16] <== and[31][i].out;
state_changed[i].in[15] <== states[i+1][16];
eq[140][i] = IsEqual();
eq[140][i].in[0] <== in[i];
eq[140][i].in[1] <== 116;
and[32][i] = AND();
and[32][i].a <== states[i][15];
and[32][i].b <== eq[140][i].out;
states[i+1][17] <== and[32][i].out;
state_changed[i].in[16] <== states[i+1][17];
eq[141][i] = IsEqual();
eq[141][i].in[0] <== in[i];
eq[141][i].in[1] <== 61;
and[33][i] = AND();
and[33][i].a <== states[i][16];
and[33][i].b <== eq[141][i].out;
states[i+1][18] <== and[33][i].out;
state_changed[i].in[17] <== states[i+1][18];
eq[142][i] = IsEqual();
eq[142][i].in[0] <== in[i];
eq[142][i].in[1] <== 117;
and[34][i] = AND();
and[34][i].a <== states[i][17];
and[34][i].b <== eq[142][i].out;
states[i+1][19] <== and[34][i].out;
state_changed[i].in[18] <== states[i+1][19];
eq[143][i] = IsEqual();
eq[143][i].in[0] <== in[i];
eq[143][i].in[1] <== 114;
and[35][i] = AND();
and[35][i].a <== states[i][19];
and[35][i].b <== eq[143][i].out;
states[i+1][20] <== and[35][i].out;
state_changed[i].in[19] <== states[i+1][20];
eq[144][i] = IsEqual();
eq[144][i].in[0] <== in[i];
eq[144][i].in[1] <== 101;
and[36][i] = AND();
and[36][i].a <== states[i][20];
and[36][i].b <== eq[144][i].out;
states[i+1][21] <== and[36][i].out;
state_changed[i].in[20] <== states[i+1][21];
eq[145][i] = IsEqual();
eq[145][i].in[0] <== in[i];
eq[145][i].in[1] <== 58;
and[37][i] = AND();
and[37][i].a <== states[i][21];
and[37][i].b <== eq[145][i].out;
states[i+1][22] <== and[37][i].out;
state_changed[i].in[21] <== states[i+1][22];
lt[18][i] = LessThan(8);
lt[18][i].in[0] <== 47;
lt[18][i].in[1] <== in[i];
lt[19][i] = LessThan(8);
lt[19][i].in[0] <== in[i];
lt[19][i].in[1] <== 58;
and[38][i] = AND();
and[38][i].a <== lt[18][i].out;
and[38][i].b <== lt[19][i].out;
and[39][i] = AND();
and[39][i].a <== states[i][18];
and[39][i].b <== and[38][i].out;
lt[20][i] = LessThan(8);
lt[20][i].in[0] <== 47;
lt[20][i].in[1] <== in[i];
lt[21][i] = LessThan(8);
lt[21][i].in[0] <== in[i];
lt[21][i].in[1] <== 58;
and[40][i] = AND();
and[40][i].a <== lt[20][i].out;
and[40][i].b <== lt[21][i].out;
and[41][i] = AND();
and[41][i].a <== states[i][23];
and[41][i].b <== and[40][i].out;
multi_or[8][i] = MultiOR(2);
multi_or[8][i].in[0] <== and[39][i].out;
multi_or[8][i].in[1] <== and[41][i].out;
states[i+1][23] <== multi_or[8][i].out;
state_changed[i].in[22] <== states[i+1][23];
eq[146][i] = IsEqual();
eq[146][i].in[0] <== in[i];
eq[146][i].in[1] <== 59;
and[42][i] = AND();
and[42][i].a <== states[i][23];
and[42][i].b <== eq[146][i].out;
states[i+1][24] <== and[42][i].out;
state_changed[i].in[23] <== states[i+1][24];
states[i+1][0] <== 1 - state_changed[i].out;
}
component final_state_result = MultiOR(num_bytes+1);
for (var i = 0; i <= num_bytes; i++) {
final_state_result.in[i] <== states[i][24];
}
out <== final_state_result.out;
signal is_consecutive[msg_bytes+1][2];
is_consecutive[msg_bytes][1] <== 1;
for (var i = 0; i < msg_bytes; i++) {
is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][24] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1];
is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0];
}
signal is_substr0[msg_bytes][3];
signal is_reveal0[msg_bytes];
signal output reveal0[msg_bytes];
for (var i = 0; i < msg_bytes; i++) {
is_substr0[i][0] <== 0;
is_substr0[i][1] <== is_substr0[i][0] + states[i+1][23] * states[i+2][23];
is_substr0[i][2] <== is_substr0[i][1] + states[i+1][18] * states[i+2][23];
is_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1];
reveal0[i] <== in[i+1] * is_reveal0[i];
}
}