From e30dc3bf0eb0ff4cd96d3570bd916a225c34ce30 Mon Sep 17 00:00:00 2001 From: SoraSuegami Date: Sun, 19 May 2024 16:50:38 +0900 Subject: [PATCH] Remove unused test regex and circoms. --- packages/circom/tests/circuits/asterisk4.json | 12 - .../tests/circuits/asterisk4_regex.circom | 396 ---------------- packages/circom/tests/circuits/asterisk5.json | 12 - .../tests/circuits/asterisk5_regex.circom | 383 ---------------- packages/circom/tests/circuits/asterisk6.json | 8 - .../tests/circuits/asterisk6_regex.circom | 377 ---------------- packages/circom/tests/circuits/plus5.json | 12 - .../circom/tests/circuits/plus5_regex.circom | 427 ------------------ packages/circom/tests/circuits/plus6.json | 8 - .../circom/tests/circuits/plus6_regex.circom | 408 ----------------- .../circuits/test_asterisk4_regex.circom | 3 - .../circuits/test_asterisk5_regex.circom | 3 - .../circuits/test_asterisk6_regex.circom | 3 - .../tests/circuits/test_plus5_regex.circom | 3 - .../tests/circuits/test_plus6_regex.circom | 3 - .../circuits/test_question4_regex.circom | 3 - 16 files changed, 2061 deletions(-) delete mode 100644 packages/circom/tests/circuits/asterisk4.json delete mode 100644 packages/circom/tests/circuits/asterisk4_regex.circom delete mode 100644 packages/circom/tests/circuits/asterisk5.json delete mode 100644 packages/circom/tests/circuits/asterisk5_regex.circom delete mode 100644 packages/circom/tests/circuits/asterisk6.json delete mode 100644 packages/circom/tests/circuits/asterisk6_regex.circom delete mode 100644 packages/circom/tests/circuits/plus5.json delete mode 100644 packages/circom/tests/circuits/plus5_regex.circom delete mode 100644 packages/circom/tests/circuits/plus6.json delete mode 100644 packages/circom/tests/circuits/plus6_regex.circom delete mode 100644 packages/circom/tests/circuits/test_asterisk4_regex.circom delete mode 100644 packages/circom/tests/circuits/test_asterisk5_regex.circom delete mode 100644 packages/circom/tests/circuits/test_asterisk6_regex.circom delete mode 100644 packages/circom/tests/circuits/test_plus5_regex.circom delete mode 100644 packages/circom/tests/circuits/test_plus6_regex.circom delete mode 100644 packages/circom/tests/circuits/test_question4_regex.circom diff --git a/packages/circom/tests/circuits/asterisk4.json b/packages/circom/tests/circuits/asterisk4.json deleted file mode 100644 index fd5243a..0000000 --- a/packages/circom/tests/circuits/asterisk4.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parts": [ - { - "is_public": true, - "regex_def": ".*" - }, - { - "is_public": false, - "regex_def": "b" - } - ] -} \ No newline at end of file diff --git a/packages/circom/tests/circuits/asterisk4_regex.circom b/packages/circom/tests/circuits/asterisk4_regex.circom deleted file mode 100644 index cec7ca8..0000000 --- a/packages/circom/tests/circuits/asterisk4_regex.circom +++ /dev/null @@ -1,396 +0,0 @@ -pragma circom 2.1.5; - -include "@zk-email/zk-regex-circom/circuits/regex_helpers.circom"; - -// regex: .*b -template Asterisk4Regex(msg_bytes) { - signal input msg[msg_bytes]; - signal output out; - - var num_bytes = msg_bytes+1; - signal in[num_bytes]; - in[0]<==255; - for (var i = 0; i < msg_bytes; i++) { - in[i+1] <== msg[i]; - } - - component eq[48][num_bytes]; - component lt[14][num_bytes]; - component and[23][num_bytes]; - component multi_or[6][num_bytes]; - signal states[num_bytes+1][9]; - signal states_tmp[num_bytes+1][9]; - signal from_zero_enabled[num_bytes+1]; - from_zero_enabled[num_bytes] <== 0; - component state_changed[num_bytes]; - - for (var i = 1; i < 9; i++) { - states[0][i] <== 0; - } - - for (var i = 0; i < num_bytes; i++) { - state_changed[i] = MultiOR(8); - lt[0][i] = LessEqThan(8); - lt[0][i].in[0] <== 11; - lt[0][i].in[1] <== in[i]; - lt[1][i] = LessEqThan(8); - lt[1][i].in[0] <== in[i]; - lt[1][i].in[1] <== 97; - and[0][i] = AND(); - and[0][i].a <== lt[0][i].out; - and[0][i].b <== lt[1][i].out; - lt[2][i] = LessEqThan(8); - 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] <== 127; - and[1][i] = AND(); - and[1][i].a <== lt[2][i].out; - and[1][i].b <== lt[3][i].out; - eq[0][i] = IsEqual(); - eq[0][i].in[0] <== in[i]; - eq[0][i].in[1] <== 0; - eq[1][i] = IsEqual(); - eq[1][i].in[0] <== in[i]; - eq[1][i].in[1] <== 1; - eq[2][i] = IsEqual(); - eq[2][i].in[0] <== in[i]; - eq[2][i].in[1] <== 2; - eq[3][i] = IsEqual(); - eq[3][i].in[0] <== in[i]; - eq[3][i].in[1] <== 3; - eq[4][i] = IsEqual(); - eq[4][i].in[0] <== in[i]; - eq[4][i].in[1] <== 4; - eq[5][i] = IsEqual(); - eq[5][i].in[0] <== in[i]; - eq[5][i].in[1] <== 5; - eq[6][i] = IsEqual(); - eq[6][i].in[0] <== in[i]; - eq[6][i].in[1] <== 6; - eq[7][i] = IsEqual(); - eq[7][i].in[0] <== in[i]; - eq[7][i].in[1] <== 7; - eq[8][i] = IsEqual(); - eq[8][i].in[0] <== in[i]; - eq[8][i].in[1] <== 8; - eq[9][i] = IsEqual(); - eq[9][i].in[0] <== in[i]; - eq[9][i].in[1] <== 9; - and[2][i] = AND(); - and[2][i].a <== 1; - multi_or[0][i] = MultiOR(12); - multi_or[0][i].in[0] <== and[0][i].out; - multi_or[0][i].in[1] <== and[1][i].out; - multi_or[0][i].in[2] <== eq[0][i].out; - multi_or[0][i].in[3] <== eq[1][i].out; - multi_or[0][i].in[4] <== eq[2][i].out; - multi_or[0][i].in[5] <== eq[3][i].out; - multi_or[0][i].in[6] <== eq[4][i].out; - multi_or[0][i].in[7] <== eq[5][i].out; - multi_or[0][i].in[8] <== eq[6][i].out; - multi_or[0][i].in[9] <== eq[7][i].out; - multi_or[0][i].in[10] <== eq[8][i].out; - multi_or[0][i].in[11] <== eq[9][i].out; - and[2][i].b <== multi_or[0][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] <== 191; - and[3][i] = AND(); - and[3][i].a <== lt[4][i].out; - and[3][i].b <== lt[5][i].out; - and[4][i] = AND(); - and[4][i].a <== states[i][1]; - and[4][i].b <== and[3][i].out; - states_tmp[i+1][0] <== and[4][i].out; - lt[6][i] = LessEqThan(8); - lt[6][i].in[0] <== 194; - lt[6][i].in[1] <== in[i]; - lt[7][i] = LessEqThan(8); - lt[7][i].in[0] <== in[i]; - lt[7][i].in[1] <== 223; - and[5][i] = AND(); - and[5][i].a <== lt[6][i].out; - and[5][i].b <== lt[7][i].out; - and[6][i] = AND(); - and[6][i].a <== 1; - and[6][i].b <== and[5][i].out; - lt[8][i] = LessEqThan(8); - lt[8][i].in[0] <== 160; - 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[7][i] = AND(); - and[7][i].a <== lt[8][i].out; - and[7][i].b <== lt[9][i].out; - and[8][i] = AND(); - and[8][i].a <== states[i][2]; - and[8][i].b <== and[7][i].out; - and[9][i] = AND(); - and[9][i].a <== states[i][3]; - and[9][i].b <== and[3][i].out; - lt[10][i] = LessEqThan(8); - lt[10][i].in[0] <== 128; - lt[10][i].in[1] <== in[i]; - lt[11][i] = LessEqThan(8); - lt[11][i].in[0] <== in[i]; - lt[11][i].in[1] <== 159; - 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][4]; - and[11][i].b <== and[10][i].out; - multi_or[1][i] = MultiOR(3); - multi_or[1][i].in[0] <== and[8][i].out; - multi_or[1][i].in[1] <== and[9][i].out; - multi_or[1][i].in[2] <== and[11][i].out; - states_tmp[i+1][1] <== multi_or[1][i].out; - eq[10][i] = IsEqual(); - eq[10][i].in[0] <== in[i]; - eq[10][i].in[1] <== 224; - and[12][i] = AND(); - and[12][i].a <== 1; - and[12][i].b <== eq[10][i].out; - states_tmp[i+1][2] <== 0; - eq[11][i] = IsEqual(); - eq[11][i].in[0] <== in[i]; - eq[11][i].in[1] <== 225; - eq[12][i] = IsEqual(); - eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 226; - eq[13][i] = IsEqual(); - eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 227; - eq[14][i] = IsEqual(); - eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 228; - eq[15][i] = IsEqual(); - eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 229; - eq[16][i] = IsEqual(); - eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 230; - eq[17][i] = IsEqual(); - eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 231; - eq[18][i] = IsEqual(); - eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 232; - eq[19][i] = IsEqual(); - eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 233; - eq[20][i] = IsEqual(); - eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 234; - eq[21][i] = IsEqual(); - eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 235; - eq[22][i] = IsEqual(); - eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 236; - eq[23][i] = IsEqual(); - eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 238; - eq[24][i] = IsEqual(); - eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 239; - and[13][i] = AND(); - and[13][i].a <== 1; - multi_or[2][i] = MultiOR(14); - multi_or[2][i].in[0] <== eq[11][i].out; - multi_or[2][i].in[1] <== eq[12][i].out; - multi_or[2][i].in[2] <== eq[13][i].out; - multi_or[2][i].in[3] <== eq[14][i].out; - multi_or[2][i].in[4] <== eq[15][i].out; - multi_or[2][i].in[5] <== eq[16][i].out; - multi_or[2][i].in[6] <== eq[17][i].out; - multi_or[2][i].in[7] <== eq[18][i].out; - multi_or[2][i].in[8] <== eq[19][i].out; - multi_or[2][i].in[9] <== eq[20][i].out; - multi_or[2][i].in[10] <== eq[21][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[24][i].out; - and[13][i].b <== multi_or[2][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[14][i] = AND(); - and[14][i].a <== lt[12][i].out; - and[14][i].b <== lt[13][i].out; - and[15][i] = AND(); - and[15][i].a <== states[i][5]; - and[15][i].b <== and[14][i].out; - and[16][i] = AND(); - and[16][i].a <== states[i][6]; - and[16][i].b <== and[3][i].out; - eq[25][i] = IsEqual(); - eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 128; - eq[26][i] = IsEqual(); - eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 129; - eq[27][i] = IsEqual(); - eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 130; - eq[28][i] = IsEqual(); - eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 131; - eq[29][i] = IsEqual(); - eq[29][i].in[0] <== in[i]; - 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] <== 134; - eq[32][i] = IsEqual(); - eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 135; - eq[33][i] = IsEqual(); - eq[33][i].in[0] <== in[i]; - eq[33][i].in[1] <== 136; - eq[34][i] = IsEqual(); - eq[34][i].in[0] <== in[i]; - eq[34][i].in[1] <== 137; - eq[35][i] = IsEqual(); - eq[35][i].in[0] <== in[i]; - eq[35][i].in[1] <== 138; - eq[36][i] = IsEqual(); - eq[36][i].in[0] <== in[i]; - eq[36][i].in[1] <== 139; - eq[37][i] = IsEqual(); - eq[37][i].in[0] <== in[i]; - eq[37][i].in[1] <== 140; - eq[38][i] = IsEqual(); - eq[38][i].in[0] <== in[i]; - eq[38][i].in[1] <== 141; - eq[39][i] = IsEqual(); - eq[39][i].in[0] <== in[i]; - eq[39][i].in[1] <== 142; - eq[40][i] = IsEqual(); - eq[40][i].in[0] <== in[i]; - eq[40][i].in[1] <== 143; - and[17][i] = AND(); - and[17][i].a <== states[i][7]; - multi_or[3][i] = MultiOR(16); - multi_or[3][i].in[0] <== eq[25][i].out; - multi_or[3][i].in[1] <== eq[26][i].out; - multi_or[3][i].in[2] <== eq[27][i].out; - multi_or[3][i].in[3] <== eq[28][i].out; - multi_or[3][i].in[4] <== eq[29][i].out; - multi_or[3][i].in[5] <== eq[30][i].out; - multi_or[3][i].in[6] <== eq[31][i].out; - multi_or[3][i].in[7] <== eq[32][i].out; - multi_or[3][i].in[8] <== eq[33][i].out; - multi_or[3][i].in[9] <== eq[34][i].out; - multi_or[3][i].in[10] <== eq[35][i].out; - multi_or[3][i].in[11] <== eq[36][i].out; - multi_or[3][i].in[12] <== eq[37][i].out; - multi_or[3][i].in[13] <== eq[38][i].out; - multi_or[3][i].in[14] <== eq[39][i].out; - multi_or[3][i].in[15] <== eq[40][i].out; - and[17][i].b <== multi_or[3][i].out; - multi_or[4][i] = MultiOR(3); - multi_or[4][i].in[0] <== and[15][i].out; - multi_or[4][i].in[1] <== and[16][i].out; - multi_or[4][i].in[2] <== and[17][i].out; - states_tmp[i+1][3] <== multi_or[4][i].out; - eq[41][i] = IsEqual(); - eq[41][i].in[0] <== in[i]; - eq[41][i].in[1] <== 237; - and[18][i] = AND(); - and[18][i].a <== 1; - and[18][i].b <== eq[41][i].out; - states_tmp[i+1][4] <== 0; - eq[42][i] = IsEqual(); - eq[42][i].in[0] <== in[i]; - eq[42][i].in[1] <== 240; - and[19][i] = AND(); - and[19][i].a <== 1; - and[19][i].b <== eq[42][i].out; - states_tmp[i+1][5] <== 0; - eq[43][i] = IsEqual(); - eq[43][i].in[0] <== in[i]; - 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] <== 243; - and[20][i] = AND(); - and[20][i].a <== 1; - multi_or[5][i] = MultiOR(3); - multi_or[5][i].in[0] <== eq[43][i].out; - multi_or[5][i].in[1] <== eq[44][i].out; - multi_or[5][i].in[2] <== eq[45][i].out; - and[20][i].b <== multi_or[5][i].out; - states_tmp[i+1][6] <== 0; - eq[46][i] = IsEqual(); - eq[46][i].in[0] <== in[i]; - eq[46][i].in[1] <== 244; - and[21][i] = AND(); - and[21][i].a <== 1; - and[21][i].b <== eq[46][i].out; - states_tmp[i+1][7] <== 0; - eq[47][i] = IsEqual(); - eq[47][i].in[0] <== in[i]; - eq[47][i].in[1] <== 98; - and[22][i] = AND(); - and[22][i].a <== 1; - and[22][i].b <== eq[47][i].out; - states_tmp[i+1][8] <== 0; - from_zero_enabled[i] <== MultiNOR(8)([states_tmp[i+1][1], states_tmp[i+1][2], states_tmp[i+1][3], states_tmp[i+1][4], states_tmp[i+1][5], states_tmp[i+1][6], states_tmp[i+1][7], states_tmp[i+1][8]]); - states[i+1][0] <== MultiOR(2)([states_tmp[i+1][0], from_zero_enabled[i] * and[2][i].out]); - states[i+1][1] <== MultiOR(2)([states_tmp[i+1][1], from_zero_enabled[i] * and[6][i].out]); - states[i+1][2] <== MultiOR(2)([states_tmp[i+1][2], from_zero_enabled[i] * and[12][i].out]); - states[i+1][3] <== MultiOR(2)([states_tmp[i+1][3], from_zero_enabled[i] * and[13][i].out]); - states[i+1][4] <== MultiOR(2)([states_tmp[i+1][4], from_zero_enabled[i] * and[18][i].out]); - states[i+1][5] <== MultiOR(2)([states_tmp[i+1][5], from_zero_enabled[i] * and[19][i].out]); - states[i+1][6] <== MultiOR(2)([states_tmp[i+1][6], from_zero_enabled[i] * and[20][i].out]); - states[i+1][7] <== MultiOR(2)([states_tmp[i+1][7], from_zero_enabled[i] * and[21][i].out]); - states[i+1][8] <== MultiOR(2)([states_tmp[i+1][8], from_zero_enabled[i] * and[22][i].out]); - state_changed[i].in[0] <== states[i+1][1]; - state_changed[i].in[1] <== states[i+1][2]; - state_changed[i].in[2] <== states[i+1][3]; - state_changed[i].in[3] <== states[i+1][4]; - state_changed[i].in[4] <== states[i+1][5]; - state_changed[i].in[5] <== states[i+1][6]; - state_changed[i].in[6] <== states[i+1][7]; - state_changed[i].in[7] <== states[i+1][8]; - } - - component final_state_result = MultiOR(num_bytes+1); - for (var i = 0; i <= num_bytes; i++) { - final_state_result.in[i] <== states[i][8]; - } - out <== final_state_result.out; - signal is_consecutive[msg_bytes+1][3]; - is_consecutive[msg_bytes][2] <== 0; - for (var i = 0; i < msg_bytes; i++) { - is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][8] * (1 - is_consecutive[msg_bytes-i][2]) + is_consecutive[msg_bytes-i][2]; - is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; - is_consecutive[msg_bytes-1-i][2] <== ORAnd()([(1 - from_zero_enabled[msg_bytes-i+1]), states[num_bytes-i][8], is_consecutive[msg_bytes-1-i][1]]); - } - // substrings calculated: [{(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (1, 0), (2, 1), (3, 1), (4, 1), (5, 3), (6, 3), (7, 3)}] - signal is_substr0[msg_bytes]; - signal is_reveal0[msg_bytes]; - signal output reveal0[msg_bytes]; - for (var i = 0; i < msg_bytes; i++) { - // the 0-th substring transitions: [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (1, 0), (2, 1), (3, 1), (4, 1), (5, 3), (6, 3), (7, 3)] - is_substr0[i] <== MultiOR(15)([states[i+1][0] * states[i+2][0], states[i+1][0] * states[i+2][1], states[i+1][0] * states[i+2][2], states[i+1][0] * states[i+2][3], states[i+1][0] * states[i+2][4], states[i+1][0] * states[i+2][5], states[i+1][0] * states[i+2][6], states[i+1][0] * states[i+2][7], states[i+1][1] * states[i+2][0], states[i+1][2] * states[i+2][1], states[i+1][3] * states[i+2][1], states[i+1][4] * states[i+2][1], states[i+1][5] * states[i+2][3], states[i+1][6] * states[i+2][3], states[i+1][7] * states[i+2][3]]); - is_reveal0[i] <== is_substr0[i] * is_consecutive[i][2]; - reveal0[i] <== in[i+1] * is_reveal0[i]; - } -} \ No newline at end of file diff --git a/packages/circom/tests/circuits/asterisk5.json b/packages/circom/tests/circuits/asterisk5.json deleted file mode 100644 index 0115daa..0000000 --- a/packages/circom/tests/circuits/asterisk5.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parts": [ - { - "is_public": false, - "regex_def": "a" - }, - { - "is_public": true, - "regex_def": ".*" - } - ] -} \ No newline at end of file diff --git a/packages/circom/tests/circuits/asterisk5_regex.circom b/packages/circom/tests/circuits/asterisk5_regex.circom deleted file mode 100644 index bf194a8..0000000 --- a/packages/circom/tests/circuits/asterisk5_regex.circom +++ /dev/null @@ -1,383 +0,0 @@ -pragma circom 2.1.5; - -include "@zk-email/zk-regex-circom/circuits/regex_helpers.circom"; - -// regex: a.* -template Asterisk5Regex(msg_bytes) { - signal input msg[msg_bytes]; - signal output out; - - var num_bytes = msg_bytes+1; - signal in[num_bytes]; - in[0]<==255; - for (var i = 0; i < msg_bytes; i++) { - in[i+1] <== msg[i]; - } - - component eq[48][num_bytes]; - component lt[12][num_bytes]; - component and[22][num_bytes]; - component multi_or[7][num_bytes]; - signal states[num_bytes+1][9]; - signal states_tmp[num_bytes+1][9]; - signal from_zero_enabled[num_bytes+1]; - from_zero_enabled[num_bytes] <== 0; - component state_changed[num_bytes]; - - for (var i = 1; i < 9; i++) { - states[0][i] <== 0; - } - - for (var i = 0; i < num_bytes; i++) { - state_changed[i] = MultiOR(8); - states[i+1][0] <== 0; - eq[0][i] = IsEqual(); - eq[0][i].in[0] <== in[i]; - eq[0][i].in[1] <== 97; - and[0][i] = AND(); - and[0][i].a <== 1; - and[0][i].b <== eq[0][i].out; - lt[0][i] = LessEqThan(8); - lt[0][i].in[0] <== 11; - lt[0][i].in[1] <== in[i]; - lt[1][i] = LessEqThan(8); - lt[1][i].in[0] <== in[i]; - lt[1][i].in[1] <== 127; - and[1][i] = AND(); - and[1][i].a <== lt[0][i].out; - and[1][i].b <== lt[1][i].out; - eq[1][i] = IsEqual(); - eq[1][i].in[0] <== in[i]; - eq[1][i].in[1] <== 0; - eq[2][i] = IsEqual(); - eq[2][i].in[0] <== in[i]; - eq[2][i].in[1] <== 1; - eq[3][i] = IsEqual(); - eq[3][i].in[0] <== in[i]; - eq[3][i].in[1] <== 2; - eq[4][i] = IsEqual(); - eq[4][i].in[0] <== in[i]; - eq[4][i].in[1] <== 3; - eq[5][i] = IsEqual(); - eq[5][i].in[0] <== in[i]; - eq[5][i].in[1] <== 4; - eq[6][i] = IsEqual(); - eq[6][i].in[0] <== in[i]; - eq[6][i].in[1] <== 5; - eq[7][i] = IsEqual(); - eq[7][i].in[0] <== in[i]; - eq[7][i].in[1] <== 6; - eq[8][i] = IsEqual(); - eq[8][i].in[0] <== in[i]; - eq[8][i].in[1] <== 7; - eq[9][i] = IsEqual(); - eq[9][i].in[0] <== in[i]; - eq[9][i].in[1] <== 8; - eq[10][i] = IsEqual(); - eq[10][i].in[0] <== in[i]; - eq[10][i].in[1] <== 9; - and[2][i] = AND(); - and[2][i].a <== states[i][1]; - multi_or[0][i] = MultiOR(11); - multi_or[0][i].in[0] <== and[1][i].out; - multi_or[0][i].in[1] <== eq[1][i].out; - multi_or[0][i].in[2] <== eq[2][i].out; - multi_or[0][i].in[3] <== eq[3][i].out; - multi_or[0][i].in[4] <== eq[4][i].out; - multi_or[0][i].in[5] <== eq[5][i].out; - multi_or[0][i].in[6] <== eq[6][i].out; - multi_or[0][i].in[7] <== eq[7][i].out; - multi_or[0][i].in[8] <== eq[8][i].out; - multi_or[0][i].in[9] <== eq[9][i].out; - multi_or[0][i].in[10] <== eq[10][i].out; - and[2][i].b <== multi_or[0][i].out; - lt[2][i] = LessEqThan(8); - lt[2][i].in[0] <== 128; - 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[3][i] = AND(); - and[3][i].a <== lt[2][i].out; - and[3][i].b <== lt[3][i].out; - and[4][i] = AND(); - and[4][i].a <== states[i][2]; - and[4][i].b <== and[3][i].out; - multi_or[1][i] = MultiOR(2); - multi_or[1][i].in[0] <== and[2][i].out; - multi_or[1][i].in[1] <== and[4][i].out; - states_tmp[i+1][1] <== multi_or[1][i].out; - lt[4][i] = LessEqThan(8); - lt[4][i].in[0] <== 194; - 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; - and[5][i] = AND(); - and[5][i].a <== lt[4][i].out; - and[5][i].b <== lt[5][i].out; - and[6][i] = AND(); - and[6][i].a <== states[i][1]; - and[6][i].b <== and[5][i].out; - lt[6][i] = LessEqThan(8); - lt[6][i].in[0] <== 160; - 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; - and[7][i] = AND(); - and[7][i].a <== lt[6][i].out; - and[7][i].b <== lt[7][i].out; - and[8][i] = AND(); - and[8][i].a <== states[i][3]; - and[8][i].b <== and[7][i].out; - and[9][i] = AND(); - and[9][i].a <== states[i][4]; - and[9][i].b <== and[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] <== 159; - and[10][i] = AND(); - and[10][i].a <== lt[8][i].out; - and[10][i].b <== lt[9][i].out; - and[11][i] = AND(); - and[11][i].a <== states[i][5]; - and[11][i].b <== and[10][i].out; - multi_or[2][i] = MultiOR(4); - multi_or[2][i].in[0] <== and[6][i].out; - multi_or[2][i].in[1] <== and[8][i].out; - multi_or[2][i].in[2] <== and[9][i].out; - multi_or[2][i].in[3] <== and[11][i].out; - states[i+1][2] <== multi_or[2][i].out; - eq[11][i] = IsEqual(); - eq[11][i].in[0] <== in[i]; - eq[11][i].in[1] <== 224; - and[12][i] = AND(); - and[12][i].a <== states[i][1]; - and[12][i].b <== eq[11][i].out; - states[i+1][3] <== and[12][i].out; - eq[12][i] = IsEqual(); - eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 225; - eq[13][i] = IsEqual(); - eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 226; - eq[14][i] = IsEqual(); - eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 227; - eq[15][i] = IsEqual(); - eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 228; - eq[16][i] = IsEqual(); - eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 229; - eq[17][i] = IsEqual(); - eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 230; - eq[18][i] = IsEqual(); - eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 231; - eq[19][i] = IsEqual(); - eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 232; - eq[20][i] = IsEqual(); - eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 233; - eq[21][i] = IsEqual(); - eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 234; - eq[22][i] = IsEqual(); - eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 235; - eq[23][i] = IsEqual(); - eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 236; - eq[24][i] = IsEqual(); - eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 238; - eq[25][i] = IsEqual(); - eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 239; - and[13][i] = AND(); - and[13][i].a <== states[i][1]; - multi_or[3][i] = MultiOR(14); - multi_or[3][i].in[0] <== eq[12][i].out; - multi_or[3][i].in[1] <== eq[13][i].out; - multi_or[3][i].in[2] <== eq[14][i].out; - multi_or[3][i].in[3] <== eq[15][i].out; - multi_or[3][i].in[4] <== eq[16][i].out; - multi_or[3][i].in[5] <== eq[17][i].out; - multi_or[3][i].in[6] <== eq[18][i].out; - multi_or[3][i].in[7] <== eq[19][i].out; - multi_or[3][i].in[8] <== eq[20][i].out; - multi_or[3][i].in[9] <== eq[21][i].out; - multi_or[3][i].in[10] <== eq[22][i].out; - multi_or[3][i].in[11] <== eq[23][i].out; - multi_or[3][i].in[12] <== eq[24][i].out; - multi_or[3][i].in[13] <== eq[25][i].out; - and[13][i].b <== multi_or[3][i].out; - lt[10][i] = LessEqThan(8); - lt[10][i].in[0] <== 144; - lt[10][i].in[1] <== in[i]; - lt[11][i] = LessEqThan(8); - lt[11][i].in[0] <== in[i]; - lt[11][i].in[1] <== 191; - and[14][i] = AND(); - and[14][i].a <== lt[10][i].out; - and[14][i].b <== lt[11][i].out; - and[15][i] = AND(); - and[15][i].a <== states[i][6]; - and[15][i].b <== and[14][i].out; - and[16][i] = AND(); - and[16][i].a <== states[i][7]; - and[16][i].b <== and[3][i].out; - eq[26][i] = IsEqual(); - eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 128; - eq[27][i] = IsEqual(); - eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 129; - eq[28][i] = IsEqual(); - eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 130; - eq[29][i] = IsEqual(); - eq[29][i].in[0] <== in[i]; - eq[29][i].in[1] <== 131; - eq[30][i] = IsEqual(); - eq[30][i].in[0] <== in[i]; - eq[30][i].in[1] <== 132; - eq[31][i] = IsEqual(); - eq[31][i].in[0] <== in[i]; - eq[31][i].in[1] <== 133; - eq[32][i] = IsEqual(); - eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 134; - eq[33][i] = IsEqual(); - eq[33][i].in[0] <== in[i]; - eq[33][i].in[1] <== 135; - eq[34][i] = IsEqual(); - eq[34][i].in[0] <== in[i]; - eq[34][i].in[1] <== 136; - eq[35][i] = IsEqual(); - eq[35][i].in[0] <== in[i]; - eq[35][i].in[1] <== 137; - eq[36][i] = IsEqual(); - eq[36][i].in[0] <== in[i]; - eq[36][i].in[1] <== 138; - eq[37][i] = IsEqual(); - eq[37][i].in[0] <== in[i]; - eq[37][i].in[1] <== 139; - eq[38][i] = IsEqual(); - eq[38][i].in[0] <== in[i]; - eq[38][i].in[1] <== 140; - eq[39][i] = IsEqual(); - eq[39][i].in[0] <== in[i]; - eq[39][i].in[1] <== 141; - eq[40][i] = IsEqual(); - eq[40][i].in[0] <== in[i]; - eq[40][i].in[1] <== 142; - eq[41][i] = IsEqual(); - eq[41][i].in[0] <== in[i]; - eq[41][i].in[1] <== 143; - and[17][i] = AND(); - and[17][i].a <== states[i][8]; - multi_or[4][i] = MultiOR(16); - multi_or[4][i].in[0] <== eq[26][i].out; - multi_or[4][i].in[1] <== eq[27][i].out; - multi_or[4][i].in[2] <== eq[28][i].out; - multi_or[4][i].in[3] <== eq[29][i].out; - multi_or[4][i].in[4] <== eq[30][i].out; - multi_or[4][i].in[5] <== eq[31][i].out; - multi_or[4][i].in[6] <== eq[32][i].out; - multi_or[4][i].in[7] <== eq[33][i].out; - multi_or[4][i].in[8] <== eq[34][i].out; - multi_or[4][i].in[9] <== eq[35][i].out; - multi_or[4][i].in[10] <== eq[36][i].out; - multi_or[4][i].in[11] <== eq[37][i].out; - multi_or[4][i].in[12] <== eq[38][i].out; - multi_or[4][i].in[13] <== eq[39][i].out; - multi_or[4][i].in[14] <== eq[40][i].out; - multi_or[4][i].in[15] <== eq[41][i].out; - and[17][i].b <== multi_or[4][i].out; - multi_or[5][i] = MultiOR(4); - multi_or[5][i].in[0] <== and[13][i].out; - multi_or[5][i].in[1] <== and[15][i].out; - multi_or[5][i].in[2] <== and[16][i].out; - multi_or[5][i].in[3] <== and[17][i].out; - states[i+1][4] <== multi_or[5][i].out; - eq[42][i] = IsEqual(); - eq[42][i].in[0] <== in[i]; - eq[42][i].in[1] <== 237; - and[18][i] = AND(); - and[18][i].a <== states[i][1]; - and[18][i].b <== eq[42][i].out; - states[i+1][5] <== and[18][i].out; - eq[43][i] = IsEqual(); - eq[43][i].in[0] <== in[i]; - eq[43][i].in[1] <== 240; - and[19][i] = AND(); - and[19][i].a <== states[i][1]; - and[19][i].b <== eq[43][i].out; - states[i+1][6] <== and[19][i].out; - eq[44][i] = IsEqual(); - eq[44][i].in[0] <== in[i]; - eq[44][i].in[1] <== 241; - eq[45][i] = IsEqual(); - eq[45][i].in[0] <== in[i]; - eq[45][i].in[1] <== 242; - eq[46][i] = IsEqual(); - eq[46][i].in[0] <== in[i]; - eq[46][i].in[1] <== 243; - and[20][i] = AND(); - and[20][i].a <== states[i][1]; - multi_or[6][i] = MultiOR(3); - multi_or[6][i].in[0] <== eq[44][i].out; - multi_or[6][i].in[1] <== eq[45][i].out; - multi_or[6][i].in[2] <== eq[46][i].out; - and[20][i].b <== multi_or[6][i].out; - states[i+1][7] <== and[20][i].out; - eq[47][i] = IsEqual(); - eq[47][i].in[0] <== in[i]; - eq[47][i].in[1] <== 244; - and[21][i] = AND(); - and[21][i].a <== states[i][1]; - and[21][i].b <== eq[47][i].out; - states[i+1][8] <== and[21][i].out; - from_zero_enabled[i] <== MultiNOR(8)([states_tmp[i+1][1], states[i+1][2], states[i+1][3], states[i+1][4], states[i+1][5], states[i+1][6], states[i+1][7], states[i+1][8]]); - states[i+1][1] <== MultiOR(2)([states_tmp[i+1][1], from_zero_enabled[i] * and[0][i].out]); - state_changed[i].in[0] <== states[i+1][1]; - state_changed[i].in[1] <== states[i+1][2]; - state_changed[i].in[2] <== states[i+1][3]; - state_changed[i].in[3] <== states[i+1][4]; - state_changed[i].in[4] <== states[i+1][5]; - state_changed[i].in[5] <== states[i+1][6]; - state_changed[i].in[6] <== states[i+1][7]; - state_changed[i].in[7] <== states[i+1][8]; - } - - component final_state_result = MultiOR(num_bytes+1); - for (var i = 0; i <= num_bytes; i++) { - final_state_result.in[i] <== states[i][1]; - } - out <== final_state_result.out; - signal is_consecutive[msg_bytes+1][3]; - is_consecutive[msg_bytes][2] <== 0; - for (var i = 0; i < msg_bytes; i++) { - is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][1] * (1 - is_consecutive[msg_bytes-i][2]) + is_consecutive[msg_bytes-i][2]; - is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; - is_consecutive[msg_bytes-1-i][2] <== ORAnd()([(1 - from_zero_enabled[msg_bytes-i+1]), states[num_bytes-i][1], is_consecutive[msg_bytes-1-i][1]]); - } - // substrings calculated: [{(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (2, 1), (3, 2), (4, 2), (5, 2), (6, 4), (7, 4), (8, 4)}] - signal is_substr0[msg_bytes]; - signal is_reveal0[msg_bytes]; - signal output reveal0[msg_bytes]; - for (var i = 0; i < msg_bytes; i++) { - // the 0-th substring transitions: [(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (2, 1), (3, 2), (4, 2), (5, 2), (6, 4), (7, 4), (8, 4)] - is_substr0[i] <== MultiOR(15)([states[i+1][1] * states[i+2][1], states[i+1][1] * states[i+2][2], states[i+1][1] * states[i+2][3], states[i+1][1] * states[i+2][4], states[i+1][1] * states[i+2][5], states[i+1][1] * states[i+2][6], states[i+1][1] * states[i+2][7], states[i+1][1] * states[i+2][8], states[i+1][2] * states[i+2][1], states[i+1][3] * states[i+2][2], states[i+1][4] * states[i+2][2], states[i+1][5] * states[i+2][2], states[i+1][6] * states[i+2][4], states[i+1][7] * states[i+2][4], states[i+1][8] * states[i+2][4]]); - is_reveal0[i] <== is_substr0[i] * is_consecutive[i][2]; - reveal0[i] <== in[i+1] * is_reveal0[i]; - } -} \ No newline at end of file diff --git a/packages/circom/tests/circuits/asterisk6.json b/packages/circom/tests/circuits/asterisk6.json deleted file mode 100644 index fdbde57..0000000 --- a/packages/circom/tests/circuits/asterisk6.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parts": [ - { - "is_public": true, - "regex_def": ".*" - } - ] -} \ No newline at end of file diff --git a/packages/circom/tests/circuits/asterisk6_regex.circom b/packages/circom/tests/circuits/asterisk6_regex.circom deleted file mode 100644 index 19afede..0000000 --- a/packages/circom/tests/circuits/asterisk6_regex.circom +++ /dev/null @@ -1,377 +0,0 @@ -pragma circom 2.1.5; - -include "@zk-email/zk-regex-circom/circuits/regex_helpers.circom"; - -// regex: .* -template Asterisk6Regex(msg_bytes) { - signal input msg[msg_bytes]; - signal output out; - - var num_bytes = msg_bytes+1; - signal in[num_bytes]; - in[0]<==255; - for (var i = 0; i < msg_bytes; i++) { - in[i+1] <== msg[i]; - } - - component eq[47][num_bytes]; - component lt[12][num_bytes]; - component and[21][num_bytes]; - component multi_or[6][num_bytes]; - signal states[num_bytes+1][8]; - signal states_tmp[num_bytes+1][8]; - signal from_zero_enabled[num_bytes+1]; - from_zero_enabled[num_bytes] <== 0; - component state_changed[num_bytes]; - - for (var i = 1; i < 8; i++) { - states[0][i] <== 0; - } - - for (var i = 0; i < num_bytes; i++) { - state_changed[i] = MultiOR(7); - lt[0][i] = LessEqThan(8); - lt[0][i].in[0] <== 11; - lt[0][i].in[1] <== in[i]; - lt[1][i] = LessEqThan(8); - lt[1][i].in[0] <== in[i]; - lt[1][i].in[1] <== 127; - and[0][i] = AND(); - and[0][i].a <== lt[0][i].out; - and[0][i].b <== lt[1][i].out; - eq[0][i] = IsEqual(); - eq[0][i].in[0] <== in[i]; - eq[0][i].in[1] <== 0; - eq[1][i] = IsEqual(); - eq[1][i].in[0] <== in[i]; - eq[1][i].in[1] <== 1; - eq[2][i] = IsEqual(); - eq[2][i].in[0] <== in[i]; - eq[2][i].in[1] <== 2; - eq[3][i] = IsEqual(); - eq[3][i].in[0] <== in[i]; - eq[3][i].in[1] <== 3; - eq[4][i] = IsEqual(); - eq[4][i].in[0] <== in[i]; - eq[4][i].in[1] <== 4; - eq[5][i] = IsEqual(); - eq[5][i].in[0] <== in[i]; - eq[5][i].in[1] <== 5; - eq[6][i] = IsEqual(); - eq[6][i].in[0] <== in[i]; - eq[6][i].in[1] <== 6; - eq[7][i] = IsEqual(); - eq[7][i].in[0] <== in[i]; - eq[7][i].in[1] <== 7; - eq[8][i] = IsEqual(); - eq[8][i].in[0] <== in[i]; - eq[8][i].in[1] <== 8; - eq[9][i] = IsEqual(); - eq[9][i].in[0] <== in[i]; - eq[9][i].in[1] <== 9; - and[1][i] = AND(); - and[1][i].a <== 1; - multi_or[0][i] = MultiOR(11); - multi_or[0][i].in[0] <== and[0][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; - multi_or[0][i].in[4] <== eq[3][i].out; - multi_or[0][i].in[5] <== eq[4][i].out; - 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; - multi_or[0][i].in[9] <== eq[8][i].out; - multi_or[0][i].in[10] <== eq[9][i].out; - and[1][i].b <== multi_or[0][i].out; - lt[2][i] = LessEqThan(8); - lt[2][i].in[0] <== 128; - 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[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][1]; - and[3][i].b <== and[2][i].out; - states_tmp[i+1][0] <== and[3][i].out; - lt[4][i] = LessEqThan(8); - lt[4][i].in[0] <== 194; - 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; - and[4][i] = AND(); - and[4][i].a <== lt[4][i].out; - and[4][i].b <== lt[5][i].out; - and[5][i] = AND(); - and[5][i].a <== 1; - and[5][i].b <== and[4][i].out; - lt[6][i] = LessEqThan(8); - lt[6][i].in[0] <== 160; - 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; - and[6][i] = AND(); - and[6][i].a <== lt[6][i].out; - and[6][i].b <== lt[7][i].out; - and[7][i] = AND(); - and[7][i].a <== states[i][2]; - and[7][i].b <== and[6][i].out; - and[8][i] = AND(); - and[8][i].a <== states[i][3]; - and[8][i].b <== and[2][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] <== 159; - and[9][i] = AND(); - and[9][i].a <== lt[8][i].out; - and[9][i].b <== lt[9][i].out; - and[10][i] = AND(); - and[10][i].a <== states[i][4]; - and[10][i].b <== and[9][i].out; - multi_or[1][i] = MultiOR(3); - multi_or[1][i].in[0] <== and[7][i].out; - multi_or[1][i].in[1] <== and[8][i].out; - multi_or[1][i].in[2] <== and[10][i].out; - states_tmp[i+1][1] <== multi_or[1][i].out; - eq[10][i] = IsEqual(); - eq[10][i].in[0] <== in[i]; - eq[10][i].in[1] <== 224; - and[11][i] = AND(); - and[11][i].a <== 1; - and[11][i].b <== eq[10][i].out; - states_tmp[i+1][2] <== 0; - eq[11][i] = IsEqual(); - eq[11][i].in[0] <== in[i]; - eq[11][i].in[1] <== 225; - eq[12][i] = IsEqual(); - eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 226; - eq[13][i] = IsEqual(); - eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 227; - eq[14][i] = IsEqual(); - eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 228; - eq[15][i] = IsEqual(); - eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 229; - eq[16][i] = IsEqual(); - eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 230; - eq[17][i] = IsEqual(); - eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 231; - eq[18][i] = IsEqual(); - eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 232; - eq[19][i] = IsEqual(); - eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 233; - eq[20][i] = IsEqual(); - eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 234; - eq[21][i] = IsEqual(); - eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 235; - eq[22][i] = IsEqual(); - eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 236; - eq[23][i] = IsEqual(); - eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 238; - eq[24][i] = IsEqual(); - eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 239; - and[12][i] = AND(); - and[12][i].a <== 1; - multi_or[2][i] = MultiOR(14); - multi_or[2][i].in[0] <== eq[11][i].out; - multi_or[2][i].in[1] <== eq[12][i].out; - multi_or[2][i].in[2] <== eq[13][i].out; - multi_or[2][i].in[3] <== eq[14][i].out; - multi_or[2][i].in[4] <== eq[15][i].out; - multi_or[2][i].in[5] <== eq[16][i].out; - multi_or[2][i].in[6] <== eq[17][i].out; - multi_or[2][i].in[7] <== eq[18][i].out; - multi_or[2][i].in[8] <== eq[19][i].out; - multi_or[2][i].in[9] <== eq[20][i].out; - multi_or[2][i].in[10] <== eq[21][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[24][i].out; - and[12][i].b <== multi_or[2][i].out; - lt[10][i] = LessEqThan(8); - lt[10][i].in[0] <== 144; - lt[10][i].in[1] <== in[i]; - lt[11][i] = LessEqThan(8); - lt[11][i].in[0] <== in[i]; - lt[11][i].in[1] <== 191; - and[13][i] = AND(); - and[13][i].a <== lt[10][i].out; - and[13][i].b <== lt[11][i].out; - and[14][i] = AND(); - and[14][i].a <== states[i][5]; - and[14][i].b <== and[13][i].out; - and[15][i] = AND(); - and[15][i].a <== states[i][6]; - and[15][i].b <== and[2][i].out; - eq[25][i] = IsEqual(); - eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 128; - eq[26][i] = IsEqual(); - eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 129; - eq[27][i] = IsEqual(); - eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 130; - eq[28][i] = IsEqual(); - eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 131; - eq[29][i] = IsEqual(); - eq[29][i].in[0] <== in[i]; - 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] <== 134; - eq[32][i] = IsEqual(); - eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 135; - eq[33][i] = IsEqual(); - eq[33][i].in[0] <== in[i]; - eq[33][i].in[1] <== 136; - eq[34][i] = IsEqual(); - eq[34][i].in[0] <== in[i]; - eq[34][i].in[1] <== 137; - eq[35][i] = IsEqual(); - eq[35][i].in[0] <== in[i]; - eq[35][i].in[1] <== 138; - eq[36][i] = IsEqual(); - eq[36][i].in[0] <== in[i]; - eq[36][i].in[1] <== 139; - eq[37][i] = IsEqual(); - eq[37][i].in[0] <== in[i]; - eq[37][i].in[1] <== 140; - eq[38][i] = IsEqual(); - eq[38][i].in[0] <== in[i]; - eq[38][i].in[1] <== 141; - eq[39][i] = IsEqual(); - eq[39][i].in[0] <== in[i]; - eq[39][i].in[1] <== 142; - eq[40][i] = IsEqual(); - eq[40][i].in[0] <== in[i]; - eq[40][i].in[1] <== 143; - and[16][i] = AND(); - and[16][i].a <== states[i][7]; - multi_or[3][i] = MultiOR(16); - multi_or[3][i].in[0] <== eq[25][i].out; - multi_or[3][i].in[1] <== eq[26][i].out; - multi_or[3][i].in[2] <== eq[27][i].out; - multi_or[3][i].in[3] <== eq[28][i].out; - multi_or[3][i].in[4] <== eq[29][i].out; - multi_or[3][i].in[5] <== eq[30][i].out; - multi_or[3][i].in[6] <== eq[31][i].out; - multi_or[3][i].in[7] <== eq[32][i].out; - multi_or[3][i].in[8] <== eq[33][i].out; - multi_or[3][i].in[9] <== eq[34][i].out; - multi_or[3][i].in[10] <== eq[35][i].out; - multi_or[3][i].in[11] <== eq[36][i].out; - multi_or[3][i].in[12] <== eq[37][i].out; - multi_or[3][i].in[13] <== eq[38][i].out; - multi_or[3][i].in[14] <== eq[39][i].out; - multi_or[3][i].in[15] <== eq[40][i].out; - and[16][i].b <== multi_or[3][i].out; - multi_or[4][i] = MultiOR(3); - multi_or[4][i].in[0] <== and[14][i].out; - multi_or[4][i].in[1] <== and[15][i].out; - multi_or[4][i].in[2] <== and[16][i].out; - states_tmp[i+1][3] <== multi_or[4][i].out; - eq[41][i] = IsEqual(); - eq[41][i].in[0] <== in[i]; - eq[41][i].in[1] <== 237; - and[17][i] = AND(); - and[17][i].a <== 1; - and[17][i].b <== eq[41][i].out; - states_tmp[i+1][4] <== 0; - eq[42][i] = IsEqual(); - eq[42][i].in[0] <== in[i]; - eq[42][i].in[1] <== 240; - and[18][i] = AND(); - and[18][i].a <== 1; - and[18][i].b <== eq[42][i].out; - states_tmp[i+1][5] <== 0; - eq[43][i] = IsEqual(); - eq[43][i].in[0] <== in[i]; - 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] <== 243; - and[19][i] = AND(); - and[19][i].a <== 1; - multi_or[5][i] = MultiOR(3); - multi_or[5][i].in[0] <== eq[43][i].out; - multi_or[5][i].in[1] <== eq[44][i].out; - multi_or[5][i].in[2] <== eq[45][i].out; - and[19][i].b <== multi_or[5][i].out; - states_tmp[i+1][6] <== 0; - eq[46][i] = IsEqual(); - eq[46][i].in[0] <== in[i]; - eq[46][i].in[1] <== 244; - and[20][i] = AND(); - and[20][i].a <== 1; - and[20][i].b <== eq[46][i].out; - states_tmp[i+1][7] <== 0; - from_zero_enabled[i] <== MultiNOR(7)([states_tmp[i+1][1], states_tmp[i+1][2], states_tmp[i+1][3], states_tmp[i+1][4], states_tmp[i+1][5], states_tmp[i+1][6], states_tmp[i+1][7]]); - states[i+1][0] <== MultiOR(2)([states_tmp[i+1][0], from_zero_enabled[i] * and[1][i].out]); - states[i+1][1] <== MultiOR(2)([states_tmp[i+1][1], from_zero_enabled[i] * and[5][i].out]); - states[i+1][2] <== MultiOR(2)([states_tmp[i+1][2], from_zero_enabled[i] * and[11][i].out]); - states[i+1][3] <== MultiOR(2)([states_tmp[i+1][3], from_zero_enabled[i] * and[12][i].out]); - states[i+1][4] <== MultiOR(2)([states_tmp[i+1][4], from_zero_enabled[i] * and[17][i].out]); - states[i+1][5] <== MultiOR(2)([states_tmp[i+1][5], from_zero_enabled[i] * and[18][i].out]); - states[i+1][6] <== MultiOR(2)([states_tmp[i+1][6], from_zero_enabled[i] * and[19][i].out]); - states[i+1][7] <== MultiOR(2)([states_tmp[i+1][7], from_zero_enabled[i] * and[20][i].out]); - state_changed[i].in[0] <== states[i+1][1]; - state_changed[i].in[1] <== states[i+1][2]; - state_changed[i].in[2] <== states[i+1][3]; - state_changed[i].in[3] <== states[i+1][4]; - state_changed[i].in[4] <== states[i+1][5]; - state_changed[i].in[5] <== states[i+1][6]; - state_changed[i].in[6] <== states[i+1][7]; - } - - component final_state_result = MultiOR(num_bytes+1); - for (var i = 0; i <= num_bytes; i++) { - final_state_result.in[i] <== states[i][0]; - } - out <== final_state_result.out; - signal is_consecutive[msg_bytes+1][3]; - is_consecutive[msg_bytes][2] <== 0; - for (var i = 0; i < msg_bytes; i++) { - is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][0] * (1 - is_consecutive[msg_bytes-i][2]) + is_consecutive[msg_bytes-i][2]; - is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; - is_consecutive[msg_bytes-1-i][2] <== ORAnd()([(1 - from_zero_enabled[msg_bytes-i+1]), states[num_bytes-i][0], is_consecutive[msg_bytes-1-i][1]]); - } - // substrings calculated: [{(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (1, 0), (2, 1), (3, 1), (4, 1), (5, 3), (6, 3), (7, 3)}] - signal is_substr0[msg_bytes]; - signal is_reveal0[msg_bytes]; - signal output reveal0[msg_bytes]; - for (var i = 0; i < msg_bytes; i++) { - // the 0-th substring transitions: [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (1, 0), (2, 1), (3, 1), (4, 1), (5, 3), (6, 3), (7, 3)] - is_substr0[i] <== MultiOR(15)([states[i+1][0] * states[i+2][0], states[i+1][0] * states[i+2][1], states[i+1][0] * states[i+2][2], states[i+1][0] * states[i+2][3], states[i+1][0] * states[i+2][4], states[i+1][0] * states[i+2][5], states[i+1][0] * states[i+2][6], states[i+1][0] * states[i+2][7], states[i+1][1] * states[i+2][0], states[i+1][2] * states[i+2][1], states[i+1][3] * states[i+2][1], states[i+1][4] * states[i+2][1], states[i+1][5] * states[i+2][3], states[i+1][6] * states[i+2][3], states[i+1][7] * states[i+2][3]]); - is_reveal0[i] <== is_substr0[i] * is_consecutive[i][2]; - reveal0[i] <== in[i+1] * is_reveal0[i]; - } -} \ No newline at end of file diff --git a/packages/circom/tests/circuits/plus5.json b/packages/circom/tests/circuits/plus5.json deleted file mode 100644 index 7062525..0000000 --- a/packages/circom/tests/circuits/plus5.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "parts": [ - { - "is_public": false, - "regex_def": "a" - }, - { - "is_public": true, - "regex_def": ".+?" - } - ] -} \ No newline at end of file diff --git a/packages/circom/tests/circuits/plus5_regex.circom b/packages/circom/tests/circuits/plus5_regex.circom deleted file mode 100644 index dfa4596..0000000 --- a/packages/circom/tests/circuits/plus5_regex.circom +++ /dev/null @@ -1,427 +0,0 @@ -pragma circom 2.1.5; - -include "@zk-email/zk-regex-circom/circuits/regex_helpers.circom"; - -// regex: a.+? -template Plus5Regex(msg_bytes) { - signal input msg[msg_bytes]; - signal output out; - - var num_bytes = msg_bytes+1; - signal in[num_bytes]; - in[0]<==255; - for (var i = 0; i < msg_bytes; i++) { - in[i+1] <== msg[i]; - } - - component eq[48][num_bytes]; - component lt[12][num_bytes]; - component and[30][num_bytes]; - component multi_or[12][num_bytes]; - signal states[num_bytes+1][10]; - signal states_tmp[num_bytes+1][10]; - signal from_zero_enabled[num_bytes+1]; - from_zero_enabled[num_bytes] <== 0; - component state_changed[num_bytes]; - - for (var i = 1; i < 10; i++) { - states[0][i] <== 0; - } - - for (var i = 0; i < num_bytes; i++) { - state_changed[i] = MultiOR(9); - states[i][0] <== 1; - eq[0][i] = IsEqual(); - eq[0][i].in[0] <== in[i]; - eq[0][i].in[1] <== 97; - and[0][i] = AND(); - and[0][i].a <== states[i][0]; - and[0][i].b <== eq[0][i].out; - states_tmp[i+1][1] <== 0; - lt[0][i] = LessEqThan(8); - 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] <== 223; - and[1][i] = AND(); - and[1][i].a <== lt[0][i].out; - and[1][i].b <== lt[1][i].out; - and[2][i] = AND(); - and[2][i].a <== states[i][1]; - and[2][i].b <== and[1][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[3][i] = AND(); - and[3][i].a <== lt[2][i].out; - and[3][i].b <== lt[3][i].out; - and[4][i] = AND(); - and[4][i].a <== states[i][3]; - and[4][i].b <== and[3][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] <== 191; - and[5][i] = AND(); - and[5][i].a <== lt[4][i].out; - and[5][i].b <== lt[5][i].out; - and[6][i] = AND(); - and[6][i].a <== states[i][4]; - and[6][i].b <== and[5][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[7][i] = AND(); - and[7][i].a <== lt[6][i].out; - and[7][i].b <== lt[7][i].out; - and[8][i] = AND(); - and[8][i].a <== states[i][5]; - and[8][i].b <== and[7][i].out; - and[9][i] = AND(); - and[9][i].a <== states[i][9]; - and[9][i].b <== and[1][i].out; - multi_or[0][i] = MultiOR(5); - multi_or[0][i].in[0] <== and[2][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[4] <== and[9][i].out; - states[i+1][2] <== multi_or[0][i].out; - eq[1][i] = IsEqual(); - eq[1][i].in[0] <== in[i]; - eq[1][i].in[1] <== 224; - and[10][i] = AND(); - and[10][i].a <== states[i][1]; - and[10][i].b <== eq[1][i].out; - and[11][i] = AND(); - and[11][i].a <== states[i][9]; - and[11][i].b <== eq[1][i].out; - multi_or[1][i] = MultiOR(2); - multi_or[1][i].in[0] <== and[10][i].out; - multi_or[1][i].in[1] <== and[11][i].out; - states[i+1][3] <== multi_or[1][i].out; - eq[2][i] = IsEqual(); - eq[2][i].in[0] <== in[i]; - eq[2][i].in[1] <== 225; - eq[3][i] = IsEqual(); - eq[3][i].in[0] <== in[i]; - eq[3][i].in[1] <== 226; - eq[4][i] = IsEqual(); - eq[4][i].in[0] <== in[i]; - eq[4][i].in[1] <== 227; - eq[5][i] = IsEqual(); - eq[5][i].in[0] <== in[i]; - eq[5][i].in[1] <== 228; - eq[6][i] = IsEqual(); - eq[6][i].in[0] <== in[i]; - eq[6][i].in[1] <== 229; - eq[7][i] = IsEqual(); - eq[7][i].in[0] <== in[i]; - eq[7][i].in[1] <== 230; - eq[8][i] = IsEqual(); - eq[8][i].in[0] <== in[i]; - eq[8][i].in[1] <== 231; - eq[9][i] = IsEqual(); - eq[9][i].in[0] <== in[i]; - eq[9][i].in[1] <== 232; - eq[10][i] = IsEqual(); - eq[10][i].in[0] <== in[i]; - eq[10][i].in[1] <== 233; - eq[11][i] = IsEqual(); - eq[11][i].in[0] <== in[i]; - eq[11][i].in[1] <== 234; - eq[12][i] = IsEqual(); - eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 235; - eq[13][i] = IsEqual(); - eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 236; - eq[14][i] = IsEqual(); - eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 238; - eq[15][i] = IsEqual(); - eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 239; - and[12][i] = AND(); - and[12][i].a <== states[i][1]; - multi_or[2][i] = MultiOR(14); - multi_or[2][i].in[0] <== eq[2][i].out; - multi_or[2][i].in[1] <== eq[3][i].out; - multi_or[2][i].in[2] <== eq[4][i].out; - multi_or[2][i].in[3] <== eq[5][i].out; - multi_or[2][i].in[4] <== eq[6][i].out; - multi_or[2][i].in[5] <== eq[7][i].out; - multi_or[2][i].in[6] <== eq[8][i].out; - multi_or[2][i].in[7] <== eq[9][i].out; - multi_or[2][i].in[8] <== eq[10][i].out; - multi_or[2][i].in[9] <== eq[11][i].out; - multi_or[2][i].in[10] <== eq[12][i].out; - multi_or[2][i].in[11] <== eq[13][i].out; - multi_or[2][i].in[12] <== eq[14][i].out; - multi_or[2][i].in[13] <== eq[15][i].out; - and[12][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[13][i] = AND(); - and[13][i].a <== lt[8][i].out; - and[13][i].b <== lt[9][i].out; - and[14][i] = AND(); - and[14][i].a <== states[i][6]; - and[14][i].b <== and[13][i].out; - and[15][i] = AND(); - and[15][i].a <== states[i][7]; - and[15][i].b <== and[5][i].out; - eq[16][i] = IsEqual(); - eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 128; - eq[17][i] = IsEqual(); - eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 129; - eq[18][i] = IsEqual(); - eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 130; - eq[19][i] = IsEqual(); - eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 131; - eq[20][i] = IsEqual(); - eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 132; - eq[21][i] = IsEqual(); - eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 133; - eq[22][i] = IsEqual(); - eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 134; - eq[23][i] = IsEqual(); - eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 135; - eq[24][i] = IsEqual(); - eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 136; - eq[25][i] = IsEqual(); - eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 137; - eq[26][i] = IsEqual(); - eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 138; - eq[27][i] = IsEqual(); - eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 139; - eq[28][i] = IsEqual(); - eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 140; - eq[29][i] = IsEqual(); - eq[29][i].in[0] <== in[i]; - eq[29][i].in[1] <== 141; - eq[30][i] = IsEqual(); - eq[30][i].in[0] <== in[i]; - eq[30][i].in[1] <== 142; - eq[31][i] = IsEqual(); - eq[31][i].in[0] <== in[i]; - eq[31][i].in[1] <== 143; - and[16][i] = AND(); - and[16][i].a <== states[i][8]; - multi_or[3][i] = MultiOR(16); - multi_or[3][i].in[0] <== eq[16][i].out; - multi_or[3][i].in[1] <== eq[17][i].out; - multi_or[3][i].in[2] <== eq[18][i].out; - multi_or[3][i].in[3] <== eq[19][i].out; - multi_or[3][i].in[4] <== eq[20][i].out; - multi_or[3][i].in[5] <== eq[21][i].out; - multi_or[3][i].in[6] <== eq[22][i].out; - multi_or[3][i].in[7] <== eq[23][i].out; - multi_or[3][i].in[8] <== eq[24][i].out; - multi_or[3][i].in[9] <== eq[25][i].out; - multi_or[3][i].in[10] <== eq[26][i].out; - multi_or[3][i].in[11] <== eq[27][i].out; - multi_or[3][i].in[12] <== eq[28][i].out; - multi_or[3][i].in[13] <== eq[29][i].out; - multi_or[3][i].in[14] <== eq[30][i].out; - multi_or[3][i].in[15] <== eq[31][i].out; - and[16][i].b <== multi_or[3][i].out; - and[17][i] = AND(); - and[17][i].a <== states[i][9]; - and[17][i].b <== multi_or[2][i].out; - multi_or[4][i] = MultiOR(5); - multi_or[4][i].in[0] <== and[12][i].out; - multi_or[4][i].in[1] <== and[14][i].out; - multi_or[4][i].in[2] <== and[15][i].out; - multi_or[4][i].in[3] <== and[16][i].out; - multi_or[4][i].in[4] <== and[17][i].out; - states[i+1][4] <== multi_or[4][i].out; - eq[32][i] = IsEqual(); - eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 237; - and[18][i] = AND(); - and[18][i].a <== states[i][1]; - and[18][i].b <== eq[32][i].out; - and[19][i] = AND(); - and[19][i].a <== states[i][9]; - and[19][i].b <== eq[32][i].out; - multi_or[5][i] = MultiOR(2); - multi_or[5][i].in[0] <== and[18][i].out; - multi_or[5][i].in[1] <== and[19][i].out; - states[i+1][5] <== multi_or[5][i].out; - eq[33][i] = IsEqual(); - eq[33][i].in[0] <== in[i]; - eq[33][i].in[1] <== 240; - and[20][i] = AND(); - and[20][i].a <== states[i][1]; - and[20][i].b <== eq[33][i].out; - and[21][i] = AND(); - and[21][i].a <== states[i][9]; - and[21][i].b <== eq[33][i].out; - multi_or[6][i] = MultiOR(2); - multi_or[6][i].in[0] <== and[20][i].out; - multi_or[6][i].in[1] <== and[21][i].out; - states[i+1][6] <== multi_or[6][i].out; - eq[34][i] = IsEqual(); - eq[34][i].in[0] <== in[i]; - eq[34][i].in[1] <== 241; - eq[35][i] = IsEqual(); - eq[35][i].in[0] <== in[i]; - eq[35][i].in[1] <== 242; - eq[36][i] = IsEqual(); - eq[36][i].in[0] <== in[i]; - eq[36][i].in[1] <== 243; - and[22][i] = AND(); - and[22][i].a <== states[i][1]; - multi_or[7][i] = MultiOR(3); - multi_or[7][i].in[0] <== eq[34][i].out; - multi_or[7][i].in[1] <== eq[35][i].out; - multi_or[7][i].in[2] <== eq[36][i].out; - and[22][i].b <== multi_or[7][i].out; - and[23][i] = AND(); - and[23][i].a <== states[i][9]; - and[23][i].b <== multi_or[7][i].out; - multi_or[8][i] = MultiOR(2); - multi_or[8][i].in[0] <== and[22][i].out; - multi_or[8][i].in[1] <== and[23][i].out; - states[i+1][7] <== multi_or[8][i].out; - eq[37][i] = IsEqual(); - eq[37][i].in[0] <== in[i]; - eq[37][i].in[1] <== 244; - and[24][i] = AND(); - and[24][i].a <== states[i][1]; - and[24][i].b <== eq[37][i].out; - and[25][i] = AND(); - and[25][i].a <== states[i][9]; - and[25][i].b <== eq[37][i].out; - multi_or[9][i] = MultiOR(2); - multi_or[9][i].in[0] <== and[24][i].out; - multi_or[9][i].in[1] <== and[25][i].out; - states[i+1][8] <== multi_or[9][i].out; - lt[10][i] = LessEqThan(8); - lt[10][i].in[0] <== 11; - 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[26][i] = AND(); - and[26][i].a <== lt[10][i].out; - and[26][i].b <== lt[11][i].out; - eq[38][i] = IsEqual(); - eq[38][i].in[0] <== in[i]; - eq[38][i].in[1] <== 0; - eq[39][i] = IsEqual(); - eq[39][i].in[0] <== in[i]; - eq[39][i].in[1] <== 1; - eq[40][i] = IsEqual(); - eq[40][i].in[0] <== in[i]; - eq[40][i].in[1] <== 2; - eq[41][i] = IsEqual(); - eq[41][i].in[0] <== in[i]; - eq[41][i].in[1] <== 3; - eq[42][i] = IsEqual(); - eq[42][i].in[0] <== in[i]; - eq[42][i].in[1] <== 4; - eq[43][i] = IsEqual(); - eq[43][i].in[0] <== in[i]; - eq[43][i].in[1] <== 5; - eq[44][i] = IsEqual(); - eq[44][i].in[0] <== in[i]; - eq[44][i].in[1] <== 6; - eq[45][i] = IsEqual(); - eq[45][i].in[0] <== in[i]; - eq[45][i].in[1] <== 7; - eq[46][i] = IsEqual(); - eq[46][i].in[0] <== in[i]; - eq[46][i].in[1] <== 8; - eq[47][i] = IsEqual(); - eq[47][i].in[0] <== in[i]; - eq[47][i].in[1] <== 9; - and[27][i] = AND(); - and[27][i].a <== states[i][1]; - multi_or[10][i] = MultiOR(11); - multi_or[10][i].in[0] <== and[26][i].out; - multi_or[10][i].in[1] <== eq[38][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; - multi_or[10][i].in[7] <== eq[44][i].out; - multi_or[10][i].in[8] <== eq[45][i].out; - multi_or[10][i].in[9] <== eq[46][i].out; - multi_or[10][i].in[10] <== eq[47][i].out; - and[27][i].b <== multi_or[10][i].out; - and[28][i] = AND(); - and[28][i].a <== states[i][2]; - and[28][i].b <== and[5][i].out; - and[29][i] = AND(); - and[29][i].a <== states[i][9]; - and[29][i].b <== multi_or[10][i].out; - multi_or[11][i] = MultiOR(3); - multi_or[11][i].in[0] <== and[27][i].out; - multi_or[11][i].in[1] <== and[28][i].out; - multi_or[11][i].in[2] <== and[29][i].out; - states[i+1][9] <== multi_or[11][i].out; - from_zero_enabled[i] <== MultiNOR(9)([states_tmp[i+1][1], states[i+1][2], states[i+1][3], states[i+1][4], states[i+1][5], states[i+1][6], states[i+1][7], states[i+1][8], states[i+1][9]]); - states[i+1][1] <== MultiOR(2)([states_tmp[i+1][1], from_zero_enabled[i] * and[0][i].out]); - state_changed[i].in[0] <== states[i+1][1]; - state_changed[i].in[1] <== states[i+1][2]; - state_changed[i].in[2] <== states[i+1][3]; - state_changed[i].in[3] <== states[i+1][4]; - state_changed[i].in[4] <== states[i+1][5]; - state_changed[i].in[5] <== states[i+1][6]; - state_changed[i].in[6] <== states[i+1][7]; - state_changed[i].in[7] <== states[i+1][8]; - state_changed[i].in[8] <== states[i+1][9]; - } - - component final_state_result = MultiOR(num_bytes+1); - for (var i = 0; i <= num_bytes; i++) { - final_state_result.in[i] <== states[i][9]; - } - out <== final_state_result.out; - signal is_consecutive[msg_bytes+1][3]; - is_consecutive[msg_bytes][2] <== 0; - for (var i = 0; i < msg_bytes; i++) { - is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][9] * (1 - is_consecutive[msg_bytes-i][2]) + is_consecutive[msg_bytes-i][2]; - is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; - is_consecutive[msg_bytes-1-i][2] <== ORAnd()([(1 - from_zero_enabled[msg_bytes-i+1]), states[num_bytes-i][9], is_consecutive[msg_bytes-1-i][1]]); - } - // substrings calculated: [{(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 9), (3, 2), (4, 2), (5, 2), (6, 4), (7, 4), (8, 4), (9, 2), (9, 3), (9, 4), (9, 5), (9, 6), (9, 7), (9, 8), (9, 9)}] - signal is_substr0[msg_bytes]; - signal is_reveal0[msg_bytes]; - signal output reveal0[msg_bytes]; - for (var i = 0; i < msg_bytes; i++) { - // the 0-th substring transitions: [(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 9), (3, 2), (4, 2), (5, 2), (6, 4), (7, 4), (8, 4), (9, 2), (9, 3), (9, 4), (9, 5), (9, 6), (9, 7), (9, 8), (9, 9)] - is_substr0[i] <== MultiOR(23)([states[i+1][1] * states[i+2][2], states[i+1][1] * states[i+2][3], states[i+1][1] * states[i+2][4], states[i+1][1] * states[i+2][5], states[i+1][1] * states[i+2][6], states[i+1][1] * states[i+2][7], states[i+1][1] * states[i+2][8], states[i+1][1] * states[i+2][9], states[i+1][2] * states[i+2][9], states[i+1][3] * states[i+2][2], states[i+1][4] * states[i+2][2], states[i+1][5] * states[i+2][2], states[i+1][6] * states[i+2][4], states[i+1][7] * states[i+2][4], states[i+1][8] * states[i+2][4], states[i+1][9] * states[i+2][2], states[i+1][9] * states[i+2][3], states[i+1][9] * states[i+2][4], states[i+1][9] * states[i+2][5], states[i+1][9] * states[i+2][6], states[i+1][9] * states[i+2][7], states[i+1][9] * states[i+2][8], states[i+1][9] * states[i+2][9]]); - is_reveal0[i] <== is_substr0[i] * is_consecutive[i][2]; - reveal0[i] <== in[i+1] * is_reveal0[i]; - } -} \ No newline at end of file diff --git a/packages/circom/tests/circuits/plus6.json b/packages/circom/tests/circuits/plus6.json deleted file mode 100644 index 165f72d..0000000 --- a/packages/circom/tests/circuits/plus6.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parts": [ - { - "is_public": true, - "regex_def": ".+?" - } - ] -} \ No newline at end of file diff --git a/packages/circom/tests/circuits/plus6_regex.circom b/packages/circom/tests/circuits/plus6_regex.circom deleted file mode 100644 index 7f25b8b..0000000 --- a/packages/circom/tests/circuits/plus6_regex.circom +++ /dev/null @@ -1,408 +0,0 @@ -pragma circom 2.1.5; - -include "@zk-email/zk-regex-circom/circuits/regex_helpers.circom"; - -// regex: .+? -template Plus6Regex(msg_bytes) { - signal input msg[msg_bytes]; - signal output out; - - var num_bytes = msg_bytes+1; - signal in[num_bytes]; - in[0]<==255; - for (var i = 0; i < msg_bytes; i++) { - in[i+1] <== msg[i]; - } - - component eq[47][num_bytes]; - component lt[12][num_bytes]; - component and[29][num_bytes]; - component multi_or[7][num_bytes]; - signal states[num_bytes+1][9]; - signal states_tmp[num_bytes+1][9]; - signal from_zero_enabled[num_bytes+1]; - from_zero_enabled[num_bytes] <== 0; - component state_changed[num_bytes]; - - for (var i = 1; i < 9; i++) { - states[0][i] <== 0; - } - - for (var i = 0; i < num_bytes; i++) { - state_changed[i] = MultiOR(8); - states[i][0] <== 1; - lt[0][i] = LessEqThan(8); - 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] <== 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][0]; - and[1][i].b <== and[0][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[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][2]; - and[3][i].b <== and[2][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] <== 191; - and[4][i] = AND(); - and[4][i].a <== lt[4][i].out; - and[4][i].b <== lt[5][i].out; - and[5][i] = AND(); - and[5][i].a <== states[i][3]; - and[5][i].b <== and[4][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[6][i] = AND(); - and[6][i].a <== lt[6][i].out; - and[6][i].b <== lt[7][i].out; - and[7][i] = AND(); - and[7][i].a <== states[i][4]; - and[7][i].b <== and[6][i].out; - and[8][i] = AND(); - and[8][i].a <== states[i][8]; - and[8][i].b <== and[0][i].out; - multi_or[0][i] = MultiOR(4); - multi_or[0][i].in[0] <== and[3][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[8][i].out; - states_tmp[i+1][1] <== multi_or[0][i].out; - eq[0][i] = IsEqual(); - eq[0][i].in[0] <== in[i]; - eq[0][i].in[1] <== 224; - and[9][i] = AND(); - and[9][i].a <== states[i][0]; - and[9][i].b <== eq[0][i].out; - and[10][i] = AND(); - and[10][i].a <== states[i][8]; - and[10][i].b <== eq[0][i].out; - states_tmp[i+1][2] <== and[10][i].out; - eq[1][i] = IsEqual(); - eq[1][i].in[0] <== in[i]; - eq[1][i].in[1] <== 225; - eq[2][i] = IsEqual(); - eq[2][i].in[0] <== in[i]; - eq[2][i].in[1] <== 226; - eq[3][i] = IsEqual(); - eq[3][i].in[0] <== in[i]; - eq[3][i].in[1] <== 227; - eq[4][i] = IsEqual(); - eq[4][i].in[0] <== in[i]; - eq[4][i].in[1] <== 228; - eq[5][i] = IsEqual(); - eq[5][i].in[0] <== in[i]; - eq[5][i].in[1] <== 229; - eq[6][i] = IsEqual(); - eq[6][i].in[0] <== in[i]; - eq[6][i].in[1] <== 230; - eq[7][i] = IsEqual(); - eq[7][i].in[0] <== in[i]; - eq[7][i].in[1] <== 231; - eq[8][i] = IsEqual(); - eq[8][i].in[0] <== in[i]; - eq[8][i].in[1] <== 232; - eq[9][i] = IsEqual(); - eq[9][i].in[0] <== in[i]; - eq[9][i].in[1] <== 233; - eq[10][i] = IsEqual(); - eq[10][i].in[0] <== in[i]; - eq[10][i].in[1] <== 234; - eq[11][i] = IsEqual(); - eq[11][i].in[0] <== in[i]; - eq[11][i].in[1] <== 235; - eq[12][i] = IsEqual(); - eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 236; - eq[13][i] = IsEqual(); - eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 238; - eq[14][i] = IsEqual(); - eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 239; - and[11][i] = AND(); - and[11][i].a <== states[i][0]; - multi_or[1][i] = MultiOR(14); - multi_or[1][i].in[0] <== eq[1][i].out; - multi_or[1][i].in[1] <== eq[2][i].out; - multi_or[1][i].in[2] <== eq[3][i].out; - multi_or[1][i].in[3] <== eq[4][i].out; - multi_or[1][i].in[4] <== eq[5][i].out; - multi_or[1][i].in[5] <== eq[6][i].out; - multi_or[1][i].in[6] <== eq[7][i].out; - multi_or[1][i].in[7] <== eq[8][i].out; - multi_or[1][i].in[8] <== eq[9][i].out; - multi_or[1][i].in[9] <== eq[10][i].out; - multi_or[1][i].in[10] <== eq[11][i].out; - multi_or[1][i].in[11] <== eq[12][i].out; - multi_or[1][i].in[12] <== eq[13][i].out; - multi_or[1][i].in[13] <== eq[14][i].out; - and[11][i].b <== multi_or[1][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[12][i] = AND(); - and[12][i].a <== lt[8][i].out; - and[12][i].b <== lt[9][i].out; - and[13][i] = AND(); - and[13][i].a <== states[i][5]; - and[13][i].b <== and[12][i].out; - and[14][i] = AND(); - and[14][i].a <== states[i][6]; - and[14][i].b <== and[4][i].out; - eq[15][i] = IsEqual(); - eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 128; - eq[16][i] = IsEqual(); - eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 129; - eq[17][i] = IsEqual(); - eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 130; - eq[18][i] = IsEqual(); - eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 131; - eq[19][i] = IsEqual(); - eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 132; - eq[20][i] = IsEqual(); - eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 133; - eq[21][i] = IsEqual(); - eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 134; - eq[22][i] = IsEqual(); - eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 135; - eq[23][i] = IsEqual(); - eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 136; - eq[24][i] = IsEqual(); - eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 137; - eq[25][i] = IsEqual(); - eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 138; - eq[26][i] = IsEqual(); - eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 139; - eq[27][i] = IsEqual(); - eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 140; - eq[28][i] = IsEqual(); - eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 141; - eq[29][i] = IsEqual(); - eq[29][i].in[0] <== in[i]; - eq[29][i].in[1] <== 142; - eq[30][i] = IsEqual(); - eq[30][i].in[0] <== in[i]; - eq[30][i].in[1] <== 143; - and[15][i] = AND(); - and[15][i].a <== states[i][7]; - multi_or[2][i] = MultiOR(16); - multi_or[2][i].in[0] <== eq[15][i].out; - multi_or[2][i].in[1] <== eq[16][i].out; - multi_or[2][i].in[2] <== eq[17][i].out; - multi_or[2][i].in[3] <== eq[18][i].out; - multi_or[2][i].in[4] <== eq[19][i].out; - multi_or[2][i].in[5] <== eq[20][i].out; - multi_or[2][i].in[6] <== eq[21][i].out; - multi_or[2][i].in[7] <== eq[22][i].out; - multi_or[2][i].in[8] <== eq[23][i].out; - multi_or[2][i].in[9] <== eq[24][i].out; - multi_or[2][i].in[10] <== eq[25][i].out; - multi_or[2][i].in[11] <== eq[26][i].out; - multi_or[2][i].in[12] <== eq[27][i].out; - multi_or[2][i].in[13] <== eq[28][i].out; - multi_or[2][i].in[14] <== eq[29][i].out; - multi_or[2][i].in[15] <== eq[30][i].out; - and[15][i].b <== multi_or[2][i].out; - and[16][i] = AND(); - and[16][i].a <== states[i][8]; - and[16][i].b <== multi_or[1][i].out; - multi_or[3][i] = MultiOR(4); - multi_or[3][i].in[0] <== and[13][i].out; - multi_or[3][i].in[1] <== and[14][i].out; - multi_or[3][i].in[2] <== and[15][i].out; - multi_or[3][i].in[3] <== and[16][i].out; - states_tmp[i+1][3] <== multi_or[3][i].out; - eq[31][i] = IsEqual(); - eq[31][i].in[0] <== in[i]; - eq[31][i].in[1] <== 237; - and[17][i] = AND(); - and[17][i].a <== states[i][0]; - and[17][i].b <== eq[31][i].out; - and[18][i] = AND(); - and[18][i].a <== states[i][8]; - and[18][i].b <== eq[31][i].out; - states_tmp[i+1][4] <== and[18][i].out; - eq[32][i] = IsEqual(); - eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 240; - and[19][i] = AND(); - and[19][i].a <== states[i][0]; - and[19][i].b <== eq[32][i].out; - and[20][i] = AND(); - and[20][i].a <== states[i][8]; - and[20][i].b <== eq[32][i].out; - states_tmp[i+1][5] <== and[20][i].out; - eq[33][i] = IsEqual(); - eq[33][i].in[0] <== in[i]; - eq[33][i].in[1] <== 241; - eq[34][i] = IsEqual(); - eq[34][i].in[0] <== in[i]; - eq[34][i].in[1] <== 242; - eq[35][i] = IsEqual(); - eq[35][i].in[0] <== in[i]; - eq[35][i].in[1] <== 243; - and[21][i] = AND(); - and[21][i].a <== states[i][0]; - multi_or[4][i] = MultiOR(3); - multi_or[4][i].in[0] <== eq[33][i].out; - multi_or[4][i].in[1] <== eq[34][i].out; - multi_or[4][i].in[2] <== eq[35][i].out; - and[21][i].b <== multi_or[4][i].out; - and[22][i] = AND(); - and[22][i].a <== states[i][8]; - and[22][i].b <== multi_or[4][i].out; - states_tmp[i+1][6] <== and[22][i].out; - eq[36][i] = IsEqual(); - eq[36][i].in[0] <== in[i]; - eq[36][i].in[1] <== 244; - and[23][i] = AND(); - and[23][i].a <== states[i][0]; - and[23][i].b <== eq[36][i].out; - and[24][i] = AND(); - and[24][i].a <== states[i][8]; - and[24][i].b <== eq[36][i].out; - states_tmp[i+1][7] <== and[24][i].out; - lt[10][i] = LessEqThan(8); - lt[10][i].in[0] <== 11; - 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[25][i] = AND(); - and[25][i].a <== lt[10][i].out; - and[25][i].b <== lt[11][i].out; - eq[37][i] = IsEqual(); - eq[37][i].in[0] <== in[i]; - eq[37][i].in[1] <== 0; - eq[38][i] = IsEqual(); - eq[38][i].in[0] <== in[i]; - eq[38][i].in[1] <== 1; - eq[39][i] = IsEqual(); - eq[39][i].in[0] <== in[i]; - eq[39][i].in[1] <== 2; - eq[40][i] = IsEqual(); - eq[40][i].in[0] <== in[i]; - eq[40][i].in[1] <== 3; - eq[41][i] = IsEqual(); - eq[41][i].in[0] <== in[i]; - eq[41][i].in[1] <== 4; - eq[42][i] = IsEqual(); - eq[42][i].in[0] <== in[i]; - eq[42][i].in[1] <== 5; - eq[43][i] = IsEqual(); - eq[43][i].in[0] <== in[i]; - eq[43][i].in[1] <== 6; - eq[44][i] = IsEqual(); - eq[44][i].in[0] <== in[i]; - eq[44][i].in[1] <== 7; - eq[45][i] = IsEqual(); - eq[45][i].in[0] <== in[i]; - eq[45][i].in[1] <== 8; - eq[46][i] = IsEqual(); - eq[46][i].in[0] <== in[i]; - eq[46][i].in[1] <== 9; - and[26][i] = AND(); - and[26][i].a <== states[i][0]; - multi_or[5][i] = MultiOR(11); - multi_or[5][i].in[0] <== and[25][i].out; - multi_or[5][i].in[1] <== eq[37][i].out; - multi_or[5][i].in[2] <== eq[38][i].out; - multi_or[5][i].in[3] <== eq[39][i].out; - multi_or[5][i].in[4] <== eq[40][i].out; - multi_or[5][i].in[5] <== eq[41][i].out; - multi_or[5][i].in[6] <== eq[42][i].out; - multi_or[5][i].in[7] <== eq[43][i].out; - multi_or[5][i].in[8] <== eq[44][i].out; - multi_or[5][i].in[9] <== eq[45][i].out; - multi_or[5][i].in[10] <== eq[46][i].out; - and[26][i].b <== multi_or[5][i].out; - and[27][i] = AND(); - and[27][i].a <== states[i][1]; - and[27][i].b <== and[4][i].out; - and[28][i] = AND(); - and[28][i].a <== states[i][8]; - and[28][i].b <== multi_or[5][i].out; - multi_or[6][i] = MultiOR(2); - multi_or[6][i].in[0] <== and[27][i].out; - multi_or[6][i].in[1] <== and[28][i].out; - states_tmp[i+1][8] <== multi_or[6][i].out; - from_zero_enabled[i] <== MultiNOR(8)([states_tmp[i+1][1], states_tmp[i+1][2], states_tmp[i+1][3], states_tmp[i+1][4], states_tmp[i+1][5], states_tmp[i+1][6], states_tmp[i+1][7], states_tmp[i+1][8]]); - states[i+1][1] <== MultiOR(2)([states_tmp[i+1][1], from_zero_enabled[i] * and[1][i].out]); - states[i+1][2] <== MultiOR(2)([states_tmp[i+1][2], from_zero_enabled[i] * and[9][i].out]); - states[i+1][3] <== MultiOR(2)([states_tmp[i+1][3], from_zero_enabled[i] * and[11][i].out]); - states[i+1][4] <== MultiOR(2)([states_tmp[i+1][4], from_zero_enabled[i] * and[17][i].out]); - states[i+1][5] <== MultiOR(2)([states_tmp[i+1][5], from_zero_enabled[i] * and[19][i].out]); - states[i+1][6] <== MultiOR(2)([states_tmp[i+1][6], from_zero_enabled[i] * and[21][i].out]); - states[i+1][7] <== MultiOR(2)([states_tmp[i+1][7], from_zero_enabled[i] * and[23][i].out]); - states[i+1][8] <== MultiOR(2)([states_tmp[i+1][8], from_zero_enabled[i] * and[26][i].out]); - state_changed[i].in[0] <== states[i+1][1]; - state_changed[i].in[1] <== states[i+1][2]; - state_changed[i].in[2] <== states[i+1][3]; - state_changed[i].in[3] <== states[i+1][4]; - state_changed[i].in[4] <== states[i+1][5]; - state_changed[i].in[5] <== states[i+1][6]; - state_changed[i].in[6] <== states[i+1][7]; - state_changed[i].in[7] <== states[i+1][8]; - } - - component final_state_result = MultiOR(num_bytes+1); - for (var i = 0; i <= num_bytes; i++) { - final_state_result.in[i] <== states[i][8]; - } - out <== final_state_result.out; - signal is_consecutive[msg_bytes+1][3]; - is_consecutive[msg_bytes][2] <== 0; - for (var i = 0; i < msg_bytes; i++) { - is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][8] * (1 - is_consecutive[msg_bytes-i][2]) + is_consecutive[msg_bytes-i][2]; - is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; - is_consecutive[msg_bytes-1-i][2] <== ORAnd()([(1 - from_zero_enabled[msg_bytes-i+1]), states[num_bytes-i][8], is_consecutive[msg_bytes-1-i][1]]); - } - // substrings calculated: [{(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8), (1, 8), (2, 1), (3, 1), (4, 1), (5, 3), (6, 3), (7, 3), (8, 1), (8, 2), (8, 3), (8, 4), (8, 5), (8, 6), (8, 7), (8, 8)}] - signal is_substr0[msg_bytes]; - signal is_reveal0[msg_bytes]; - signal output reveal0[msg_bytes]; - for (var i = 0; i < msg_bytes; i++) { - // the 0-th substring transitions: [(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8), (1, 8), (2, 1), (3, 1), (4, 1), (5, 3), (6, 3), (7, 3), (8, 1), (8, 2), (8, 3), (8, 4), (8, 5), (8, 6), (8, 7), (8, 8)] - is_substr0[i] <== MultiOR(23)([states[i+1][0] * states[i+2][1], states[i+1][0] * states[i+2][2], states[i+1][0] * states[i+2][3], states[i+1][0] * states[i+2][4], states[i+1][0] * states[i+2][5], states[i+1][0] * states[i+2][6], states[i+1][0] * states[i+2][7], states[i+1][0] * states[i+2][8], states[i+1][1] * states[i+2][8], states[i+1][2] * states[i+2][1], states[i+1][3] * states[i+2][1], states[i+1][4] * states[i+2][1], states[i+1][5] * states[i+2][3], states[i+1][6] * states[i+2][3], states[i+1][7] * states[i+2][3], states[i+1][8] * states[i+2][1], states[i+1][8] * states[i+2][2], states[i+1][8] * states[i+2][3], states[i+1][8] * states[i+2][4], states[i+1][8] * states[i+2][5], states[i+1][8] * states[i+2][6], states[i+1][8] * states[i+2][7], states[i+1][8] * states[i+2][8]]); - is_reveal0[i] <== is_substr0[i] * is_consecutive[i][2]; - reveal0[i] <== in[i+1] * is_reveal0[i]; - } -} \ No newline at end of file diff --git a/packages/circom/tests/circuits/test_asterisk4_regex.circom b/packages/circom/tests/circuits/test_asterisk4_regex.circom deleted file mode 100644 index 12a1c17..0000000 --- a/packages/circom/tests/circuits/test_asterisk4_regex.circom +++ /dev/null @@ -1,3 +0,0 @@ -include "./asterisk4_regex.circom"; - -component main = Asterisk4Regex(8); \ No newline at end of file diff --git a/packages/circom/tests/circuits/test_asterisk5_regex.circom b/packages/circom/tests/circuits/test_asterisk5_regex.circom deleted file mode 100644 index b111379..0000000 --- a/packages/circom/tests/circuits/test_asterisk5_regex.circom +++ /dev/null @@ -1,3 +0,0 @@ -include "./asterisk5_regex.circom"; - -component main = Asterisk5Regex(8); \ No newline at end of file diff --git a/packages/circom/tests/circuits/test_asterisk6_regex.circom b/packages/circom/tests/circuits/test_asterisk6_regex.circom deleted file mode 100644 index c316968..0000000 --- a/packages/circom/tests/circuits/test_asterisk6_regex.circom +++ /dev/null @@ -1,3 +0,0 @@ -include "./asterisk6_regex.circom"; - -component main = Asterisk6Regex(8); \ No newline at end of file diff --git a/packages/circom/tests/circuits/test_plus5_regex.circom b/packages/circom/tests/circuits/test_plus5_regex.circom deleted file mode 100644 index 73c0746..0000000 --- a/packages/circom/tests/circuits/test_plus5_regex.circom +++ /dev/null @@ -1,3 +0,0 @@ -include "./plus5_regex.circom"; - -component main = Plus5Regex(8); \ No newline at end of file diff --git a/packages/circom/tests/circuits/test_plus6_regex.circom b/packages/circom/tests/circuits/test_plus6_regex.circom deleted file mode 100644 index 3452c32..0000000 --- a/packages/circom/tests/circuits/test_plus6_regex.circom +++ /dev/null @@ -1,3 +0,0 @@ -include "./plus6_regex.circom"; - -component main = Plus6Regex(8); \ No newline at end of file diff --git a/packages/circom/tests/circuits/test_question4_regex.circom b/packages/circom/tests/circuits/test_question4_regex.circom deleted file mode 100644 index 5318942..0000000 --- a/packages/circom/tests/circuits/test_question4_regex.circom +++ /dev/null @@ -1,3 +0,0 @@ -include "./question4_regex.circom"; - -component main = Question4Regex(8); \ No newline at end of file