diff --git a/packages/circom/circuits/common/body_hash_regex.circom b/packages/circom/circuits/common/body_hash_regex.circom index e78fbfb..1fda907 100644 --- a/packages/circom/circuits/common/body_hash_regex.circom +++ b/packages/circom/circuits/common/body_hash_regex.circom @@ -17,7 +17,7 @@ template BodyHashRegex(msg_bytes) { component eq[89][num_bytes]; component lt[24][num_bytes]; component and[76][num_bytes]; - component multi_or[23][num_bytes]; + component multi_or[20][num_bytes]; signal states[num_bytes+1][35]; component state_changed[num_bytes]; @@ -32,10 +32,10 @@ template BodyHashRegex(msg_bytes) { eq[0][i].in[0] <== in[i]; eq[0][i].in[1] <== 100; and[0][i] = AND(); - and[0][i].a <== states[i][4]; + and[0][i].a <== states[i][0]; and[0][i].b <== eq[0][i].out; and[1][i] = AND(); - and[1][i].a <== states[i][0]; + and[1][i].a <== states[i][4]; and[1][i].b <== eq[0][i].out; multi_or[0][i] = MultiOR(2); multi_or[0][i].in[0] <== and[0][i].out; @@ -168,7 +168,7 @@ template BodyHashRegex(msg_bytes) { states[i+1][17] <== and[17][i].out; state_changed[i].in[16] <== states[i+1][17]; lt[0][i] = LessEqThan(8); - lt[0][i].in[0] <== 105; + lt[0][i].in[0] <== 97; lt[0][i].in[1] <== in[i]; lt[1][i] = LessEqThan(8); lt[1][i].in[0] <== in[i]; @@ -176,64 +176,64 @@ template BodyHashRegex(msg_bytes) { and[18][i] = AND(); and[18][i].a <== lt[0][i].out; and[18][i].b <== lt[1][i].out; - eq[16][i] = IsEqual(); - eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 99; - eq[17][i] = IsEqual(); - eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 102; - eq[18][i] = IsEqual(); - eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 98; and[19][i] = AND(); - and[19][i].a <== states[i][30]; - multi_or[1][i] = MultiOR(8); - multi_or[1][i].in[0] <== and[18][i].out; - multi_or[1][i].in[1] <== eq[14][i].out; - multi_or[1][i].in[2] <== eq[16][i].out; - multi_or[1][i].in[3] <== eq[0][i].out; - multi_or[1][i].in[4] <== eq[10][i].out; - multi_or[1][i].in[5] <== eq[17][i].out; - multi_or[1][i].in[6] <== eq[18][i].out; - multi_or[1][i].in[7] <== eq[8][i].out; - and[19][i].b <== multi_or[1][i].out; + and[19][i].a <== states[i][17]; + and[19][i].b <== and[18][i].out; + and[20][i] = AND(); + and[20][i].a <== states[i][18]; + and[20][i].b <== and[18][i].out; lt[2][i] = LessEqThan(8); - lt[2][i].in[0] <== 97; + lt[2][i].in[0] <== 99; lt[2][i].in[1] <== in[i]; lt[3][i] = LessEqThan(8); lt[3][i].in[0] <== in[i]; lt[3][i].in[1] <== 122; - and[20][i] = AND(); - and[20][i].a <== lt[2][i].out; - and[20][i].b <== lt[3][i].out; and[21][i] = AND(); - and[21][i].a <== states[i][17]; - and[21][i].b <== and[20][i].out; + and[21][i].a <== lt[2][i].out; + and[21][i].b <== lt[3][i].out; + and[22][i] = AND(); + and[22][i].a <== states[i][29]; + multi_or[1][i] = MultiOR(2); + multi_or[1][i].in[0] <== and[21][i].out; + multi_or[1][i].in[1] <== eq[10][i].out; + and[22][i].b <== multi_or[1][i].out; lt[4][i] = LessEqThan(8); - lt[4][i].in[0] <== 99; + lt[4][i].in[0] <== 105; lt[4][i].in[1] <== in[i]; lt[5][i] = LessEqThan(8); lt[5][i].in[0] <== in[i]; lt[5][i].in[1] <== 122; - and[22][i] = AND(); - and[22][i].a <== lt[4][i].out; - and[22][i].b <== lt[5][i].out; and[23][i] = AND(); - and[23][i].a <== states[i][29]; - multi_or[2][i] = MultiOR(2); - multi_or[2][i].in[0] <== and[22][i].out; - multi_or[2][i].in[1] <== eq[10][i].out; - and[23][i].b <== multi_or[2][i].out; + and[23][i].a <== lt[4][i].out; + and[23][i].b <== lt[5][i].out; + eq[16][i] = IsEqual(); + eq[16][i].in[0] <== in[i]; + eq[16][i].in[1] <== 98; + eq[17][i] = IsEqual(); + eq[17][i].in[0] <== in[i]; + eq[17][i].in[1] <== 99; + eq[18][i] = IsEqual(); + eq[18][i].in[0] <== in[i]; + eq[18][i].in[1] <== 102; and[24][i] = AND(); - and[24][i].a <== states[i][31]; - and[24][i].b <== and[20][i].out; + and[24][i].a <== states[i][30]; + multi_or[2][i] = MultiOR(8); + multi_or[2][i].in[0] <== and[23][i].out; + multi_or[2][i].in[1] <== eq[10][i].out; + multi_or[2][i].in[2] <== eq[16][i].out; + multi_or[2][i].in[3] <== eq[17][i].out; + multi_or[2][i].in[4] <== eq[0][i].out; + multi_or[2][i].in[5] <== eq[14][i].out; + multi_or[2][i].in[6] <== eq[18][i].out; + multi_or[2][i].in[7] <== eq[8][i].out; + and[24][i].b <== multi_or[2][i].out; and[25][i] = AND(); - and[25][i].a <== states[i][18]; - and[25][i].b <== and[20][i].out; + and[25][i].a <== states[i][31]; + and[25][i].b <== and[18][i].out; multi_or[3][i] = MultiOR(5); multi_or[3][i].in[0] <== and[19][i].out; - multi_or[3][i].in[1] <== and[21][i].out; - multi_or[3][i].in[2] <== and[23][i].out; + multi_or[3][i].in[1] <== and[20][i].out; + multi_or[3][i].in[2] <== and[22][i].out; multi_or[3][i].in[3] <== and[24][i].out; multi_or[3][i].in[4] <== and[25][i].out; states[i+1][18] <== multi_or[3][i].out; @@ -305,7 +305,7 @@ template BodyHashRegex(msg_bytes) { eq[20][i].in[1] <== 44; eq[21][i] = IsEqual(); eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 125; + eq[21][i].in[1] <== 46; eq[22][i] = IsEqual(); eq[22][i].in[0] <== in[i]; eq[22][i].in[1] <== 60; @@ -314,66 +314,66 @@ template BodyHashRegex(msg_bytes) { eq[23][i].in[1] <== 62; eq[24][i] = IsEqual(); eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 127; + eq[24][i].in[1] <== 63; eq[25][i] = IsEqual(); eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 46; + eq[25][i].in[1] <== 64; eq[26][i] = IsEqual(); eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 123; + eq[26][i].in[1] <== 91; eq[27][i] = IsEqual(); eq[27][i].in[0] <== in[i]; eq[27][i].in[1] <== 92; eq[28][i] = IsEqual(); eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 124; + eq[28][i].in[1] <== 93; eq[29][i] = IsEqual(); eq[29][i].in[0] <== in[i]; - eq[29][i].in[1] <== 95; + eq[29][i].in[1] <== 94; eq[30][i] = IsEqual(); eq[30][i].in[0] <== in[i]; - eq[30][i].in[1] <== 96; + eq[30][i].in[1] <== 95; eq[31][i] = IsEqual(); eq[31][i].in[0] <== in[i]; - eq[31][i].in[1] <== 91; + eq[31][i].in[1] <== 96; eq[32][i] = IsEqual(); eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 126; + eq[32][i].in[1] <== 123; eq[33][i] = IsEqual(); eq[33][i].in[0] <== in[i]; - eq[33][i].in[1] <== 64; + eq[33][i].in[1] <== 124; eq[34][i] = IsEqual(); eq[34][i].in[0] <== in[i]; - eq[34][i].in[1] <== 63; + eq[34][i].in[1] <== 125; eq[35][i] = IsEqual(); eq[35][i].in[0] <== in[i]; - eq[35][i].in[1] <== 93; + eq[35][i].in[1] <== 126; eq[36][i] = IsEqual(); eq[36][i].in[0] <== in[i]; - eq[36][i].in[1] <== 94; + eq[36][i].in[1] <== 127; and[35][i] = AND(); and[35][i].a <== states[i][32]; multi_or[6][i] = MultiOR(20); multi_or[6][i].in[0] <== and[34][i].out; multi_or[6][i].in[1] <== eq[20][i].out; - multi_or[6][i].in[2] <== eq[21][i].out; - multi_or[6][i].in[3] <== eq[22][i].out; - multi_or[6][i].in[4] <== eq[23][i].out; - multi_or[6][i].in[5] <== eq[6][i].out; - multi_or[6][i].in[6] <== eq[24][i].out; - multi_or[6][i].in[7] <== eq[25][i].out; - multi_or[6][i].in[8] <== eq[26][i].out; - multi_or[6][i].in[9] <== eq[27][i].out; - multi_or[6][i].in[10] <== eq[28][i].out; - multi_or[6][i].in[11] <== eq[29][i].out; - multi_or[6][i].in[12] <== eq[30][i].out; - multi_or[6][i].in[13] <== eq[31][i].out; - multi_or[6][i].in[14] <== eq[32][i].out; - multi_or[6][i].in[15] <== eq[33][i].out; - multi_or[6][i].in[16] <== eq[34][i].out; - multi_or[6][i].in[17] <== eq[35][i].out; - multi_or[6][i].in[18] <== eq[36][i].out; - multi_or[6][i].in[19] <== eq[15][i].out; + multi_or[6][i].in[2] <== eq[6][i].out; + multi_or[6][i].in[3] <== eq[21][i].out; + multi_or[6][i].in[4] <== eq[15][i].out; + multi_or[6][i].in[5] <== eq[22][i].out; + multi_or[6][i].in[6] <== eq[23][i].out; + multi_or[6][i].in[7] <== eq[24][i].out; + multi_or[6][i].in[8] <== eq[25][i].out; + multi_or[6][i].in[9] <== eq[26][i].out; + multi_or[6][i].in[10] <== eq[27][i].out; + multi_or[6][i].in[11] <== eq[28][i].out; + multi_or[6][i].in[12] <== eq[29][i].out; + multi_or[6][i].in[13] <== eq[30][i].out; + multi_or[6][i].in[14] <== eq[31][i].out; + multi_or[6][i].in[15] <== eq[32][i].out; + multi_or[6][i].in[16] <== eq[33][i].out; + multi_or[6][i].in[17] <== eq[34][i].out; + multi_or[6][i].in[18] <== eq[35][i].out; + multi_or[6][i].in[19] <== eq[36][i].out; and[35][i].b <== multi_or[6][i].out; multi_or[7][i] = MultiOR(4); multi_or[7][i].in[0] <== and[30][i].out; @@ -383,55 +383,55 @@ template BodyHashRegex(msg_bytes) { states[i+1][20] <== multi_or[7][i].out; state_changed[i].in[19] <== states[i+1][20]; lt[14][i] = LessEqThan(8); - lt[14][i].in[0] <== 128; + lt[14][i].in[0] <== 194; lt[14][i].in[1] <== in[i]; lt[15][i] = LessEqThan(8); lt[15][i].in[0] <== in[i]; - lt[15][i].in[1] <== 159; + lt[15][i].in[1] <== 223; and[36][i] = AND(); and[36][i].a <== lt[14][i].out; and[36][i].b <== lt[15][i].out; and[37][i] = AND(); - and[37][i].a <== states[i][24]; + and[37][i].a <== states[i][19]; and[37][i].b <== and[36][i].out; + and[38][i] = AND(); + and[38][i].a <== states[i][20]; + and[38][i].b <== and[36][i].out; lt[16][i] = LessEqThan(8); lt[16][i].in[0] <== 160; lt[16][i].in[1] <== in[i]; lt[17][i] = LessEqThan(8); lt[17][i].in[0] <== in[i]; lt[17][i].in[1] <== 191; - and[38][i] = AND(); - and[38][i].a <== lt[16][i].out; - and[38][i].b <== lt[17][i].out; and[39][i] = AND(); - and[39][i].a <== states[i][22]; - and[39][i].b <== and[38][i].out; + and[39][i].a <== lt[16][i].out; + and[39][i].b <== lt[17][i].out; and[40][i] = AND(); - and[40][i].a <== states[i][23]; - and[40][i].b <== and[32][i].out; + and[40][i].a <== states[i][22]; + and[40][i].b <== and[39][i].out; + and[41][i] = AND(); + and[41][i].a <== states[i][23]; + and[41][i].b <== and[32][i].out; lt[18][i] = LessEqThan(8); - lt[18][i].in[0] <== 194; + lt[18][i].in[0] <== 128; lt[18][i].in[1] <== in[i]; lt[19][i] = LessEqThan(8); lt[19][i].in[0] <== in[i]; - lt[19][i].in[1] <== 223; - and[41][i] = AND(); - and[41][i].a <== lt[18][i].out; - and[41][i].b <== lt[19][i].out; + lt[19][i].in[1] <== 159; and[42][i] = AND(); - and[42][i].a <== states[i][20]; - and[42][i].b <== and[41][i].out; + and[42][i].a <== lt[18][i].out; + and[42][i].b <== lt[19][i].out; and[43][i] = AND(); - and[43][i].a <== states[i][19]; - and[43][i].b <== and[41][i].out; + and[43][i].a <== states[i][24]; + and[43][i].b <== and[42][i].out; and[44][i] = AND(); and[44][i].a <== states[i][32]; - and[44][i].b <== and[41][i].out; + and[44][i].b <== and[36][i].out; multi_or[8][i] = MultiOR(6); multi_or[8][i].in[0] <== and[37][i].out; - multi_or[8][i].in[1] <== and[39][i].out; + multi_or[8][i].in[1] <== and[38][i].out; multi_or[8][i].in[2] <== and[40][i].out; - multi_or[8][i].in[3] <== and[42][i].out; + multi_or[8][i].in[3] <== and[41][i].out; multi_or[8][i].in[4] <== and[43][i].out; multi_or[8][i].in[5] <== and[44][i].out; states[i+1][21] <== multi_or[8][i].out; @@ -440,13 +440,13 @@ template BodyHashRegex(msg_bytes) { eq[37][i].in[0] <== in[i]; eq[37][i].in[1] <== 224; and[45][i] = AND(); - and[45][i].a <== states[i][20]; + and[45][i].a <== states[i][19]; and[45][i].b <== eq[37][i].out; and[46][i] = AND(); - and[46][i].a <== states[i][32]; + and[46][i].a <== states[i][20]; and[46][i].b <== eq[37][i].out; and[47][i] = AND(); - and[47][i].a <== states[i][19]; + and[47][i].a <== states[i][32]; and[47][i].b <== eq[37][i].out; multi_or[9][i] = MultiOR(3); multi_or[9][i].in[0] <== and[45][i].out; @@ -456,46 +456,46 @@ template BodyHashRegex(msg_bytes) { state_changed[i].in[21] <== states[i+1][22]; eq[38][i] = IsEqual(); eq[38][i].in[0] <== in[i]; - eq[38][i].in[1] <== 227; + eq[38][i].in[1] <== 225; eq[39][i] = IsEqual(); eq[39][i].in[0] <== in[i]; - eq[39][i].in[1] <== 232; + eq[39][i].in[1] <== 226; eq[40][i] = IsEqual(); eq[40][i].in[0] <== in[i]; - eq[40][i].in[1] <== 234; + eq[40][i].in[1] <== 227; eq[41][i] = IsEqual(); eq[41][i].in[0] <== in[i]; - eq[41][i].in[1] <== 236; + eq[41][i].in[1] <== 228; eq[42][i] = IsEqual(); eq[42][i].in[0] <== in[i]; - eq[42][i].in[1] <== 239; + eq[42][i].in[1] <== 229; eq[43][i] = IsEqual(); eq[43][i].in[0] <== in[i]; - eq[43][i].in[1] <== 231; + eq[43][i].in[1] <== 230; eq[44][i] = IsEqual(); eq[44][i].in[0] <== in[i]; - eq[44][i].in[1] <== 238; + eq[44][i].in[1] <== 231; eq[45][i] = IsEqual(); eq[45][i].in[0] <== in[i]; - eq[45][i].in[1] <== 228; + eq[45][i].in[1] <== 232; eq[46][i] = IsEqual(); eq[46][i].in[0] <== in[i]; eq[46][i].in[1] <== 233; eq[47][i] = IsEqual(); eq[47][i].in[0] <== in[i]; - eq[47][i].in[1] <== 226; + eq[47][i].in[1] <== 234; eq[48][i] = IsEqual(); eq[48][i].in[0] <== in[i]; - eq[48][i].in[1] <== 229; + eq[48][i].in[1] <== 235; eq[49][i] = IsEqual(); eq[49][i].in[0] <== in[i]; - eq[49][i].in[1] <== 230; + eq[49][i].in[1] <== 236; eq[50][i] = IsEqual(); eq[50][i].in[0] <== in[i]; - eq[50][i].in[1] <== 225; + eq[50][i].in[1] <== 238; eq[51][i] = IsEqual(); eq[51][i].in[0] <== in[i]; - eq[51][i].in[1] <== 235; + eq[51][i].in[1] <== 239; and[48][i] = AND(); and[48][i].a <== states[i][19]; multi_or[10][i] = MultiOR(14); @@ -516,49 +516,28 @@ template BodyHashRegex(msg_bytes) { and[48][i].b <== multi_or[10][i].out; and[49][i] = AND(); and[49][i].a <== states[i][20]; - multi_or[11][i] = MultiOR(14); - multi_or[11][i].in[0] <== eq[50][i].out; - multi_or[11][i].in[1] <== eq[46][i].out; - multi_or[11][i].in[2] <== eq[43][i].out; - multi_or[11][i].in[3] <== eq[45][i].out; - multi_or[11][i].in[4] <== eq[39][i].out; - multi_or[11][i].in[5] <== eq[40][i].out; - multi_or[11][i].in[6] <== eq[47][i].out; - multi_or[11][i].in[7] <== eq[38][i].out; - multi_or[11][i].in[8] <== eq[51][i].out; - multi_or[11][i].in[9] <== eq[41][i].out; - multi_or[11][i].in[10] <== eq[44][i].out; - multi_or[11][i].in[11] <== eq[42][i].out; - multi_or[11][i].in[12] <== eq[49][i].out; - multi_or[11][i].in[13] <== eq[48][i].out; - and[49][i].b <== multi_or[11][i].out; + and[49][i].b <== multi_or[10][i].out; + lt[20][i] = LessEqThan(8); + lt[20][i].in[0] <== 144; + lt[20][i].in[1] <== in[i]; + lt[21][i] = LessEqThan(8); + lt[21][i].in[0] <== in[i]; + lt[21][i].in[1] <== 191; and[50][i] = AND(); - and[50][i].a <== states[i][26]; - and[50][i].b <== and[32][i].out; + and[50][i].a <== lt[20][i].out; + and[50][i].b <== lt[21][i].out; and[51][i] = AND(); - and[51][i].a <== states[i][32]; - multi_or[12][i] = MultiOR(14); - multi_or[12][i].in[0] <== eq[44][i].out; - multi_or[12][i].in[1] <== eq[42][i].out; - multi_or[12][i].in[2] <== eq[43][i].out; - multi_or[12][i].in[3] <== eq[48][i].out; - multi_or[12][i].in[4] <== eq[40][i].out; - multi_or[12][i].in[5] <== eq[50][i].out; - multi_or[12][i].in[6] <== eq[47][i].out; - multi_or[12][i].in[7] <== eq[49][i].out; - multi_or[12][i].in[8] <== eq[41][i].out; - multi_or[12][i].in[9] <== eq[45][i].out; - multi_or[12][i].in[10] <== eq[46][i].out; - multi_or[12][i].in[11] <== eq[51][i].out; - multi_or[12][i].in[12] <== eq[38][i].out; - multi_or[12][i].in[13] <== eq[39][i].out; - and[51][i].b <== multi_or[12][i].out; + and[51][i].a <== states[i][25]; + and[51][i].b <== and[50][i].out; + and[52][i] = AND(); + and[52][i].a <== states[i][26]; + and[52][i].b <== and[32][i].out; eq[52][i] = IsEqual(); eq[52][i].in[0] <== in[i]; - eq[52][i].in[1] <== 136; + eq[52][i].in[1] <== 128; eq[53][i] = IsEqual(); eq[53][i].in[0] <== in[i]; - eq[53][i].in[1] <== 132; + eq[53][i].in[1] <== 129; eq[54][i] = IsEqual(); eq[54][i].in[0] <== in[i]; eq[54][i].in[1] <== 130; @@ -567,80 +546,71 @@ template BodyHashRegex(msg_bytes) { eq[55][i].in[1] <== 131; eq[56][i] = IsEqual(); eq[56][i].in[0] <== in[i]; - eq[56][i].in[1] <== 129; + eq[56][i].in[1] <== 132; eq[57][i] = IsEqual(); eq[57][i].in[0] <== in[i]; - eq[57][i].in[1] <== 135; + eq[57][i].in[1] <== 133; eq[58][i] = IsEqual(); eq[58][i].in[0] <== in[i]; - eq[58][i].in[1] <== 142; + eq[58][i].in[1] <== 134; eq[59][i] = IsEqual(); eq[59][i].in[0] <== in[i]; - eq[59][i].in[1] <== 138; + eq[59][i].in[1] <== 135; eq[60][i] = IsEqual(); eq[60][i].in[0] <== in[i]; - eq[60][i].in[1] <== 141; + eq[60][i].in[1] <== 136; eq[61][i] = IsEqual(); eq[61][i].in[0] <== in[i]; - eq[61][i].in[1] <== 134; + eq[61][i].in[1] <== 137; eq[62][i] = IsEqual(); eq[62][i].in[0] <== in[i]; - eq[62][i].in[1] <== 143; + eq[62][i].in[1] <== 138; eq[63][i] = IsEqual(); eq[63][i].in[0] <== in[i]; - eq[63][i].in[1] <== 133; + eq[63][i].in[1] <== 139; eq[64][i] = IsEqual(); eq[64][i].in[0] <== in[i]; - eq[64][i].in[1] <== 128; + eq[64][i].in[1] <== 140; eq[65][i] = IsEqual(); eq[65][i].in[0] <== in[i]; - eq[65][i].in[1] <== 139; + eq[65][i].in[1] <== 141; eq[66][i] = IsEqual(); eq[66][i].in[0] <== in[i]; - eq[66][i].in[1] <== 137; + eq[66][i].in[1] <== 142; eq[67][i] = IsEqual(); eq[67][i].in[0] <== in[i]; - eq[67][i].in[1] <== 140; - and[52][i] = AND(); - and[52][i].a <== states[i][27]; - multi_or[13][i] = MultiOR(16); - multi_or[13][i].in[0] <== eq[52][i].out; - multi_or[13][i].in[1] <== eq[53][i].out; - multi_or[13][i].in[2] <== eq[54][i].out; - multi_or[13][i].in[3] <== eq[55][i].out; - multi_or[13][i].in[4] <== eq[56][i].out; - multi_or[13][i].in[5] <== eq[57][i].out; - multi_or[13][i].in[6] <== eq[58][i].out; - multi_or[13][i].in[7] <== eq[59][i].out; - multi_or[13][i].in[8] <== eq[60][i].out; - multi_or[13][i].in[9] <== eq[61][i].out; - multi_or[13][i].in[10] <== eq[62][i].out; - multi_or[13][i].in[11] <== eq[63][i].out; - multi_or[13][i].in[12] <== eq[64][i].out; - multi_or[13][i].in[13] <== eq[65][i].out; - multi_or[13][i].in[14] <== eq[66][i].out; - multi_or[13][i].in[15] <== eq[67][i].out; - and[52][i].b <== multi_or[13][i].out; - lt[20][i] = LessEqThan(8); - lt[20][i].in[0] <== 144; - lt[20][i].in[1] <== in[i]; - lt[21][i] = LessEqThan(8); - lt[21][i].in[0] <== in[i]; - lt[21][i].in[1] <== 191; + eq[67][i].in[1] <== 143; and[53][i] = AND(); - and[53][i].a <== lt[20][i].out; - and[53][i].b <== lt[21][i].out; + and[53][i].a <== states[i][27]; + multi_or[11][i] = MultiOR(16); + multi_or[11][i].in[0] <== eq[52][i].out; + multi_or[11][i].in[1] <== eq[53][i].out; + multi_or[11][i].in[2] <== eq[54][i].out; + multi_or[11][i].in[3] <== eq[55][i].out; + multi_or[11][i].in[4] <== eq[56][i].out; + multi_or[11][i].in[5] <== eq[57][i].out; + multi_or[11][i].in[6] <== eq[58][i].out; + multi_or[11][i].in[7] <== eq[59][i].out; + multi_or[11][i].in[8] <== eq[60][i].out; + multi_or[11][i].in[9] <== eq[61][i].out; + multi_or[11][i].in[10] <== eq[62][i].out; + multi_or[11][i].in[11] <== eq[63][i].out; + multi_or[11][i].in[12] <== eq[64][i].out; + multi_or[11][i].in[13] <== eq[65][i].out; + multi_or[11][i].in[14] <== eq[66][i].out; + multi_or[11][i].in[15] <== eq[67][i].out; + and[53][i].b <== multi_or[11][i].out; and[54][i] = AND(); - and[54][i].a <== states[i][25]; - and[54][i].b <== and[53][i].out; - multi_or[14][i] = MultiOR(6); - multi_or[14][i].in[0] <== and[48][i].out; - multi_or[14][i].in[1] <== and[49][i].out; - multi_or[14][i].in[2] <== and[50][i].out; - multi_or[14][i].in[3] <== and[51][i].out; - multi_or[14][i].in[4] <== and[52][i].out; - multi_or[14][i].in[5] <== and[54][i].out; - states[i+1][23] <== multi_or[14][i].out; + and[54][i].a <== states[i][32]; + and[54][i].b <== multi_or[10][i].out; + multi_or[12][i] = MultiOR(6); + multi_or[12][i].in[0] <== and[48][i].out; + multi_or[12][i].in[1] <== and[49][i].out; + multi_or[12][i].in[2] <== and[51][i].out; + multi_or[12][i].in[3] <== and[52][i].out; + multi_or[12][i].in[4] <== and[53][i].out; + multi_or[12][i].in[5] <== and[54][i].out; + states[i+1][23] <== multi_or[12][i].out; state_changed[i].in[22] <== states[i+1][23]; eq[68][i] = IsEqual(); eq[68][i].in[0] <== in[i]; @@ -654,11 +624,11 @@ template BodyHashRegex(msg_bytes) { and[57][i] = AND(); and[57][i].a <== states[i][32]; and[57][i].b <== eq[68][i].out; - multi_or[15][i] = MultiOR(3); - multi_or[15][i].in[0] <== and[55][i].out; - multi_or[15][i].in[1] <== and[56][i].out; - multi_or[15][i].in[2] <== and[57][i].out; - states[i+1][24] <== multi_or[15][i].out; + multi_or[13][i] = MultiOR(3); + multi_or[13][i].in[0] <== and[55][i].out; + multi_or[13][i].in[1] <== and[56][i].out; + multi_or[13][i].in[2] <== and[57][i].out; + states[i+1][24] <== multi_or[13][i].out; state_changed[i].in[23] <== states[i+1][24]; eq[69][i] = IsEqual(); eq[69][i].in[0] <== in[i]; @@ -672,11 +642,11 @@ template BodyHashRegex(msg_bytes) { and[60][i] = AND(); and[60][i].a <== states[i][32]; and[60][i].b <== eq[69][i].out; - multi_or[16][i] = MultiOR(3); - multi_or[16][i].in[0] <== and[58][i].out; - multi_or[16][i].in[1] <== and[59][i].out; - multi_or[16][i].in[2] <== and[60][i].out; - states[i+1][25] <== multi_or[16][i].out; + multi_or[14][i] = MultiOR(3); + multi_or[14][i].in[0] <== and[58][i].out; + multi_or[14][i].in[1] <== and[59][i].out; + multi_or[14][i].in[2] <== and[60][i].out; + states[i+1][25] <== multi_or[14][i].out; state_changed[i].in[24] <== states[i+1][25]; eq[70][i] = IsEqual(); eq[70][i].in[0] <== in[i]; @@ -689,40 +659,40 @@ template BodyHashRegex(msg_bytes) { eq[72][i].in[1] <== 243; and[61][i] = AND(); and[61][i].a <== states[i][19]; - multi_or[17][i] = MultiOR(3); - multi_or[17][i].in[0] <== eq[70][i].out; - multi_or[17][i].in[1] <== eq[71][i].out; - multi_or[17][i].in[2] <== eq[72][i].out; - and[61][i].b <== multi_or[17][i].out; + multi_or[15][i] = MultiOR(3); + multi_or[15][i].in[0] <== eq[70][i].out; + multi_or[15][i].in[1] <== eq[71][i].out; + multi_or[15][i].in[2] <== eq[72][i].out; + and[61][i].b <== multi_or[15][i].out; and[62][i] = AND(); and[62][i].a <== states[i][20]; - and[62][i].b <== multi_or[17][i].out; + and[62][i].b <== multi_or[15][i].out; and[63][i] = AND(); and[63][i].a <== states[i][32]; - and[63][i].b <== multi_or[17][i].out; - multi_or[18][i] = MultiOR(3); - multi_or[18][i].in[0] <== and[61][i].out; - multi_or[18][i].in[1] <== and[62][i].out; - multi_or[18][i].in[2] <== and[63][i].out; - states[i+1][26] <== multi_or[18][i].out; + and[63][i].b <== multi_or[15][i].out; + multi_or[16][i] = MultiOR(3); + multi_or[16][i].in[0] <== and[61][i].out; + multi_or[16][i].in[1] <== and[62][i].out; + multi_or[16][i].in[2] <== and[63][i].out; + states[i+1][26] <== multi_or[16][i].out; state_changed[i].in[25] <== states[i+1][26]; eq[73][i] = IsEqual(); eq[73][i].in[0] <== in[i]; eq[73][i].in[1] <== 244; and[64][i] = AND(); - and[64][i].a <== states[i][32]; + and[64][i].a <== states[i][19]; and[64][i].b <== eq[73][i].out; and[65][i] = AND(); - and[65][i].a <== states[i][19]; + and[65][i].a <== states[i][20]; and[65][i].b <== eq[73][i].out; and[66][i] = AND(); - and[66][i].a <== states[i][20]; + and[66][i].a <== states[i][32]; and[66][i].b <== eq[73][i].out; - multi_or[19][i] = MultiOR(3); - multi_or[19][i].in[0] <== and[64][i].out; - multi_or[19][i].in[1] <== and[65][i].out; - multi_or[19][i].in[2] <== and[66][i].out; - states[i+1][27] <== multi_or[19][i].out; + multi_or[17][i] = MultiOR(3); + multi_or[17][i].in[0] <== and[64][i].out; + multi_or[17][i].in[1] <== and[65][i].out; + multi_or[17][i].in[2] <== and[66][i].out; + states[i+1][27] <== multi_or[17][i].out; state_changed[i].in[26] <== states[i+1][27]; eq[74][i] = IsEqual(); eq[74][i].in[0] <== in[i]; @@ -742,7 +712,7 @@ template BodyHashRegex(msg_bytes) { state_changed[i].in[28] <== states[i+1][29]; and[69][i] = AND(); and[69][i].a <== states[i][29]; - and[69][i].b <== eq[18][i].out; + and[69][i].b <== eq[16][i].out; states[i+1][30] <== and[69][i].out; state_changed[i].in[29] <== states[i+1][30]; eq[76][i] = IsEqual(); @@ -769,82 +739,66 @@ template BodyHashRegex(msg_bytes) { and[72][i].b <== lt[23][i].out; eq[77][i] = IsEqual(); eq[77][i].in[0] <== in[i]; - eq[77][i].in[1] <== 57; + eq[77][i].in[1] <== 43; eq[78][i] = IsEqual(); eq[78][i].in[0] <== in[i]; - eq[78][i].in[1] <== 53; + eq[78][i].in[1] <== 47; eq[79][i] = IsEqual(); eq[79][i].in[0] <== in[i]; - eq[79][i].in[1] <== 52; + eq[79][i].in[1] <== 48; eq[80][i] = IsEqual(); eq[80][i].in[0] <== in[i]; - eq[80][i].in[1] <== 55; + eq[80][i].in[1] <== 49; eq[81][i] = IsEqual(); eq[81][i].in[0] <== in[i]; - eq[81][i].in[1] <== 47; + eq[81][i].in[1] <== 50; eq[82][i] = IsEqual(); eq[82][i].in[0] <== in[i]; - eq[82][i].in[1] <== 50; + eq[82][i].in[1] <== 51; eq[83][i] = IsEqual(); eq[83][i].in[0] <== in[i]; - eq[83][i].in[1] <== 54; + eq[83][i].in[1] <== 52; eq[84][i] = IsEqual(); eq[84][i].in[0] <== in[i]; - eq[84][i].in[1] <== 43; + eq[84][i].in[1] <== 53; eq[85][i] = IsEqual(); eq[85][i].in[0] <== in[i]; - eq[85][i].in[1] <== 56; + eq[85][i].in[1] <== 54; eq[86][i] = IsEqual(); eq[86][i].in[0] <== in[i]; - eq[86][i].in[1] <== 49; + eq[86][i].in[1] <== 55; eq[87][i] = IsEqual(); eq[87][i].in[0] <== in[i]; - eq[87][i].in[1] <== 51; + eq[87][i].in[1] <== 56; eq[88][i] = IsEqual(); eq[88][i].in[0] <== in[i]; - eq[88][i].in[1] <== 48; + eq[88][i].in[1] <== 57; and[73][i] = AND(); and[73][i].a <== states[i][32]; - multi_or[20][i] = MultiOR(15); - multi_or[20][i].in[0] <== and[72][i].out; - multi_or[20][i].in[1] <== and[20][i].out; - multi_or[20][i].in[2] <== eq[77][i].out; - multi_or[20][i].in[3] <== eq[78][i].out; - multi_or[20][i].in[4] <== eq[79][i].out; - multi_or[20][i].in[5] <== eq[80][i].out; - multi_or[20][i].in[6] <== eq[81][i].out; - multi_or[20][i].in[7] <== eq[82][i].out; - multi_or[20][i].in[8] <== eq[83][i].out; - multi_or[20][i].in[9] <== eq[84][i].out; - multi_or[20][i].in[10] <== eq[85][i].out; - multi_or[20][i].in[11] <== eq[86][i].out; - multi_or[20][i].in[12] <== eq[87][i].out; - multi_or[20][i].in[13] <== eq[88][i].out; - multi_or[20][i].in[14] <== eq[19][i].out; - and[73][i].b <== multi_or[20][i].out; + multi_or[18][i] = MultiOR(15); + multi_or[18][i].in[0] <== and[72][i].out; + multi_or[18][i].in[1] <== and[18][i].out; + multi_or[18][i].in[2] <== eq[77][i].out; + multi_or[18][i].in[3] <== eq[78][i].out; + multi_or[18][i].in[4] <== eq[79][i].out; + multi_or[18][i].in[5] <== eq[80][i].out; + multi_or[18][i].in[6] <== eq[81][i].out; + multi_or[18][i].in[7] <== eq[82][i].out; + multi_or[18][i].in[8] <== eq[83][i].out; + multi_or[18][i].in[9] <== eq[84][i].out; + multi_or[18][i].in[10] <== eq[85][i].out; + multi_or[18][i].in[11] <== eq[86][i].out; + multi_or[18][i].in[12] <== eq[87][i].out; + multi_or[18][i].in[13] <== eq[88][i].out; + multi_or[18][i].in[14] <== eq[19][i].out; + and[73][i].b <== multi_or[18][i].out; and[74][i] = AND(); and[74][i].a <== states[i][33]; - multi_or[21][i] = MultiOR(15); - multi_or[21][i].in[0] <== and[72][i].out; - multi_or[21][i].in[1] <== and[20][i].out; - multi_or[21][i].in[2] <== eq[19][i].out; - multi_or[21][i].in[3] <== eq[78][i].out; - multi_or[21][i].in[4] <== eq[77][i].out; - multi_or[21][i].in[5] <== eq[86][i].out; - multi_or[21][i].in[6] <== eq[88][i].out; - multi_or[21][i].in[7] <== eq[81][i].out; - multi_or[21][i].in[8] <== eq[82][i].out; - multi_or[21][i].in[9] <== eq[83][i].out; - multi_or[21][i].in[10] <== eq[87][i].out; - multi_or[21][i].in[11] <== eq[79][i].out; - multi_or[21][i].in[12] <== eq[80][i].out; - multi_or[21][i].in[13] <== eq[85][i].out; - multi_or[21][i].in[14] <== eq[84][i].out; - and[74][i].b <== multi_or[21][i].out; - multi_or[22][i] = MultiOR(2); - multi_or[22][i].in[0] <== and[73][i].out; - multi_or[22][i].in[1] <== and[74][i].out; - states[i+1][33] <== multi_or[22][i].out; + and[74][i].b <== multi_or[18][i].out; + multi_or[19][i] = MultiOR(2); + multi_or[19][i].in[0] <== and[73][i].out; + multi_or[19][i].in[1] <== and[74][i].out; + states[i+1][33] <== multi_or[19][i].out; state_changed[i].in[32] <== states[i+1][33]; and[75][i] = AND(); and[75][i].a <== states[i][33]; diff --git a/packages/circom/circuits/common/email_addr_regex.circom b/packages/circom/circuits/common/email_addr_regex.circom index ae2a51e..59239cf 100644 --- a/packages/circom/circuits/common/email_addr_regex.circom +++ b/packages/circom/circuits/common/email_addr_regex.circom @@ -17,7 +17,7 @@ template EmailAddrRegex(msg_bytes) { component eq[24][num_bytes]; component lt[8][num_bytes]; component and[9][num_bytes]; - component multi_or[6][num_bytes]; + component multi_or[5][num_bytes]; signal states[num_bytes+1][4]; component state_changed[num_bytes]; @@ -48,70 +48,70 @@ template EmailAddrRegex(msg_bytes) { and[1][i].b <== lt[3][i].out; eq[0][i] = IsEqual(); eq[0][i].in[0] <== in[i]; - eq[0][i].in[1] <== 49; + eq[0][i].in[1] <== 33; eq[1][i] = IsEqual(); eq[1][i].in[0] <== in[i]; - eq[1][i].in[1] <== 56; + eq[1][i].in[1] <== 35; eq[2][i] = IsEqual(); eq[2][i].in[0] <== in[i]; - eq[2][i].in[1] <== 61; + eq[2][i].in[1] <== 36; eq[3][i] = IsEqual(); eq[3][i].in[0] <== in[i]; - eq[3][i].in[1] <== 36; + eq[3][i].in[1] <== 37; eq[4][i] = IsEqual(); eq[4][i].in[0] <== in[i]; - eq[4][i].in[1] <== 55; + eq[4][i].in[1] <== 38; eq[5][i] = IsEqual(); eq[5][i].in[0] <== in[i]; - eq[5][i].in[1] <== 50; + eq[5][i].in[1] <== 39; eq[6][i] = IsEqual(); eq[6][i].in[0] <== in[i]; - eq[6][i].in[1] <== 52; + eq[6][i].in[1] <== 42; eq[7][i] = IsEqual(); eq[7][i].in[0] <== in[i]; - eq[7][i].in[1] <== 35; + eq[7][i].in[1] <== 43; eq[8][i] = IsEqual(); eq[8][i].in[0] <== in[i]; - eq[8][i].in[1] <== 57; + eq[8][i].in[1] <== 46; eq[9][i] = IsEqual(); eq[9][i].in[0] <== in[i]; eq[9][i].in[1] <== 48; eq[10][i] = IsEqual(); eq[10][i].in[0] <== in[i]; - eq[10][i].in[1] <== 42; + eq[10][i].in[1] <== 49; eq[11][i] = IsEqual(); eq[11][i].in[0] <== in[i]; - eq[11][i].in[1] <== 63; + eq[11][i].in[1] <== 50; eq[12][i] = IsEqual(); eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 255; + eq[12][i].in[1] <== 51; eq[13][i] = IsEqual(); eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 38; + eq[13][i].in[1] <== 52; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 46; + eq[14][i].in[1] <== 53; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 51; + eq[15][i].in[1] <== 54; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 37; + eq[16][i].in[1] <== 55; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 54; + eq[17][i].in[1] <== 56; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 43; + eq[18][i].in[1] <== 57; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 33; + eq[19][i].in[1] <== 61; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 39; + eq[20][i].in[1] <== 63; eq[21][i] = IsEqual(); eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 53; + eq[21][i].in[1] <== 255; and[2][i] = AND(); and[2][i].a <== states[i][0]; multi_or[0][i] = MultiOR(24); @@ -154,27 +154,27 @@ template EmailAddrRegex(msg_bytes) { multi_or[1][i] = MultiOR(23); multi_or[1][i].in[0] <== and[0][i].out; multi_or[1][i].in[1] <== and[3][i].out; - multi_or[1][i].in[2] <== eq[9][i].out; - multi_or[1][i].in[3] <== eq[21][i].out; - multi_or[1][i].in[4] <== eq[18][i].out; - multi_or[1][i].in[5] <== eq[2][i].out; - multi_or[1][i].in[6] <== eq[16][i].out; - multi_or[1][i].in[7] <== eq[0][i].out; - multi_or[1][i].in[8] <== eq[13][i].out; - multi_or[1][i].in[9] <== eq[10][i].out; - multi_or[1][i].in[10] <== eq[5][i].out; - multi_or[1][i].in[11] <== eq[14][i].out; - multi_or[1][i].in[12] <== eq[4][i].out; - multi_or[1][i].in[13] <== eq[1][i].out; - multi_or[1][i].in[14] <== eq[19][i].out; - multi_or[1][i].in[15] <== eq[7][i].out; - multi_or[1][i].in[16] <== eq[6][i].out; - multi_or[1][i].in[17] <== eq[3][i].out; - multi_or[1][i].in[18] <== eq[11][i].out; - multi_or[1][i].in[19] <== eq[8][i].out; - multi_or[1][i].in[20] <== eq[17][i].out; - multi_or[1][i].in[21] <== eq[20][i].out; - multi_or[1][i].in[22] <== eq[15][i].out; + multi_or[1][i].in[2] <== eq[0][i].out; + multi_or[1][i].in[3] <== eq[1][i].out; + multi_or[1][i].in[4] <== eq[2][i].out; + multi_or[1][i].in[5] <== eq[3][i].out; + multi_or[1][i].in[6] <== eq[4][i].out; + multi_or[1][i].in[7] <== eq[5][i].out; + multi_or[1][i].in[8] <== eq[6][i].out; + multi_or[1][i].in[9] <== eq[7][i].out; + multi_or[1][i].in[10] <== eq[8][i].out; + multi_or[1][i].in[11] <== eq[9][i].out; + multi_or[1][i].in[12] <== eq[10][i].out; + multi_or[1][i].in[13] <== eq[11][i].out; + multi_or[1][i].in[14] <== eq[12][i].out; + multi_or[1][i].in[15] <== eq[13][i].out; + multi_or[1][i].in[16] <== eq[14][i].out; + multi_or[1][i].in[17] <== eq[15][i].out; + multi_or[1][i].in[18] <== eq[16][i].out; + multi_or[1][i].in[19] <== eq[17][i].out; + multi_or[1][i].in[20] <== eq[18][i].out; + multi_or[1][i].in[21] <== eq[19][i].out; + multi_or[1][i].in[22] <== eq[20][i].out; and[4][i].b <== multi_or[1][i].out; multi_or[2][i] = MultiOR(2); multi_or[2][i].in[0] <== and[2][i].out; @@ -202,45 +202,30 @@ template EmailAddrRegex(msg_bytes) { eq[23][i].in[0] <== in[i]; eq[23][i].in[1] <== 45; and[7][i] = AND(); - and[7][i].a <== states[i][3]; + and[7][i].a <== states[i][2]; multi_or[3][i] = MultiOR(14); multi_or[3][i].in[0] <== and[0][i].out; multi_or[3][i].in[1] <== and[6][i].out; - multi_or[3][i].in[2] <== eq[21][i].out; - multi_or[3][i].in[3] <== eq[9][i].out; - multi_or[3][i].in[4] <== eq[17][i].out; - multi_or[3][i].in[5] <== eq[14][i].out; - multi_or[3][i].in[6] <== eq[8][i].out; - multi_or[3][i].in[7] <== eq[23][i].out; - multi_or[3][i].in[8] <== eq[1][i].out; - multi_or[3][i].in[9] <== eq[6][i].out; + multi_or[3][i].in[2] <== eq[23][i].out; + multi_or[3][i].in[3] <== eq[8][i].out; + multi_or[3][i].in[4] <== eq[9][i].out; + multi_or[3][i].in[5] <== eq[10][i].out; + multi_or[3][i].in[6] <== eq[11][i].out; + multi_or[3][i].in[7] <== eq[12][i].out; + multi_or[3][i].in[8] <== eq[13][i].out; + multi_or[3][i].in[9] <== eq[14][i].out; multi_or[3][i].in[10] <== eq[15][i].out; - multi_or[3][i].in[11] <== eq[4][i].out; - multi_or[3][i].in[12] <== eq[0][i].out; - multi_or[3][i].in[13] <== eq[5][i].out; + multi_or[3][i].in[11] <== eq[16][i].out; + multi_or[3][i].in[12] <== eq[17][i].out; + multi_or[3][i].in[13] <== eq[18][i].out; and[7][i].b <== multi_or[3][i].out; and[8][i] = AND(); - and[8][i].a <== states[i][2]; - multi_or[4][i] = MultiOR(14); - multi_or[4][i].in[0] <== and[0][i].out; - multi_or[4][i].in[1] <== and[6][i].out; - multi_or[4][i].in[2] <== eq[5][i].out; - multi_or[4][i].in[3] <== eq[9][i].out; - multi_or[4][i].in[4] <== eq[1][i].out; - multi_or[4][i].in[5] <== eq[6][i].out; - multi_or[4][i].in[6] <== eq[17][i].out; - multi_or[4][i].in[7] <== eq[21][i].out; - multi_or[4][i].in[8] <== eq[8][i].out; - multi_or[4][i].in[9] <== eq[14][i].out; - multi_or[4][i].in[10] <== eq[0][i].out; - multi_or[4][i].in[11] <== eq[4][i].out; - multi_or[4][i].in[12] <== eq[23][i].out; - multi_or[4][i].in[13] <== eq[15][i].out; - and[8][i].b <== multi_or[4][i].out; - multi_or[5][i] = MultiOR(2); - multi_or[5][i].in[0] <== and[7][i].out; - multi_or[5][i].in[1] <== and[8][i].out; - states[i+1][3] <== multi_or[5][i].out; + and[8][i].a <== states[i][3]; + and[8][i].b <== multi_or[3][i].out; + multi_or[4][i] = MultiOR(2); + multi_or[4][i].in[0] <== and[7][i].out; + multi_or[4][i].in[1] <== and[8][i].out; + states[i+1][3] <== multi_or[4][i].out; state_changed[i].in[2] <== states[i+1][3]; states[i+1][0] <== 1 - state_changed[i].out; } @@ -256,7 +241,7 @@ template EmailAddrRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][3] * (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]; } - // substrings calculated: [{(1, 1), (0, 1), (2, 3), (3, 3), (1, 2)}] + // substrings calculated: [{(0, 1), (1, 1), (1, 2), (2, 3), (3, 3)}] signal is_substr0[msg_bytes][6]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/circuits/common/email_addr_with_name_regex.circom b/packages/circom/circuits/common/email_addr_with_name_regex.circom index f3cf533..ddc6b85 100644 --- a/packages/circom/circuits/common/email_addr_with_name_regex.circom +++ b/packages/circom/circuits/common/email_addr_with_name_regex.circom @@ -17,7 +17,7 @@ template EmailAddrWithNameRegex(msg_bytes) { component eq[86][num_bytes]; component lt[26][num_bytes]; component and[52][num_bytes]; - component multi_or[25][num_bytes]; + component multi_or[20][num_bytes]; signal states[num_bytes+1][14]; component state_changed[num_bytes]; @@ -29,28 +29,28 @@ template EmailAddrWithNameRegex(msg_bytes) { for (var i = 0; i < num_bytes; i++) { state_changed[i] = MultiOR(13); lt[0][i] = LessEqThan(8); - lt[0][i].in[0] <== 160; + lt[0][i].in[0] <== 194; lt[0][i].in[1] <== in[i]; lt[1][i] = LessEqThan(8); lt[1][i].in[0] <== in[i]; - lt[1][i].in[1] <== 191; + lt[1][i].in[1] <== 223; 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][2]; + and[1][i].a <== states[i][0]; and[1][i].b <== and[0][i].out; lt[2][i] = LessEqThan(8); - lt[2][i].in[0] <== 49; + lt[2][i].in[0] <== 160; lt[2][i].in[1] <== in[i]; lt[3][i] = LessEqThan(8); lt[3][i].in[0] <== in[i]; - lt[3][i].in[1] <== 223; + lt[3][i].in[1] <== 191; and[2][i] = AND(); and[2][i].a <== lt[2][i].out; and[2][i].b <== lt[3][i].out; and[3][i] = AND(); - and[3][i].a <== states[i][8]; + and[3][i].a <== states[i][2]; and[3][i].b <== and[2][i].out; lt[4][i] = LessEqThan(8); lt[4][i].in[0] <== 128; @@ -77,7 +77,7 @@ template EmailAddrWithNameRegex(msg_bytes) { and[7][i].a <== states[i][4]; and[7][i].b <== and[6][i].out; lt[8][i] = LessEqThan(8); - lt[8][i].in[0] <== 127; + lt[8][i].in[0] <== 49; lt[8][i].in[1] <== in[i]; lt[9][i] = LessEqThan(8); lt[9][i].in[0] <== in[i]; @@ -85,34 +85,46 @@ template EmailAddrWithNameRegex(msg_bytes) { and[8][i] = AND(); and[8][i].a <== lt[8][i].out; and[8][i].b <== lt[9][i].out; + and[9][i] = AND(); + and[9][i].a <== states[i][8]; + and[9][i].b <== and[8][i].out; + lt[10][i] = LessEqThan(8); + lt[10][i].in[0] <== 127; + lt[10][i].in[1] <== in[i]; + lt[11][i] = LessEqThan(8); + lt[11][i].in[0] <== in[i]; + lt[11][i].in[1] <== 223; + and[10][i] = AND(); + and[10][i].a <== lt[10][i].out; + and[10][i].b <== lt[11][i].out; eq[0][i] = IsEqual(); eq[0][i].in[0] <== in[i]; - eq[0][i].in[1] <== 91; + eq[0][i].in[1] <== 58; eq[1][i] = IsEqual(); eq[1][i].in[0] <== in[i]; - eq[1][i].in[1] <== 60; + eq[1][i].in[1] <== 59; eq[2][i] = IsEqual(); eq[2][i].in[0] <== in[i]; - eq[2][i].in[1] <== 92; + eq[2][i].in[1] <== 60; eq[3][i] = IsEqual(); eq[3][i].in[0] <== in[i]; - eq[3][i].in[1] <== 58; + eq[3][i].in[1] <== 62; eq[4][i] = IsEqual(); eq[4][i].in[0] <== in[i]; - eq[4][i].in[1] <== 62; + eq[4][i].in[1] <== 64; eq[5][i] = IsEqual(); eq[5][i].in[0] <== in[i]; - eq[5][i].in[1] <== 64; + eq[5][i].in[1] <== 91; eq[6][i] = IsEqual(); eq[6][i].in[0] <== in[i]; - eq[6][i].in[1] <== 59; + eq[6][i].in[1] <== 92; eq[7][i] = IsEqual(); eq[7][i].in[0] <== in[i]; eq[7][i].in[1] <== 93; - and[9][i] = AND(); - and[9][i].a <== states[i][9]; + and[11][i] = AND(); + and[11][i].a <== states[i][9]; multi_or[0][i] = MultiOR(9); - multi_or[0][i].in[0] <== and[8][i].out; + multi_or[0][i].in[0] <== and[10][i].out; multi_or[0][i].in[1] <== eq[0][i].out; multi_or[0][i].in[2] <== eq[1][i].out; multi_or[0][i].in[3] <== eq[2][i].out; @@ -121,19 +133,7 @@ template EmailAddrWithNameRegex(msg_bytes) { multi_or[0][i].in[6] <== eq[5][i].out; multi_or[0][i].in[7] <== eq[6][i].out; multi_or[0][i].in[8] <== eq[7][i].out; - and[9][i].b <== multi_or[0][i].out; - lt[10][i] = LessEqThan(8); - lt[10][i].in[0] <== 194; - lt[10][i].in[1] <== in[i]; - lt[11][i] = LessEqThan(8); - lt[11][i].in[0] <== in[i]; - lt[11][i].in[1] <== 223; - and[10][i] = AND(); - and[10][i].a <== lt[10][i].out; - and[10][i].b <== lt[11][i].out; - and[11][i] = AND(); - and[11][i].a <== states[i][0]; - and[11][i].b <== and[10][i].out; + and[11][i].b <== multi_or[0][i].out; multi_or[1][i] = MultiOR(6); multi_or[1][i].in[0] <== and[1][i].out; multi_or[1][i].in[1] <== and[3][i].out; @@ -161,72 +161,51 @@ template EmailAddrWithNameRegex(msg_bytes) { multi_or[2][i].in[2] <== and[14][i].out; states[i+1][2] <== multi_or[2][i].out; state_changed[i].in[1] <== states[i+1][2]; - and[15][i] = AND(); - and[15][i].a <== states[i][6]; - and[15][i].b <== and[4][i].out; - lt[12][i] = LessEqThan(8); - lt[12][i].in[0] <== 144; - lt[12][i].in[1] <== in[i]; - lt[13][i] = LessEqThan(8); - lt[13][i].in[0] <== in[i]; - lt[13][i].in[1] <== 191; - and[16][i] = AND(); - and[16][i].a <== lt[12][i].out; - and[16][i].b <== lt[13][i].out; - and[17][i] = AND(); - and[17][i].a <== states[i][5]; - and[17][i].b <== and[16][i].out; eq[9][i] = IsEqual(); eq[9][i].in[0] <== in[i]; - eq[9][i].in[1] <== 138; + eq[9][i].in[1] <== 225; eq[10][i] = IsEqual(); eq[10][i].in[0] <== in[i]; - eq[10][i].in[1] <== 130; + eq[10][i].in[1] <== 226; eq[11][i] = IsEqual(); eq[11][i].in[0] <== in[i]; - eq[11][i].in[1] <== 132; + eq[11][i].in[1] <== 227; eq[12][i] = IsEqual(); eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 128; + eq[12][i].in[1] <== 228; eq[13][i] = IsEqual(); eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 134; + eq[13][i].in[1] <== 229; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 135; + eq[14][i].in[1] <== 230; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 137; + eq[15][i].in[1] <== 231; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 141; + eq[16][i].in[1] <== 232; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 142; + eq[17][i].in[1] <== 233; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 136; + eq[18][i].in[1] <== 234; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 133; + eq[19][i].in[1] <== 235; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 129; + eq[20][i].in[1] <== 236; eq[21][i] = IsEqual(); eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 139; + eq[21][i].in[1] <== 238; eq[22][i] = IsEqual(); eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 143; - eq[23][i] = IsEqual(); - eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 140; - eq[24][i] = IsEqual(); - eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 131; - and[18][i] = AND(); - and[18][i].a <== states[i][7]; - multi_or[3][i] = MultiOR(16); + eq[22][i].in[1] <== 239; + and[15][i] = AND(); + and[15][i].a <== states[i][0]; + multi_or[3][i] = MultiOR(14); multi_or[3][i].in[0] <== eq[9][i].out; multi_or[3][i].in[1] <== eq[10][i].out; multi_or[3][i].in[2] <== eq[11][i].out; @@ -241,131 +220,122 @@ template EmailAddrWithNameRegex(msg_bytes) { multi_or[3][i].in[11] <== eq[20][i].out; multi_or[3][i].in[12] <== eq[21][i].out; multi_or[3][i].in[13] <== eq[22][i].out; - multi_or[3][i].in[14] <== eq[23][i].out; - multi_or[3][i].in[15] <== eq[24][i].out; - and[18][i].b <== multi_or[3][i].out; + and[15][i].b <== multi_or[3][i].out; + lt[12][i] = LessEqThan(8); + lt[12][i].in[0] <== 144; + lt[12][i].in[1] <== in[i]; + lt[13][i] = LessEqThan(8); + lt[13][i].in[0] <== in[i]; + lt[13][i].in[1] <== 191; + and[16][i] = AND(); + and[16][i].a <== lt[12][i].out; + and[16][i].b <== lt[13][i].out; + and[17][i] = AND(); + and[17][i].a <== states[i][5]; + and[17][i].b <== and[16][i].out; + and[18][i] = AND(); + and[18][i].a <== states[i][6]; + and[18][i].b <== and[4][i].out; + eq[23][i] = IsEqual(); + eq[23][i].in[0] <== in[i]; + eq[23][i].in[1] <== 128; + eq[24][i] = IsEqual(); + eq[24][i].in[0] <== in[i]; + eq[24][i].in[1] <== 129; eq[25][i] = IsEqual(); eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 229; + eq[25][i].in[1] <== 130; eq[26][i] = IsEqual(); eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 235; + eq[26][i].in[1] <== 131; eq[27][i] = IsEqual(); eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 231; + eq[27][i].in[1] <== 132; eq[28][i] = IsEqual(); eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 238; + eq[28][i].in[1] <== 133; eq[29][i] = IsEqual(); eq[29][i].in[0] <== in[i]; - eq[29][i].in[1] <== 236; + eq[29][i].in[1] <== 134; eq[30][i] = IsEqual(); eq[30][i].in[0] <== in[i]; - eq[30][i].in[1] <== 233; + eq[30][i].in[1] <== 135; eq[31][i] = IsEqual(); eq[31][i].in[0] <== in[i]; - eq[31][i].in[1] <== 227; + eq[31][i].in[1] <== 136; eq[32][i] = IsEqual(); eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 225; + eq[32][i].in[1] <== 137; eq[33][i] = IsEqual(); eq[33][i].in[0] <== in[i]; - eq[33][i].in[1] <== 234; + eq[33][i].in[1] <== 138; eq[34][i] = IsEqual(); eq[34][i].in[0] <== in[i]; - eq[34][i].in[1] <== 226; + eq[34][i].in[1] <== 139; eq[35][i] = IsEqual(); eq[35][i].in[0] <== in[i]; - eq[35][i].in[1] <== 230; + eq[35][i].in[1] <== 140; eq[36][i] = IsEqual(); eq[36][i].in[0] <== in[i]; - eq[36][i].in[1] <== 228; + eq[36][i].in[1] <== 141; eq[37][i] = IsEqual(); eq[37][i].in[0] <== in[i]; - eq[37][i].in[1] <== 239; + eq[37][i].in[1] <== 142; eq[38][i] = IsEqual(); eq[38][i].in[0] <== in[i]; - eq[38][i].in[1] <== 232; + eq[38][i].in[1] <== 143; and[19][i] = AND(); - and[19][i].a <== states[i][8]; - multi_or[4][i] = MultiOR(14); - multi_or[4][i].in[0] <== eq[25][i].out; - multi_or[4][i].in[1] <== eq[26][i].out; - multi_or[4][i].in[2] <== eq[27][i].out; - multi_or[4][i].in[3] <== eq[28][i].out; - multi_or[4][i].in[4] <== eq[29][i].out; - multi_or[4][i].in[5] <== eq[30][i].out; - multi_or[4][i].in[6] <== eq[31][i].out; - multi_or[4][i].in[7] <== eq[32][i].out; - multi_or[4][i].in[8] <== eq[33][i].out; - multi_or[4][i].in[9] <== eq[34][i].out; - multi_or[4][i].in[10] <== eq[35][i].out; - multi_or[4][i].in[11] <== eq[36][i].out; - multi_or[4][i].in[12] <== eq[37][i].out; - multi_or[4][i].in[13] <== eq[38][i].out; + and[19][i].a <== states[i][7]; + multi_or[4][i] = MultiOR(16); + multi_or[4][i].in[0] <== eq[23][i].out; + multi_or[4][i].in[1] <== eq[24][i].out; + multi_or[4][i].in[2] <== eq[25][i].out; + multi_or[4][i].in[3] <== eq[26][i].out; + multi_or[4][i].in[4] <== eq[27][i].out; + multi_or[4][i].in[5] <== eq[28][i].out; + multi_or[4][i].in[6] <== eq[29][i].out; + multi_or[4][i].in[7] <== eq[30][i].out; + multi_or[4][i].in[8] <== eq[31][i].out; + multi_or[4][i].in[9] <== eq[32][i].out; + multi_or[4][i].in[10] <== eq[33][i].out; + multi_or[4][i].in[11] <== eq[34][i].out; + multi_or[4][i].in[12] <== eq[35][i].out; + multi_or[4][i].in[13] <== eq[36][i].out; + multi_or[4][i].in[14] <== eq[37][i].out; + multi_or[4][i].in[15] <== eq[38][i].out; and[19][i].b <== multi_or[4][i].out; and[20][i] = AND(); - and[20][i].a <== states[i][0]; - multi_or[5][i] = MultiOR(14); - multi_or[5][i].in[0] <== eq[37][i].out; - multi_or[5][i].in[1] <== eq[36][i].out; - multi_or[5][i].in[2] <== eq[31][i].out; - multi_or[5][i].in[3] <== eq[32][i].out; - multi_or[5][i].in[4] <== eq[34][i].out; - multi_or[5][i].in[5] <== eq[27][i].out; - multi_or[5][i].in[6] <== eq[28][i].out; - multi_or[5][i].in[7] <== eq[35][i].out; - multi_or[5][i].in[8] <== eq[25][i].out; - multi_or[5][i].in[9] <== eq[33][i].out; - multi_or[5][i].in[10] <== eq[26][i].out; - multi_or[5][i].in[11] <== eq[29][i].out; - multi_or[5][i].in[12] <== eq[30][i].out; - multi_or[5][i].in[13] <== eq[38][i].out; - and[20][i].b <== multi_or[5][i].out; + and[20][i].a <== states[i][8]; + and[20][i].b <== multi_or[3][i].out; and[21][i] = AND(); and[21][i].a <== states[i][9]; - multi_or[6][i] = MultiOR(14); - multi_or[6][i].in[0] <== eq[36][i].out; - multi_or[6][i].in[1] <== eq[25][i].out; - multi_or[6][i].in[2] <== eq[30][i].out; - multi_or[6][i].in[3] <== eq[34][i].out; - multi_or[6][i].in[4] <== eq[38][i].out; - multi_or[6][i].in[5] <== eq[27][i].out; - multi_or[6][i].in[6] <== eq[35][i].out; - multi_or[6][i].in[7] <== eq[26][i].out; - multi_or[6][i].in[8] <== eq[29][i].out; - multi_or[6][i].in[9] <== eq[32][i].out; - multi_or[6][i].in[10] <== eq[28][i].out; - multi_or[6][i].in[11] <== eq[37][i].out; - multi_or[6][i].in[12] <== eq[33][i].out; - multi_or[6][i].in[13] <== eq[31][i].out; - and[21][i].b <== multi_or[6][i].out; - multi_or[7][i] = MultiOR(6); - multi_or[7][i].in[0] <== and[15][i].out; - multi_or[7][i].in[1] <== and[17][i].out; - multi_or[7][i].in[2] <== and[18][i].out; - multi_or[7][i].in[3] <== and[19][i].out; - multi_or[7][i].in[4] <== and[20][i].out; - multi_or[7][i].in[5] <== and[21][i].out; - states[i+1][3] <== multi_or[7][i].out; + and[21][i].b <== multi_or[3][i].out; + multi_or[5][i] = MultiOR(6); + multi_or[5][i].in[0] <== and[15][i].out; + multi_or[5][i].in[1] <== and[17][i].out; + multi_or[5][i].in[2] <== and[18][i].out; + multi_or[5][i].in[3] <== and[19][i].out; + multi_or[5][i].in[4] <== and[20][i].out; + multi_or[5][i].in[5] <== and[21][i].out; + states[i+1][3] <== multi_or[5][i].out; state_changed[i].in[2] <== states[i+1][3]; eq[39][i] = IsEqual(); eq[39][i].in[0] <== in[i]; eq[39][i].in[1] <== 237; and[22][i] = AND(); - and[22][i].a <== states[i][8]; + and[22][i].a <== states[i][0]; and[22][i].b <== eq[39][i].out; and[23][i] = AND(); - and[23][i].a <== states[i][9]; + and[23][i].a <== states[i][8]; and[23][i].b <== eq[39][i].out; and[24][i] = AND(); - and[24][i].a <== states[i][0]; + and[24][i].a <== states[i][9]; and[24][i].b <== eq[39][i].out; - multi_or[8][i] = MultiOR(3); - multi_or[8][i].in[0] <== and[22][i].out; - multi_or[8][i].in[1] <== and[23][i].out; - multi_or[8][i].in[2] <== and[24][i].out; - states[i+1][4] <== multi_or[8][i].out; + multi_or[6][i] = MultiOR(3); + multi_or[6][i].in[0] <== and[22][i].out; + multi_or[6][i].in[1] <== and[23][i].out; + multi_or[6][i].in[2] <== and[24][i].out; + states[i+1][4] <== multi_or[6][i].out; state_changed[i].in[3] <== states[i+1][4]; eq[40][i] = IsEqual(); eq[40][i].in[0] <== in[i]; @@ -379,216 +349,212 @@ template EmailAddrWithNameRegex(msg_bytes) { and[27][i] = AND(); and[27][i].a <== states[i][9]; and[27][i].b <== eq[40][i].out; - multi_or[9][i] = MultiOR(3); - multi_or[9][i].in[0] <== and[25][i].out; - multi_or[9][i].in[1] <== and[26][i].out; - multi_or[9][i].in[2] <== and[27][i].out; - states[i+1][5] <== multi_or[9][i].out; + multi_or[7][i] = MultiOR(3); + multi_or[7][i].in[0] <== and[25][i].out; + multi_or[7][i].in[1] <== and[26][i].out; + multi_or[7][i].in[2] <== and[27][i].out; + states[i+1][5] <== multi_or[7][i].out; state_changed[i].in[4] <== states[i+1][5]; eq[41][i] = IsEqual(); eq[41][i].in[0] <== in[i]; - eq[41][i].in[1] <== 243; + eq[41][i].in[1] <== 241; eq[42][i] = IsEqual(); eq[42][i].in[0] <== in[i]; - eq[42][i].in[1] <== 241; + eq[42][i].in[1] <== 242; eq[43][i] = IsEqual(); eq[43][i].in[0] <== in[i]; - eq[43][i].in[1] <== 242; + eq[43][i].in[1] <== 243; and[28][i] = AND(); and[28][i].a <== states[i][0]; - multi_or[10][i] = MultiOR(3); - multi_or[10][i].in[0] <== eq[41][i].out; - multi_or[10][i].in[1] <== eq[42][i].out; - multi_or[10][i].in[2] <== eq[43][i].out; - and[28][i].b <== multi_or[10][i].out; + multi_or[8][i] = MultiOR(3); + multi_or[8][i].in[0] <== eq[41][i].out; + multi_or[8][i].in[1] <== eq[42][i].out; + multi_or[8][i].in[2] <== eq[43][i].out; + and[28][i].b <== multi_or[8][i].out; and[29][i] = AND(); and[29][i].a <== states[i][8]; - multi_or[11][i] = MultiOR(3); - multi_or[11][i].in[0] <== eq[42][i].out; - multi_or[11][i].in[1] <== eq[43][i].out; - multi_or[11][i].in[2] <== eq[41][i].out; - and[29][i].b <== multi_or[11][i].out; + and[29][i].b <== multi_or[8][i].out; and[30][i] = AND(); and[30][i].a <== states[i][9]; - and[30][i].b <== multi_or[11][i].out; - multi_or[12][i] = MultiOR(3); - multi_or[12][i].in[0] <== and[28][i].out; - multi_or[12][i].in[1] <== and[29][i].out; - multi_or[12][i].in[2] <== and[30][i].out; - states[i+1][6] <== multi_or[12][i].out; + and[30][i].b <== multi_or[8][i].out; + multi_or[9][i] = MultiOR(3); + multi_or[9][i].in[0] <== and[28][i].out; + multi_or[9][i].in[1] <== and[29][i].out; + multi_or[9][i].in[2] <== and[30][i].out; + states[i+1][6] <== multi_or[9][i].out; state_changed[i].in[5] <== states[i+1][6]; eq[44][i] = IsEqual(); eq[44][i].in[0] <== in[i]; eq[44][i].in[1] <== 244; and[31][i] = AND(); - and[31][i].a <== states[i][9]; + and[31][i].a <== states[i][0]; and[31][i].b <== eq[44][i].out; and[32][i] = AND(); - and[32][i].a <== states[i][0]; + and[32][i].a <== states[i][8]; and[32][i].b <== eq[44][i].out; and[33][i] = AND(); - and[33][i].a <== states[i][8]; + and[33][i].a <== states[i][9]; and[33][i].b <== eq[44][i].out; - multi_or[13][i] = MultiOR(3); - multi_or[13][i].in[0] <== and[31][i].out; - multi_or[13][i].in[1] <== and[32][i].out; - multi_or[13][i].in[2] <== and[33][i].out; - states[i+1][7] <== multi_or[13][i].out; + multi_or[10][i] = MultiOR(3); + multi_or[10][i].in[0] <== and[31][i].out; + multi_or[10][i].in[1] <== and[32][i].out; + multi_or[10][i].in[2] <== and[33][i].out; + states[i+1][7] <== multi_or[10][i].out; state_changed[i].in[6] <== states[i+1][7]; lt[14][i] = LessEqThan(8); lt[14][i].in[0] <== 14; lt[14][i].in[1] <== in[i]; lt[15][i] = LessEqThan(8); lt[15][i].in[0] <== in[i]; - lt[15][i].in[1] <== 32; + lt[15][i].in[1] <== 93; and[34][i] = AND(); and[34][i].a <== lt[14][i].out; and[34][i].b <== lt[15][i].out; + lt[16][i] = LessEqThan(8); + lt[16][i].in[0] <== 95; + lt[16][i].in[1] <== in[i]; + lt[17][i] = LessEqThan(8); + lt[17][i].in[0] <== in[i]; + lt[17][i].in[1] <== 127; + and[35][i] = AND(); + and[35][i].a <== lt[16][i].out; + and[35][i].b <== lt[17][i].out; eq[45][i] = IsEqual(); eq[45][i].in[0] <== in[i]; - eq[45][i].in[1] <== 3; + eq[45][i].in[1] <== 0; eq[46][i] = IsEqual(); eq[46][i].in[0] <== in[i]; - eq[46][i].in[1] <== 34; + eq[46][i].in[1] <== 1; eq[47][i] = IsEqual(); eq[47][i].in[0] <== in[i]; - eq[47][i].in[1] <== 12; + eq[47][i].in[1] <== 2; eq[48][i] = IsEqual(); eq[48][i].in[0] <== in[i]; - eq[48][i].in[1] <== 8; + eq[48][i].in[1] <== 3; eq[49][i] = IsEqual(); eq[49][i].in[0] <== in[i]; - eq[49][i].in[1] <== 7; + eq[49][i].in[1] <== 4; eq[50][i] = IsEqual(); eq[50][i].in[0] <== in[i]; - eq[50][i].in[1] <== 40; + eq[50][i].in[1] <== 5; eq[51][i] = IsEqual(); eq[51][i].in[0] <== in[i]; - eq[51][i].in[1] <== 4; + eq[51][i].in[1] <== 6; eq[52][i] = IsEqual(); eq[52][i].in[0] <== in[i]; - eq[52][i].in[1] <== 1; + eq[52][i].in[1] <== 7; eq[53][i] = IsEqual(); eq[53][i].in[0] <== in[i]; - eq[53][i].in[1] <== 5; + eq[53][i].in[1] <== 8; eq[54][i] = IsEqual(); eq[54][i].in[0] <== in[i]; - eq[54][i].in[1] <== 0; + eq[54][i].in[1] <== 9; eq[55][i] = IsEqual(); eq[55][i].in[0] <== in[i]; - eq[55][i].in[1] <== 41; + eq[55][i].in[1] <== 11; eq[56][i] = IsEqual(); eq[56][i].in[0] <== in[i]; - eq[56][i].in[1] <== 11; + eq[56][i].in[1] <== 12; eq[57][i] = IsEqual(); eq[57][i].in[0] <== in[i]; - eq[57][i].in[1] <== 2; - eq[58][i] = IsEqual(); - eq[58][i].in[0] <== in[i]; - eq[58][i].in[1] <== 9; - eq[59][i] = IsEqual(); - eq[59][i].in[0] <== in[i]; - eq[59][i].in[1] <== 6; - and[35][i] = AND(); - and[35][i].a <== states[i][9]; - multi_or[14][i] = MultiOR(18); - multi_or[14][i].in[0] <== and[34][i].out; - multi_or[14][i].in[1] <== eq[45][i].out; - multi_or[14][i].in[2] <== eq[46][i].out; - multi_or[14][i].in[3] <== eq[47][i].out; - multi_or[14][i].in[4] <== eq[48][i].out; - multi_or[14][i].in[5] <== eq[49][i].out; - multi_or[14][i].in[6] <== eq[50][i].out; - multi_or[14][i].in[7] <== eq[51][i].out; - multi_or[14][i].in[8] <== eq[52][i].out; - multi_or[14][i].in[9] <== eq[53][i].out; - multi_or[14][i].in[10] <== eq[54][i].out; - multi_or[14][i].in[11] <== eq[55][i].out; - multi_or[14][i].in[12] <== eq[56][i].out; - multi_or[14][i].in[13] <== eq[6][i].out; - multi_or[14][i].in[14] <== eq[3][i].out; - multi_or[14][i].in[15] <== eq[57][i].out; - multi_or[14][i].in[16] <== eq[58][i].out; - multi_or[14][i].in[17] <== eq[59][i].out; - and[35][i].b <== multi_or[14][i].out; - lt[16][i] = LessEqThan(8); - lt[16][i].in[0] <== 14; - lt[16][i].in[1] <== in[i]; - lt[17][i] = LessEqThan(8); - lt[17][i].in[0] <== in[i]; - lt[17][i].in[1] <== 93; + eq[57][i].in[1] <== 255; and[36][i] = AND(); - and[36][i].a <== lt[16][i].out; - and[36][i].b <== lt[17][i].out; + and[36][i].a <== states[i][0]; + multi_or[11][i] = MultiOR(15); + multi_or[11][i].in[0] <== and[34][i].out; + multi_or[11][i].in[1] <== and[35][i].out; + multi_or[11][i].in[2] <== eq[45][i].out; + multi_or[11][i].in[3] <== eq[46][i].out; + multi_or[11][i].in[4] <== eq[47][i].out; + multi_or[11][i].in[5] <== eq[48][i].out; + multi_or[11][i].in[6] <== eq[49][i].out; + multi_or[11][i].in[7] <== eq[50][i].out; + multi_or[11][i].in[8] <== eq[51][i].out; + multi_or[11][i].in[9] <== eq[52][i].out; + multi_or[11][i].in[10] <== eq[53][i].out; + multi_or[11][i].in[11] <== eq[54][i].out; + multi_or[11][i].in[12] <== eq[55][i].out; + multi_or[11][i].in[13] <== eq[56][i].out; + multi_or[11][i].in[14] <== eq[57][i].out; + and[36][i].b <== multi_or[11][i].out; + and[37][i] = AND(); + and[37][i].a <== states[i][1]; + and[37][i].b <== and[4][i].out; + and[38][i] = AND(); + and[38][i].a <== states[i][8]; + multi_or[12][i] = MultiOR(14); + multi_or[12][i].in[0] <== and[34][i].out; + multi_or[12][i].in[1] <== and[35][i].out; + multi_or[12][i].in[2] <== eq[45][i].out; + multi_or[12][i].in[3] <== eq[46][i].out; + multi_or[12][i].in[4] <== eq[47][i].out; + multi_or[12][i].in[5] <== eq[48][i].out; + multi_or[12][i].in[6] <== eq[49][i].out; + multi_or[12][i].in[7] <== eq[50][i].out; + multi_or[12][i].in[8] <== eq[51][i].out; + multi_or[12][i].in[9] <== eq[52][i].out; + multi_or[12][i].in[10] <== eq[53][i].out; + multi_or[12][i].in[11] <== eq[54][i].out; + multi_or[12][i].in[12] <== eq[55][i].out; + multi_or[12][i].in[13] <== eq[56][i].out; + and[38][i].b <== multi_or[12][i].out; lt[18][i] = LessEqThan(8); - lt[18][i].in[0] <== 95; + lt[18][i].in[0] <== 14; lt[18][i].in[1] <== in[i]; lt[19][i] = LessEqThan(8); lt[19][i].in[0] <== in[i]; - lt[19][i].in[1] <== 127; - and[37][i] = AND(); - and[37][i].a <== lt[18][i].out; - and[37][i].b <== lt[19][i].out; + lt[19][i].in[1] <== 32; + and[39][i] = AND(); + and[39][i].a <== lt[18][i].out; + and[39][i].b <== lt[19][i].out; + eq[58][i] = IsEqual(); + eq[58][i].in[0] <== in[i]; + eq[58][i].in[1] <== 34; + eq[59][i] = IsEqual(); + eq[59][i].in[0] <== in[i]; + eq[59][i].in[1] <== 40; eq[60][i] = IsEqual(); eq[60][i].in[0] <== in[i]; - eq[60][i].in[1] <== 255; - and[38][i] = AND(); - and[38][i].a <== states[i][0]; - multi_or[15][i] = MultiOR(15); - multi_or[15][i].in[0] <== and[36][i].out; - multi_or[15][i].in[1] <== and[37][i].out; - multi_or[15][i].in[2] <== eq[60][i].out; - multi_or[15][i].in[3] <== eq[47][i].out; - multi_or[15][i].in[4] <== eq[58][i].out; - multi_or[15][i].in[5] <== eq[54][i].out; - multi_or[15][i].in[6] <== eq[51][i].out; - multi_or[15][i].in[7] <== eq[45][i].out; - multi_or[15][i].in[8] <== eq[49][i].out; - multi_or[15][i].in[9] <== eq[53][i].out; - multi_or[15][i].in[10] <== eq[59][i].out; - multi_or[15][i].in[11] <== eq[56][i].out; - multi_or[15][i].in[12] <== eq[57][i].out; - multi_or[15][i].in[13] <== eq[48][i].out; - multi_or[15][i].in[14] <== eq[52][i].out; - and[38][i].b <== multi_or[15][i].out; - and[39][i] = AND(); - and[39][i].a <== states[i][1]; - and[39][i].b <== and[4][i].out; + eq[60][i].in[1] <== 41; and[40][i] = AND(); - and[40][i].a <== states[i][8]; - multi_or[16][i] = MultiOR(14); - multi_or[16][i].in[0] <== and[36][i].out; - multi_or[16][i].in[1] <== and[37][i].out; - multi_or[16][i].in[2] <== eq[52][i].out; - multi_or[16][i].in[3] <== eq[54][i].out; - multi_or[16][i].in[4] <== eq[47][i].out; - multi_or[16][i].in[5] <== eq[59][i].out; - multi_or[16][i].in[6] <== eq[49][i].out; - multi_or[16][i].in[7] <== eq[57][i].out; - multi_or[16][i].in[8] <== eq[56][i].out; - multi_or[16][i].in[9] <== eq[53][i].out; - multi_or[16][i].in[10] <== eq[45][i].out; - multi_or[16][i].in[11] <== eq[58][i].out; - multi_or[16][i].in[12] <== eq[48][i].out; - multi_or[16][i].in[13] <== eq[51][i].out; - and[40][i].b <== multi_or[16][i].out; - multi_or[17][i] = MultiOR(4); - multi_or[17][i].in[0] <== and[35][i].out; - multi_or[17][i].in[1] <== and[38][i].out; - multi_or[17][i].in[2] <== and[39][i].out; - multi_or[17][i].in[3] <== and[40][i].out; - states[i+1][8] <== multi_or[17][i].out; + and[40][i].a <== states[i][9]; + multi_or[13][i] = MultiOR(18); + multi_or[13][i].in[0] <== and[39][i].out; + multi_or[13][i].in[1] <== eq[45][i].out; + multi_or[13][i].in[2] <== eq[46][i].out; + multi_or[13][i].in[3] <== eq[47][i].out; + multi_or[13][i].in[4] <== eq[48][i].out; + multi_or[13][i].in[5] <== eq[49][i].out; + multi_or[13][i].in[6] <== eq[50][i].out; + multi_or[13][i].in[7] <== eq[51][i].out; + multi_or[13][i].in[8] <== eq[52][i].out; + multi_or[13][i].in[9] <== eq[53][i].out; + multi_or[13][i].in[10] <== eq[54][i].out; + multi_or[13][i].in[11] <== eq[55][i].out; + multi_or[13][i].in[12] <== eq[56][i].out; + multi_or[13][i].in[13] <== eq[58][i].out; + multi_or[13][i].in[14] <== eq[59][i].out; + multi_or[13][i].in[15] <== eq[60][i].out; + multi_or[13][i].in[16] <== eq[0][i].out; + multi_or[13][i].in[17] <== eq[1][i].out; + and[40][i].b <== multi_or[13][i].out; + multi_or[14][i] = MultiOR(4); + multi_or[14][i].in[0] <== and[36][i].out; + multi_or[14][i].in[1] <== and[37][i].out; + multi_or[14][i].in[2] <== and[38][i].out; + multi_or[14][i].in[3] <== and[40][i].out; + states[i+1][8] <== multi_or[14][i].out; state_changed[i].in[7] <== states[i+1][8]; and[41][i] = AND(); - and[41][i].a <== states[i][9]; - and[41][i].b <== eq[1][i].out; + and[41][i].a <== states[i][8]; + and[41][i].b <== eq[2][i].out; and[42][i] = AND(); - and[42][i].a <== states[i][8]; - and[42][i].b <== eq[1][i].out; - multi_or[18][i] = MultiOR(2); - multi_or[18][i].in[0] <== and[41][i].out; - multi_or[18][i].in[1] <== and[42][i].out; - states[i+1][9] <== multi_or[18][i].out; + and[42][i].a <== states[i][9]; + and[42][i].b <== eq[2][i].out; + multi_or[15][i] = MultiOR(2); + multi_or[15][i].in[0] <== and[41][i].out; + multi_or[15][i].in[1] <== and[42][i].out; + states[i+1][9] <== multi_or[15][i].out; state_changed[i].in[8] <== states[i+1][9]; lt[20][i] = LessEqThan(8); lt[20][i].in[0] <== 65; @@ -610,144 +576,117 @@ template EmailAddrWithNameRegex(msg_bytes) { and[44][i].b <== lt[23][i].out; eq[61][i] = IsEqual(); eq[61][i].in[0] <== in[i]; - eq[61][i].in[1] <== 48; + eq[61][i].in[1] <== 33; eq[62][i] = IsEqual(); eq[62][i].in[0] <== in[i]; - eq[62][i].in[1] <== 56; + eq[62][i].in[1] <== 35; eq[63][i] = IsEqual(); eq[63][i].in[0] <== in[i]; - eq[63][i].in[1] <== 46; + eq[63][i].in[1] <== 36; eq[64][i] = IsEqual(); eq[64][i].in[0] <== in[i]; - eq[64][i].in[1] <== 43; + eq[64][i].in[1] <== 37; eq[65][i] = IsEqual(); eq[65][i].in[0] <== in[i]; - eq[65][i].in[1] <== 54; + eq[65][i].in[1] <== 38; eq[66][i] = IsEqual(); eq[66][i].in[0] <== in[i]; eq[66][i].in[1] <== 39; eq[67][i] = IsEqual(); eq[67][i].in[0] <== in[i]; - eq[67][i].in[1] <== 38; + eq[67][i].in[1] <== 42; eq[68][i] = IsEqual(); eq[68][i].in[0] <== in[i]; - eq[68][i].in[1] <== 55; + eq[68][i].in[1] <== 43; eq[69][i] = IsEqual(); eq[69][i].in[0] <== in[i]; - eq[69][i].in[1] <== 49; + eq[69][i].in[1] <== 44; eq[70][i] = IsEqual(); eq[70][i].in[0] <== in[i]; - eq[70][i].in[1] <== 35; + eq[70][i].in[1] <== 45; eq[71][i] = IsEqual(); eq[71][i].in[0] <== in[i]; - eq[71][i].in[1] <== 33; + eq[71][i].in[1] <== 46; eq[72][i] = IsEqual(); eq[72][i].in[0] <== in[i]; - eq[72][i].in[1] <== 63; + eq[72][i].in[1] <== 47; eq[73][i] = IsEqual(); eq[73][i].in[0] <== in[i]; - eq[73][i].in[1] <== 44; + eq[73][i].in[1] <== 48; eq[74][i] = IsEqual(); eq[74][i].in[0] <== in[i]; - eq[74][i].in[1] <== 53; + eq[74][i].in[1] <== 49; eq[75][i] = IsEqual(); eq[75][i].in[0] <== in[i]; - eq[75][i].in[1] <== 61; + eq[75][i].in[1] <== 50; eq[76][i] = IsEqual(); eq[76][i].in[0] <== in[i]; eq[76][i].in[1] <== 51; eq[77][i] = IsEqual(); eq[77][i].in[0] <== in[i]; - eq[77][i].in[1] <== 37; + eq[77][i].in[1] <== 52; eq[78][i] = IsEqual(); eq[78][i].in[0] <== in[i]; - eq[78][i].in[1] <== 36; + eq[78][i].in[1] <== 53; eq[79][i] = IsEqual(); eq[79][i].in[0] <== in[i]; - eq[79][i].in[1] <== 45; + eq[79][i].in[1] <== 54; eq[80][i] = IsEqual(); eq[80][i].in[0] <== in[i]; - eq[80][i].in[1] <== 52; + eq[80][i].in[1] <== 55; eq[81][i] = IsEqual(); eq[81][i].in[0] <== in[i]; - eq[81][i].in[1] <== 50; + eq[81][i].in[1] <== 56; eq[82][i] = IsEqual(); eq[82][i].in[0] <== in[i]; eq[82][i].in[1] <== 57; eq[83][i] = IsEqual(); eq[83][i].in[0] <== in[i]; - eq[83][i].in[1] <== 47; + eq[83][i].in[1] <== 61; eq[84][i] = IsEqual(); eq[84][i].in[0] <== in[i]; - eq[84][i].in[1] <== 42; + eq[84][i].in[1] <== 63; and[45][i] = AND(); - and[45][i].a <== states[i][10]; - multi_or[19][i] = MultiOR(26); - multi_or[19][i].in[0] <== and[43][i].out; - multi_or[19][i].in[1] <== and[44][i].out; - multi_or[19][i].in[2] <== eq[61][i].out; - multi_or[19][i].in[3] <== eq[62][i].out; - multi_or[19][i].in[4] <== eq[63][i].out; - multi_or[19][i].in[5] <== eq[64][i].out; - multi_or[19][i].in[6] <== eq[65][i].out; - multi_or[19][i].in[7] <== eq[66][i].out; - multi_or[19][i].in[8] <== eq[67][i].out; - multi_or[19][i].in[9] <== eq[68][i].out; - multi_or[19][i].in[10] <== eq[69][i].out; - multi_or[19][i].in[11] <== eq[70][i].out; - multi_or[19][i].in[12] <== eq[71][i].out; - multi_or[19][i].in[13] <== eq[72][i].out; - multi_or[19][i].in[14] <== eq[73][i].out; - multi_or[19][i].in[15] <== eq[74][i].out; - multi_or[19][i].in[16] <== eq[75][i].out; - multi_or[19][i].in[17] <== eq[76][i].out; - multi_or[19][i].in[18] <== eq[77][i].out; - multi_or[19][i].in[19] <== eq[78][i].out; - multi_or[19][i].in[20] <== eq[79][i].out; - multi_or[19][i].in[21] <== eq[80][i].out; - multi_or[19][i].in[22] <== eq[81][i].out; - multi_or[19][i].in[23] <== eq[82][i].out; - multi_or[19][i].in[24] <== eq[83][i].out; - multi_or[19][i].in[25] <== eq[84][i].out; - and[45][i].b <== multi_or[19][i].out; + and[45][i].a <== states[i][9]; + multi_or[16][i] = MultiOR(26); + multi_or[16][i].in[0] <== and[43][i].out; + multi_or[16][i].in[1] <== and[44][i].out; + multi_or[16][i].in[2] <== eq[61][i].out; + multi_or[16][i].in[3] <== eq[62][i].out; + multi_or[16][i].in[4] <== eq[63][i].out; + multi_or[16][i].in[5] <== eq[64][i].out; + multi_or[16][i].in[6] <== eq[65][i].out; + multi_or[16][i].in[7] <== eq[66][i].out; + multi_or[16][i].in[8] <== eq[67][i].out; + multi_or[16][i].in[9] <== eq[68][i].out; + multi_or[16][i].in[10] <== eq[69][i].out; + multi_or[16][i].in[11] <== eq[70][i].out; + multi_or[16][i].in[12] <== eq[71][i].out; + multi_or[16][i].in[13] <== eq[72][i].out; + multi_or[16][i].in[14] <== eq[73][i].out; + multi_or[16][i].in[15] <== eq[74][i].out; + multi_or[16][i].in[16] <== eq[75][i].out; + multi_or[16][i].in[17] <== eq[76][i].out; + multi_or[16][i].in[18] <== eq[77][i].out; + multi_or[16][i].in[19] <== eq[78][i].out; + multi_or[16][i].in[20] <== eq[79][i].out; + multi_or[16][i].in[21] <== eq[80][i].out; + multi_or[16][i].in[22] <== eq[81][i].out; + multi_or[16][i].in[23] <== eq[82][i].out; + multi_or[16][i].in[24] <== eq[83][i].out; + multi_or[16][i].in[25] <== eq[84][i].out; + and[45][i].b <== multi_or[16][i].out; and[46][i] = AND(); - and[46][i].a <== states[i][9]; - multi_or[20][i] = MultiOR(26); - multi_or[20][i].in[0] <== and[43][i].out; - multi_or[20][i].in[1] <== and[44][i].out; - multi_or[20][i].in[2] <== eq[65][i].out; - multi_or[20][i].in[3] <== eq[76][i].out; - multi_or[20][i].in[4] <== eq[79][i].out; - multi_or[20][i].in[5] <== eq[71][i].out; - multi_or[20][i].in[6] <== eq[74][i].out; - multi_or[20][i].in[7] <== eq[61][i].out; - multi_or[20][i].in[8] <== eq[72][i].out; - multi_or[20][i].in[9] <== eq[77][i].out; - multi_or[20][i].in[10] <== eq[75][i].out; - multi_or[20][i].in[11] <== eq[68][i].out; - multi_or[20][i].in[12] <== eq[81][i].out; - multi_or[20][i].in[13] <== eq[70][i].out; - multi_or[20][i].in[14] <== eq[66][i].out; - multi_or[20][i].in[15] <== eq[78][i].out; - multi_or[20][i].in[16] <== eq[84][i].out; - multi_or[20][i].in[17] <== eq[64][i].out; - multi_or[20][i].in[18] <== eq[83][i].out; - multi_or[20][i].in[19] <== eq[73][i].out; - multi_or[20][i].in[20] <== eq[67][i].out; - multi_or[20][i].in[21] <== eq[80][i].out; - multi_or[20][i].in[22] <== eq[82][i].out; - multi_or[20][i].in[23] <== eq[63][i].out; - multi_or[20][i].in[24] <== eq[69][i].out; - multi_or[20][i].in[25] <== eq[62][i].out; - and[46][i].b <== multi_or[20][i].out; - multi_or[21][i] = MultiOR(2); - multi_or[21][i].in[0] <== and[45][i].out; - multi_or[21][i].in[1] <== and[46][i].out; - states[i+1][10] <== multi_or[21][i].out; + and[46][i].a <== states[i][10]; + and[46][i].b <== multi_or[16][i].out; + multi_or[17][i] = MultiOR(2); + multi_or[17][i].in[0] <== and[45][i].out; + multi_or[17][i].in[1] <== and[46][i].out; + states[i+1][10] <== multi_or[17][i].out; state_changed[i].in[9] <== states[i+1][10]; and[47][i] = AND(); and[47][i].a <== states[i][10]; - and[47][i].b <== eq[5][i].out; + and[47][i].b <== eq[4][i].out; states[i+1][11] <== and[47][i].out; state_changed[i].in[10] <== states[i+1][11]; lt[24][i] = LessEqThan(8); @@ -763,51 +702,35 @@ template EmailAddrWithNameRegex(msg_bytes) { eq[85][i].in[0] <== in[i]; eq[85][i].in[1] <== 95; and[49][i] = AND(); - and[49][i].a <== states[i][12]; - multi_or[22][i] = MultiOR(15); - multi_or[22][i].in[0] <== and[43][i].out; - multi_or[22][i].in[1] <== and[48][i].out; - multi_or[22][i].in[2] <== eq[74][i].out; - multi_or[22][i].in[3] <== eq[81][i].out; - multi_or[22][i].in[4] <== eq[68][i].out; - multi_or[22][i].in[5] <== eq[62][i].out; - multi_or[22][i].in[6] <== eq[80][i].out; - multi_or[22][i].in[7] <== eq[82][i].out; - multi_or[22][i].in[8] <== eq[69][i].out; - multi_or[22][i].in[9] <== eq[85][i].out; - multi_or[22][i].in[10] <== eq[65][i].out; - multi_or[22][i].in[11] <== eq[79][i].out; - multi_or[22][i].in[12] <== eq[63][i].out; - multi_or[22][i].in[13] <== eq[61][i].out; - multi_or[22][i].in[14] <== eq[76][i].out; - and[49][i].b <== multi_or[22][i].out; + and[49][i].a <== states[i][11]; + multi_or[18][i] = MultiOR(15); + multi_or[18][i].in[0] <== and[43][i].out; + multi_or[18][i].in[1] <== and[48][i].out; + multi_or[18][i].in[2] <== eq[70][i].out; + multi_or[18][i].in[3] <== eq[71][i].out; + multi_or[18][i].in[4] <== eq[73][i].out; + multi_or[18][i].in[5] <== eq[74][i].out; + multi_or[18][i].in[6] <== eq[75][i].out; + multi_or[18][i].in[7] <== eq[76][i].out; + multi_or[18][i].in[8] <== eq[77][i].out; + multi_or[18][i].in[9] <== eq[78][i].out; + multi_or[18][i].in[10] <== eq[79][i].out; + multi_or[18][i].in[11] <== eq[80][i].out; + multi_or[18][i].in[12] <== eq[81][i].out; + multi_or[18][i].in[13] <== eq[82][i].out; + multi_or[18][i].in[14] <== eq[85][i].out; + and[49][i].b <== multi_or[18][i].out; and[50][i] = AND(); - and[50][i].a <== states[i][11]; - multi_or[23][i] = MultiOR(15); - multi_or[23][i].in[0] <== and[43][i].out; - multi_or[23][i].in[1] <== and[48][i].out; - multi_or[23][i].in[2] <== eq[61][i].out; - multi_or[23][i].in[3] <== eq[63][i].out; - multi_or[23][i].in[4] <== eq[81][i].out; - multi_or[23][i].in[5] <== eq[62][i].out; - multi_or[23][i].in[6] <== eq[82][i].out; - multi_or[23][i].in[7] <== eq[68][i].out; - multi_or[23][i].in[8] <== eq[76][i].out; - multi_or[23][i].in[9] <== eq[79][i].out; - multi_or[23][i].in[10] <== eq[65][i].out; - multi_or[23][i].in[11] <== eq[85][i].out; - multi_or[23][i].in[12] <== eq[80][i].out; - multi_or[23][i].in[13] <== eq[74][i].out; - multi_or[23][i].in[14] <== eq[69][i].out; - and[50][i].b <== multi_or[23][i].out; - multi_or[24][i] = MultiOR(2); - multi_or[24][i].in[0] <== and[49][i].out; - multi_or[24][i].in[1] <== and[50][i].out; - states[i+1][12] <== multi_or[24][i].out; + and[50][i].a <== states[i][12]; + and[50][i].b <== multi_or[18][i].out; + multi_or[19][i] = MultiOR(2); + multi_or[19][i].in[0] <== and[49][i].out; + multi_or[19][i].in[1] <== and[50][i].out; + states[i+1][12] <== multi_or[19][i].out; state_changed[i].in[11] <== states[i+1][12]; and[51][i] = AND(); and[51][i].a <== states[i][12]; - and[51][i].b <== eq[4][i].out; + and[51][i].b <== eq[3][i].out; states[i+1][13] <== and[51][i].out; state_changed[i].in[12] <== states[i+1][13]; states[i+1][0] <== 1 - state_changed[i].out; @@ -824,7 +747,7 @@ template EmailAddrWithNameRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][13] * (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]; } - // substrings calculated: [{(12, 12), (10, 11), (9, 10), (10, 10), (11, 12)}] + // substrings calculated: [{(9, 10), (10, 10), (10, 11), (11, 12), (12, 12)}] signal is_substr0[msg_bytes][6]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/circuits/common/email_domain_regex.circom b/packages/circom/circuits/common/email_domain_regex.circom index aa29eea..cb582f2 100644 --- a/packages/circom/circuits/common/email_domain_regex.circom +++ b/packages/circom/circuits/common/email_domain_regex.circom @@ -17,7 +17,7 @@ template EmailDomainRegex(msg_bytes) { component eq[26][num_bytes]; component lt[8][num_bytes]; component and[9][num_bytes]; - component multi_or[6][num_bytes]; + component multi_or[5][num_bytes]; signal states[num_bytes+1][4]; component state_changed[num_bytes]; @@ -48,79 +48,79 @@ template EmailDomainRegex(msg_bytes) { and[1][i].b <== lt[3][i].out; eq[0][i] = IsEqual(); eq[0][i].in[0] <== in[i]; - eq[0][i].in[1] <== 53; + eq[0][i].in[1] <== 33; eq[1][i] = IsEqual(); eq[1][i].in[0] <== in[i]; - eq[1][i].in[1] <== 48; + eq[1][i].in[1] <== 35; eq[2][i] = IsEqual(); eq[2][i].in[0] <== in[i]; - eq[2][i].in[1] <== 33; + eq[2][i].in[1] <== 36; eq[3][i] = IsEqual(); eq[3][i].in[0] <== in[i]; - eq[3][i].in[1] <== 42; + eq[3][i].in[1] <== 37; eq[4][i] = IsEqual(); eq[4][i].in[0] <== in[i]; - eq[4][i].in[1] <== 63; + eq[4][i].in[1] <== 38; eq[5][i] = IsEqual(); eq[5][i].in[0] <== in[i]; - eq[5][i].in[1] <== 37; + eq[5][i].in[1] <== 39; eq[6][i] = IsEqual(); eq[6][i].in[0] <== in[i]; - eq[6][i].in[1] <== 39; + eq[6][i].in[1] <== 42; eq[7][i] = IsEqual(); eq[7][i].in[0] <== in[i]; - eq[7][i].in[1] <== 35; + eq[7][i].in[1] <== 43; eq[8][i] = IsEqual(); eq[8][i].in[0] <== in[i]; - eq[8][i].in[1] <== 45; + eq[8][i].in[1] <== 44; eq[9][i] = IsEqual(); eq[9][i].in[0] <== in[i]; - eq[9][i].in[1] <== 51; + eq[9][i].in[1] <== 45; eq[10][i] = IsEqual(); eq[10][i].in[0] <== in[i]; - eq[10][i].in[1] <== 50; + eq[10][i].in[1] <== 46; eq[11][i] = IsEqual(); eq[11][i].in[0] <== in[i]; - eq[11][i].in[1] <== 61; + eq[11][i].in[1] <== 47; eq[12][i] = IsEqual(); eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 38; + eq[12][i].in[1] <== 48; eq[13][i] = IsEqual(); eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 52; + eq[13][i].in[1] <== 49; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 55; + eq[14][i].in[1] <== 50; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 255; + eq[15][i].in[1] <== 51; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 56; + eq[16][i].in[1] <== 52; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 36; + eq[17][i].in[1] <== 53; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; eq[18][i].in[1] <== 54; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 46; + eq[19][i].in[1] <== 55; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 47; + eq[20][i].in[1] <== 56; eq[21][i] = IsEqual(); eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 44; + eq[21][i].in[1] <== 57; eq[22][i] = IsEqual(); eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 49; + eq[22][i].in[1] <== 61; eq[23][i] = IsEqual(); eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 43; + eq[23][i].in[1] <== 63; eq[24][i] = IsEqual(); eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 57; + eq[24][i].in[1] <== 255; and[2][i] = AND(); and[2][i].a <== states[i][0]; multi_or[0][i] = MultiOR(27); @@ -166,30 +166,30 @@ template EmailDomainRegex(msg_bytes) { multi_or[1][i] = MultiOR(26); multi_or[1][i].in[0] <== and[0][i].out; multi_or[1][i].in[1] <== and[3][i].out; - multi_or[1][i].in[2] <== eq[8][i].out; - multi_or[1][i].in[3] <== eq[5][i].out; - multi_or[1][i].in[4] <== eq[20][i].out; - multi_or[1][i].in[5] <== eq[24][i].out; - multi_or[1][i].in[6] <== eq[17][i].out; - multi_or[1][i].in[7] <== eq[3][i].out; - multi_or[1][i].in[8] <== eq[12][i].out; - multi_or[1][i].in[9] <== eq[11][i].out; - multi_or[1][i].in[10] <== eq[2][i].out; - multi_or[1][i].in[11] <== eq[18][i].out; - multi_or[1][i].in[12] <== eq[14][i].out; - multi_or[1][i].in[13] <== eq[23][i].out; - multi_or[1][i].in[14] <== eq[0][i].out; - multi_or[1][i].in[15] <== eq[16][i].out; - multi_or[1][i].in[16] <== eq[6][i].out; - multi_or[1][i].in[17] <== eq[7][i].out; - multi_or[1][i].in[18] <== eq[19][i].out; - multi_or[1][i].in[19] <== eq[13][i].out; - multi_or[1][i].in[20] <== eq[10][i].out; - multi_or[1][i].in[21] <== eq[21][i].out; - multi_or[1][i].in[22] <== eq[4][i].out; - multi_or[1][i].in[23] <== eq[9][i].out; - multi_or[1][i].in[24] <== eq[1][i].out; - multi_or[1][i].in[25] <== eq[22][i].out; + multi_or[1][i].in[2] <== eq[0][i].out; + multi_or[1][i].in[3] <== eq[1][i].out; + multi_or[1][i].in[4] <== eq[2][i].out; + multi_or[1][i].in[5] <== eq[3][i].out; + multi_or[1][i].in[6] <== eq[4][i].out; + multi_or[1][i].in[7] <== eq[5][i].out; + multi_or[1][i].in[8] <== eq[6][i].out; + multi_or[1][i].in[9] <== eq[7][i].out; + multi_or[1][i].in[10] <== eq[8][i].out; + multi_or[1][i].in[11] <== eq[9][i].out; + multi_or[1][i].in[12] <== eq[10][i].out; + multi_or[1][i].in[13] <== eq[11][i].out; + multi_or[1][i].in[14] <== eq[12][i].out; + multi_or[1][i].in[15] <== eq[13][i].out; + multi_or[1][i].in[16] <== eq[14][i].out; + multi_or[1][i].in[17] <== eq[15][i].out; + multi_or[1][i].in[18] <== eq[16][i].out; + multi_or[1][i].in[19] <== eq[17][i].out; + multi_or[1][i].in[20] <== eq[18][i].out; + multi_or[1][i].in[21] <== eq[19][i].out; + multi_or[1][i].in[22] <== eq[20][i].out; + multi_or[1][i].in[23] <== eq[21][i].out; + multi_or[1][i].in[24] <== eq[22][i].out; + multi_or[1][i].in[25] <== eq[23][i].out; and[4][i].b <== multi_or[1][i].out; multi_or[2][i] = MultiOR(2); multi_or[2][i].in[0] <== and[2][i].out; @@ -218,41 +218,26 @@ template EmailDomainRegex(msg_bytes) { multi_or[3][i] = MultiOR(14); multi_or[3][i].in[0] <== and[0][i].out; multi_or[3][i].in[1] <== and[6][i].out; - multi_or[3][i].in[2] <== eq[8][i].out; - multi_or[3][i].in[3] <== eq[18][i].out; - multi_or[3][i].in[4] <== eq[10][i].out; - multi_or[3][i].in[5] <== eq[0][i].out; - multi_or[3][i].in[6] <== eq[24][i].out; - multi_or[3][i].in[7] <== eq[13][i].out; - multi_or[3][i].in[8] <== eq[14][i].out; - multi_or[3][i].in[9] <== eq[1][i].out; - multi_or[3][i].in[10] <== eq[16][i].out; - multi_or[3][i].in[11] <== eq[9][i].out; - multi_or[3][i].in[12] <== eq[22][i].out; - multi_or[3][i].in[13] <== eq[19][i].out; + multi_or[3][i].in[2] <== eq[9][i].out; + multi_or[3][i].in[3] <== eq[10][i].out; + multi_or[3][i].in[4] <== eq[12][i].out; + multi_or[3][i].in[5] <== eq[13][i].out; + multi_or[3][i].in[6] <== eq[14][i].out; + multi_or[3][i].in[7] <== eq[15][i].out; + multi_or[3][i].in[8] <== eq[16][i].out; + multi_or[3][i].in[9] <== eq[17][i].out; + multi_or[3][i].in[10] <== eq[18][i].out; + multi_or[3][i].in[11] <== eq[19][i].out; + multi_or[3][i].in[12] <== eq[20][i].out; + multi_or[3][i].in[13] <== eq[21][i].out; and[7][i].b <== multi_or[3][i].out; and[8][i] = AND(); and[8][i].a <== states[i][3]; - multi_or[4][i] = MultiOR(14); - multi_or[4][i].in[0] <== and[0][i].out; - multi_or[4][i].in[1] <== and[6][i].out; - multi_or[4][i].in[2] <== eq[24][i].out; - multi_or[4][i].in[3] <== eq[8][i].out; - multi_or[4][i].in[4] <== eq[1][i].out; - multi_or[4][i].in[5] <== eq[22][i].out; - multi_or[4][i].in[6] <== eq[14][i].out; - multi_or[4][i].in[7] <== eq[0][i].out; - multi_or[4][i].in[8] <== eq[16][i].out; - multi_or[4][i].in[9] <== eq[13][i].out; - multi_or[4][i].in[10] <== eq[9][i].out; - multi_or[4][i].in[11] <== eq[18][i].out; - multi_or[4][i].in[12] <== eq[10][i].out; - multi_or[4][i].in[13] <== eq[19][i].out; - and[8][i].b <== multi_or[4][i].out; - multi_or[5][i] = MultiOR(2); - multi_or[5][i].in[0] <== and[7][i].out; - multi_or[5][i].in[1] <== and[8][i].out; - states[i+1][3] <== multi_or[5][i].out; + and[8][i].b <== multi_or[3][i].out; + multi_or[4][i] = MultiOR(2); + multi_or[4][i].in[0] <== and[7][i].out; + multi_or[4][i].in[1] <== and[8][i].out; + states[i+1][3] <== multi_or[4][i].out; state_changed[i].in[2] <== states[i+1][3]; states[i+1][0] <== 1 - state_changed[i].out; } diff --git a/packages/circom/circuits/common/from_all_regex.circom b/packages/circom/circuits/common/from_all_regex.circom index bd17a2e..e343006 100644 --- a/packages/circom/circuits/common/from_all_regex.circom +++ b/packages/circom/circuits/common/from_all_regex.circom @@ -17,7 +17,7 @@ template FromAllRegex(msg_bytes) { component eq[56][num_bytes]; component lt[12][num_bytes]; component and[39][num_bytes]; - component multi_or[16][num_bytes]; + component multi_or[13][num_bytes]; signal states[num_bytes+1][18]; component state_changed[num_bytes]; @@ -103,7 +103,7 @@ template FromAllRegex(msg_bytes) { and[9][i].a <== states[i][7]; and[9][i].b <== and[8][i].out; lt[2][i] = LessEqThan(8); - lt[2][i].in[0] <== 128; + lt[2][i].in[0] <== 160; lt[2][i].in[1] <== in[i]; lt[3][i] = LessEqThan(8); lt[3][i].in[0] <== in[i]; @@ -112,10 +112,10 @@ template FromAllRegex(msg_bytes) { and[10][i].a <== lt[2][i].out; and[10][i].b <== lt[3][i].out; and[11][i] = AND(); - and[11][i].a <== states[i][10]; + and[11][i].a <== states[i][9]; and[11][i].b <== and[10][i].out; lt[4][i] = LessEqThan(8); - lt[4][i].in[0] <== 160; + lt[4][i].in[0] <== 128; lt[4][i].in[1] <== in[i]; lt[5][i] = LessEqThan(8); lt[5][i].in[0] <== in[i]; @@ -124,28 +124,28 @@ template FromAllRegex(msg_bytes) { and[12][i].a <== lt[4][i].out; and[12][i].b <== lt[5][i].out; and[13][i] = AND(); - and[13][i].a <== states[i][9]; + and[13][i].a <== states[i][10]; and[13][i].b <== and[12][i].out; - and[14][i] = AND(); - and[14][i].a <== states[i][15]; - and[14][i].b <== and[8][i].out; lt[6][i] = LessEqThan(8); lt[6][i].in[0] <== 128; lt[6][i].in[1] <== in[i]; lt[7][i] = LessEqThan(8); lt[7][i].in[0] <== in[i]; lt[7][i].in[1] <== 159; + and[14][i] = AND(); + and[14][i].a <== lt[6][i].out; + and[14][i].b <== lt[7][i].out; and[15][i] = AND(); - and[15][i].a <== lt[6][i].out; - and[15][i].b <== lt[7][i].out; + and[15][i].a <== states[i][11]; + and[15][i].b <== and[14][i].out; and[16][i] = AND(); - and[16][i].a <== states[i][11]; - and[16][i].b <== and[15][i].out; + and[16][i].a <== states[i][15]; + and[16][i].b <== and[8][i].out; multi_or[1][i] = MultiOR(5); multi_or[1][i].in[0] <== and[9][i].out; multi_or[1][i].in[1] <== and[11][i].out; multi_or[1][i].in[2] <== and[13][i].out; - multi_or[1][i].in[3] <== and[14][i].out; + multi_or[1][i].in[3] <== and[15][i].out; multi_or[1][i].in[4] <== and[16][i].out; states[i+1][8] <== multi_or[1][i].out; state_changed[i].in[7] <== states[i+1][8]; @@ -153,10 +153,10 @@ template FromAllRegex(msg_bytes) { eq[7][i].in[0] <== in[i]; eq[7][i].in[1] <== 224; and[17][i] = AND(); - and[17][i].a <== states[i][15]; + and[17][i].a <== states[i][7]; and[17][i].b <== eq[7][i].out; and[18][i] = AND(); - and[18][i].a <== states[i][7]; + and[18][i].a <== states[i][15]; and[18][i].b <== eq[7][i].out; multi_or[2][i] = MultiOR(2); multi_or[2][i].in[0] <== and[17][i].out; @@ -165,48 +165,48 @@ template FromAllRegex(msg_bytes) { state_changed[i].in[8] <== states[i+1][9]; eq[8][i] = IsEqual(); eq[8][i].in[0] <== in[i]; - eq[8][i].in[1] <== 228; + eq[8][i].in[1] <== 225; eq[9][i] = IsEqual(); eq[9][i].in[0] <== in[i]; - eq[9][i].in[1] <== 230; + eq[9][i].in[1] <== 226; eq[10][i] = IsEqual(); eq[10][i].in[0] <== in[i]; - eq[10][i].in[1] <== 232; + eq[10][i].in[1] <== 227; eq[11][i] = IsEqual(); eq[11][i].in[0] <== in[i]; - eq[11][i].in[1] <== 238; + eq[11][i].in[1] <== 228; eq[12][i] = IsEqual(); eq[12][i].in[0] <== in[i]; eq[12][i].in[1] <== 229; eq[13][i] = IsEqual(); eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 231; + eq[13][i].in[1] <== 230; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 233; + eq[14][i].in[1] <== 231; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 225; + eq[15][i].in[1] <== 232; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 227; + eq[16][i].in[1] <== 233; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 235; + eq[17][i].in[1] <== 234; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 239; + eq[18][i].in[1] <== 235; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 234; + eq[19][i].in[1] <== 236; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 236; + eq[20][i].in[1] <== 238; eq[21][i] = IsEqual(); eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 226; + eq[21][i].in[1] <== 239; and[19][i] = AND(); - and[19][i].a <== states[i][15]; + and[19][i].a <== states[i][7]; multi_or[3][i] = MultiOR(14); multi_or[3][i].in[0] <== eq[8][i].out; multi_or[3][i].in[1] <== eq[9][i].out; @@ -223,170 +223,151 @@ template FromAllRegex(msg_bytes) { multi_or[3][i].in[12] <== eq[20][i].out; multi_or[3][i].in[13] <== eq[21][i].out; and[19][i].b <== multi_or[3][i].out; - and[20][i] = AND(); - and[20][i].a <== states[i][7]; - multi_or[4][i] = MultiOR(14); - multi_or[4][i].in[0] <== eq[20][i].out; - multi_or[4][i].in[1] <== eq[21][i].out; - multi_or[4][i].in[2] <== eq[10][i].out; - multi_or[4][i].in[3] <== eq[9][i].out; - multi_or[4][i].in[4] <== eq[13][i].out; - multi_or[4][i].in[5] <== eq[11][i].out; - multi_or[4][i].in[6] <== eq[12][i].out; - multi_or[4][i].in[7] <== eq[19][i].out; - multi_or[4][i].in[8] <== eq[18][i].out; - multi_or[4][i].in[9] <== eq[17][i].out; - multi_or[4][i].in[10] <== eq[16][i].out; - multi_or[4][i].in[11] <== eq[8][i].out; - multi_or[4][i].in[12] <== eq[14][i].out; - multi_or[4][i].in[13] <== eq[15][i].out; - and[20][i].b <== multi_or[4][i].out; lt[8][i] = LessEqThan(8); lt[8][i].in[0] <== 144; lt[8][i].in[1] <== in[i]; lt[9][i] = LessEqThan(8); lt[9][i].in[0] <== in[i]; lt[9][i].in[1] <== 191; + and[20][i] = AND(); + and[20][i].a <== lt[8][i].out; + and[20][i].b <== lt[9][i].out; and[21][i] = AND(); - and[21][i].a <== lt[8][i].out; - and[21][i].b <== lt[9][i].out; + and[21][i].a <== states[i][12]; + and[21][i].b <== and[20][i].out; and[22][i] = AND(); - and[22][i].a <== states[i][12]; - and[22][i].b <== and[21][i].out; - and[23][i] = AND(); - and[23][i].a <== states[i][13]; - and[23][i].b <== and[10][i].out; + and[22][i].a <== states[i][13]; + and[22][i].b <== and[12][i].out; eq[22][i] = IsEqual(); eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 136; + eq[22][i].in[1] <== 128; eq[23][i] = IsEqual(); eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 132; + eq[23][i].in[1] <== 129; eq[24][i] = IsEqual(); eq[24][i].in[0] <== in[i]; eq[24][i].in[1] <== 130; eq[25][i] = IsEqual(); eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 143; + eq[25][i].in[1] <== 131; eq[26][i] = IsEqual(); eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 129; + eq[26][i].in[1] <== 132; eq[27][i] = IsEqual(); eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 139; + eq[27][i].in[1] <== 133; eq[28][i] = IsEqual(); eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 133; + eq[28][i].in[1] <== 134; eq[29][i] = IsEqual(); eq[29][i].in[0] <== in[i]; - eq[29][i].in[1] <== 128; + eq[29][i].in[1] <== 135; eq[30][i] = IsEqual(); eq[30][i].in[0] <== in[i]; - eq[30][i].in[1] <== 137; + eq[30][i].in[1] <== 136; eq[31][i] = IsEqual(); eq[31][i].in[0] <== in[i]; - eq[31][i].in[1] <== 138; + eq[31][i].in[1] <== 137; eq[32][i] = IsEqual(); eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 134; + eq[32][i].in[1] <== 138; eq[33][i] = IsEqual(); eq[33][i].in[0] <== in[i]; - eq[33][i].in[1] <== 140; + eq[33][i].in[1] <== 139; eq[34][i] = IsEqual(); eq[34][i].in[0] <== in[i]; - eq[34][i].in[1] <== 141; + eq[34][i].in[1] <== 140; eq[35][i] = IsEqual(); eq[35][i].in[0] <== in[i]; - eq[35][i].in[1] <== 131; + eq[35][i].in[1] <== 141; eq[36][i] = IsEqual(); eq[36][i].in[0] <== in[i]; eq[36][i].in[1] <== 142; eq[37][i] = IsEqual(); eq[37][i].in[0] <== in[i]; - eq[37][i].in[1] <== 135; + eq[37][i].in[1] <== 143; + and[23][i] = AND(); + and[23][i].a <== states[i][14]; + multi_or[4][i] = MultiOR(16); + multi_or[4][i].in[0] <== eq[22][i].out; + multi_or[4][i].in[1] <== eq[23][i].out; + multi_or[4][i].in[2] <== eq[24][i].out; + multi_or[4][i].in[3] <== eq[25][i].out; + multi_or[4][i].in[4] <== eq[26][i].out; + multi_or[4][i].in[5] <== eq[27][i].out; + multi_or[4][i].in[6] <== eq[28][i].out; + multi_or[4][i].in[7] <== eq[29][i].out; + multi_or[4][i].in[8] <== eq[30][i].out; + multi_or[4][i].in[9] <== eq[31][i].out; + multi_or[4][i].in[10] <== eq[32][i].out; + multi_or[4][i].in[11] <== eq[33][i].out; + multi_or[4][i].in[12] <== eq[34][i].out; + multi_or[4][i].in[13] <== eq[35][i].out; + multi_or[4][i].in[14] <== eq[36][i].out; + multi_or[4][i].in[15] <== eq[37][i].out; + and[23][i].b <== multi_or[4][i].out; and[24][i] = AND(); - and[24][i].a <== states[i][14]; - multi_or[5][i] = MultiOR(16); - multi_or[5][i].in[0] <== eq[22][i].out; - multi_or[5][i].in[1] <== eq[23][i].out; - multi_or[5][i].in[2] <== eq[24][i].out; - multi_or[5][i].in[3] <== eq[25][i].out; - multi_or[5][i].in[4] <== eq[26][i].out; - multi_or[5][i].in[5] <== eq[27][i].out; - multi_or[5][i].in[6] <== eq[28][i].out; - multi_or[5][i].in[7] <== eq[29][i].out; - multi_or[5][i].in[8] <== eq[30][i].out; - multi_or[5][i].in[9] <== eq[31][i].out; - multi_or[5][i].in[10] <== eq[32][i].out; - multi_or[5][i].in[11] <== eq[33][i].out; - multi_or[5][i].in[12] <== eq[34][i].out; - multi_or[5][i].in[13] <== eq[35][i].out; - multi_or[5][i].in[14] <== eq[36][i].out; - multi_or[5][i].in[15] <== eq[37][i].out; - and[24][i].b <== multi_or[5][i].out; - multi_or[6][i] = MultiOR(5); - multi_or[6][i].in[0] <== and[19][i].out; - multi_or[6][i].in[1] <== and[20][i].out; - multi_or[6][i].in[2] <== and[22][i].out; - multi_or[6][i].in[3] <== and[23][i].out; - multi_or[6][i].in[4] <== and[24][i].out; - states[i+1][10] <== multi_or[6][i].out; + and[24][i].a <== states[i][15]; + and[24][i].b <== multi_or[3][i].out; + multi_or[5][i] = MultiOR(5); + multi_or[5][i].in[0] <== and[19][i].out; + multi_or[5][i].in[1] <== and[21][i].out; + multi_or[5][i].in[2] <== and[22][i].out; + multi_or[5][i].in[3] <== and[23][i].out; + multi_or[5][i].in[4] <== and[24][i].out; + states[i+1][10] <== multi_or[5][i].out; state_changed[i].in[9] <== states[i+1][10]; eq[38][i] = IsEqual(); eq[38][i].in[0] <== in[i]; eq[38][i].in[1] <== 237; and[25][i] = AND(); - and[25][i].a <== states[i][15]; + and[25][i].a <== states[i][7]; and[25][i].b <== eq[38][i].out; and[26][i] = AND(); - and[26][i].a <== states[i][7]; + and[26][i].a <== states[i][15]; and[26][i].b <== eq[38][i].out; - multi_or[7][i] = MultiOR(2); - multi_or[7][i].in[0] <== and[25][i].out; - multi_or[7][i].in[1] <== and[26][i].out; - states[i+1][11] <== multi_or[7][i].out; + multi_or[6][i] = MultiOR(2); + multi_or[6][i].in[0] <== and[25][i].out; + multi_or[6][i].in[1] <== and[26][i].out; + states[i+1][11] <== multi_or[6][i].out; state_changed[i].in[10] <== states[i+1][11]; eq[39][i] = IsEqual(); eq[39][i].in[0] <== in[i]; eq[39][i].in[1] <== 240; and[27][i] = AND(); - and[27][i].a <== states[i][15]; + and[27][i].a <== states[i][7]; and[27][i].b <== eq[39][i].out; and[28][i] = AND(); - and[28][i].a <== states[i][7]; + and[28][i].a <== states[i][15]; and[28][i].b <== eq[39][i].out; - multi_or[8][i] = MultiOR(2); - multi_or[8][i].in[0] <== and[27][i].out; - multi_or[8][i].in[1] <== and[28][i].out; - states[i+1][12] <== multi_or[8][i].out; + multi_or[7][i] = MultiOR(2); + multi_or[7][i].in[0] <== and[27][i].out; + multi_or[7][i].in[1] <== and[28][i].out; + states[i+1][12] <== multi_or[7][i].out; state_changed[i].in[11] <== states[i+1][12]; eq[40][i] = IsEqual(); eq[40][i].in[0] <== in[i]; - eq[40][i].in[1] <== 242; + eq[40][i].in[1] <== 241; eq[41][i] = IsEqual(); eq[41][i].in[0] <== in[i]; - eq[41][i].in[1] <== 243; + eq[41][i].in[1] <== 242; eq[42][i] = IsEqual(); eq[42][i].in[0] <== in[i]; - eq[42][i].in[1] <== 241; + eq[42][i].in[1] <== 243; and[29][i] = AND(); and[29][i].a <== states[i][7]; - multi_or[9][i] = MultiOR(3); - multi_or[9][i].in[0] <== eq[40][i].out; - multi_or[9][i].in[1] <== eq[41][i].out; - multi_or[9][i].in[2] <== eq[42][i].out; - and[29][i].b <== multi_or[9][i].out; + multi_or[8][i] = MultiOR(3); + multi_or[8][i].in[0] <== eq[40][i].out; + multi_or[8][i].in[1] <== eq[41][i].out; + multi_or[8][i].in[2] <== eq[42][i].out; + and[29][i].b <== multi_or[8][i].out; and[30][i] = AND(); and[30][i].a <== states[i][15]; - multi_or[10][i] = MultiOR(3); - multi_or[10][i].in[0] <== eq[41][i].out; - multi_or[10][i].in[1] <== eq[42][i].out; - multi_or[10][i].in[2] <== eq[40][i].out; - and[30][i].b <== multi_or[10][i].out; - multi_or[11][i] = MultiOR(2); - multi_or[11][i].in[0] <== and[29][i].out; - multi_or[11][i].in[1] <== and[30][i].out; - states[i+1][13] <== multi_or[11][i].out; + and[30][i].b <== multi_or[8][i].out; + multi_or[9][i] = MultiOR(2); + multi_or[9][i].in[0] <== and[29][i].out; + multi_or[9][i].in[1] <== and[30][i].out; + states[i+1][13] <== multi_or[9][i].out; state_changed[i].in[12] <== states[i+1][13]; eq[43][i] = IsEqual(); eq[43][i].in[0] <== in[i]; @@ -397,98 +378,84 @@ template FromAllRegex(msg_bytes) { and[32][i] = AND(); and[32][i].a <== states[i][15]; and[32][i].b <== eq[43][i].out; - multi_or[12][i] = MultiOR(2); - multi_or[12][i].in[0] <== and[31][i].out; - multi_or[12][i].in[1] <== and[32][i].out; - states[i+1][14] <== multi_or[12][i].out; + multi_or[10][i] = MultiOR(2); + multi_or[10][i].in[0] <== and[31][i].out; + multi_or[10][i].in[1] <== and[32][i].out; + states[i+1][14] <== multi_or[10][i].out; state_changed[i].in[13] <== states[i+1][14]; - and[33][i] = AND(); - and[33][i].a <== states[i][8]; - and[33][i].b <== and[10][i].out; lt[10][i] = LessEqThan(8); lt[10][i].in[0] <== 14; lt[10][i].in[1] <== in[i]; lt[11][i] = LessEqThan(8); lt[11][i].in[0] <== in[i]; lt[11][i].in[1] <== 127; - and[34][i] = AND(); - and[34][i].a <== lt[10][i].out; - and[34][i].b <== lt[11][i].out; + and[33][i] = AND(); + and[33][i].a <== lt[10][i].out; + and[33][i].b <== lt[11][i].out; eq[44][i] = IsEqual(); eq[44][i].in[0] <== in[i]; eq[44][i].in[1] <== 0; eq[45][i] = IsEqual(); eq[45][i].in[0] <== in[i]; - eq[45][i].in[1] <== 2; + eq[45][i].in[1] <== 1; eq[46][i] = IsEqual(); eq[46][i].in[0] <== in[i]; - eq[46][i].in[1] <== 11; + eq[46][i].in[1] <== 2; eq[47][i] = IsEqual(); eq[47][i].in[0] <== in[i]; - eq[47][i].in[1] <== 6; + eq[47][i].in[1] <== 3; eq[48][i] = IsEqual(); eq[48][i].in[0] <== in[i]; eq[48][i].in[1] <== 4; eq[49][i] = IsEqual(); eq[49][i].in[0] <== in[i]; - eq[49][i].in[1] <== 9; + eq[49][i].in[1] <== 5; eq[50][i] = IsEqual(); eq[50][i].in[0] <== in[i]; - eq[50][i].in[1] <== 3; + eq[50][i].in[1] <== 6; eq[51][i] = IsEqual(); eq[51][i].in[0] <== in[i]; eq[51][i].in[1] <== 7; eq[52][i] = IsEqual(); eq[52][i].in[0] <== in[i]; - eq[52][i].in[1] <== 12; + eq[52][i].in[1] <== 8; eq[53][i] = IsEqual(); eq[53][i].in[0] <== in[i]; - eq[53][i].in[1] <== 8; + eq[53][i].in[1] <== 9; eq[54][i] = IsEqual(); eq[54][i].in[0] <== in[i]; - eq[54][i].in[1] <== 5; + eq[54][i].in[1] <== 11; eq[55][i] = IsEqual(); eq[55][i].in[0] <== in[i]; - eq[55][i].in[1] <== 1; + eq[55][i].in[1] <== 12; + and[34][i] = AND(); + and[34][i].a <== states[i][7]; + multi_or[11][i] = MultiOR(13); + multi_or[11][i].in[0] <== and[33][i].out; + multi_or[11][i].in[1] <== eq[44][i].out; + multi_or[11][i].in[2] <== eq[45][i].out; + multi_or[11][i].in[3] <== eq[46][i].out; + multi_or[11][i].in[4] <== eq[47][i].out; + multi_or[11][i].in[5] <== eq[48][i].out; + multi_or[11][i].in[6] <== eq[49][i].out; + multi_or[11][i].in[7] <== eq[50][i].out; + multi_or[11][i].in[8] <== eq[51][i].out; + multi_or[11][i].in[9] <== eq[52][i].out; + multi_or[11][i].in[10] <== eq[53][i].out; + multi_or[11][i].in[11] <== eq[54][i].out; + multi_or[11][i].in[12] <== eq[55][i].out; + and[34][i].b <== multi_or[11][i].out; and[35][i] = AND(); - and[35][i].a <== states[i][7]; - multi_or[13][i] = MultiOR(13); - multi_or[13][i].in[0] <== and[34][i].out; - multi_or[13][i].in[1] <== eq[44][i].out; - multi_or[13][i].in[2] <== eq[45][i].out; - multi_or[13][i].in[3] <== eq[46][i].out; - multi_or[13][i].in[4] <== eq[47][i].out; - multi_or[13][i].in[5] <== eq[48][i].out; - multi_or[13][i].in[6] <== eq[49][i].out; - multi_or[13][i].in[7] <== eq[50][i].out; - multi_or[13][i].in[8] <== eq[51][i].out; - multi_or[13][i].in[9] <== eq[52][i].out; - multi_or[13][i].in[10] <== eq[53][i].out; - multi_or[13][i].in[11] <== eq[54][i].out; - multi_or[13][i].in[12] <== eq[55][i].out; - and[35][i].b <== multi_or[13][i].out; + and[35][i].a <== states[i][8]; + and[35][i].b <== and[12][i].out; and[36][i] = AND(); and[36][i].a <== states[i][15]; - multi_or[14][i] = MultiOR(13); - multi_or[14][i].in[0] <== and[34][i].out; - multi_or[14][i].in[1] <== eq[55][i].out; - multi_or[14][i].in[2] <== eq[50][i].out; - multi_or[14][i].in[3] <== eq[54][i].out; - multi_or[14][i].in[4] <== eq[51][i].out; - multi_or[14][i].in[5] <== eq[48][i].out; - multi_or[14][i].in[6] <== eq[53][i].out; - multi_or[14][i].in[7] <== eq[46][i].out; - multi_or[14][i].in[8] <== eq[45][i].out; - multi_or[14][i].in[9] <== eq[47][i].out; - multi_or[14][i].in[10] <== eq[52][i].out; - multi_or[14][i].in[11] <== eq[49][i].out; - multi_or[14][i].in[12] <== eq[44][i].out; - and[36][i].b <== multi_or[14][i].out; - multi_or[15][i] = MultiOR(3); - multi_or[15][i].in[0] <== and[33][i].out; - multi_or[15][i].in[1] <== and[35][i].out; - multi_or[15][i].in[2] <== and[36][i].out; - states[i+1][15] <== multi_or[15][i].out; + and[36][i].b <== multi_or[11][i].out; + multi_or[12][i] = MultiOR(3); + multi_or[12][i].in[0] <== and[34][i].out; + multi_or[12][i].in[1] <== and[35][i].out; + multi_or[12][i].in[2] <== and[36][i].out; + states[i+1][15] <== multi_or[12][i].out; state_changed[i].in[14] <== states[i+1][15]; and[37][i] = AND(); and[37][i].a <== states[i][15]; @@ -514,7 +481,7 @@ template FromAllRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][17] * (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]; } - // substrings calculated: [{(13, 10), (8, 15), (7, 15), (7, 12), (15, 10), (12, 10), (7, 14), (15, 13), (7, 11), (15, 12), (11, 8), (9, 8), (15, 9), (7, 10), (15, 8), (15, 11), (15, 14), (7, 8), (15, 15), (10, 8), (14, 10), (7, 9), (7, 13)}] + // substrings calculated: [{(7, 8), (7, 9), (7, 10), (7, 11), (7, 12), (7, 13), (7, 14), (7, 15), (8, 15), (9, 8), (10, 8), (11, 8), (12, 10), (13, 10), (14, 10), (15, 8), (15, 9), (15, 10), (15, 11), (15, 12), (15, 13), (15, 14), (15, 15)}] signal is_substr0[msg_bytes][24]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/circuits/common/message_id_regex.circom b/packages/circom/circuits/common/message_id_regex.circom index fa7d669..f0005a8 100644 --- a/packages/circom/circuits/common/message_id_regex.circom +++ b/packages/circom/circuits/common/message_id_regex.circom @@ -17,7 +17,7 @@ template MessageIdRegex(msg_bytes) { component eq[27][num_bytes]; component lt[4][num_bytes]; component and[22][num_bytes]; - component multi_or[4][num_bytes]; + component multi_or[3][num_bytes]; signal states[num_bytes+1][19]; component state_changed[num_bytes]; @@ -32,10 +32,10 @@ template MessageIdRegex(msg_bytes) { eq[0][i].in[0] <== in[i]; eq[0][i].in[1] <== 109; and[0][i] = AND(); - and[0][i].a <== states[i][4]; + and[0][i].a <== states[i][0]; and[0][i].b <== eq[0][i].out; and[1][i] = AND(); - and[1][i].a <== states[i][0]; + and[1][i].a <== states[i][4]; and[1][i].b <== eq[0][i].out; multi_or[0][i] = MultiOR(2); multi_or[0][i].in[0] <== and[0][i].out; @@ -160,61 +160,61 @@ template MessageIdRegex(msg_bytes) { and[16][i].b <== lt[3][i].out; eq[12][i] = IsEqual(); eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 48; + eq[12][i].in[1] <== 43; eq[13][i] = IsEqual(); eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 54; + eq[13][i].in[1] <== 46; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 52; + eq[14][i].in[1] <== 48; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 56; + eq[15][i].in[1] <== 49; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 53; + eq[16][i].in[1] <== 50; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; eq[17][i].in[1] <== 51; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 49; + eq[18][i].in[1] <== 52; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 61; + eq[19][i].in[1] <== 53; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 95; + eq[20][i].in[1] <== 54; eq[21][i] = IsEqual(); eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 43; + eq[21][i].in[1] <== 55; eq[22][i] = IsEqual(); eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 57; + eq[22][i].in[1] <== 56; eq[23][i] = IsEqual(); eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 46; + eq[23][i].in[1] <== 57; eq[24][i] = IsEqual(); eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 50; + eq[24][i].in[1] <== 61; eq[25][i] = IsEqual(); eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 55; + eq[25][i].in[1] <== 95; and[17][i] = AND(); and[17][i].a <== states[i][14]; multi_or[1][i] = MultiOR(17); multi_or[1][i].in[0] <== and[15][i].out; multi_or[1][i].in[1] <== and[16][i].out; multi_or[1][i].in[2] <== eq[12][i].out; - multi_or[1][i].in[3] <== eq[13][i].out; - multi_or[1][i].in[4] <== eq[14][i].out; - multi_or[1][i].in[5] <== eq[15][i].out; - multi_or[1][i].in[6] <== eq[16][i].out; - multi_or[1][i].in[7] <== eq[17][i].out; - multi_or[1][i].in[8] <== eq[18][i].out; - multi_or[1][i].in[9] <== eq[19][i].out; - multi_or[1][i].in[10] <== eq[20][i].out; - multi_or[1][i].in[11] <== eq[7][i].out; + multi_or[1][i].in[3] <== eq[7][i].out; + multi_or[1][i].in[4] <== eq[13][i].out; + multi_or[1][i].in[5] <== eq[14][i].out; + multi_or[1][i].in[6] <== eq[15][i].out; + multi_or[1][i].in[7] <== eq[16][i].out; + multi_or[1][i].in[8] <== eq[17][i].out; + multi_or[1][i].in[9] <== eq[18][i].out; + multi_or[1][i].in[10] <== eq[19][i].out; + multi_or[1][i].in[11] <== eq[20][i].out; multi_or[1][i].in[12] <== eq[21][i].out; multi_or[1][i].in[13] <== eq[22][i].out; multi_or[1][i].in[14] <== eq[23][i].out; @@ -223,29 +223,11 @@ template MessageIdRegex(msg_bytes) { and[17][i].b <== multi_or[1][i].out; and[18][i] = AND(); and[18][i].a <== states[i][15]; - multi_or[2][i] = MultiOR(17); - multi_or[2][i].in[0] <== and[15][i].out; - multi_or[2][i].in[1] <== and[16][i].out; - multi_or[2][i].in[2] <== eq[19][i].out; - multi_or[2][i].in[3] <== eq[13][i].out; - multi_or[2][i].in[4] <== eq[25][i].out; - multi_or[2][i].in[5] <== eq[24][i].out; - multi_or[2][i].in[6] <== eq[17][i].out; - multi_or[2][i].in[7] <== eq[16][i].out; - multi_or[2][i].in[8] <== eq[18][i].out; - multi_or[2][i].in[9] <== eq[14][i].out; - multi_or[2][i].in[10] <== eq[15][i].out; - multi_or[2][i].in[11] <== eq[22][i].out; - multi_or[2][i].in[12] <== eq[23][i].out; - multi_or[2][i].in[13] <== eq[21][i].out; - multi_or[2][i].in[14] <== eq[20][i].out; - multi_or[2][i].in[15] <== eq[12][i].out; - multi_or[2][i].in[16] <== eq[7][i].out; - and[18][i].b <== multi_or[2][i].out; - multi_or[3][i] = MultiOR(2); - multi_or[3][i].in[0] <== and[17][i].out; - multi_or[3][i].in[1] <== and[18][i].out; - states[i+1][15] <== multi_or[3][i].out; + and[18][i].b <== multi_or[1][i].out; + multi_or[2][i] = MultiOR(2); + multi_or[2][i].in[0] <== and[17][i].out; + multi_or[2][i].in[1] <== and[18][i].out; + states[i+1][15] <== multi_or[2][i].out; state_changed[i].in[14] <== states[i+1][15]; eq[26][i] = IsEqual(); eq[26][i].in[0] <== in[i]; @@ -279,7 +261,7 @@ template MessageIdRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][18] * (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]; } - // substrings calculated: [{(15, 15), (13, 14), (14, 15), (15, 16)}] + // substrings calculated: [{(13, 14), (14, 15), (15, 15), (15, 16)}] signal is_substr0[msg_bytes][5]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/circuits/common/subject_all_regex.circom b/packages/circom/circuits/common/subject_all_regex.circom index 3ceb229..6a2ad14 100644 --- a/packages/circom/circuits/common/subject_all_regex.circom +++ b/packages/circom/circuits/common/subject_all_regex.circom @@ -17,7 +17,7 @@ template SubjectAllRegex(msg_bytes) { component eq[59][num_bytes]; component lt[12][num_bytes]; component and[42][num_bytes]; - component multi_or[15][num_bytes]; + component multi_or[13][num_bytes]; signal states[num_bytes+1][21]; component state_changed[num_bytes]; @@ -115,56 +115,56 @@ template SubjectAllRegex(msg_bytes) { states[i+1][10] <== and[10][i].out; state_changed[i].in[9] <== states[i+1][10]; lt[0][i] = LessEqThan(8); - lt[0][i].in[0] <== 160; + lt[0][i].in[0] <== 194; lt[0][i].in[1] <== in[i]; lt[1][i] = LessEqThan(8); lt[1][i].in[0] <== in[i]; - lt[1][i].in[1] <== 191; + lt[1][i].in[1] <== 223; and[11][i] = AND(); and[11][i].a <== lt[0][i].out; and[11][i].b <== lt[1][i].out; and[12][i] = AND(); - and[12][i].a <== states[i][12]; + and[12][i].a <== states[i][10]; and[12][i].b <== and[11][i].out; lt[2][i] = LessEqThan(8); - lt[2][i].in[0] <== 128; + lt[2][i].in[0] <== 160; lt[2][i].in[1] <== in[i]; lt[3][i] = LessEqThan(8); lt[3][i].in[0] <== in[i]; - lt[3][i].in[1] <== 159; + lt[3][i].in[1] <== 191; and[13][i] = AND(); and[13][i].a <== lt[2][i].out; and[13][i].b <== lt[3][i].out; and[14][i] = AND(); - and[14][i].a <== states[i][14]; + and[14][i].a <== states[i][12]; and[14][i].b <== and[13][i].out; lt[4][i] = LessEqThan(8); - lt[4][i].in[0] <== 194; + lt[4][i].in[0] <== 128; lt[4][i].in[1] <== in[i]; lt[5][i] = LessEqThan(8); lt[5][i].in[0] <== in[i]; - lt[5][i].in[1] <== 223; + lt[5][i].in[1] <== 191; and[15][i] = AND(); and[15][i].a <== lt[4][i].out; and[15][i].b <== lt[5][i].out; and[16][i] = AND(); - and[16][i].a <== states[i][10]; + and[16][i].a <== states[i][13]; and[16][i].b <== and[15][i].out; lt[6][i] = LessEqThan(8); lt[6][i].in[0] <== 128; lt[6][i].in[1] <== in[i]; lt[7][i] = LessEqThan(8); lt[7][i].in[0] <== in[i]; - lt[7][i].in[1] <== 191; + lt[7][i].in[1] <== 159; and[17][i] = AND(); and[17][i].a <== lt[6][i].out; and[17][i].b <== lt[7][i].out; and[18][i] = AND(); - and[18][i].a <== states[i][13]; + and[18][i].a <== states[i][14]; and[18][i].b <== and[17][i].out; and[19][i] = AND(); and[19][i].a <== states[i][18]; - and[19][i].b <== and[15][i].out; + and[19][i].b <== and[11][i].out; multi_or[1][i] = MultiOR(5); multi_or[1][i].in[0] <== and[12][i].out; multi_or[1][i].in[1] <== and[14][i].out; @@ -189,46 +189,46 @@ template SubjectAllRegex(msg_bytes) { state_changed[i].in[11] <== states[i+1][12]; eq[11][i] = IsEqual(); eq[11][i].in[0] <== in[i]; - eq[11][i].in[1] <== 236; + eq[11][i].in[1] <== 225; eq[12][i] = IsEqual(); eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 229; + eq[12][i].in[1] <== 226; eq[13][i] = IsEqual(); eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 238; + eq[13][i].in[1] <== 227; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 239; + eq[14][i].in[1] <== 228; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 226; + eq[15][i].in[1] <== 229; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 227; + eq[16][i].in[1] <== 230; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 233; + eq[17][i].in[1] <== 231; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 225; + eq[18][i].in[1] <== 232; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 228; + eq[19][i].in[1] <== 233; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 230; + eq[20][i].in[1] <== 234; eq[21][i] = IsEqual(); eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 234; + eq[21][i].in[1] <== 235; eq[22][i] = IsEqual(); eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 231; + eq[22][i].in[1] <== 236; eq[23][i] = IsEqual(); eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 232; + eq[23][i].in[1] <== 238; eq[24][i] = IsEqual(); eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 235; + eq[24][i].in[1] <== 239; and[22][i] = AND(); and[22][i].a <== states[i][10]; multi_or[3][i] = MultiOR(14); @@ -247,69 +247,69 @@ template SubjectAllRegex(msg_bytes) { multi_or[3][i].in[12] <== eq[23][i].out; multi_or[3][i].in[13] <== eq[24][i].out; and[22][i].b <== multi_or[3][i].out; - and[23][i] = AND(); - and[23][i].a <== states[i][16]; - and[23][i].b <== and[17][i].out; lt[8][i] = LessEqThan(8); lt[8][i].in[0] <== 144; lt[8][i].in[1] <== in[i]; lt[9][i] = LessEqThan(8); lt[9][i].in[0] <== in[i]; lt[9][i].in[1] <== 191; + and[23][i] = AND(); + and[23][i].a <== lt[8][i].out; + and[23][i].b <== lt[9][i].out; and[24][i] = AND(); - and[24][i].a <== lt[8][i].out; - and[24][i].b <== lt[9][i].out; + and[24][i].a <== states[i][15]; + and[24][i].b <== and[23][i].out; and[25][i] = AND(); - and[25][i].a <== states[i][15]; - and[25][i].b <== and[24][i].out; + and[25][i].a <== states[i][16]; + and[25][i].b <== and[15][i].out; eq[25][i] = IsEqual(); eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 135; + eq[25][i].in[1] <== 128; eq[26][i] = IsEqual(); eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 138; + eq[26][i].in[1] <== 129; eq[27][i] = IsEqual(); eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 137; + eq[27][i].in[1] <== 130; eq[28][i] = IsEqual(); eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 141; + eq[28][i].in[1] <== 131; eq[29][i] = IsEqual(); eq[29][i].in[0] <== in[i]; - eq[29][i].in[1] <== 134; + eq[29][i].in[1] <== 132; eq[30][i] = IsEqual(); eq[30][i].in[0] <== in[i]; eq[30][i].in[1] <== 133; eq[31][i] = IsEqual(); eq[31][i].in[0] <== in[i]; - eq[31][i].in[1] <== 131; + eq[31][i].in[1] <== 134; eq[32][i] = IsEqual(); eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 142; + eq[32][i].in[1] <== 135; eq[33][i] = IsEqual(); eq[33][i].in[0] <== in[i]; - eq[33][i].in[1] <== 132; + eq[33][i].in[1] <== 136; eq[34][i] = IsEqual(); eq[34][i].in[0] <== in[i]; - eq[34][i].in[1] <== 139; + eq[34][i].in[1] <== 137; eq[35][i] = IsEqual(); eq[35][i].in[0] <== in[i]; - eq[35][i].in[1] <== 143; + eq[35][i].in[1] <== 138; eq[36][i] = IsEqual(); eq[36][i].in[0] <== in[i]; - eq[36][i].in[1] <== 129; + eq[36][i].in[1] <== 139; eq[37][i] = IsEqual(); eq[37][i].in[0] <== in[i]; - eq[37][i].in[1] <== 130; + eq[37][i].in[1] <== 140; eq[38][i] = IsEqual(); eq[38][i].in[0] <== in[i]; - eq[38][i].in[1] <== 136; + eq[38][i].in[1] <== 141; eq[39][i] = IsEqual(); eq[39][i].in[0] <== in[i]; - eq[39][i].in[1] <== 140; + eq[39][i].in[1] <== 142; eq[40][i] = IsEqual(); eq[40][i].in[0] <== in[i]; - eq[40][i].in[1] <== 128; + eq[40][i].in[1] <== 143; and[26][i] = AND(); and[26][i].a <== states[i][17]; multi_or[4][i] = MultiOR(16); @@ -332,43 +332,28 @@ template SubjectAllRegex(msg_bytes) { and[26][i].b <== multi_or[4][i].out; and[27][i] = AND(); and[27][i].a <== states[i][18]; - multi_or[5][i] = MultiOR(14); - multi_or[5][i].in[0] <== eq[14][i].out; - multi_or[5][i].in[1] <== eq[18][i].out; - multi_or[5][i].in[2] <== eq[22][i].out; - multi_or[5][i].in[3] <== eq[12][i].out; - multi_or[5][i].in[4] <== eq[21][i].out; - multi_or[5][i].in[5] <== eq[24][i].out; - multi_or[5][i].in[6] <== eq[13][i].out; - multi_or[5][i].in[7] <== eq[23][i].out; - multi_or[5][i].in[8] <== eq[19][i].out; - multi_or[5][i].in[9] <== eq[16][i].out; - multi_or[5][i].in[10] <== eq[20][i].out; - multi_or[5][i].in[11] <== eq[17][i].out; - multi_or[5][i].in[12] <== eq[15][i].out; - multi_or[5][i].in[13] <== eq[11][i].out; - and[27][i].b <== multi_or[5][i].out; - multi_or[6][i] = MultiOR(5); - multi_or[6][i].in[0] <== and[22][i].out; - multi_or[6][i].in[1] <== and[23][i].out; - multi_or[6][i].in[2] <== and[25][i].out; - multi_or[6][i].in[3] <== and[26][i].out; - multi_or[6][i].in[4] <== and[27][i].out; - states[i+1][13] <== multi_or[6][i].out; + and[27][i].b <== multi_or[3][i].out; + multi_or[5][i] = MultiOR(5); + multi_or[5][i].in[0] <== and[22][i].out; + multi_or[5][i].in[1] <== and[24][i].out; + multi_or[5][i].in[2] <== and[25][i].out; + multi_or[5][i].in[3] <== and[26][i].out; + multi_or[5][i].in[4] <== and[27][i].out; + states[i+1][13] <== multi_or[5][i].out; state_changed[i].in[12] <== states[i+1][13]; eq[41][i] = IsEqual(); eq[41][i].in[0] <== in[i]; eq[41][i].in[1] <== 237; and[28][i] = AND(); - and[28][i].a <== states[i][18]; + and[28][i].a <== states[i][10]; and[28][i].b <== eq[41][i].out; and[29][i] = AND(); - and[29][i].a <== states[i][10]; + and[29][i].a <== states[i][18]; and[29][i].b <== eq[41][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; + multi_or[6][i] = MultiOR(2); + multi_or[6][i].in[0] <== and[28][i].out; + multi_or[6][i].in[1] <== and[29][i].out; + states[i+1][14] <== multi_or[6][i].out; state_changed[i].in[13] <== states[i+1][14]; eq[42][i] = IsEqual(); eq[42][i].in[0] <== in[i]; @@ -379,34 +364,34 @@ template SubjectAllRegex(msg_bytes) { and[31][i] = AND(); and[31][i].a <== states[i][18]; and[31][i].b <== eq[42][i].out; - multi_or[8][i] = MultiOR(2); - multi_or[8][i].in[0] <== and[30][i].out; - multi_or[8][i].in[1] <== and[31][i].out; - states[i+1][15] <== multi_or[8][i].out; + multi_or[7][i] = MultiOR(2); + multi_or[7][i].in[0] <== and[30][i].out; + multi_or[7][i].in[1] <== and[31][i].out; + states[i+1][15] <== multi_or[7][i].out; state_changed[i].in[14] <== states[i+1][15]; eq[43][i] = IsEqual(); eq[43][i].in[0] <== in[i]; - eq[43][i].in[1] <== 243; + eq[43][i].in[1] <== 241; eq[44][i] = IsEqual(); eq[44][i].in[0] <== in[i]; eq[44][i].in[1] <== 242; eq[45][i] = IsEqual(); eq[45][i].in[0] <== in[i]; - eq[45][i].in[1] <== 241; + eq[45][i].in[1] <== 243; and[32][i] = AND(); and[32][i].a <== states[i][10]; - multi_or[9][i] = MultiOR(3); - multi_or[9][i].in[0] <== eq[43][i].out; - multi_or[9][i].in[1] <== eq[44][i].out; - multi_or[9][i].in[2] <== eq[45][i].out; - and[32][i].b <== multi_or[9][i].out; + multi_or[8][i] = MultiOR(3); + multi_or[8][i].in[0] <== eq[43][i].out; + multi_or[8][i].in[1] <== eq[44][i].out; + multi_or[8][i].in[2] <== eq[45][i].out; + and[32][i].b <== multi_or[8][i].out; and[33][i] = AND(); and[33][i].a <== states[i][18]; - and[33][i].b <== multi_or[9][i].out; - multi_or[10][i] = MultiOR(2); - multi_or[10][i].in[0] <== and[32][i].out; - multi_or[10][i].in[1] <== and[33][i].out; - states[i+1][16] <== multi_or[10][i].out; + and[33][i].b <== multi_or[8][i].out; + multi_or[9][i] = MultiOR(2); + multi_or[9][i].in[0] <== and[32][i].out; + multi_or[9][i].in[1] <== and[33][i].out; + states[i+1][16] <== multi_or[9][i].out; state_changed[i].in[15] <== states[i+1][16]; eq[46][i] = IsEqual(); eq[46][i].in[0] <== in[i]; @@ -417,98 +402,84 @@ template SubjectAllRegex(msg_bytes) { and[35][i] = AND(); and[35][i].a <== states[i][18]; and[35][i].b <== eq[46][i].out; - multi_or[11][i] = MultiOR(2); - multi_or[11][i].in[0] <== and[34][i].out; - multi_or[11][i].in[1] <== and[35][i].out; - states[i+1][17] <== multi_or[11][i].out; + multi_or[10][i] = MultiOR(2); + multi_or[10][i].in[0] <== and[34][i].out; + multi_or[10][i].in[1] <== and[35][i].out; + states[i+1][17] <== multi_or[10][i].out; state_changed[i].in[16] <== states[i+1][17]; - and[36][i] = AND(); - and[36][i].a <== states[i][11]; - and[36][i].b <== and[17][i].out; lt[10][i] = LessEqThan(8); lt[10][i].in[0] <== 14; lt[10][i].in[1] <== in[i]; lt[11][i] = LessEqThan(8); lt[11][i].in[0] <== in[i]; lt[11][i].in[1] <== 127; - and[37][i] = AND(); - and[37][i].a <== lt[10][i].out; - and[37][i].b <== lt[11][i].out; + and[36][i] = AND(); + and[36][i].a <== lt[10][i].out; + and[36][i].b <== lt[11][i].out; eq[47][i] = IsEqual(); eq[47][i].in[0] <== in[i]; eq[47][i].in[1] <== 0; eq[48][i] = IsEqual(); eq[48][i].in[0] <== in[i]; - eq[48][i].in[1] <== 9; + eq[48][i].in[1] <== 1; eq[49][i] = IsEqual(); eq[49][i].in[0] <== in[i]; - eq[49][i].in[1] <== 8; + eq[49][i].in[1] <== 2; eq[50][i] = IsEqual(); eq[50][i].in[0] <== in[i]; - eq[50][i].in[1] <== 1; + eq[50][i].in[1] <== 3; eq[51][i] = IsEqual(); eq[51][i].in[0] <== in[i]; - eq[51][i].in[1] <== 6; + eq[51][i].in[1] <== 4; eq[52][i] = IsEqual(); eq[52][i].in[0] <== in[i]; - eq[52][i].in[1] <== 2; + eq[52][i].in[1] <== 5; eq[53][i] = IsEqual(); eq[53][i].in[0] <== in[i]; - eq[53][i].in[1] <== 3; + eq[53][i].in[1] <== 6; eq[54][i] = IsEqual(); eq[54][i].in[0] <== in[i]; - eq[54][i].in[1] <== 4; + eq[54][i].in[1] <== 7; eq[55][i] = IsEqual(); eq[55][i].in[0] <== in[i]; - eq[55][i].in[1] <== 7; + eq[55][i].in[1] <== 8; eq[56][i] = IsEqual(); eq[56][i].in[0] <== in[i]; - eq[56][i].in[1] <== 12; + eq[56][i].in[1] <== 9; eq[57][i] = IsEqual(); eq[57][i].in[0] <== in[i]; - eq[57][i].in[1] <== 5; + eq[57][i].in[1] <== 11; eq[58][i] = IsEqual(); eq[58][i].in[0] <== in[i]; - eq[58][i].in[1] <== 11; + eq[58][i].in[1] <== 12; + and[37][i] = AND(); + and[37][i].a <== states[i][10]; + multi_or[11][i] = MultiOR(13); + multi_or[11][i].in[0] <== and[36][i].out; + multi_or[11][i].in[1] <== eq[47][i].out; + multi_or[11][i].in[2] <== eq[48][i].out; + multi_or[11][i].in[3] <== eq[49][i].out; + multi_or[11][i].in[4] <== eq[50][i].out; + multi_or[11][i].in[5] <== eq[51][i].out; + multi_or[11][i].in[6] <== eq[52][i].out; + multi_or[11][i].in[7] <== eq[53][i].out; + multi_or[11][i].in[8] <== eq[54][i].out; + multi_or[11][i].in[9] <== eq[55][i].out; + multi_or[11][i].in[10] <== eq[56][i].out; + multi_or[11][i].in[11] <== eq[57][i].out; + multi_or[11][i].in[12] <== eq[58][i].out; + and[37][i].b <== multi_or[11][i].out; and[38][i] = AND(); - and[38][i].a <== states[i][10]; - multi_or[12][i] = MultiOR(13); - multi_or[12][i].in[0] <== and[37][i].out; - multi_or[12][i].in[1] <== eq[47][i].out; - multi_or[12][i].in[2] <== eq[48][i].out; - multi_or[12][i].in[3] <== eq[49][i].out; - multi_or[12][i].in[4] <== eq[50][i].out; - multi_or[12][i].in[5] <== eq[51][i].out; - multi_or[12][i].in[6] <== eq[52][i].out; - multi_or[12][i].in[7] <== eq[53][i].out; - multi_or[12][i].in[8] <== eq[54][i].out; - multi_or[12][i].in[9] <== eq[55][i].out; - multi_or[12][i].in[10] <== eq[56][i].out; - multi_or[12][i].in[11] <== eq[57][i].out; - multi_or[12][i].in[12] <== eq[58][i].out; - and[38][i].b <== multi_or[12][i].out; + and[38][i].a <== states[i][11]; + and[38][i].b <== and[15][i].out; and[39][i] = AND(); and[39][i].a <== states[i][18]; - multi_or[13][i] = MultiOR(13); - multi_or[13][i].in[0] <== and[37][i].out; - multi_or[13][i].in[1] <== eq[57][i].out; - multi_or[13][i].in[2] <== eq[47][i].out; - multi_or[13][i].in[3] <== eq[50][i].out; - multi_or[13][i].in[4] <== eq[52][i].out; - multi_or[13][i].in[5] <== eq[53][i].out; - multi_or[13][i].in[6] <== eq[49][i].out; - multi_or[13][i].in[7] <== eq[55][i].out; - multi_or[13][i].in[8] <== eq[51][i].out; - multi_or[13][i].in[9] <== eq[58][i].out; - multi_or[13][i].in[10] <== eq[48][i].out; - multi_or[13][i].in[11] <== eq[54][i].out; - multi_or[13][i].in[12] <== eq[56][i].out; - and[39][i].b <== multi_or[13][i].out; - multi_or[14][i] = MultiOR(3); - multi_or[14][i].in[0] <== and[36][i].out; - multi_or[14][i].in[1] <== and[38][i].out; - multi_or[14][i].in[2] <== and[39][i].out; - states[i+1][18] <== multi_or[14][i].out; + and[39][i].b <== multi_or[11][i].out; + multi_or[12][i] = MultiOR(3); + multi_or[12][i].in[0] <== and[37][i].out; + multi_or[12][i].in[1] <== and[38][i].out; + multi_or[12][i].in[2] <== and[39][i].out; + states[i+1][18] <== multi_or[12][i].out; state_changed[i].in[17] <== states[i+1][18]; and[40][i] = AND(); and[40][i].a <== states[i][18]; @@ -534,7 +505,7 @@ template SubjectAllRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][20] * (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]; } - // substrings calculated: [{(18, 18), (10, 13), (11, 18), (12, 11), (16, 13), (17, 13), (18, 15), (14, 11), (10, 18), (18, 17), (18, 16), (10, 14), (15, 13), (10, 15), (10, 11), (10, 12), (10, 16), (18, 11), (10, 17), (18, 14), (18, 13), (13, 11), (18, 12)}] + // substrings calculated: [{(10, 11), (10, 12), (10, 13), (10, 14), (10, 15), (10, 16), (10, 17), (10, 18), (11, 18), (12, 11), (13, 11), (14, 11), (15, 13), (16, 13), (17, 13), (18, 11), (18, 12), (18, 13), (18, 14), (18, 15), (18, 16), (18, 17), (18, 18)}] signal is_substr0[msg_bytes][24]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/circuits/common/timestamp_regex.circom b/packages/circom/circuits/common/timestamp_regex.circom index f9f2cdb..2ff8518 100644 --- a/packages/circom/circuits/common/timestamp_regex.circom +++ b/packages/circom/circuits/common/timestamp_regex.circom @@ -17,7 +17,7 @@ template TimestampRegex(msg_bytes) { component eq[71][num_bytes]; component lt[20][num_bytes]; component and[71][num_bytes]; - component multi_or[22][num_bytes]; + component multi_or[18][num_bytes]; signal states[num_bytes+1][34]; component state_changed[num_bytes]; @@ -177,53 +177,53 @@ template TimestampRegex(msg_bytes) { and[18][i].a <== lt[0][i].out; and[18][i].b <== lt[1][i].out; and[19][i] = AND(); - and[19][i].a <== states[i][30]; + and[19][i].a <== states[i][17]; and[19][i].b <== and[18][i].out; and[20][i] = AND(); - and[20][i].a <== states[i][17]; + and[20][i].a <== states[i][18]; and[20][i].b <== and[18][i].out; - and[21][i] = AND(); - and[21][i].a <== states[i][18]; - and[21][i].b <== and[18][i].out; lt[2][i] = LessEqThan(8); lt[2][i].in[0] <== 97; lt[2][i].in[1] <== in[i]; lt[3][i] = LessEqThan(8); lt[3][i].in[0] <== in[i]; lt[3][i].in[1] <== 115; - and[22][i] = AND(); - and[22][i].a <== lt[2][i].out; - and[22][i].b <== lt[3][i].out; + and[21][i] = AND(); + and[21][i].a <== lt[2][i].out; + and[21][i].b <== lt[3][i].out; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; eq[16][i].in[1] <== 118; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 122; + eq[17][i].in[1] <== 119; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 121; + eq[18][i].in[1] <== 120; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 120; + eq[19][i].in[1] <== 121; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 119; - and[23][i] = AND(); - and[23][i].a <== states[i][29]; + eq[20][i].in[1] <== 122; + and[22][i] = AND(); + and[22][i].a <== states[i][29]; multi_or[1][i] = MultiOR(7); - multi_or[1][i].in[0] <== and[22][i].out; - multi_or[1][i].in[1] <== eq[16][i].out; - multi_or[1][i].in[2] <== eq[17][i].out; - multi_or[1][i].in[3] <== eq[18][i].out; - multi_or[1][i].in[4] <== eq[19][i].out; - multi_or[1][i].in[5] <== eq[12][i].out; + multi_or[1][i].in[0] <== and[21][i].out; + multi_or[1][i].in[1] <== eq[12][i].out; + multi_or[1][i].in[2] <== eq[16][i].out; + multi_or[1][i].in[3] <== eq[17][i].out; + multi_or[1][i].in[4] <== eq[18][i].out; + multi_or[1][i].in[5] <== eq[19][i].out; multi_or[1][i].in[6] <== eq[20][i].out; - and[23][i].b <== multi_or[1][i].out; + and[22][i].b <== multi_or[1][i].out; + and[23][i] = AND(); + and[23][i].a <== states[i][30]; + and[23][i].b <== and[18][i].out; multi_or[2][i] = MultiOR(4); multi_or[2][i].in[0] <== and[19][i].out; multi_or[2][i].in[1] <== and[20][i].out; - multi_or[2][i].in[2] <== and[21][i].out; + multi_or[2][i].in[2] <== and[22][i].out; multi_or[2][i].in[3] <== and[23][i].out; states[i+1][18] <== multi_or[2][i].out; state_changed[i].in[17] <== states[i+1][18]; @@ -259,74 +259,74 @@ template TimestampRegex(msg_bytes) { multi_or[3][i].in[0] <== and[25][i].out; multi_or[3][i].in[1] <== and[26][i].out; and[27][i].b <== multi_or[3][i].out; + and[28][i] = AND(); + and[28][i].a <== states[i][20]; + and[28][i].b <== multi_or[3][i].out; lt[8][i] = LessEqThan(8); lt[8][i].in[0] <== 128; lt[8][i].in[1] <== in[i]; lt[9][i] = LessEqThan(8); lt[9][i].in[0] <== in[i]; lt[9][i].in[1] <== 191; - and[28][i] = AND(); - and[28][i].a <== lt[8][i].out; - and[28][i].b <== lt[9][i].out; and[29][i] = AND(); - and[29][i].a <== states[i][21]; - and[29][i].b <== and[28][i].out; + and[29][i].a <== lt[8][i].out; + and[29][i].b <== lt[9][i].out; + and[30][i] = AND(); + and[30][i].a <== states[i][21]; + and[30][i].b <== and[29][i].out; lt[10][i] = LessEqThan(8); lt[10][i].in[0] <== 0; lt[10][i].in[1] <== in[i]; lt[11][i] = LessEqThan(8); lt[11][i].in[0] <== in[i]; lt[11][i].in[1] <== 47; - and[30][i] = AND(); - and[30][i].a <== lt[10][i].out; - and[30][i].b <== lt[11][i].out; and[31][i] = AND(); - and[31][i].a <== states[i][31]; + and[31][i].a <== lt[10][i].out; + and[31][i].b <== lt[11][i].out; + and[32][i] = AND(); + and[32][i].a <== states[i][31]; multi_or[4][i] = MultiOR(3); - multi_or[4][i].in[0] <== and[30][i].out; + multi_or[4][i].in[0] <== and[31][i].out; multi_or[4][i].in[1] <== and[26][i].out; multi_or[4][i].in[2] <== eq[15][i].out; - and[31][i].b <== multi_or[4][i].out; - and[32][i] = AND(); - and[32][i].a <== states[i][20]; - and[32][i].b <== multi_or[3][i].out; + and[32][i].b <== multi_or[4][i].out; multi_or[5][i] = MultiOR(4); multi_or[5][i].in[0] <== and[27][i].out; - multi_or[5][i].in[1] <== and[29][i].out; - multi_or[5][i].in[2] <== and[31][i].out; + multi_or[5][i].in[1] <== and[28][i].out; + multi_or[5][i].in[2] <== and[30][i].out; multi_or[5][i].in[3] <== and[32][i].out; states[i+1][20] <== multi_or[5][i].out; state_changed[i].in[19] <== states[i+1][20]; - and[33][i] = AND(); - and[33][i].a <== states[i][23]; - and[33][i].b <== and[28][i].out; lt[12][i] = LessEqThan(8); - lt[12][i].in[0] <== 160; + lt[12][i].in[0] <== 194; lt[12][i].in[1] <== in[i]; lt[13][i] = LessEqThan(8); lt[13][i].in[0] <== in[i]; - lt[13][i].in[1] <== 191; + lt[13][i].in[1] <== 223; + and[33][i] = AND(); + and[33][i].a <== lt[12][i].out; + and[33][i].b <== lt[13][i].out; and[34][i] = AND(); - and[34][i].a <== lt[12][i].out; - and[34][i].b <== lt[13][i].out; + and[34][i].a <== states[i][19]; + and[34][i].b <== and[33][i].out; and[35][i] = AND(); - and[35][i].a <== states[i][22]; - and[35][i].b <== and[34][i].out; + and[35][i].a <== states[i][20]; + and[35][i].b <== and[33][i].out; lt[14][i] = LessEqThan(8); - lt[14][i].in[0] <== 194; + lt[14][i].in[0] <== 160; lt[14][i].in[1] <== in[i]; lt[15][i] = LessEqThan(8); lt[15][i].in[0] <== in[i]; - lt[15][i].in[1] <== 223; + lt[15][i].in[1] <== 191; and[36][i] = AND(); and[36][i].a <== lt[14][i].out; and[36][i].b <== lt[15][i].out; and[37][i] = AND(); - and[37][i].a <== states[i][19]; + and[37][i].a <== states[i][22]; and[37][i].b <== and[36][i].out; and[38][i] = AND(); - and[38][i].a <== states[i][20]; - and[38][i].b <== and[36][i].out; + and[38][i].a <== states[i][23]; + and[38][i].b <== and[29][i].out; lt[16][i] = LessEqThan(8); lt[16][i].in[0] <== 128; lt[16][i].in[1] <== in[i]; @@ -341,9 +341,9 @@ template TimestampRegex(msg_bytes) { and[40][i].b <== and[39][i].out; and[41][i] = AND(); and[41][i].a <== states[i][31]; - and[41][i].b <== and[36][i].out; + and[41][i].b <== and[33][i].out; multi_or[6][i] = MultiOR(6); - multi_or[6][i].in[0] <== and[33][i].out; + multi_or[6][i].in[0] <== and[34][i].out; multi_or[6][i].in[1] <== and[35][i].out; multi_or[6][i].in[2] <== and[37][i].out; multi_or[6][i].in[3] <== and[38][i].out; @@ -371,48 +371,48 @@ template TimestampRegex(msg_bytes) { state_changed[i].in[21] <== states[i+1][22]; eq[23][i] = IsEqual(); eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 228; + eq[23][i].in[1] <== 225; eq[24][i] = IsEqual(); eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 236; + eq[24][i].in[1] <== 226; eq[25][i] = IsEqual(); eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 231; + eq[25][i].in[1] <== 227; eq[26][i] = IsEqual(); eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 229; + eq[26][i].in[1] <== 228; eq[27][i] = IsEqual(); eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 227; + eq[27][i].in[1] <== 229; eq[28][i] = IsEqual(); eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 234; + eq[28][i].in[1] <== 230; eq[29][i] = IsEqual(); eq[29][i].in[0] <== in[i]; - eq[29][i].in[1] <== 226; + eq[29][i].in[1] <== 231; eq[30][i] = IsEqual(); eq[30][i].in[0] <== in[i]; - eq[30][i].in[1] <== 233; + eq[30][i].in[1] <== 232; eq[31][i] = IsEqual(); eq[31][i].in[0] <== in[i]; - eq[31][i].in[1] <== 235; + eq[31][i].in[1] <== 233; eq[32][i] = IsEqual(); eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 238; + eq[32][i].in[1] <== 234; eq[33][i] = IsEqual(); eq[33][i].in[0] <== in[i]; - eq[33][i].in[1] <== 239; + eq[33][i].in[1] <== 235; eq[34][i] = IsEqual(); eq[34][i].in[0] <== in[i]; - eq[34][i].in[1] <== 232; + eq[34][i].in[1] <== 236; eq[35][i] = IsEqual(); eq[35][i].in[0] <== in[i]; - eq[35][i].in[1] <== 230; + eq[35][i].in[1] <== 238; eq[36][i] = IsEqual(); eq[36][i].in[0] <== in[i]; - eq[36][i].in[1] <== 225; + eq[36][i].in[1] <== 239; and[45][i] = AND(); - and[45][i].a <== states[i][20]; + and[45][i].a <== states[i][19]; multi_or[8][i] = MultiOR(14); multi_or[8][i].in[0] <== eq[23][i].out; multi_or[8][i].in[1] <== eq[24][i].out; @@ -430,58 +430,73 @@ template TimestampRegex(msg_bytes) { multi_or[8][i].in[13] <== eq[36][i].out; and[45][i].b <== multi_or[8][i].out; and[46][i] = AND(); - and[46][i].a <== states[i][26]; - and[46][i].b <== and[28][i].out; + and[46][i].a <== states[i][20]; + and[46][i].b <== multi_or[8][i].out; + lt[18][i] = LessEqThan(8); + lt[18][i].in[0] <== 144; + lt[18][i].in[1] <== in[i]; + lt[19][i] = LessEqThan(8); + lt[19][i].in[0] <== in[i]; + lt[19][i].in[1] <== 191; + and[47][i] = AND(); + and[47][i].a <== lt[18][i].out; + and[47][i].b <== lt[19][i].out; + and[48][i] = AND(); + and[48][i].a <== states[i][25]; + and[48][i].b <== and[47][i].out; + and[49][i] = AND(); + and[49][i].a <== states[i][26]; + and[49][i].b <== and[29][i].out; eq[37][i] = IsEqual(); eq[37][i].in[0] <== in[i]; - eq[37][i].in[1] <== 139; + eq[37][i].in[1] <== 128; eq[38][i] = IsEqual(); eq[38][i].in[0] <== in[i]; - eq[38][i].in[1] <== 140; + eq[38][i].in[1] <== 129; eq[39][i] = IsEqual(); eq[39][i].in[0] <== in[i]; - eq[39][i].in[1] <== 142; + eq[39][i].in[1] <== 130; eq[40][i] = IsEqual(); eq[40][i].in[0] <== in[i]; - eq[40][i].in[1] <== 138; + eq[40][i].in[1] <== 131; eq[41][i] = IsEqual(); eq[41][i].in[0] <== in[i]; - eq[41][i].in[1] <== 141; + eq[41][i].in[1] <== 132; eq[42][i] = IsEqual(); eq[42][i].in[0] <== in[i]; - eq[42][i].in[1] <== 136; + eq[42][i].in[1] <== 133; eq[43][i] = IsEqual(); eq[43][i].in[0] <== in[i]; - eq[43][i].in[1] <== 128; + eq[43][i].in[1] <== 134; eq[44][i] = IsEqual(); eq[44][i].in[0] <== in[i]; - eq[44][i].in[1] <== 132; + eq[44][i].in[1] <== 135; eq[45][i] = IsEqual(); eq[45][i].in[0] <== in[i]; - eq[45][i].in[1] <== 130; + eq[45][i].in[1] <== 136; eq[46][i] = IsEqual(); eq[46][i].in[0] <== in[i]; - eq[46][i].in[1] <== 133; + eq[46][i].in[1] <== 137; eq[47][i] = IsEqual(); eq[47][i].in[0] <== in[i]; - eq[47][i].in[1] <== 134; + eq[47][i].in[1] <== 138; eq[48][i] = IsEqual(); eq[48][i].in[0] <== in[i]; - eq[48][i].in[1] <== 129; + eq[48][i].in[1] <== 139; eq[49][i] = IsEqual(); eq[49][i].in[0] <== in[i]; - eq[49][i].in[1] <== 135; + eq[49][i].in[1] <== 140; eq[50][i] = IsEqual(); eq[50][i].in[0] <== in[i]; - eq[50][i].in[1] <== 137; + eq[50][i].in[1] <== 141; eq[51][i] = IsEqual(); eq[51][i].in[0] <== in[i]; - eq[51][i].in[1] <== 143; + eq[51][i].in[1] <== 142; eq[52][i] = IsEqual(); eq[52][i].in[0] <== in[i]; - eq[52][i].in[1] <== 131; - and[47][i] = AND(); - and[47][i].a <== states[i][27]; + eq[52][i].in[1] <== 143; + and[50][i] = AND(); + and[50][i].a <== states[i][27]; multi_or[9][i] = MultiOR(16); multi_or[9][i].in[0] <== eq[37][i].out; multi_or[9][i].in[1] <== eq[38][i].out; @@ -499,149 +514,100 @@ template TimestampRegex(msg_bytes) { multi_or[9][i].in[13] <== eq[50][i].out; multi_or[9][i].in[14] <== eq[51][i].out; multi_or[9][i].in[15] <== eq[52][i].out; - and[47][i].b <== multi_or[9][i].out; - and[48][i] = AND(); - and[48][i].a <== states[i][31]; - multi_or[10][i] = MultiOR(14); - multi_or[10][i].in[0] <== eq[26][i].out; - multi_or[10][i].in[1] <== eq[23][i].out; - multi_or[10][i].in[2] <== eq[30][i].out; - multi_or[10][i].in[3] <== eq[31][i].out; - multi_or[10][i].in[4] <== eq[24][i].out; - multi_or[10][i].in[5] <== eq[34][i].out; - multi_or[10][i].in[6] <== eq[36][i].out; - multi_or[10][i].in[7] <== eq[33][i].out; - multi_or[10][i].in[8] <== eq[29][i].out; - multi_or[10][i].in[9] <== eq[27][i].out; - multi_or[10][i].in[10] <== eq[35][i].out; - multi_or[10][i].in[11] <== eq[25][i].out; - multi_or[10][i].in[12] <== eq[28][i].out; - multi_or[10][i].in[13] <== eq[32][i].out; - and[48][i].b <== multi_or[10][i].out; - and[49][i] = AND(); - and[49][i].a <== states[i][19]; - multi_or[11][i] = MultiOR(14); - multi_or[11][i].in[0] <== eq[36][i].out; - multi_or[11][i].in[1] <== eq[29][i].out; - multi_or[11][i].in[2] <== eq[28][i].out; - multi_or[11][i].in[3] <== eq[27][i].out; - multi_or[11][i].in[4] <== eq[34][i].out; - multi_or[11][i].in[5] <== eq[24][i].out; - multi_or[11][i].in[6] <== eq[31][i].out; - multi_or[11][i].in[7] <== eq[33][i].out; - multi_or[11][i].in[8] <== eq[23][i].out; - multi_or[11][i].in[9] <== eq[30][i].out; - multi_or[11][i].in[10] <== eq[26][i].out; - multi_or[11][i].in[11] <== eq[35][i].out; - multi_or[11][i].in[12] <== eq[32][i].out; - multi_or[11][i].in[13] <== eq[25][i].out; - and[49][i].b <== multi_or[11][i].out; - lt[18][i] = LessEqThan(8); - lt[18][i].in[0] <== 144; - lt[18][i].in[1] <== in[i]; - lt[19][i] = LessEqThan(8); - lt[19][i].in[0] <== in[i]; - lt[19][i].in[1] <== 191; - and[50][i] = AND(); - and[50][i].a <== lt[18][i].out; - and[50][i].b <== lt[19][i].out; + and[50][i].b <== multi_or[9][i].out; and[51][i] = AND(); - and[51][i].a <== states[i][25]; - and[51][i].b <== and[50][i].out; - multi_or[12][i] = MultiOR(6); - multi_or[12][i].in[0] <== and[45][i].out; - multi_or[12][i].in[1] <== and[46][i].out; - multi_or[12][i].in[2] <== and[47][i].out; - multi_or[12][i].in[3] <== and[48][i].out; - multi_or[12][i].in[4] <== and[49][i].out; - multi_or[12][i].in[5] <== and[51][i].out; - states[i+1][23] <== multi_or[12][i].out; + and[51][i].a <== states[i][31]; + and[51][i].b <== multi_or[8][i].out; + multi_or[10][i] = MultiOR(6); + multi_or[10][i].in[0] <== and[45][i].out; + multi_or[10][i].in[1] <== and[46][i].out; + multi_or[10][i].in[2] <== and[48][i].out; + multi_or[10][i].in[3] <== and[49][i].out; + multi_or[10][i].in[4] <== and[50][i].out; + multi_or[10][i].in[5] <== and[51][i].out; + states[i+1][23] <== multi_or[10][i].out; state_changed[i].in[22] <== states[i+1][23]; eq[53][i] = IsEqual(); eq[53][i].in[0] <== in[i]; eq[53][i].in[1] <== 237; and[52][i] = AND(); - and[52][i].a <== states[i][20]; + and[52][i].a <== states[i][19]; and[52][i].b <== eq[53][i].out; and[53][i] = AND(); - and[53][i].a <== states[i][31]; + and[53][i].a <== states[i][20]; and[53][i].b <== eq[53][i].out; and[54][i] = AND(); - and[54][i].a <== states[i][19]; + and[54][i].a <== states[i][31]; and[54][i].b <== eq[53][i].out; - multi_or[13][i] = MultiOR(3); - multi_or[13][i].in[0] <== and[52][i].out; - multi_or[13][i].in[1] <== and[53][i].out; - multi_or[13][i].in[2] <== and[54][i].out; - states[i+1][24] <== multi_or[13][i].out; + multi_or[11][i] = MultiOR(3); + multi_or[11][i].in[0] <== and[52][i].out; + multi_or[11][i].in[1] <== and[53][i].out; + multi_or[11][i].in[2] <== and[54][i].out; + states[i+1][24] <== multi_or[11][i].out; state_changed[i].in[23] <== states[i+1][24]; eq[54][i] = IsEqual(); eq[54][i].in[0] <== in[i]; eq[54][i].in[1] <== 240; and[55][i] = AND(); - and[55][i].a <== states[i][31]; + and[55][i].a <== states[i][19]; and[55][i].b <== eq[54][i].out; and[56][i] = AND(); and[56][i].a <== states[i][20]; and[56][i].b <== eq[54][i].out; and[57][i] = AND(); - and[57][i].a <== states[i][19]; + and[57][i].a <== states[i][31]; and[57][i].b <== eq[54][i].out; - multi_or[14][i] = MultiOR(3); - multi_or[14][i].in[0] <== and[55][i].out; - multi_or[14][i].in[1] <== and[56][i].out; - multi_or[14][i].in[2] <== and[57][i].out; - states[i+1][25] <== multi_or[14][i].out; + multi_or[12][i] = MultiOR(3); + multi_or[12][i].in[0] <== and[55][i].out; + multi_or[12][i].in[1] <== and[56][i].out; + multi_or[12][i].in[2] <== and[57][i].out; + states[i+1][25] <== multi_or[12][i].out; state_changed[i].in[24] <== states[i+1][25]; eq[55][i] = IsEqual(); eq[55][i].in[0] <== in[i]; - eq[55][i].in[1] <== 243; + eq[55][i].in[1] <== 241; eq[56][i] = IsEqual(); eq[56][i].in[0] <== in[i]; - eq[56][i].in[1] <== 241; + eq[56][i].in[1] <== 242; eq[57][i] = IsEqual(); eq[57][i].in[0] <== in[i]; - eq[57][i].in[1] <== 242; + eq[57][i].in[1] <== 243; and[58][i] = AND(); and[58][i].a <== states[i][19]; - multi_or[15][i] = MultiOR(3); - multi_or[15][i].in[0] <== eq[55][i].out; - multi_or[15][i].in[1] <== eq[56][i].out; - multi_or[15][i].in[2] <== eq[57][i].out; - and[58][i].b <== multi_or[15][i].out; + multi_or[13][i] = MultiOR(3); + multi_or[13][i].in[0] <== eq[55][i].out; + multi_or[13][i].in[1] <== eq[56][i].out; + multi_or[13][i].in[2] <== eq[57][i].out; + and[58][i].b <== multi_or[13][i].out; and[59][i] = AND(); and[59][i].a <== states[i][20]; - and[59][i].b <== multi_or[15][i].out; + and[59][i].b <== multi_or[13][i].out; and[60][i] = AND(); and[60][i].a <== states[i][31]; - multi_or[16][i] = MultiOR(3); - multi_or[16][i].in[0] <== eq[56][i].out; - multi_or[16][i].in[1] <== eq[57][i].out; - multi_or[16][i].in[2] <== eq[55][i].out; - and[60][i].b <== multi_or[16][i].out; - multi_or[17][i] = MultiOR(3); - multi_or[17][i].in[0] <== and[58][i].out; - multi_or[17][i].in[1] <== and[59][i].out; - multi_or[17][i].in[2] <== and[60][i].out; - states[i+1][26] <== multi_or[17][i].out; + and[60][i].b <== multi_or[13][i].out; + multi_or[14][i] = MultiOR(3); + multi_or[14][i].in[0] <== and[58][i].out; + multi_or[14][i].in[1] <== and[59][i].out; + multi_or[14][i].in[2] <== and[60][i].out; + states[i+1][26] <== multi_or[14][i].out; state_changed[i].in[25] <== states[i+1][26]; eq[58][i] = IsEqual(); eq[58][i].in[0] <== in[i]; eq[58][i].in[1] <== 244; and[61][i] = AND(); - and[61][i].a <== states[i][31]; + and[61][i].a <== states[i][19]; and[61][i].b <== eq[58][i].out; and[62][i] = AND(); and[62][i].a <== states[i][20]; and[62][i].b <== eq[58][i].out; and[63][i] = AND(); - and[63][i].a <== states[i][19]; + and[63][i].a <== states[i][31]; and[63][i].b <== eq[58][i].out; - multi_or[18][i] = MultiOR(3); - multi_or[18][i].in[0] <== and[61][i].out; - multi_or[18][i].in[1] <== and[62][i].out; - multi_or[18][i].in[2] <== and[63][i].out; - states[i+1][27] <== multi_or[18][i].out; + multi_or[15][i] = MultiOR(3); + multi_or[15][i].in[0] <== and[61][i].out; + multi_or[15][i].in[1] <== and[62][i].out; + multi_or[15][i].in[2] <== and[63][i].out; + states[i+1][27] <== multi_or[15][i].out; state_changed[i].in[26] <== states[i+1][27]; eq[59][i] = IsEqual(); eq[59][i].in[0] <== in[i]; @@ -671,66 +637,55 @@ template TimestampRegex(msg_bytes) { state_changed[i].in[30] <== states[i+1][31]; eq[61][i] = IsEqual(); eq[61][i].in[0] <== in[i]; - eq[61][i].in[1] <== 51; + eq[61][i].in[1] <== 48; eq[62][i] = IsEqual(); eq[62][i].in[0] <== in[i]; - eq[62][i].in[1] <== 52; + eq[62][i].in[1] <== 49; eq[63][i] = IsEqual(); eq[63][i].in[0] <== in[i]; - eq[63][i].in[1] <== 53; + eq[63][i].in[1] <== 50; eq[64][i] = IsEqual(); eq[64][i].in[0] <== in[i]; - eq[64][i].in[1] <== 55; + eq[64][i].in[1] <== 51; eq[65][i] = IsEqual(); eq[65][i].in[0] <== in[i]; - eq[65][i].in[1] <== 57; + eq[65][i].in[1] <== 52; eq[66][i] = IsEqual(); eq[66][i].in[0] <== in[i]; - eq[66][i].in[1] <== 48; + eq[66][i].in[1] <== 53; eq[67][i] = IsEqual(); eq[67][i].in[0] <== in[i]; - eq[67][i].in[1] <== 56; + eq[67][i].in[1] <== 54; eq[68][i] = IsEqual(); eq[68][i].in[0] <== in[i]; - eq[68][i].in[1] <== 50; + eq[68][i].in[1] <== 55; eq[69][i] = IsEqual(); eq[69][i].in[0] <== in[i]; - eq[69][i].in[1] <== 54; + eq[69][i].in[1] <== 56; eq[70][i] = IsEqual(); eq[70][i].in[0] <== in[i]; - eq[70][i].in[1] <== 49; + eq[70][i].in[1] <== 57; and[68][i] = AND(); and[68][i].a <== states[i][31]; - multi_or[19][i] = MultiOR(10); - multi_or[19][i].in[0] <== eq[61][i].out; - multi_or[19][i].in[1] <== eq[62][i].out; - multi_or[19][i].in[2] <== eq[63][i].out; - multi_or[19][i].in[3] <== eq[64][i].out; - multi_or[19][i].in[4] <== eq[65][i].out; - multi_or[19][i].in[5] <== eq[66][i].out; - multi_or[19][i].in[6] <== eq[67][i].out; - multi_or[19][i].in[7] <== eq[68][i].out; - multi_or[19][i].in[8] <== eq[69][i].out; - multi_or[19][i].in[9] <== eq[70][i].out; - and[68][i].b <== multi_or[19][i].out; + multi_or[16][i] = MultiOR(10); + multi_or[16][i].in[0] <== eq[61][i].out; + multi_or[16][i].in[1] <== eq[62][i].out; + multi_or[16][i].in[2] <== eq[63][i].out; + multi_or[16][i].in[3] <== eq[64][i].out; + multi_or[16][i].in[4] <== eq[65][i].out; + multi_or[16][i].in[5] <== eq[66][i].out; + multi_or[16][i].in[6] <== eq[67][i].out; + multi_or[16][i].in[7] <== eq[68][i].out; + multi_or[16][i].in[8] <== eq[69][i].out; + multi_or[16][i].in[9] <== eq[70][i].out; + and[68][i].b <== multi_or[16][i].out; and[69][i] = AND(); and[69][i].a <== states[i][32]; - multi_or[20][i] = MultiOR(10); - multi_or[20][i].in[0] <== eq[61][i].out; - multi_or[20][i].in[1] <== eq[69][i].out; - multi_or[20][i].in[2] <== eq[67][i].out; - multi_or[20][i].in[3] <== eq[70][i].out; - multi_or[20][i].in[4] <== eq[63][i].out; - multi_or[20][i].in[5] <== eq[64][i].out; - multi_or[20][i].in[6] <== eq[65][i].out; - multi_or[20][i].in[7] <== eq[66][i].out; - multi_or[20][i].in[8] <== eq[62][i].out; - multi_or[20][i].in[9] <== eq[68][i].out; - and[69][i].b <== multi_or[20][i].out; - multi_or[21][i] = MultiOR(2); - multi_or[21][i].in[0] <== and[68][i].out; - multi_or[21][i].in[1] <== and[69][i].out; - states[i+1][32] <== multi_or[21][i].out; + and[69][i].b <== multi_or[16][i].out; + multi_or[17][i] = MultiOR(2); + multi_or[17][i].in[0] <== and[68][i].out; + multi_or[17][i].in[1] <== and[69][i].out; + states[i+1][32] <== multi_or[17][i].out; state_changed[i].in[31] <== states[i+1][32]; and[70][i] = AND(); and[70][i].a <== states[i][32]; diff --git a/packages/circom/circuits/common/to_all_regex.circom b/packages/circom/circuits/common/to_all_regex.circom index dc02290..bbd8e69 100644 --- a/packages/circom/circuits/common/to_all_regex.circom +++ b/packages/circom/circuits/common/to_all_regex.circom @@ -17,7 +17,7 @@ template ToAllRegex(msg_bytes) { component eq[54][num_bytes]; component lt[12][num_bytes]; component and[37][num_bytes]; - component multi_or[16][num_bytes]; + component multi_or[13][num_bytes]; signal states[num_bytes+1][16]; component state_changed[num_bytes]; @@ -32,10 +32,10 @@ template ToAllRegex(msg_bytes) { eq[0][i].in[0] <== in[i]; eq[0][i].in[1] <== 116; and[0][i] = AND(); - and[0][i].a <== states[i][4]; + and[0][i].a <== states[i][0]; and[0][i].b <== eq[0][i].out; and[1][i] = AND(); - and[1][i].a <== states[i][0]; + and[1][i].a <== states[i][4]; and[1][i].b <== eq[0][i].out; multi_or[0][i] = MultiOR(2); multi_or[0][i].in[0] <== and[0][i].out; @@ -75,61 +75,61 @@ template ToAllRegex(msg_bytes) { states[i+1][5] <== and[5][i].out; state_changed[i].in[4] <== states[i+1][5]; lt[0][i] = LessEqThan(8); - lt[0][i].in[0] <== 128; + lt[0][i].in[0] <== 194; lt[0][i].in[1] <== in[i]; lt[1][i] = LessEqThan(8); lt[1][i].in[0] <== in[i]; - lt[1][i].in[1] <== 191; + lt[1][i].in[1] <== 223; and[6][i] = AND(); and[6][i].a <== lt[0][i].out; and[6][i].b <== lt[1][i].out; and[7][i] = AND(); - and[7][i].a <== states[i][8]; + and[7][i].a <== states[i][5]; and[7][i].b <== and[6][i].out; lt[2][i] = LessEqThan(8); - lt[2][i].in[0] <== 128; + lt[2][i].in[0] <== 160; lt[2][i].in[1] <== in[i]; lt[3][i] = LessEqThan(8); lt[3][i].in[0] <== in[i]; - lt[3][i].in[1] <== 159; + lt[3][i].in[1] <== 191; and[8][i] = AND(); and[8][i].a <== lt[2][i].out; and[8][i].b <== lt[3][i].out; and[9][i] = AND(); - and[9][i].a <== states[i][9]; + and[9][i].a <== states[i][7]; and[9][i].b <== and[8][i].out; lt[4][i] = LessEqThan(8); - lt[4][i].in[0] <== 194; + lt[4][i].in[0] <== 128; lt[4][i].in[1] <== in[i]; lt[5][i] = LessEqThan(8); lt[5][i].in[0] <== in[i]; - lt[5][i].in[1] <== 223; + lt[5][i].in[1] <== 191; and[10][i] = AND(); and[10][i].a <== lt[4][i].out; and[10][i].b <== lt[5][i].out; and[11][i] = AND(); - and[11][i].a <== states[i][5]; + and[11][i].a <== states[i][8]; and[11][i].b <== and[10][i].out; - and[12][i] = AND(); - and[12][i].a <== states[i][13]; - and[12][i].b <== and[10][i].out; lt[6][i] = LessEqThan(8); - lt[6][i].in[0] <== 160; + lt[6][i].in[0] <== 128; lt[6][i].in[1] <== in[i]; lt[7][i] = LessEqThan(8); lt[7][i].in[0] <== in[i]; - lt[7][i].in[1] <== 191; + lt[7][i].in[1] <== 159; + and[12][i] = AND(); + and[12][i].a <== lt[6][i].out; + and[12][i].b <== lt[7][i].out; and[13][i] = AND(); - and[13][i].a <== lt[6][i].out; - and[13][i].b <== lt[7][i].out; + and[13][i].a <== states[i][9]; + and[13][i].b <== and[12][i].out; and[14][i] = AND(); - and[14][i].a <== states[i][7]; - and[14][i].b <== and[13][i].out; + and[14][i].a <== states[i][13]; + and[14][i].b <== and[6][i].out; multi_or[1][i] = MultiOR(5); multi_or[1][i].in[0] <== and[7][i].out; multi_or[1][i].in[1] <== and[9][i].out; multi_or[1][i].in[2] <== and[11][i].out; - multi_or[1][i].in[3] <== and[12][i].out; + multi_or[1][i].in[3] <== and[13][i].out; multi_or[1][i].in[4] <== and[14][i].out; states[i+1][6] <== multi_or[1][i].out; state_changed[i].in[5] <== states[i+1][6]; @@ -149,46 +149,46 @@ template ToAllRegex(msg_bytes) { state_changed[i].in[6] <== states[i+1][7]; eq[6][i] = IsEqual(); eq[6][i].in[0] <== in[i]; - eq[6][i].in[1] <== 226; + eq[6][i].in[1] <== 225; eq[7][i] = IsEqual(); eq[7][i].in[0] <== in[i]; - eq[7][i].in[1] <== 232; + eq[7][i].in[1] <== 226; eq[8][i] = IsEqual(); eq[8][i].in[0] <== in[i]; - eq[8][i].in[1] <== 236; + eq[8][i].in[1] <== 227; eq[9][i] = IsEqual(); eq[9][i].in[0] <== in[i]; - eq[9][i].in[1] <== 238; + eq[9][i].in[1] <== 228; eq[10][i] = IsEqual(); eq[10][i].in[0] <== in[i]; - eq[10][i].in[1] <== 239; + eq[10][i].in[1] <== 229; eq[11][i] = IsEqual(); eq[11][i].in[0] <== in[i]; - eq[11][i].in[1] <== 225; + eq[11][i].in[1] <== 230; eq[12][i] = IsEqual(); eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 230; + eq[12][i].in[1] <== 231; eq[13][i] = IsEqual(); eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 235; + eq[13][i].in[1] <== 232; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 229; + eq[14][i].in[1] <== 233; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 231; + eq[15][i].in[1] <== 234; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 233; + eq[16][i].in[1] <== 235; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 234; + eq[17][i].in[1] <== 236; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 227; + eq[18][i].in[1] <== 238; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 228; + eq[19][i].in[1] <== 239; and[17][i] = AND(); and[17][i].a <== states[i][5]; multi_or[3][i] = MultiOR(14); @@ -221,55 +221,55 @@ template ToAllRegex(msg_bytes) { and[19][i].b <== and[18][i].out; and[20][i] = AND(); and[20][i].a <== states[i][11]; - and[20][i].b <== and[6][i].out; + and[20][i].b <== and[10][i].out; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 131; + eq[20][i].in[1] <== 128; eq[21][i] = IsEqual(); eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 134; + eq[21][i].in[1] <== 129; eq[22][i] = IsEqual(); eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 132; + eq[22][i].in[1] <== 130; eq[23][i] = IsEqual(); eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 138; + eq[23][i].in[1] <== 131; eq[24][i] = IsEqual(); eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 135; + eq[24][i].in[1] <== 132; eq[25][i] = IsEqual(); eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 128; + eq[25][i].in[1] <== 133; eq[26][i] = IsEqual(); eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 136; + eq[26][i].in[1] <== 134; eq[27][i] = IsEqual(); eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 141; + eq[27][i].in[1] <== 135; eq[28][i] = IsEqual(); eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 129; + eq[28][i].in[1] <== 136; eq[29][i] = IsEqual(); eq[29][i].in[0] <== in[i]; eq[29][i].in[1] <== 137; eq[30][i] = IsEqual(); eq[30][i].in[0] <== in[i]; - eq[30][i].in[1] <== 130; + eq[30][i].in[1] <== 138; eq[31][i] = IsEqual(); eq[31][i].in[0] <== in[i]; - eq[31][i].in[1] <== 140; + eq[31][i].in[1] <== 139; eq[32][i] = IsEqual(); eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 133; + eq[32][i].in[1] <== 140; eq[33][i] = IsEqual(); eq[33][i].in[0] <== in[i]; - eq[33][i].in[1] <== 142; + eq[33][i].in[1] <== 141; eq[34][i] = IsEqual(); eq[34][i].in[0] <== in[i]; - eq[34][i].in[1] <== 143; + eq[34][i].in[1] <== 142; eq[35][i] = IsEqual(); eq[35][i].in[0] <== in[i]; - eq[35][i].in[1] <== 139; + eq[35][i].in[1] <== 143; and[21][i] = AND(); and[21][i].a <== states[i][12]; multi_or[4][i] = MultiOR(16); @@ -292,43 +292,28 @@ template ToAllRegex(msg_bytes) { and[21][i].b <== multi_or[4][i].out; and[22][i] = AND(); and[22][i].a <== states[i][13]; - multi_or[5][i] = MultiOR(14); - multi_or[5][i].in[0] <== eq[12][i].out; - multi_or[5][i].in[1] <== eq[8][i].out; - multi_or[5][i].in[2] <== eq[10][i].out; - multi_or[5][i].in[3] <== eq[14][i].out; - multi_or[5][i].in[4] <== eq[9][i].out; - multi_or[5][i].in[5] <== eq[6][i].out; - multi_or[5][i].in[6] <== eq[11][i].out; - multi_or[5][i].in[7] <== eq[18][i].out; - multi_or[5][i].in[8] <== eq[15][i].out; - multi_or[5][i].in[9] <== eq[7][i].out; - multi_or[5][i].in[10] <== eq[16][i].out; - multi_or[5][i].in[11] <== eq[17][i].out; - multi_or[5][i].in[12] <== eq[13][i].out; - multi_or[5][i].in[13] <== eq[19][i].out; - and[22][i].b <== multi_or[5][i].out; - multi_or[6][i] = MultiOR(5); - multi_or[6][i].in[0] <== and[17][i].out; - multi_or[6][i].in[1] <== and[19][i].out; - multi_or[6][i].in[2] <== and[20][i].out; - multi_or[6][i].in[3] <== and[21][i].out; - multi_or[6][i].in[4] <== and[22][i].out; - states[i+1][8] <== multi_or[6][i].out; + and[22][i].b <== multi_or[3][i].out; + multi_or[5][i] = MultiOR(5); + multi_or[5][i].in[0] <== and[17][i].out; + multi_or[5][i].in[1] <== and[19][i].out; + multi_or[5][i].in[2] <== and[20][i].out; + multi_or[5][i].in[3] <== and[21][i].out; + multi_or[5][i].in[4] <== and[22][i].out; + states[i+1][8] <== multi_or[5][i].out; state_changed[i].in[7] <== states[i+1][8]; eq[36][i] = IsEqual(); eq[36][i].in[0] <== in[i]; eq[36][i].in[1] <== 237; and[23][i] = AND(); - and[23][i].a <== states[i][13]; + and[23][i].a <== states[i][5]; and[23][i].b <== eq[36][i].out; and[24][i] = AND(); - and[24][i].a <== states[i][5]; + and[24][i].a <== states[i][13]; and[24][i].b <== eq[36][i].out; - multi_or[7][i] = MultiOR(2); - multi_or[7][i].in[0] <== and[23][i].out; - multi_or[7][i].in[1] <== and[24][i].out; - states[i+1][9] <== multi_or[7][i].out; + multi_or[6][i] = MultiOR(2); + multi_or[6][i].in[0] <== and[23][i].out; + multi_or[6][i].in[1] <== and[24][i].out; + states[i+1][9] <== multi_or[6][i].out; state_changed[i].in[8] <== states[i+1][9]; eq[37][i] = IsEqual(); eq[37][i].in[0] <== in[i]; @@ -339,10 +324,10 @@ template ToAllRegex(msg_bytes) { and[26][i] = AND(); and[26][i].a <== states[i][13]; and[26][i].b <== eq[37][i].out; - multi_or[8][i] = MultiOR(2); - multi_or[8][i].in[0] <== and[25][i].out; - multi_or[8][i].in[1] <== and[26][i].out; - states[i+1][10] <== multi_or[8][i].out; + multi_or[7][i] = MultiOR(2); + multi_or[7][i].in[0] <== and[25][i].out; + multi_or[7][i].in[1] <== and[26][i].out; + states[i+1][10] <== multi_or[7][i].out; state_changed[i].in[9] <== states[i+1][10]; eq[38][i] = IsEqual(); eq[38][i].in[0] <== in[i]; @@ -355,22 +340,18 @@ template ToAllRegex(msg_bytes) { eq[40][i].in[1] <== 243; and[27][i] = AND(); and[27][i].a <== states[i][5]; - multi_or[9][i] = MultiOR(3); - multi_or[9][i].in[0] <== eq[38][i].out; - multi_or[9][i].in[1] <== eq[39][i].out; - multi_or[9][i].in[2] <== eq[40][i].out; - and[27][i].b <== multi_or[9][i].out; + multi_or[8][i] = MultiOR(3); + multi_or[8][i].in[0] <== eq[38][i].out; + multi_or[8][i].in[1] <== eq[39][i].out; + multi_or[8][i].in[2] <== eq[40][i].out; + and[27][i].b <== multi_or[8][i].out; and[28][i] = AND(); and[28][i].a <== states[i][13]; - multi_or[10][i] = MultiOR(3); - multi_or[10][i].in[0] <== eq[39][i].out; - multi_or[10][i].in[1] <== eq[38][i].out; - multi_or[10][i].in[2] <== eq[40][i].out; - and[28][i].b <== multi_or[10][i].out; - multi_or[11][i] = MultiOR(2); - multi_or[11][i].in[0] <== and[27][i].out; - multi_or[11][i].in[1] <== and[28][i].out; - states[i+1][11] <== multi_or[11][i].out; + and[28][i].b <== multi_or[8][i].out; + multi_or[9][i] = MultiOR(2); + multi_or[9][i].in[0] <== and[27][i].out; + multi_or[9][i].in[1] <== and[28][i].out; + states[i+1][11] <== multi_or[9][i].out; state_changed[i].in[10] <== states[i+1][11]; eq[41][i] = IsEqual(); eq[41][i].in[0] <== in[i]; @@ -381,98 +362,84 @@ template ToAllRegex(msg_bytes) { and[30][i] = AND(); and[30][i].a <== states[i][13]; and[30][i].b <== eq[41][i].out; - multi_or[12][i] = MultiOR(2); - multi_or[12][i].in[0] <== and[29][i].out; - multi_or[12][i].in[1] <== and[30][i].out; - states[i+1][12] <== multi_or[12][i].out; + multi_or[10][i] = MultiOR(2); + multi_or[10][i].in[0] <== and[29][i].out; + multi_or[10][i].in[1] <== and[30][i].out; + states[i+1][12] <== multi_or[10][i].out; state_changed[i].in[11] <== states[i+1][12]; - and[31][i] = AND(); - and[31][i].a <== states[i][6]; - and[31][i].b <== and[6][i].out; lt[10][i] = LessEqThan(8); lt[10][i].in[0] <== 14; lt[10][i].in[1] <== in[i]; lt[11][i] = LessEqThan(8); lt[11][i].in[0] <== in[i]; lt[11][i].in[1] <== 127; - and[32][i] = AND(); - and[32][i].a <== lt[10][i].out; - and[32][i].b <== lt[11][i].out; + and[31][i] = AND(); + and[31][i].a <== lt[10][i].out; + and[31][i].b <== lt[11][i].out; eq[42][i] = IsEqual(); eq[42][i].in[0] <== in[i]; - eq[42][i].in[1] <== 2; + eq[42][i].in[1] <== 0; eq[43][i] = IsEqual(); eq[43][i].in[0] <== in[i]; - eq[43][i].in[1] <== 5; + eq[43][i].in[1] <== 1; eq[44][i] = IsEqual(); eq[44][i].in[0] <== in[i]; - eq[44][i].in[1] <== 7; + eq[44][i].in[1] <== 2; eq[45][i] = IsEqual(); eq[45][i].in[0] <== in[i]; - eq[45][i].in[1] <== 0; + eq[45][i].in[1] <== 3; eq[46][i] = IsEqual(); eq[46][i].in[0] <== in[i]; eq[46][i].in[1] <== 4; eq[47][i] = IsEqual(); eq[47][i].in[0] <== in[i]; - eq[47][i].in[1] <== 11; + eq[47][i].in[1] <== 5; eq[48][i] = IsEqual(); eq[48][i].in[0] <== in[i]; - eq[48][i].in[1] <== 1; + eq[48][i].in[1] <== 6; eq[49][i] = IsEqual(); eq[49][i].in[0] <== in[i]; - eq[49][i].in[1] <== 6; + eq[49][i].in[1] <== 7; eq[50][i] = IsEqual(); eq[50][i].in[0] <== in[i]; - eq[50][i].in[1] <== 3; + eq[50][i].in[1] <== 8; eq[51][i] = IsEqual(); eq[51][i].in[0] <== in[i]; - eq[51][i].in[1] <== 12; + eq[51][i].in[1] <== 9; eq[52][i] = IsEqual(); eq[52][i].in[0] <== in[i]; - eq[52][i].in[1] <== 8; + eq[52][i].in[1] <== 11; eq[53][i] = IsEqual(); eq[53][i].in[0] <== in[i]; - eq[53][i].in[1] <== 9; + eq[53][i].in[1] <== 12; + and[32][i] = AND(); + and[32][i].a <== states[i][5]; + multi_or[11][i] = MultiOR(13); + multi_or[11][i].in[0] <== and[31][i].out; + multi_or[11][i].in[1] <== eq[42][i].out; + multi_or[11][i].in[2] <== eq[43][i].out; + multi_or[11][i].in[3] <== eq[44][i].out; + multi_or[11][i].in[4] <== eq[45][i].out; + multi_or[11][i].in[5] <== eq[46][i].out; + multi_or[11][i].in[6] <== eq[47][i].out; + multi_or[11][i].in[7] <== eq[48][i].out; + multi_or[11][i].in[8] <== eq[49][i].out; + multi_or[11][i].in[9] <== eq[50][i].out; + multi_or[11][i].in[10] <== eq[51][i].out; + multi_or[11][i].in[11] <== eq[52][i].out; + multi_or[11][i].in[12] <== eq[53][i].out; + and[32][i].b <== multi_or[11][i].out; and[33][i] = AND(); - and[33][i].a <== states[i][5]; - multi_or[13][i] = MultiOR(13); - multi_or[13][i].in[0] <== and[32][i].out; - multi_or[13][i].in[1] <== eq[42][i].out; - multi_or[13][i].in[2] <== eq[43][i].out; - multi_or[13][i].in[3] <== eq[44][i].out; - multi_or[13][i].in[4] <== eq[45][i].out; - multi_or[13][i].in[5] <== eq[46][i].out; - multi_or[13][i].in[6] <== eq[47][i].out; - multi_or[13][i].in[7] <== eq[48][i].out; - multi_or[13][i].in[8] <== eq[49][i].out; - multi_or[13][i].in[9] <== eq[50][i].out; - multi_or[13][i].in[10] <== eq[51][i].out; - multi_or[13][i].in[11] <== eq[52][i].out; - multi_or[13][i].in[12] <== eq[53][i].out; - and[33][i].b <== multi_or[13][i].out; + and[33][i].a <== states[i][6]; + and[33][i].b <== and[10][i].out; and[34][i] = AND(); and[34][i].a <== states[i][13]; - multi_or[14][i] = MultiOR(13); - multi_or[14][i].in[0] <== and[32][i].out; - multi_or[14][i].in[1] <== eq[52][i].out; - multi_or[14][i].in[2] <== eq[49][i].out; - multi_or[14][i].in[3] <== eq[47][i].out; - multi_or[14][i].in[4] <== eq[45][i].out; - multi_or[14][i].in[5] <== eq[42][i].out; - multi_or[14][i].in[6] <== eq[44][i].out; - multi_or[14][i].in[7] <== eq[43][i].out; - multi_or[14][i].in[8] <== eq[51][i].out; - multi_or[14][i].in[9] <== eq[50][i].out; - multi_or[14][i].in[10] <== eq[46][i].out; - multi_or[14][i].in[11] <== eq[53][i].out; - multi_or[14][i].in[12] <== eq[48][i].out; - and[34][i].b <== multi_or[14][i].out; - multi_or[15][i] = MultiOR(3); - multi_or[15][i].in[0] <== and[31][i].out; - multi_or[15][i].in[1] <== and[33][i].out; - multi_or[15][i].in[2] <== and[34][i].out; - states[i+1][13] <== multi_or[15][i].out; + and[34][i].b <== multi_or[11][i].out; + multi_or[12][i] = MultiOR(3); + multi_or[12][i].in[0] <== and[32][i].out; + multi_or[12][i].in[1] <== and[33][i].out; + multi_or[12][i].in[2] <== and[34][i].out; + states[i+1][13] <== multi_or[12][i].out; state_changed[i].in[12] <== states[i+1][13]; and[35][i] = AND(); and[35][i].a <== states[i][13]; @@ -498,7 +465,7 @@ template ToAllRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][15] * (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]; } - // substrings calculated: [{(9, 6), (5, 10), (5, 12), (7, 6), (11, 8), (5, 8), (5, 7), (5, 9), (12, 8), (5, 11), (5, 6), (13, 8), (13, 6), (13, 13), (13, 11), (5, 13), (6, 13), (8, 6), (13, 7), (13, 9), (10, 8), (13, 12), (13, 10)}] + // substrings calculated: [{(5, 6), (5, 7), (5, 8), (5, 9), (5, 10), (5, 11), (5, 12), (5, 13), (6, 13), (7, 6), (8, 6), (9, 6), (10, 8), (11, 8), (12, 8), (13, 6), (13, 7), (13, 8), (13, 9), (13, 10), (13, 11), (13, 12), (13, 13)}] signal is_substr0[msg_bytes][24]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/tests/circuits/international_chars_decomposed.circom b/packages/circom/tests/circuits/international_chars_decomposed.circom index fcdeb4b..b26cfe7 100644 --- a/packages/circom/tests/circuits/international_chars_decomposed.circom +++ b/packages/circom/tests/circuits/international_chars_decomposed.circom @@ -17,7 +17,7 @@ template InternationalCharsDecomposed(msg_bytes) { component eq[67][num_bytes]; component lt[6][num_bytes]; component and[103][num_bytes]; - component multi_or[21][num_bytes]; + component multi_or[18][num_bytes]; signal states[num_bytes+1][90]; component state_changed[num_bytes]; @@ -149,15 +149,15 @@ template InternationalCharsDecomposed(msg_bytes) { eq[12][i].in[1] <== 195; eq[13][i] = IsEqual(); eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 198; + eq[13][i].in[1] <== 196; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 196; + eq[14][i].in[1] <== 197; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 197; + eq[15][i].in[1] <== 198; and[16][i] = AND(); - and[16][i].a <== states[i][19]; + and[16][i].a <== states[i][16]; multi_or[0][i] = MultiOR(4); multi_or[0][i].in[0] <== eq[12][i].out; multi_or[0][i].in[1] <== eq[13][i].out; @@ -165,31 +165,26 @@ template InternationalCharsDecomposed(msg_bytes) { multi_or[0][i].in[3] <== eq[15][i].out; and[16][i].b <== multi_or[0][i].out; and[17][i] = AND(); - and[17][i].a <== states[i][16]; - multi_or[1][i] = MultiOR(4); - multi_or[1][i].in[0] <== eq[14][i].out; - multi_or[1][i].in[1] <== eq[13][i].out; - multi_or[1][i].in[2] <== eq[15][i].out; - multi_or[1][i].in[3] <== eq[12][i].out; - and[17][i].b <== multi_or[1][i].out; - multi_or[2][i] = MultiOR(2); - multi_or[2][i].in[0] <== and[16][i].out; - multi_or[2][i].in[1] <== and[17][i].out; - states[i+1][17] <== multi_or[2][i].out; + and[17][i].a <== states[i][19]; + and[17][i].b <== multi_or[0][i].out; + multi_or[1][i] = MultiOR(2); + multi_or[1][i].in[0] <== and[16][i].out; + multi_or[1][i].in[1] <== and[17][i].out; + states[i+1][17] <== multi_or[1][i].out; state_changed[i].in[16] <== states[i+1][17]; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; eq[16][i].in[1] <== 194; and[18][i] = AND(); - and[18][i].a <== states[i][19]; + and[18][i].a <== states[i][16]; and[18][i].b <== eq[16][i].out; and[19][i] = AND(); - and[19][i].a <== states[i][16]; + and[19][i].a <== states[i][19]; and[19][i].b <== eq[16][i].out; - multi_or[3][i] = MultiOR(2); - multi_or[3][i].in[0] <== and[18][i].out; - multi_or[3][i].in[1] <== and[19][i].out; - states[i+1][18] <== multi_or[3][i].out; + multi_or[2][i] = MultiOR(2); + multi_or[2][i].in[0] <== and[18][i].out; + multi_or[2][i].in[1] <== and[19][i].out; + states[i+1][18] <== multi_or[2][i].out; state_changed[i].in[17] <== states[i+1][18]; lt[0][i] = LessEqThan(8); lt[0][i].in[0] <== 128; @@ -215,10 +210,10 @@ template InternationalCharsDecomposed(msg_bytes) { and[23][i] = AND(); and[23][i].a <== states[i][18]; and[23][i].b <== and[22][i].out; - multi_or[4][i] = MultiOR(2); - multi_or[4][i].in[0] <== and[21][i].out; - multi_or[4][i].in[1] <== and[23][i].out; - states[i+1][19] <== multi_or[4][i].out; + multi_or[3][i] = MultiOR(2); + multi_or[3][i].in[0] <== and[21][i].out; + multi_or[3][i].in[1] <== and[23][i].out; + states[i+1][19] <== multi_or[3][i].out; state_changed[i].in[18] <== states[i+1][19]; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; @@ -275,17 +270,17 @@ template InternationalCharsDecomposed(msg_bytes) { eq[22][i].in[1] <== 207; and[31][i] = AND(); and[31][i].a <== states[i][26]; - multi_or[5][i] = MultiOR(2); - multi_or[5][i].in[0] <== eq[21][i].out; - multi_or[5][i].in[1] <== eq[22][i].out; - and[31][i].b <== multi_or[5][i].out; + multi_or[4][i] = MultiOR(2); + multi_or[4][i].in[0] <== eq[21][i].out; + multi_or[4][i].in[1] <== eq[22][i].out; + and[31][i].b <== multi_or[4][i].out; and[32][i] = AND(); and[32][i].a <== states[i][29]; - and[32][i].b <== multi_or[5][i].out; - multi_or[6][i] = MultiOR(2); - multi_or[6][i].in[0] <== and[31][i].out; - multi_or[6][i].in[1] <== and[32][i].out; - states[i+1][27] <== multi_or[6][i].out; + and[32][i].b <== multi_or[4][i].out; + multi_or[5][i] = MultiOR(2); + multi_or[5][i].in[0] <== and[31][i].out; + multi_or[5][i].in[1] <== and[32][i].out; + states[i+1][27] <== multi_or[5][i].out; state_changed[i].in[26] <== states[i+1][27]; eq[23][i] = IsEqual(); eq[23][i].in[0] <== in[i]; @@ -296,86 +291,86 @@ template InternationalCharsDecomposed(msg_bytes) { and[34][i] = AND(); and[34][i].a <== states[i][29]; and[34][i].b <== eq[23][i].out; - multi_or[7][i] = MultiOR(2); - multi_or[7][i].in[0] <== and[33][i].out; - multi_or[7][i].in[1] <== and[34][i].out; - states[i+1][28] <== multi_or[7][i].out; + multi_or[6][i] = MultiOR(2); + multi_or[6][i].in[0] <== and[33][i].out; + multi_or[6][i].in[1] <== and[34][i].out; + states[i+1][28] <== multi_or[6][i].out; state_changed[i].in[27] <== states[i+1][28]; and[35][i] = AND(); and[35][i].a <== states[i][27]; and[35][i].b <== and[20][i].out; eq[24][i] = IsEqual(); eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 188; + eq[24][i].in[1] <== 176; eq[25][i] = IsEqual(); eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 181; + eq[25][i].in[1] <== 177; eq[26][i] = IsEqual(); eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 177; + eq[26][i].in[1] <== 178; eq[27][i] = IsEqual(); eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 189; + eq[27][i].in[1] <== 179; eq[28][i] = IsEqual(); eq[28][i].in[0] <== in[i]; eq[28][i].in[1] <== 180; eq[29][i] = IsEqual(); eq[29][i].in[0] <== in[i]; - eq[29][i].in[1] <== 176; + eq[29][i].in[1] <== 181; eq[30][i] = IsEqual(); eq[30][i].in[0] <== in[i]; - eq[30][i].in[1] <== 179; + eq[30][i].in[1] <== 182; eq[31][i] = IsEqual(); eq[31][i].in[0] <== in[i]; - eq[31][i].in[1] <== 182; + eq[31][i].in[1] <== 183; eq[32][i] = IsEqual(); eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 178; + eq[32][i].in[1] <== 184; eq[33][i] = IsEqual(); eq[33][i].in[0] <== in[i]; eq[33][i].in[1] <== 185; eq[34][i] = IsEqual(); eq[34][i].in[0] <== in[i]; - eq[34][i].in[1] <== 191; + eq[34][i].in[1] <== 186; eq[35][i] = IsEqual(); eq[35][i].in[0] <== in[i]; - eq[35][i].in[1] <== 183; + eq[35][i].in[1] <== 187; eq[36][i] = IsEqual(); eq[36][i].in[0] <== in[i]; - eq[36][i].in[1] <== 186; + eq[36][i].in[1] <== 188; eq[37][i] = IsEqual(); eq[37][i].in[0] <== in[i]; - eq[37][i].in[1] <== 184; + eq[37][i].in[1] <== 189; eq[38][i] = IsEqual(); eq[38][i].in[0] <== in[i]; - eq[38][i].in[1] <== 187; + eq[38][i].in[1] <== 190; eq[39][i] = IsEqual(); eq[39][i].in[0] <== in[i]; - eq[39][i].in[1] <== 190; + eq[39][i].in[1] <== 191; and[36][i] = AND(); and[36][i].a <== states[i][28]; - multi_or[8][i] = MultiOR(16); - multi_or[8][i].in[0] <== eq[24][i].out; - multi_or[8][i].in[1] <== eq[25][i].out; - multi_or[8][i].in[2] <== eq[26][i].out; - multi_or[8][i].in[3] <== eq[27][i].out; - multi_or[8][i].in[4] <== eq[28][i].out; - multi_or[8][i].in[5] <== eq[29][i].out; - multi_or[8][i].in[6] <== eq[30][i].out; - multi_or[8][i].in[7] <== eq[31][i].out; - multi_or[8][i].in[8] <== eq[32][i].out; - multi_or[8][i].in[9] <== eq[33][i].out; - multi_or[8][i].in[10] <== eq[34][i].out; - multi_or[8][i].in[11] <== eq[35][i].out; - multi_or[8][i].in[12] <== eq[36][i].out; - multi_or[8][i].in[13] <== eq[37][i].out; - multi_or[8][i].in[14] <== eq[38][i].out; - multi_or[8][i].in[15] <== eq[39][i].out; - and[36][i].b <== multi_or[8][i].out; - multi_or[9][i] = MultiOR(2); - multi_or[9][i].in[0] <== and[35][i].out; - multi_or[9][i].in[1] <== and[36][i].out; - states[i+1][29] <== multi_or[9][i].out; + multi_or[7][i] = MultiOR(16); + multi_or[7][i].in[0] <== eq[24][i].out; + multi_or[7][i].in[1] <== eq[25][i].out; + multi_or[7][i].in[2] <== eq[26][i].out; + multi_or[7][i].in[3] <== eq[27][i].out; + multi_or[7][i].in[4] <== eq[28][i].out; + multi_or[7][i].in[5] <== eq[29][i].out; + multi_or[7][i].in[6] <== eq[30][i].out; + multi_or[7][i].in[7] <== eq[31][i].out; + multi_or[7][i].in[8] <== eq[32][i].out; + multi_or[7][i].in[9] <== eq[33][i].out; + multi_or[7][i].in[10] <== eq[34][i].out; + multi_or[7][i].in[11] <== eq[35][i].out; + multi_or[7][i].in[12] <== eq[36][i].out; + multi_or[7][i].in[13] <== eq[37][i].out; + multi_or[7][i].in[14] <== eq[38][i].out; + multi_or[7][i].in[15] <== eq[39][i].out; + and[36][i].b <== multi_or[7][i].out; + multi_or[8][i] = MultiOR(2); + multi_or[8][i].in[0] <== and[35][i].out; + multi_or[8][i].in[1] <== and[36][i].out; + states[i+1][29] <== multi_or[8][i].out; state_changed[i].in[28] <== states[i+1][29]; and[37][i] = AND(); and[37][i].a <== states[i][29]; @@ -441,36 +436,31 @@ template InternationalCharsDecomposed(msg_bytes) { state_changed[i].in[38] <== states[i+1][39]; eq[44][i] = IsEqual(); eq[44][i].in[0] <== in[i]; - eq[44][i].in[1] <== 210; + eq[44][i].in[1] <== 208; eq[45][i] = IsEqual(); eq[45][i].in[0] <== in[i]; - eq[45][i].in[1] <== 208; + eq[45][i].in[1] <== 209; eq[46][i] = IsEqual(); eq[46][i].in[0] <== in[i]; - eq[46][i].in[1] <== 211; + eq[46][i].in[1] <== 210; eq[47][i] = IsEqual(); eq[47][i].in[0] <== in[i]; - eq[47][i].in[1] <== 209; + eq[47][i].in[1] <== 211; and[47][i] = AND(); - and[47][i].a <== states[i][41]; - multi_or[10][i] = MultiOR(4); - multi_or[10][i].in[0] <== eq[44][i].out; - multi_or[10][i].in[1] <== eq[45][i].out; - multi_or[10][i].in[2] <== eq[46][i].out; - multi_or[10][i].in[3] <== eq[47][i].out; - and[47][i].b <== multi_or[10][i].out; + and[47][i].a <== states[i][39]; + multi_or[9][i] = MultiOR(4); + multi_or[9][i].in[0] <== eq[44][i].out; + multi_or[9][i].in[1] <== eq[45][i].out; + multi_or[9][i].in[2] <== eq[46][i].out; + multi_or[9][i].in[3] <== eq[47][i].out; + and[47][i].b <== multi_or[9][i].out; and[48][i] = AND(); - and[48][i].a <== states[i][39]; - multi_or[11][i] = MultiOR(4); - multi_or[11][i].in[0] <== eq[46][i].out; - multi_or[11][i].in[1] <== eq[47][i].out; - multi_or[11][i].in[2] <== eq[45][i].out; - multi_or[11][i].in[3] <== eq[44][i].out; - and[48][i].b <== multi_or[11][i].out; - multi_or[12][i] = MultiOR(2); - multi_or[12][i].in[0] <== and[47][i].out; - multi_or[12][i].in[1] <== and[48][i].out; - states[i+1][40] <== multi_or[12][i].out; + and[48][i].a <== states[i][41]; + and[48][i].b <== multi_or[9][i].out; + multi_or[10][i] = MultiOR(2); + multi_or[10][i].in[0] <== and[47][i].out; + multi_or[10][i].in[1] <== and[48][i].out; + states[i+1][40] <== multi_or[10][i].out; state_changed[i].in[39] <== states[i+1][40]; and[49][i] = AND(); and[49][i].a <== states[i][40]; @@ -525,36 +515,31 @@ template InternationalCharsDecomposed(msg_bytes) { state_changed[i].in[48] <== states[i+1][49]; eq[50][i] = IsEqual(); eq[50][i].in[0] <== in[i]; - eq[50][i].in[1] <== 217; + eq[50][i].in[1] <== 216; eq[51][i] = IsEqual(); eq[51][i].in[0] <== in[i]; - eq[51][i].in[1] <== 219; + eq[51][i].in[1] <== 217; eq[52][i] = IsEqual(); eq[52][i].in[0] <== in[i]; - eq[52][i].in[1] <== 216; + eq[52][i].in[1] <== 218; eq[53][i] = IsEqual(); eq[53][i].in[0] <== in[i]; - eq[53][i].in[1] <== 218; + eq[53][i].in[1] <== 219; and[58][i] = AND(); and[58][i].a <== states[i][49]; - multi_or[13][i] = MultiOR(4); - multi_or[13][i].in[0] <== eq[50][i].out; - multi_or[13][i].in[1] <== eq[51][i].out; - multi_or[13][i].in[2] <== eq[52][i].out; - multi_or[13][i].in[3] <== eq[53][i].out; - and[58][i].b <== multi_or[13][i].out; + multi_or[11][i] = MultiOR(4); + multi_or[11][i].in[0] <== eq[50][i].out; + multi_or[11][i].in[1] <== eq[51][i].out; + multi_or[11][i].in[2] <== eq[52][i].out; + multi_or[11][i].in[3] <== eq[53][i].out; + and[58][i].b <== multi_or[11][i].out; and[59][i] = AND(); and[59][i].a <== states[i][51]; - multi_or[14][i] = MultiOR(4); - multi_or[14][i].in[0] <== eq[53][i].out; - multi_or[14][i].in[1] <== eq[52][i].out; - multi_or[14][i].in[2] <== eq[51][i].out; - multi_or[14][i].in[3] <== eq[50][i].out; - and[59][i].b <== multi_or[14][i].out; - multi_or[15][i] = MultiOR(2); - multi_or[15][i].in[0] <== and[58][i].out; - multi_or[15][i].in[1] <== and[59][i].out; - states[i+1][50] <== multi_or[15][i].out; + and[59][i].b <== multi_or[11][i].out; + multi_or[12][i] = MultiOR(2); + multi_or[12][i].in[0] <== and[58][i].out; + multi_or[12][i].in[1] <== and[59][i].out; + states[i+1][50] <== multi_or[12][i].out; state_changed[i].in[49] <== states[i+1][50]; and[60][i] = AND(); and[60][i].a <== states[i][50]; @@ -639,10 +624,10 @@ template InternationalCharsDecomposed(msg_bytes) { and[74][i] = AND(); and[74][i].a <== states[i][66]; and[74][i].b <== eq[57][i].out; - multi_or[16][i] = MultiOR(2); - multi_or[16][i].in[0] <== and[73][i].out; - multi_or[16][i].in[1] <== and[74][i].out; - states[i+1][64] <== multi_or[16][i].out; + multi_or[13][i] = MultiOR(2); + multi_or[13][i].in[0] <== and[73][i].out; + multi_or[13][i].in[1] <== and[74][i].out; + states[i+1][64] <== multi_or[13][i].out; state_changed[i].in[63] <== states[i+1][64]; eq[58][i] = IsEqual(); eq[58][i].in[0] <== in[i]; @@ -652,10 +637,10 @@ template InternationalCharsDecomposed(msg_bytes) { eq[59][i].in[1] <== 165; and[75][i] = AND(); and[75][i].a <== states[i][64]; - multi_or[17][i] = MultiOR(2); - multi_or[17][i].in[0] <== eq[58][i].out; - multi_or[17][i].in[1] <== eq[59][i].out; - and[75][i].b <== multi_or[17][i].out; + multi_or[14][i] = MultiOR(2); + multi_or[14][i].in[0] <== eq[58][i].out; + multi_or[14][i].in[1] <== eq[59][i].out; + and[75][i].b <== multi_or[14][i].out; states[i+1][65] <== and[75][i].out; state_changed[i].in[64] <== states[i+1][65]; and[76][i] = AND(); @@ -771,15 +756,15 @@ template InternationalCharsDecomposed(msg_bytes) { eq[63][i].in[0] <== in[i]; eq[63][i].in[1] <== 227; and[96][i] = AND(); - and[96][i].a <== states[i][89]; + and[96][i].a <== states[i][85]; and[96][i].b <== eq[63][i].out; and[97][i] = AND(); - and[97][i].a <== states[i][85]; + and[97][i].a <== states[i][89]; and[97][i].b <== eq[63][i].out; - multi_or[18][i] = MultiOR(2); - multi_or[18][i].in[0] <== and[96][i].out; - multi_or[18][i].in[1] <== and[97][i].out; - states[i+1][86] <== multi_or[18][i].out; + multi_or[15][i] = MultiOR(2); + multi_or[15][i].in[0] <== and[96][i].out; + multi_or[15][i].in[1] <== and[97][i].out; + states[i+1][86] <== multi_or[15][i].out; state_changed[i].in[85] <== states[i+1][86]; eq[64][i] = IsEqual(); eq[64][i].in[0] <== in[i]; @@ -797,31 +782,31 @@ template InternationalCharsDecomposed(msg_bytes) { eq[66][i].in[1] <== 131; and[99][i] = AND(); and[99][i].a <== states[i][86]; - multi_or[19][i] = MultiOR(2); - multi_or[19][i].in[0] <== eq[65][i].out; - multi_or[19][i].in[1] <== eq[66][i].out; - and[99][i].b <== multi_or[19][i].out; + multi_or[16][i] = MultiOR(2); + multi_or[16][i].in[0] <== eq[65][i].out; + multi_or[16][i].in[1] <== eq[66][i].out; + and[99][i].b <== multi_or[16][i].out; states[i+1][88] <== and[99][i].out; state_changed[i].in[87] <== states[i+1][88]; - and[100][i] = AND(); - and[100][i].a <== states[i][88]; - and[100][i].b <== and[20][i].out; lt[4][i] = LessEqThan(8); lt[4][i].in[0] <== 129; lt[4][i].in[1] <== in[i]; lt[5][i] = LessEqThan(8); lt[5][i].in[0] <== in[i]; lt[5][i].in[1] <== 191; + and[100][i] = AND(); + and[100][i].a <== lt[4][i].out; + and[100][i].b <== lt[5][i].out; and[101][i] = AND(); - and[101][i].a <== lt[4][i].out; - and[101][i].b <== lt[5][i].out; + and[101][i].a <== states[i][87]; + and[101][i].b <== and[100][i].out; and[102][i] = AND(); - and[102][i].a <== states[i][87]; - and[102][i].b <== and[101][i].out; - multi_or[20][i] = MultiOR(2); - multi_or[20][i].in[0] <== and[100][i].out; - multi_or[20][i].in[1] <== and[102][i].out; - states[i+1][89] <== multi_or[20][i].out; + and[102][i].a <== states[i][88]; + and[102][i].b <== and[20][i].out; + multi_or[17][i] = MultiOR(2); + multi_or[17][i].in[0] <== and[101][i].out; + multi_or[17][i].in[1] <== and[102][i].out; + states[i+1][89] <== multi_or[17][i].out; state_changed[i].in[88] <== states[i+1][89]; states[i+1][0] <== 1 - state_changed[i].out; } @@ -837,7 +822,7 @@ template InternationalCharsDecomposed(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][89] * (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]; } - // substrings calculated: [{(19, 18), (19, 17), (17, 19), (16, 18), (16, 17), (18, 19)}, {(26, 27), (26, 28), (27, 29), (28, 29), (29, 28), (29, 27)}, {(39, 40), (41, 40), (40, 41)}, {(51, 50), (50, 51), (49, 50)}, {(63, 64), (66, 64), (64, 65), (65, 66)}, {(87, 89), (88, 89), (89, 86), (86, 88), (85, 86), (86, 87)}] + // substrings calculated: [{(16, 17), (16, 18), (17, 19), (18, 19), (19, 17), (19, 18)}, {(26, 27), (26, 28), (27, 29), (28, 29), (29, 27), (29, 28)}, {(39, 40), (40, 41), (41, 40)}, {(49, 50), (50, 51), (51, 50)}, {(63, 64), (64, 65), (65, 66), (66, 64)}, {(85, 86), (86, 87), (86, 88), (87, 89), (88, 89), (89, 86)}] signal is_substr0[msg_bytes][7]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/tests/circuits/negate1_regex.circom b/packages/circom/tests/circuits/negate1_regex.circom index 1b660b0..28b7fac 100644 --- a/packages/circom/tests/circuits/negate1_regex.circom +++ b/packages/circom/tests/circuits/negate1_regex.circom @@ -17,7 +17,7 @@ template Negate1Regex(msg_bytes) { component eq[45][num_bytes]; component lt[14][num_bytes]; component and[33][num_bytes]; - component multi_or[15][num_bytes]; + component multi_or[12][num_bytes]; signal states[num_bytes+1][12]; component state_changed[num_bytes]; @@ -54,52 +54,52 @@ template Negate1Regex(msg_bytes) { and[2][i].a <== lt[0][i].out; and[2][i].b <== lt[1][i].out; and[3][i] = AND(); - and[3][i].a <== states[i][10]; + and[3][i].a <== states[i][2]; and[3][i].b <== and[2][i].out; - and[4][i] = AND(); - and[4][i].a <== states[i][2]; - and[4][i].b <== and[2][i].out; lt[2][i] = LessEqThan(8); lt[2][i].in[0] <== 160; lt[2][i].in[1] <== in[i]; lt[3][i] = LessEqThan(8); lt[3][i].in[0] <== in[i]; lt[3][i].in[1] <== 191; + and[4][i] = AND(); + and[4][i].a <== lt[2][i].out; + and[4][i].b <== lt[3][i].out; and[5][i] = AND(); - and[5][i].a <== lt[2][i].out; - and[5][i].b <== lt[3][i].out; - and[6][i] = AND(); - and[6][i].a <== states[i][4]; - and[6][i].b <== and[5][i].out; + and[5][i].a <== states[i][4]; + and[5][i].b <== and[4][i].out; lt[4][i] = LessEqThan(8); lt[4][i].in[0] <== 128; lt[4][i].in[1] <== in[i]; lt[5][i] = LessEqThan(8); lt[5][i].in[0] <== in[i]; - lt[5][i].in[1] <== 159; + lt[5][i].in[1] <== 191; + and[6][i] = AND(); + and[6][i].a <== lt[4][i].out; + and[6][i].b <== lt[5][i].out; and[7][i] = AND(); - and[7][i].a <== lt[4][i].out; - and[7][i].b <== lt[5][i].out; - and[8][i] = AND(); - and[8][i].a <== states[i][6]; - and[8][i].b <== and[7][i].out; + and[7][i].a <== states[i][5]; + and[7][i].b <== and[6][i].out; lt[6][i] = LessEqThan(8); lt[6][i].in[0] <== 128; lt[6][i].in[1] <== in[i]; lt[7][i] = LessEqThan(8); lt[7][i].in[0] <== in[i]; - lt[7][i].in[1] <== 191; + lt[7][i].in[1] <== 159; + and[8][i] = AND(); + and[8][i].a <== lt[6][i].out; + and[8][i].b <== lt[7][i].out; and[9][i] = AND(); - and[9][i].a <== lt[6][i].out; - and[9][i].b <== lt[7][i].out; + and[9][i].a <== states[i][6]; + and[9][i].b <== and[8][i].out; and[10][i] = AND(); - and[10][i].a <== states[i][5]; - and[10][i].b <== and[9][i].out; + and[10][i].a <== states[i][10]; + and[10][i].b <== and[2][i].out; multi_or[0][i] = MultiOR(5); multi_or[0][i].in[0] <== and[3][i].out; - multi_or[0][i].in[1] <== and[4][i].out; - multi_or[0][i].in[2] <== and[6][i].out; - multi_or[0][i].in[3] <== and[8][i].out; + multi_or[0][i].in[1] <== and[5][i].out; + multi_or[0][i].in[2] <== and[7][i].out; + multi_or[0][i].in[3] <== and[9][i].out; multi_or[0][i].in[4] <== and[10][i].out; states[i+1][3] <== multi_or[0][i].out; state_changed[i].in[2] <== states[i+1][3]; @@ -117,53 +117,50 @@ template Negate1Regex(msg_bytes) { multi_or[1][i].in[1] <== and[12][i].out; states[i+1][4] <== multi_or[1][i].out; state_changed[i].in[3] <== states[i+1][4]; - and[13][i] = AND(); - and[13][i].a <== states[i][8]; - and[13][i].b <== and[9][i].out; eq[3][i] = IsEqual(); eq[3][i].in[0] <== in[i]; - eq[3][i].in[1] <== 235; + eq[3][i].in[1] <== 225; eq[4][i] = IsEqual(); eq[4][i].in[0] <== in[i]; - eq[4][i].in[1] <== 236; + eq[4][i].in[1] <== 226; eq[5][i] = IsEqual(); eq[5][i].in[0] <== in[i]; - eq[5][i].in[1] <== 228; + eq[5][i].in[1] <== 227; eq[6][i] = IsEqual(); eq[6][i].in[0] <== in[i]; - eq[6][i].in[1] <== 231; + eq[6][i].in[1] <== 228; eq[7][i] = IsEqual(); eq[7][i].in[0] <== in[i]; - eq[7][i].in[1] <== 234; + eq[7][i].in[1] <== 229; eq[8][i] = IsEqual(); eq[8][i].in[0] <== in[i]; - eq[8][i].in[1] <== 238; + eq[8][i].in[1] <== 230; eq[9][i] = IsEqual(); eq[9][i].in[0] <== in[i]; - eq[9][i].in[1] <== 239; + eq[9][i].in[1] <== 231; eq[10][i] = IsEqual(); eq[10][i].in[0] <== in[i]; - eq[10][i].in[1] <== 229; + eq[10][i].in[1] <== 232; eq[11][i] = IsEqual(); eq[11][i].in[0] <== in[i]; - eq[11][i].in[1] <== 227; + eq[11][i].in[1] <== 233; eq[12][i] = IsEqual(); eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 226; + eq[12][i].in[1] <== 234; eq[13][i] = IsEqual(); eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 225; + eq[13][i].in[1] <== 235; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 232; + eq[14][i].in[1] <== 236; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 233; + eq[15][i].in[1] <== 238; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 230; - and[14][i] = AND(); - and[14][i].a <== states[i][2]; + eq[16][i].in[1] <== 239; + and[13][i] = AND(); + and[13][i].a <== states[i][2]; multi_or[2][i] = MultiOR(14); multi_or[2][i].in[0] <== eq[3][i].out; multi_or[2][i].in[1] <== eq[4][i].out; @@ -179,67 +176,70 @@ template Negate1Regex(msg_bytes) { multi_or[2][i].in[11] <== eq[14][i].out; multi_or[2][i].in[12] <== eq[15][i].out; multi_or[2][i].in[13] <== eq[16][i].out; - and[14][i].b <== multi_or[2][i].out; + and[13][i].b <== multi_or[2][i].out; lt[8][i] = LessEqThan(8); lt[8][i].in[0] <== 144; lt[8][i].in[1] <== in[i]; lt[9][i] = LessEqThan(8); lt[9][i].in[0] <== in[i]; lt[9][i].in[1] <== 191; + and[14][i] = AND(); + and[14][i].a <== lt[8][i].out; + and[14][i].b <== lt[9][i].out; and[15][i] = AND(); - and[15][i].a <== lt[8][i].out; - and[15][i].b <== lt[9][i].out; + and[15][i].a <== states[i][7]; + and[15][i].b <== and[14][i].out; and[16][i] = AND(); - and[16][i].a <== states[i][7]; - and[16][i].b <== and[15][i].out; + and[16][i].a <== states[i][8]; + and[16][i].b <== and[6][i].out; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 130; + eq[17][i].in[1] <== 128; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; eq[18][i].in[1] <== 129; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 135; + eq[19][i].in[1] <== 130; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 134; + eq[20][i].in[1] <== 131; eq[21][i] = IsEqual(); eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 137; + eq[21][i].in[1] <== 132; eq[22][i] = IsEqual(); eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 142; + eq[22][i].in[1] <== 133; eq[23][i] = IsEqual(); eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 139; + eq[23][i].in[1] <== 134; eq[24][i] = IsEqual(); eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 143; + eq[24][i].in[1] <== 135; eq[25][i] = IsEqual(); eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 141; + eq[25][i].in[1] <== 136; eq[26][i] = IsEqual(); eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 128; + eq[26][i].in[1] <== 137; eq[27][i] = IsEqual(); eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 136; + eq[27][i].in[1] <== 138; eq[28][i] = IsEqual(); eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 133; + eq[28][i].in[1] <== 139; eq[29][i] = IsEqual(); eq[29][i].in[0] <== in[i]; eq[29][i].in[1] <== 140; eq[30][i] = IsEqual(); eq[30][i].in[0] <== in[i]; - eq[30][i].in[1] <== 138; + eq[30][i].in[1] <== 141; eq[31][i] = IsEqual(); eq[31][i].in[0] <== in[i]; - eq[31][i].in[1] <== 131; + eq[31][i].in[1] <== 142; eq[32][i] = IsEqual(); eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 132; + eq[32][i].in[1] <== 143; and[17][i] = AND(); and[17][i].a <== states[i][9]; multi_or[3][i] = MultiOR(16); @@ -262,29 +262,14 @@ template Negate1Regex(msg_bytes) { and[17][i].b <== multi_or[3][i].out; and[18][i] = AND(); and[18][i].a <== states[i][10]; - multi_or[4][i] = MultiOR(14); - multi_or[4][i].in[0] <== eq[10][i].out; - multi_or[4][i].in[1] <== eq[15][i].out; - multi_or[4][i].in[2] <== eq[7][i].out; - multi_or[4][i].in[3] <== eq[3][i].out; - multi_or[4][i].in[4] <== eq[8][i].out; - multi_or[4][i].in[5] <== eq[5][i].out; - multi_or[4][i].in[6] <== eq[6][i].out; - multi_or[4][i].in[7] <== eq[9][i].out; - multi_or[4][i].in[8] <== eq[11][i].out; - multi_or[4][i].in[9] <== eq[16][i].out; - multi_or[4][i].in[10] <== eq[13][i].out; - multi_or[4][i].in[11] <== eq[4][i].out; - multi_or[4][i].in[12] <== eq[12][i].out; - multi_or[4][i].in[13] <== eq[14][i].out; - and[18][i].b <== multi_or[4][i].out; - multi_or[5][i] = MultiOR(5); - multi_or[5][i].in[0] <== and[13][i].out; - multi_or[5][i].in[1] <== and[14][i].out; - multi_or[5][i].in[2] <== and[16][i].out; - multi_or[5][i].in[3] <== and[17][i].out; - multi_or[5][i].in[4] <== and[18][i].out; - states[i+1][5] <== multi_or[5][i].out; + and[18][i].b <== multi_or[2][i].out; + multi_or[4][i] = MultiOR(5); + multi_or[4][i].in[0] <== and[13][i].out; + multi_or[4][i].in[1] <== and[15][i].out; + multi_or[4][i].in[2] <== and[16][i].out; + multi_or[4][i].in[3] <== and[17][i].out; + multi_or[4][i].in[4] <== and[18][i].out; + states[i+1][5] <== multi_or[4][i].out; state_changed[i].in[4] <== states[i+1][5]; eq[33][i] = IsEqual(); eq[33][i].in[0] <== in[i]; @@ -295,66 +280,62 @@ template Negate1Regex(msg_bytes) { and[20][i] = AND(); and[20][i].a <== states[i][10]; and[20][i].b <== eq[33][i].out; - multi_or[6][i] = MultiOR(2); - multi_or[6][i].in[0] <== and[19][i].out; - multi_or[6][i].in[1] <== and[20][i].out; - states[i+1][6] <== multi_or[6][i].out; + multi_or[5][i] = MultiOR(2); + multi_or[5][i].in[0] <== and[19][i].out; + multi_or[5][i].in[1] <== and[20][i].out; + states[i+1][6] <== multi_or[5][i].out; state_changed[i].in[5] <== states[i+1][6]; eq[34][i] = IsEqual(); eq[34][i].in[0] <== in[i]; eq[34][i].in[1] <== 240; and[21][i] = AND(); - and[21][i].a <== states[i][10]; + and[21][i].a <== states[i][2]; and[21][i].b <== eq[34][i].out; and[22][i] = AND(); - and[22][i].a <== states[i][2]; + and[22][i].a <== states[i][10]; and[22][i].b <== eq[34][i].out; - multi_or[7][i] = MultiOR(2); - multi_or[7][i].in[0] <== and[21][i].out; - multi_or[7][i].in[1] <== and[22][i].out; - states[i+1][7] <== multi_or[7][i].out; + multi_or[6][i] = MultiOR(2); + multi_or[6][i].in[0] <== and[21][i].out; + multi_or[6][i].in[1] <== and[22][i].out; + states[i+1][7] <== multi_or[6][i].out; state_changed[i].in[6] <== states[i+1][7]; eq[35][i] = IsEqual(); eq[35][i].in[0] <== in[i]; - eq[35][i].in[1] <== 242; + eq[35][i].in[1] <== 241; eq[36][i] = IsEqual(); eq[36][i].in[0] <== in[i]; - eq[36][i].in[1] <== 241; + eq[36][i].in[1] <== 242; eq[37][i] = IsEqual(); eq[37][i].in[0] <== in[i]; eq[37][i].in[1] <== 243; and[23][i] = AND(); - and[23][i].a <== states[i][10]; - multi_or[8][i] = MultiOR(3); - multi_or[8][i].in[0] <== eq[35][i].out; - multi_or[8][i].in[1] <== eq[36][i].out; - multi_or[8][i].in[2] <== eq[37][i].out; - and[23][i].b <== multi_or[8][i].out; + and[23][i].a <== states[i][2]; + multi_or[7][i] = MultiOR(3); + multi_or[7][i].in[0] <== eq[35][i].out; + multi_or[7][i].in[1] <== eq[36][i].out; + multi_or[7][i].in[2] <== eq[37][i].out; + and[23][i].b <== multi_or[7][i].out; and[24][i] = AND(); - and[24][i].a <== states[i][2]; - multi_or[9][i] = MultiOR(3); - multi_or[9][i].in[0] <== eq[36][i].out; - multi_or[9][i].in[1] <== eq[35][i].out; - multi_or[9][i].in[2] <== eq[37][i].out; - and[24][i].b <== multi_or[9][i].out; - multi_or[10][i] = MultiOR(2); - multi_or[10][i].in[0] <== and[23][i].out; - multi_or[10][i].in[1] <== and[24][i].out; - states[i+1][8] <== multi_or[10][i].out; + and[24][i].a <== states[i][10]; + and[24][i].b <== multi_or[7][i].out; + multi_or[8][i] = MultiOR(2); + multi_or[8][i].in[0] <== and[23][i].out; + multi_or[8][i].in[1] <== and[24][i].out; + states[i+1][8] <== multi_or[8][i].out; state_changed[i].in[7] <== states[i+1][8]; eq[38][i] = IsEqual(); eq[38][i].in[0] <== in[i]; eq[38][i].in[1] <== 244; and[25][i] = AND(); - and[25][i].a <== states[i][10]; + and[25][i].a <== states[i][2]; and[25][i].b <== eq[38][i].out; and[26][i] = AND(); - and[26][i].a <== states[i][2]; + and[26][i].a <== states[i][10]; and[26][i].b <== eq[38][i].out; - multi_or[11][i] = MultiOR(2); - multi_or[11][i].in[0] <== and[25][i].out; - multi_or[11][i].in[1] <== and[26][i].out; - states[i+1][9] <== multi_or[11][i].out; + multi_or[9][i] = MultiOR(2); + multi_or[9][i].in[0] <== and[25][i].out; + multi_or[9][i].in[1] <== and[26][i].out; + states[i+1][9] <== multi_or[9][i].out; state_changed[i].in[8] <== states[i+1][9]; lt[10][i] = LessEqThan(8); lt[10][i].in[0] <== 0; @@ -376,49 +357,41 @@ template Negate1Regex(msg_bytes) { and[28][i].b <== lt[13][i].out; eq[39][i] = IsEqual(); eq[39][i].in[0] <== in[i]; - eq[39][i].in[1] <== 124; + eq[39][i].in[1] <== 123; eq[40][i] = IsEqual(); eq[40][i].in[0] <== in[i]; - eq[40][i].in[1] <== 125; + eq[40][i].in[1] <== 124; eq[41][i] = IsEqual(); eq[41][i].in[0] <== in[i]; - eq[41][i].in[1] <== 126; + eq[41][i].in[1] <== 125; eq[42][i] = IsEqual(); eq[42][i].in[0] <== in[i]; - eq[42][i].in[1] <== 127; + eq[42][i].in[1] <== 126; eq[43][i] = IsEqual(); eq[43][i].in[0] <== in[i]; - eq[43][i].in[1] <== 123; + eq[43][i].in[1] <== 127; and[29][i] = AND(); and[29][i].a <== states[i][2]; - multi_or[12][i] = MultiOR(7); - multi_or[12][i].in[0] <== and[27][i].out; - multi_or[12][i].in[1] <== and[28][i].out; - multi_or[12][i].in[2] <== eq[39][i].out; - multi_or[12][i].in[3] <== eq[40][i].out; - multi_or[12][i].in[4] <== eq[41][i].out; - multi_or[12][i].in[5] <== eq[42][i].out; - multi_or[12][i].in[6] <== eq[43][i].out; - and[29][i].b <== multi_or[12][i].out; + multi_or[10][i] = MultiOR(7); + multi_or[10][i].in[0] <== and[27][i].out; + multi_or[10][i].in[1] <== and[28][i].out; + multi_or[10][i].in[2] <== eq[39][i].out; + multi_or[10][i].in[3] <== eq[40][i].out; + multi_or[10][i].in[4] <== eq[41][i].out; + multi_or[10][i].in[5] <== eq[42][i].out; + multi_or[10][i].in[6] <== eq[43][i].out; + and[29][i].b <== multi_or[10][i].out; and[30][i] = AND(); - and[30][i].a <== states[i][10]; - multi_or[13][i] = MultiOR(7); - multi_or[13][i].in[0] <== and[27][i].out; - multi_or[13][i].in[1] <== and[28][i].out; - multi_or[13][i].in[2] <== eq[43][i].out; - multi_or[13][i].in[3] <== eq[41][i].out; - multi_or[13][i].in[4] <== eq[42][i].out; - multi_or[13][i].in[5] <== eq[40][i].out; - multi_or[13][i].in[6] <== eq[39][i].out; - and[30][i].b <== multi_or[13][i].out; + and[30][i].a <== states[i][3]; + and[30][i].b <== and[6][i].out; and[31][i] = AND(); - and[31][i].a <== states[i][3]; - and[31][i].b <== and[9][i].out; - multi_or[14][i] = MultiOR(3); - multi_or[14][i].in[0] <== and[29][i].out; - multi_or[14][i].in[1] <== and[30][i].out; - multi_or[14][i].in[2] <== and[31][i].out; - states[i+1][10] <== multi_or[14][i].out; + and[31][i].a <== states[i][10]; + and[31][i].b <== multi_or[10][i].out; + multi_or[11][i] = MultiOR(3); + multi_or[11][i].in[0] <== and[29][i].out; + multi_or[11][i].in[1] <== and[30][i].out; + multi_or[11][i].in[2] <== and[31][i].out; + states[i+1][10] <== multi_or[11][i].out; state_changed[i].in[9] <== states[i+1][10]; eq[44][i] = IsEqual(); eq[44][i].in[0] <== in[i]; @@ -442,7 +415,7 @@ template Negate1Regex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][11] * (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]; } - // substrings calculated: [{(2, 10), (6, 3), (3, 10), (9, 5), (2, 6), (10, 5), (4, 3), (10, 3), (2, 8), (10, 10), (10, 7), (7, 5), (2, 4), (2, 3), (2, 9), (2, 7), (10, 4), (2, 5), (8, 5), (5, 3), (10, 6), (10, 9), (10, 8)}] + // substrings calculated: [{(2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (2, 10), (3, 10), (4, 3), (5, 3), (6, 3), (7, 5), (8, 5), (9, 5), (10, 3), (10, 4), (10, 5), (10, 6), (10, 7), (10, 8), (10, 9), (10, 10)}] signal is_substr0[msg_bytes][24]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/tests/circuits/simple_regex.circom b/packages/circom/tests/circuits/simple_regex.circom index 25f2bbb..24fef27 100644 --- a/packages/circom/tests/circuits/simple_regex.circom +++ b/packages/circom/tests/circuits/simple_regex.circom @@ -16,7 +16,7 @@ template SimpleRegex(msg_bytes) { component eq[8][num_bytes]; component and[11][num_bytes]; - component multi_or[5][num_bytes]; + component multi_or[4][num_bytes]; signal states[num_bytes+1][10]; component state_changed[num_bytes]; @@ -45,10 +45,10 @@ template SimpleRegex(msg_bytes) { state_changed[i].in[1] <== states[i+1][2]; eq[2][i] = IsEqual(); eq[2][i].in[0] <== in[i]; - eq[2][i].in[1] <== 98; + eq[2][i].in[1] <== 97; eq[3][i] = IsEqual(); eq[3][i].in[0] <== in[i]; - eq[3][i].in[1] <== 97; + eq[3][i].in[1] <== 98; and[2][i] = AND(); and[2][i].a <== states[i][2]; multi_or[0][i] = MultiOR(2); @@ -90,19 +90,16 @@ template SimpleRegex(msg_bytes) { and[7][i] = AND(); and[7][i].a <== states[i][6]; multi_or[2][i] = MultiOR(2); - multi_or[2][i].in[0] <== eq[2][i].out; + multi_or[2][i].in[0] <== eq[3][i].out; multi_or[2][i].in[1] <== eq[6][i].out; and[7][i].b <== multi_or[2][i].out; and[8][i] = AND(); and[8][i].a <== states[i][7]; + and[8][i].b <== multi_or[2][i].out; multi_or[3][i] = MultiOR(2); - multi_or[3][i].in[0] <== eq[6][i].out; - multi_or[3][i].in[1] <== eq[2][i].out; - and[8][i].b <== multi_or[3][i].out; - multi_or[4][i] = MultiOR(2); - multi_or[4][i].in[0] <== and[7][i].out; - multi_or[4][i].in[1] <== and[8][i].out; - states[i+1][7] <== multi_or[4][i].out; + multi_or[3][i].in[0] <== and[7][i].out; + multi_or[3][i].in[1] <== and[8][i].out; + states[i+1][7] <== multi_or[3][i].out; state_changed[i].in[6] <== states[i+1][7]; and[9][i] = AND(); and[9][i].a <== states[i][7]; diff --git a/packages/circom/tests/circuits/simple_regex_decomposed.circom b/packages/circom/tests/circuits/simple_regex_decomposed.circom index 5a32c70..65cba6d 100644 --- a/packages/circom/tests/circuits/simple_regex_decomposed.circom +++ b/packages/circom/tests/circuits/simple_regex_decomposed.circom @@ -17,7 +17,7 @@ template SimpleRegexDecomposed(msg_bytes) { component eq[26][num_bytes]; component lt[4][num_bytes]; component and[26][num_bytes]; - component multi_or[3][num_bytes]; + component multi_or[2][num_bytes]; signal states[num_bytes+1][24]; component state_changed[num_bytes]; @@ -195,37 +195,37 @@ template SimpleRegexDecomposed(msg_bytes) { and[22][i].b <== lt[3][i].out; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 53; + eq[14][i].in[1] <== 48; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 51; + eq[15][i].in[1] <== 49; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 52; + eq[16][i].in[1] <== 50; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 55; + eq[17][i].in[1] <== 51; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 57; + eq[18][i].in[1] <== 52; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 54; + eq[19][i].in[1] <== 53; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 49; + eq[20][i].in[1] <== 54; eq[21][i] = IsEqual(); eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 56; + eq[21][i].in[1] <== 55; eq[22][i] = IsEqual(); eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 95; + eq[22][i].in[1] <== 56; eq[23][i] = IsEqual(); eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 50; + eq[23][i].in[1] <== 57; eq[24][i] = IsEqual(); eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 48; + eq[24][i].in[1] <== 95; and[23][i] = AND(); and[23][i].a <== states[i][21]; multi_or[0][i] = MultiOR(13); @@ -245,25 +245,11 @@ template SimpleRegexDecomposed(msg_bytes) { and[23][i].b <== multi_or[0][i].out; and[24][i] = AND(); and[24][i].a <== states[i][22]; - multi_or[1][i] = MultiOR(13); - multi_or[1][i].in[0] <== and[21][i].out; - multi_or[1][i].in[1] <== and[22][i].out; - multi_or[1][i].in[2] <== eq[21][i].out; - multi_or[1][i].in[3] <== eq[20][i].out; - multi_or[1][i].in[4] <== eq[19][i].out; - multi_or[1][i].in[5] <== eq[14][i].out; - multi_or[1][i].in[6] <== eq[22][i].out; - multi_or[1][i].in[7] <== eq[15][i].out; - multi_or[1][i].in[8] <== eq[16][i].out; - multi_or[1][i].in[9] <== eq[17][i].out; - multi_or[1][i].in[10] <== eq[18][i].out; - multi_or[1][i].in[11] <== eq[24][i].out; - multi_or[1][i].in[12] <== eq[23][i].out; - and[24][i].b <== multi_or[1][i].out; - multi_or[2][i] = MultiOR(2); - multi_or[2][i].in[0] <== and[23][i].out; - multi_or[2][i].in[1] <== and[24][i].out; - states[i+1][22] <== multi_or[2][i].out; + and[24][i].b <== multi_or[0][i].out; + multi_or[1][i] = MultiOR(2); + multi_or[1][i].in[0] <== and[23][i].out; + multi_or[1][i].in[1] <== and[24][i].out; + states[i+1][22] <== multi_or[1][i].out; state_changed[i].in[21] <== states[i+1][22]; eq[25][i] = IsEqual(); eq[25][i].in[0] <== in[i]; diff --git a/packages/compiler/src/circom.rs b/packages/compiler/src/circom.rs index 16ad3c7..dfb9ac6 100644 --- a/packages/compiler/src/circom.rs +++ b/packages/compiler/src/circom.rs @@ -2,7 +2,7 @@ use super::CompilerError; use crate::get_accepted_state; use crate::DFAGraph; use crate::RegexAndDFA; -use std::collections::{HashMap, HashSet}; +use std::collections::{BTreeMap, BTreeSet}; use std::fs::File; use std::io::Write; @@ -10,16 +10,16 @@ use std::path::PathBuf; fn gen_circom_allstr(dfa_graph: &DFAGraph, template_name: &str, regex_str: &str) -> String { let n = dfa_graph.states.len(); - let mut rev_graph = HashMap::>>::new(); + let mut rev_graph = BTreeMap::>>::new(); let mut to_init_graph = vec![]; let mut init_going_state: Option = None; for i in 0..n { - rev_graph.insert(i, HashMap::new()); + rev_graph.insert(i, BTreeMap::new()); to_init_graph.push(vec![]); } - let mut accept_nodes = HashSet::::new(); + let mut accept_nodes = BTreeSet::::new(); for i in 0..n { let node = &dfa_graph.states[i]; @@ -91,8 +91,8 @@ fn gen_circom_allstr(dfa_graph: &DFAGraph, template_name: &str, regex_str: &str) let mut range_checks = vec![vec![None; 256]; 256]; let mut eq_checks = vec![None; 256]; - let mut multi_or_checks1 = HashMap::::new(); - let mut multi_or_checks2 = HashMap::::new(); + let mut multi_or_checks1 = BTreeMap::::new(); + let mut multi_or_checks2 = BTreeMap::::new(); let mut lines = vec![]; @@ -108,7 +108,7 @@ fn gen_circom_allstr(dfa_graph: &DFAGraph, template_name: &str, regex_str: &str) k.sort(); let mut eq_outputs = vec![]; - let mut vals = k.clone().into_iter().collect::>(); + let mut vals = k.clone().into_iter().collect::>(); if vals.is_empty() { continue; diff --git a/packages/compiler/src/lib.rs b/packages/compiler/src/lib.rs index 66da35e..14f6f33 100644 --- a/packages/compiler/src/lib.rs +++ b/packages/compiler/src/lib.rs @@ -1,5 +1,5 @@ +use std::fs::File; use std::iter::FromIterator; -use std::{collections::HashMap, fs::File}; pub mod circom; pub mod halo2; pub mod node; @@ -15,7 +15,7 @@ use neon; use itertools::Itertools; use petgraph::prelude::*; use serde::{Deserialize, Serialize}; -use std::collections::{BTreeSet, HashSet}; +use std::collections::{BTreeMap, BTreeSet}; use std::path::PathBuf; use thiserror::Error; @@ -61,7 +61,7 @@ pub enum SoldityType { pub struct DFAState { r#type: String, state: usize, - edges: HashMap>, + edges: BTreeMap>, } #[derive(Debug, Clone)] @@ -80,8 +80,8 @@ pub struct RegexAndDFA { #[derive(Debug, Clone)] pub struct SubstrsDefs { - pub substr_defs_array: Vec>, - pub substr_endpoints_array: Option, HashSet)>>, + pub substr_defs_array: Vec>, + pub substr_endpoints_array: Option, BTreeSet)>>, // pub max_bytes: Option>, } @@ -106,7 +106,7 @@ impl RegexAndDFA { let substr_defs_array = substrs_defs_json .transitions .into_iter() - .map(|transitions_array| HashSet::<(usize, usize)>::from_iter(transitions_array)) + .map(|transitions_array| BTreeSet::<(usize, usize)>::from_iter(transitions_array)) .collect_vec(); let substrs_defs = SubstrsDefs { substr_defs_array, @@ -235,7 +235,6 @@ fn main(mut cx: neon::prelude::ModuleContext) -> neon::prelude::NeonResult<()> { #[cfg(test)] mod tests { use super::*; - use std::path::Path; #[test] fn test_gen_from_decomposed() { diff --git a/packages/compiler/src/regex.rs b/packages/compiler/src/regex.rs index 5e9ea07..02ae9d3 100644 --- a/packages/compiler/src/regex.rs +++ b/packages/compiler/src/regex.rs @@ -1,13 +1,13 @@ use crate::{DFAGraph, DFAState, DecomposedRegexConfig, RegexAndDFA, SubstrsDefs}; use regex::Regex; use regex_automata::dfa::{dense::DFA, StartKind}; -use std::collections::{BTreeSet, HashMap, HashSet}; +use std::collections::{BTreeMap, BTreeSet}; #[derive(Debug, Clone)] struct DFAInfoState { typ: String, source: usize, - edges: HashMap, + edges: BTreeMap, } #[derive(Debug)] @@ -24,7 +24,7 @@ fn parse_dfa_output(output: &str) -> DFAGraphInfo { let mut state = DFAInfoState { source: src, typ: String::new(), - edges: HashMap::new(), + edges: BTreeMap::new(), }; if &captures[0][0..1] == "*" { state.typ = String::from("accept"); @@ -92,7 +92,7 @@ fn parse_dfa_output(output: &str) -> DFAGraphInfo { } // Rename the sources - let mut switch_states = HashMap::new(); + let mut switch_states = BTreeMap::new(); for (i, state) in sorted_states.states.iter_mut().enumerate() { let temp = state.source; state.source = i as usize; @@ -112,8 +112,8 @@ fn parse_dfa_output(output: &str) -> DFAGraphInfo { fn dfa_to_graph(dfa_info: &DFAGraphInfo) -> DFAGraph { let mut graph = DFAGraph { states: Vec::new() }; for state in &dfa_info.states { - let mut edges = HashMap::new(); - let key_mappings: HashMap<&str, u8> = [ + let mut edges = BTreeMap::new(); + let key_mappings: BTreeMap<&str, u8> = [ ("\\n", 10), ("\\r", 13), ("\\t", 9), @@ -197,7 +197,7 @@ fn dfa_to_graph(dfa_info: &DFAGraphInfo) -> DFAGraph { fn rename_states(dfa_info: &DFAGraph, base: usize) -> DFAGraph { let mut dfa_info = dfa_info.clone(); // Rename the sources - let mut switch_states = HashMap::new(); + let mut switch_states = BTreeMap::new(); for (i, state) in dfa_info.states.iter_mut().enumerate() { let temp = state.state; state.state = i + base; @@ -206,7 +206,7 @@ fn rename_states(dfa_info: &DFAGraph, base: usize) -> DFAGraph { // Iterate over all edges of all states and rename the states for state in &mut dfa_info.states { - let mut new_edges = HashMap::new(); + let mut new_edges = BTreeMap::new(); for (key, value) in &state.edges { new_edges.insert(*switch_states.get(key).unwrap(), value.clone()); } @@ -284,7 +284,7 @@ pub fn regex_and_dfa(decomposed_regex: &DecomposedRegexConfig) -> RegexAndDFA { } } - let mut public_edges = HashSet::new(); + let mut public_edges = BTreeSet::new(); for state in &graph.states { for (key, _) in &state.edges { public_edges.insert((state.state, *key));