diff --git a/packages/circom/circuits/common/email_addr_with_name.json b/packages/circom/circuits/common/email_addr_with_name.json index af535b0..d1bd578 100644 --- a/packages/circom/circuits/common/email_addr_with_name.json +++ b/packages/circom/circuits/common/email_addr_with_name.json @@ -2,15 +2,15 @@ "parts": [ { "is_public": false, - "regex_def": "[^\r\n<]+<" + "regex_def": "[^\r\n]+<" }, { "is_public": true, - "regex_def": "[a-zA-Z0-9!#\\$%&'\\*\\+-/=?\\^_`{\\|}~\\.]+@[a-zA-Z0-9_\\.-]+" + "regex_def": "[a-zA-Z0-9!#$%&'*+-/=?^_`{\\|}~\\.]+@[a-zA-Z0-9_\\.-]+" }, { "is_public": false, "regex_def": ">" } ] -} +} \ No newline at end of file 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 1555440..c63a1e1 100644 --- a/packages/circom/circuits/common/email_addr_with_name_regex.circom +++ b/packages/circom/circuits/common/email_addr_with_name_regex.circom @@ -2,7 +2,7 @@ pragma circom 2.1.5; include "@zk-email/zk-regex-circom/circuits/regex_helpers.circom"; -// regex: [^\r\n<]+<[a-zA-Z0-9!#\$%&'\*\+-/=?\^_`{\|}~\.]+@[a-zA-Z0-9_\.-]+> +// regex: [^\r\n]+<[a-zA-Z0-9!#$%&'*+-/=?^_`{\|}~\.]+@[a-zA-Z0-9_\.-]+> template EmailAddrWithNameRegex(msg_bytes) { signal input msg[msg_bytes]; signal output out; @@ -14,10 +14,10 @@ template EmailAddrWithNameRegex(msg_bytes) { in[i+1] <== msg[i]; } - component eq[77][num_bytes]; - component lt[18][num_bytes]; - component and[39][num_bytes]; - component multi_or[11][num_bytes]; + component eq[86][num_bytes]; + component lt[24][num_bytes]; + component and[51][num_bytes]; + component multi_or[19][num_bytes]; signal states[num_bytes+1][14]; signal states_tmp[num_bytes+1][14]; signal from_zero_enabled[num_bytes+1]; @@ -32,7 +32,7 @@ template EmailAddrWithNameRegex(msg_bytes) { state_changed[i] = MultiOR(13); states[i][0] <== 1; lt[0][i] = LessEqThan(8); - lt[0][i].in[0] <== 49; + 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]; @@ -82,22 +82,32 @@ template EmailAddrWithNameRegex(msg_bytes) { 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); + and[9][i] = AND(); + and[9][i].a <== states[i][9]; + and[9][i].b <== and[0][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[5][i].out; multi_or[0][i].in[2] <== and[7][i].out; multi_or[0][i].in[3] <== and[8][i].out; + multi_or[0][i].in[4] <== and[9][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].a <== states[i][0]; and[10][i].b <== eq[0][i].out; - states_tmp[i+1][2] <== and[10][i].out; + and[11][i] = AND(); + and[11][i].a <== states[i][8]; + and[11][i].b <== eq[0][i].out; + and[12][i] = AND(); + and[12][i].a <== states[i][9]; + and[12][i].b <== eq[0][i].out; + multi_or[1][i] = MultiOR(2); + multi_or[1][i].in[0] <== and[11][i].out; + multi_or[1][i].in[1] <== and[12][i].out; + states_tmp[i+1][2] <== multi_or[1][i].out; eq[1][i] = IsEqual(); eq[1][i].in[0] <== in[i]; eq[1][i].in[1] <== 225; @@ -140,39 +150,39 @@ template EmailAddrWithNameRegex(msg_bytes) { 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; + and[13][i] = AND(); + and[13][i].a <== states[i][0]; + multi_or[2][i] = MultiOR(14); + multi_or[2][i].in[0] <== eq[1][i].out; + multi_or[2][i].in[1] <== eq[2][i].out; + multi_or[2][i].in[2] <== eq[3][i].out; + multi_or[2][i].in[3] <== eq[4][i].out; + multi_or[2][i].in[4] <== eq[5][i].out; + multi_or[2][i].in[5] <== eq[6][i].out; + multi_or[2][i].in[6] <== eq[7][i].out; + multi_or[2][i].in[7] <== eq[8][i].out; + multi_or[2][i].in[8] <== eq[9][i].out; + multi_or[2][i].in[9] <== eq[10][i].out; + multi_or[2][i].in[10] <== eq[11][i].out; + multi_or[2][i].in[11] <== eq[12][i].out; + multi_or[2][i].in[12] <== eq[13][i].out; + multi_or[2][i].in[13] <== eq[14][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[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; + and[14][i].a <== lt[8][i].out; + and[14][i].b <== lt[9][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[4][i].out; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; eq[15][i].in[1] <== 128; @@ -221,55 +231,71 @@ template EmailAddrWithNameRegex(msg_bytes) { 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[17][i].a <== states[i][7]; + multi_or[3][i] = MultiOR(16); + multi_or[3][i].in[0] <== eq[15][i].out; + multi_or[3][i].in[1] <== eq[16][i].out; + multi_or[3][i].in[2] <== eq[17][i].out; + multi_or[3][i].in[3] <== eq[18][i].out; + multi_or[3][i].in[4] <== eq[19][i].out; + multi_or[3][i].in[5] <== eq[20][i].out; + multi_or[3][i].in[6] <== eq[21][i].out; + multi_or[3][i].in[7] <== eq[22][i].out; + multi_or[3][i].in[8] <== eq[23][i].out; + multi_or[3][i].in[9] <== eq[24][i].out; + multi_or[3][i].in[10] <== eq[25][i].out; + multi_or[3][i].in[11] <== eq[26][i].out; + multi_or[3][i].in[12] <== eq[27][i].out; + multi_or[3][i].in[13] <== eq[28][i].out; + multi_or[3][i].in[14] <== eq[29][i].out; + multi_or[3][i].in[15] <== eq[30][i].out; + and[17][i].b <== multi_or[3][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; + and[18][i].b <== multi_or[2][i].out; + and[19][i] = AND(); + and[19][i].a <== states[i][9]; + and[19][i].b <== multi_or[2][i].out; + multi_or[4][i] = MultiOR(5); + 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; + multi_or[4][i].in[3] <== and[18][i].out; + multi_or[4][i].in[4] <== and[19][i].out; + states_tmp[i+1][3] <== multi_or[4][i].out; + eq[31][i] = IsEqual(); + eq[31][i].in[0] <== in[i]; + eq[31][i].in[1] <== 237; + and[20][i] = AND(); + and[20][i].a <== states[i][0]; + and[20][i].b <== eq[31][i].out; + and[21][i] = AND(); + and[21][i].a <== states[i][8]; + and[21][i].b <== eq[31][i].out; + and[22][i] = AND(); + and[22][i].a <== states[i][9]; + and[22][i].b <== eq[31][i].out; + multi_or[5][i] = MultiOR(2); + multi_or[5][i].in[0] <== and[21][i].out; + multi_or[5][i].in[1] <== and[22][i].out; + states_tmp[i+1][4] <== multi_or[5][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; + and[23][i] = AND(); + and[23][i].a <== states[i][0]; + and[23][i].b <== eq[32][i].out; + and[24][i] = AND(); + and[24][i].a <== states[i][8]; + and[24][i].b <== eq[32][i].out; + and[25][i] = AND(); + and[25][i].a <== states[i][9]; + and[25][i].b <== eq[32][i].out; + multi_or[6][i] = MultiOR(2); + multi_or[6][i].in[0] <== and[24][i].out; + multi_or[6][i].in[1] <== and[25][i].out; + states_tmp[i+1][5] <== multi_or[6][i].out; eq[33][i] = IsEqual(); eq[33][i].in[0] <== in[i]; eq[33][i].in[1] <== 241; @@ -279,36 +305,48 @@ template EmailAddrWithNameRegex(msg_bytes) { 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; + and[26][i] = AND(); + and[26][i].a <== states[i][0]; + multi_or[7][i] = MultiOR(3); + multi_or[7][i].in[0] <== eq[33][i].out; + multi_or[7][i].in[1] <== eq[34][i].out; + multi_or[7][i].in[2] <== eq[35][i].out; + and[26][i].b <== multi_or[7][i].out; + and[27][i] = AND(); + and[27][i].a <== states[i][8]; + and[27][i].b <== multi_or[7][i].out; + and[28][i] = AND(); + and[28][i].a <== states[i][9]; + and[28][i].b <== multi_or[7][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_tmp[i+1][6] <== multi_or[8][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; + and[29][i] = AND(); + and[29][i].a <== states[i][0]; + and[29][i].b <== eq[36][i].out; + and[30][i] = AND(); + and[30][i].a <== states[i][8]; + and[30][i].b <== eq[36][i].out; + and[31][i] = AND(); + and[31][i].a <== states[i][9]; + and[31][i].b <== eq[36][i].out; + multi_or[9][i] = MultiOR(2); + multi_or[9][i].in[0] <== and[30][i].out; + multi_or[9][i].in[1] <== and[31][i].out; + states_tmp[i+1][7] <== multi_or[9][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] <== 59; - and[25][i] = AND(); - and[25][i].a <== lt[10][i].out; - and[25][i].b <== lt[11][i].out; + 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; eq[37][i] = IsEqual(); eq[37][i].in[0] <== in[i]; eq[37][i].in[1] <== 0; @@ -345,228 +383,332 @@ template EmailAddrWithNameRegex(msg_bytes) { eq[48][i] = IsEqual(); eq[48][i].in[0] <== in[i]; eq[48][i].in[1] <== 12; - and[26][i] = AND(); - and[26][i].a <== states[i][0]; - multi_or[5][i] = MultiOR(13); - 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; - multi_or[5][i].in[11] <== eq[47][i].out; - multi_or[5][i].in[12] <== eq[48][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; - eq[49][i] = IsEqual(); - eq[49][i].in[0] <== in[i]; - eq[49][i].in[1] <== 60; - and[29][i] = AND(); - and[29][i].a <== states[i][8]; - and[29][i].b <== eq[49][i].out; - states[i+1][9] <== and[29][i].out; + and[33][i] = AND(); + and[33][i].a <== states[i][0]; + multi_or[10][i] = MultiOR(13); + multi_or[10][i].in[0] <== and[32][i].out; + multi_or[10][i].in[1] <== eq[37][i].out; + multi_or[10][i].in[2] <== eq[38][i].out; + multi_or[10][i].in[3] <== eq[39][i].out; + multi_or[10][i].in[4] <== eq[40][i].out; + multi_or[10][i].in[5] <== eq[41][i].out; + multi_or[10][i].in[6] <== eq[42][i].out; + multi_or[10][i].in[7] <== eq[43][i].out; + multi_or[10][i].in[8] <== eq[44][i].out; + multi_or[10][i].in[9] <== eq[45][i].out; + multi_or[10][i].in[10] <== eq[46][i].out; + multi_or[10][i].in[11] <== eq[47][i].out; + multi_or[10][i].in[12] <== eq[48][i].out; + and[33][i].b <== multi_or[10][i].out; + and[34][i] = AND(); + and[34][i].a <== states[i][1]; + and[34][i].b <== and[4][i].out; lt[12][i] = LessEqThan(8); - lt[12][i].in[0] <== 65; + lt[12][i].in[0] <== 14; lt[12][i].in[1] <== in[i]; lt[13][i] = LessEqThan(8); lt[13][i].in[0] <== in[i]; - lt[13][i].in[1] <== 90; - and[30][i] = AND(); - and[30][i].a <== lt[12][i].out; - and[30][i].b <== lt[13][i].out; + lt[13][i].in[1] <== 59; + and[35][i] = AND(); + and[35][i].a <== lt[12][i].out; + and[35][i].b <== lt[13][i].out; lt[14][i] = LessEqThan(8); - lt[14][i].in[0] <== 94; + lt[14][i].in[0] <== 61; lt[14][i].in[1] <== in[i]; lt[15][i] = LessEqThan(8); lt[15][i].in[0] <== in[i]; - lt[15][i].in[1] <== 126; - and[31][i] = AND(); - and[31][i].a <== lt[14][i].out; - and[31][i].b <== lt[15][i].out; + lt[15][i].in[1] <== 127; + 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][8]; + multi_or[11][i] = MultiOR(14); + multi_or[11][i].in[0] <== and[35][i].out; + multi_or[11][i].in[1] <== and[36][i].out; + multi_or[11][i].in[2] <== eq[37][i].out; + multi_or[11][i].in[3] <== eq[38][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[41][i].out; + multi_or[11][i].in[7] <== eq[42][i].out; + multi_or[11][i].in[8] <== eq[43][i].out; + multi_or[11][i].in[9] <== eq[44][i].out; + multi_or[11][i].in[10] <== eq[45][i].out; + multi_or[11][i].in[11] <== eq[46][i].out; + multi_or[11][i].in[12] <== eq[47][i].out; + multi_or[11][i].in[13] <== eq[48][i].out; + and[37][i].b <== multi_or[11][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] <== 32; + and[38][i] = AND(); + and[38][i].a <== lt[16][i].out; + and[38][i].b <== lt[17][i].out; + eq[49][i] = IsEqual(); + eq[49][i].in[0] <== in[i]; + eq[49][i].in[1] <== 34; eq[50][i] = IsEqual(); eq[50][i].in[0] <== in[i]; - eq[50][i].in[1] <== 33; + eq[50][i].in[1] <== 40; eq[51][i] = IsEqual(); eq[51][i].in[0] <== in[i]; - eq[51][i].in[1] <== 35; + eq[51][i].in[1] <== 41; eq[52][i] = IsEqual(); eq[52][i].in[0] <== in[i]; - eq[52][i].in[1] <== 36; + eq[52][i].in[1] <== 58; eq[53][i] = IsEqual(); eq[53][i].in[0] <== in[i]; - eq[53][i].in[1] <== 37; + eq[53][i].in[1] <== 59; eq[54][i] = IsEqual(); eq[54][i].in[0] <== in[i]; - eq[54][i].in[1] <== 38; + eq[54][i].in[1] <== 62; eq[55][i] = IsEqual(); eq[55][i].in[0] <== in[i]; - eq[55][i].in[1] <== 39; + eq[55][i].in[1] <== 64; eq[56][i] = IsEqual(); eq[56][i].in[0] <== in[i]; - eq[56][i].in[1] <== 42; + eq[56][i].in[1] <== 91; eq[57][i] = IsEqual(); eq[57][i].in[0] <== in[i]; - eq[57][i].in[1] <== 43; + eq[57][i].in[1] <== 92; eq[58][i] = IsEqual(); eq[58][i].in[0] <== in[i]; - eq[58][i].in[1] <== 44; + eq[58][i].in[1] <== 93; eq[59][i] = IsEqual(); eq[59][i].in[0] <== in[i]; - eq[59][i].in[1] <== 45; + eq[59][i].in[1] <== 127; + and[39][i] = AND(); + and[39][i].a <== states[i][9]; + multi_or[12][i] = MultiOR(24); + multi_or[12][i].in[0] <== and[38][i].out; + multi_or[12][i].in[1] <== eq[37][i].out; + multi_or[12][i].in[2] <== eq[38][i].out; + multi_or[12][i].in[3] <== eq[39][i].out; + multi_or[12][i].in[4] <== eq[40][i].out; + multi_or[12][i].in[5] <== eq[41][i].out; + multi_or[12][i].in[6] <== eq[42][i].out; + multi_or[12][i].in[7] <== eq[43][i].out; + multi_or[12][i].in[8] <== eq[44][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[47][i].out; + multi_or[12][i].in[12] <== eq[48][i].out; + multi_or[12][i].in[13] <== eq[49][i].out; + multi_or[12][i].in[14] <== eq[50][i].out; + multi_or[12][i].in[15] <== eq[51][i].out; + multi_or[12][i].in[16] <== eq[52][i].out; + multi_or[12][i].in[17] <== eq[53][i].out; + multi_or[12][i].in[18] <== eq[54][i].out; + multi_or[12][i].in[19] <== eq[55][i].out; + multi_or[12][i].in[20] <== eq[56][i].out; + multi_or[12][i].in[21] <== eq[57][i].out; + multi_or[12][i].in[22] <== eq[58][i].out; + multi_or[12][i].in[23] <== eq[59][i].out; + and[39][i].b <== multi_or[12][i].out; + multi_or[13][i] = MultiOR(3); + multi_or[13][i].in[0] <== and[34][i].out; + multi_or[13][i].in[1] <== and[37][i].out; + multi_or[13][i].in[2] <== and[39][i].out; + states_tmp[i+1][8] <== multi_or[13][i].out; eq[60][i] = IsEqual(); eq[60][i].in[0] <== in[i]; - eq[60][i].in[1] <== 46; + eq[60][i].in[1] <== 60; + and[40][i] = AND(); + and[40][i].a <== states[i][8]; + and[40][i].b <== eq[60][i].out; + and[41][i] = AND(); + and[41][i].a <== states[i][9]; + and[41][i].b <== eq[60][i].out; + multi_or[14][i] = MultiOR(2); + multi_or[14][i].in[0] <== and[40][i].out; + multi_or[14][i].in[1] <== and[41][i].out; + states[i+1][9] <== multi_or[14][i].out; + lt[18][i] = LessEqThan(8); + lt[18][i].in[0] <== 65; + lt[18][i].in[1] <== in[i]; + lt[19][i] = LessEqThan(8); + lt[19][i].in[0] <== in[i]; + lt[19][i].in[1] <== 90; + and[42][i] = AND(); + and[42][i].a <== lt[18][i].out; + and[42][i].b <== lt[19][i].out; + lt[20][i] = LessEqThan(8); + lt[20][i].in[0] <== 94; + lt[20][i].in[1] <== in[i]; + lt[21][i] = LessEqThan(8); + lt[21][i].in[0] <== in[i]; + lt[21][i].in[1] <== 126; + and[43][i] = AND(); + and[43][i].a <== lt[20][i].out; + and[43][i].b <== lt[21][i].out; eq[61][i] = IsEqual(); eq[61][i].in[0] <== in[i]; - eq[61][i].in[1] <== 47; + eq[61][i].in[1] <== 33; eq[62][i] = IsEqual(); eq[62][i].in[0] <== in[i]; - eq[62][i].in[1] <== 48; + eq[62][i].in[1] <== 35; eq[63][i] = IsEqual(); eq[63][i].in[0] <== in[i]; - eq[63][i].in[1] <== 49; + eq[63][i].in[1] <== 36; eq[64][i] = IsEqual(); eq[64][i].in[0] <== in[i]; - eq[64][i].in[1] <== 50; + eq[64][i].in[1] <== 37; eq[65][i] = IsEqual(); eq[65][i].in[0] <== in[i]; - eq[65][i].in[1] <== 51; + eq[65][i].in[1] <== 38; eq[66][i] = IsEqual(); eq[66][i].in[0] <== in[i]; - eq[66][i].in[1] <== 52; + eq[66][i].in[1] <== 39; eq[67][i] = IsEqual(); eq[67][i].in[0] <== in[i]; - eq[67][i].in[1] <== 53; + eq[67][i].in[1] <== 42; eq[68][i] = IsEqual(); eq[68][i].in[0] <== in[i]; - eq[68][i].in[1] <== 54; + eq[68][i].in[1] <== 43; eq[69][i] = IsEqual(); eq[69][i].in[0] <== in[i]; - eq[69][i].in[1] <== 55; + eq[69][i].in[1] <== 44; eq[70][i] = IsEqual(); eq[70][i].in[0] <== in[i]; - eq[70][i].in[1] <== 56; + eq[70][i].in[1] <== 45; eq[71][i] = IsEqual(); eq[71][i].in[0] <== in[i]; - eq[71][i].in[1] <== 57; + eq[71][i].in[1] <== 46; eq[72][i] = IsEqual(); eq[72][i].in[0] <== in[i]; - eq[72][i].in[1] <== 61; + eq[72][i].in[1] <== 47; eq[73][i] = IsEqual(); eq[73][i].in[0] <== in[i]; - eq[73][i].in[1] <== 63; - and[32][i] = AND(); - and[32][i].a <== states[i][9]; - multi_or[7][i] = MultiOR(26); - multi_or[7][i].in[0] <== and[30][i].out; - multi_or[7][i].in[1] <== and[31][i].out; - multi_or[7][i].in[2] <== eq[50][i].out; - multi_or[7][i].in[3] <== eq[51][i].out; - multi_or[7][i].in[4] <== eq[52][i].out; - multi_or[7][i].in[5] <== eq[53][i].out; - multi_or[7][i].in[6] <== eq[54][i].out; - multi_or[7][i].in[7] <== eq[55][i].out; - multi_or[7][i].in[8] <== eq[56][i].out; - multi_or[7][i].in[9] <== eq[57][i].out; - multi_or[7][i].in[10] <== eq[58][i].out; - multi_or[7][i].in[11] <== eq[59][i].out; - multi_or[7][i].in[12] <== eq[60][i].out; - multi_or[7][i].in[13] <== eq[61][i].out; - multi_or[7][i].in[14] <== eq[62][i].out; - multi_or[7][i].in[15] <== eq[63][i].out; - multi_or[7][i].in[16] <== eq[64][i].out; - multi_or[7][i].in[17] <== eq[65][i].out; - multi_or[7][i].in[18] <== eq[66][i].out; - multi_or[7][i].in[19] <== eq[67][i].out; - multi_or[7][i].in[20] <== eq[68][i].out; - multi_or[7][i].in[21] <== eq[69][i].out; - multi_or[7][i].in[22] <== eq[70][i].out; - multi_or[7][i].in[23] <== eq[71][i].out; - multi_or[7][i].in[24] <== eq[72][i].out; - multi_or[7][i].in[25] <== eq[73][i].out; - and[32][i].b <== multi_or[7][i].out; - and[33][i] = AND(); - and[33][i].a <== states[i][10]; - and[33][i].b <== multi_or[7][i].out; - multi_or[8][i] = MultiOR(2); - multi_or[8][i].in[0] <== and[32][i].out; - multi_or[8][i].in[1] <== and[33][i].out; - states[i+1][10] <== multi_or[8][i].out; + eq[73][i].in[1] <== 48; eq[74][i] = IsEqual(); eq[74][i].in[0] <== in[i]; - eq[74][i].in[1] <== 64; - and[34][i] = AND(); - and[34][i].a <== states[i][10]; - and[34][i].b <== eq[74][i].out; - states[i+1][11] <== and[34][i].out; - lt[16][i] = LessEqThan(8); - lt[16][i].in[0] <== 97; - lt[16][i].in[1] <== in[i]; - lt[17][i] = LessEqThan(8); - lt[17][i].in[0] <== in[i]; - lt[17][i].in[1] <== 122; - and[35][i] = AND(); - and[35][i].a <== lt[16][i].out; - and[35][i].b <== lt[17][i].out; + eq[74][i].in[1] <== 49; eq[75][i] = IsEqual(); eq[75][i].in[0] <== in[i]; - eq[75][i].in[1] <== 95; - and[36][i] = AND(); - and[36][i].a <== states[i][11]; - multi_or[9][i] = MultiOR(15); - multi_or[9][i].in[0] <== and[30][i].out; - multi_or[9][i].in[1] <== and[35][i].out; - multi_or[9][i].in[2] <== eq[59][i].out; - multi_or[9][i].in[3] <== eq[60][i].out; - multi_or[9][i].in[4] <== eq[62][i].out; - multi_or[9][i].in[5] <== eq[63][i].out; - multi_or[9][i].in[6] <== eq[64][i].out; - multi_or[9][i].in[7] <== eq[65][i].out; - multi_or[9][i].in[8] <== eq[66][i].out; - multi_or[9][i].in[9] <== eq[67][i].out; - multi_or[9][i].in[10] <== eq[68][i].out; - multi_or[9][i].in[11] <== eq[69][i].out; - multi_or[9][i].in[12] <== eq[70][i].out; - multi_or[9][i].in[13] <== eq[71][i].out; - multi_or[9][i].in[14] <== eq[75][i].out; - and[36][i].b <== multi_or[9][i].out; - and[37][i] = AND(); - and[37][i].a <== states[i][12]; - and[37][i].b <== multi_or[9][i].out; - multi_or[10][i] = MultiOR(2); - multi_or[10][i].in[0] <== and[36][i].out; - multi_or[10][i].in[1] <== and[37][i].out; - states[i+1][12] <== multi_or[10][i].out; + eq[75][i].in[1] <== 50; eq[76][i] = IsEqual(); eq[76][i].in[0] <== in[i]; - eq[76][i].in[1] <== 62; - and[38][i] = AND(); - and[38][i].a <== states[i][12]; - and[38][i].b <== eq[76][i].out; - states[i+1][13] <== and[38][i].out; + eq[76][i].in[1] <== 51; + eq[77][i] = IsEqual(); + eq[77][i].in[0] <== in[i]; + eq[77][i].in[1] <== 52; + eq[78][i] = IsEqual(); + eq[78][i].in[0] <== in[i]; + eq[78][i].in[1] <== 53; + eq[79][i] = IsEqual(); + eq[79][i].in[0] <== in[i]; + eq[79][i].in[1] <== 54; + eq[80][i] = IsEqual(); + eq[80][i].in[0] <== in[i]; + eq[80][i].in[1] <== 55; + eq[81][i] = IsEqual(); + eq[81][i].in[0] <== in[i]; + 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] <== 61; + eq[84][i] = IsEqual(); + eq[84][i].in[0] <== in[i]; + eq[84][i].in[1] <== 63; + and[44][i] = AND(); + and[44][i].a <== states[i][9]; + multi_or[15][i] = MultiOR(26); + multi_or[15][i].in[0] <== and[42][i].out; + multi_or[15][i].in[1] <== and[43][i].out; + multi_or[15][i].in[2] <== eq[61][i].out; + multi_or[15][i].in[3] <== eq[62][i].out; + multi_or[15][i].in[4] <== eq[63][i].out; + multi_or[15][i].in[5] <== eq[64][i].out; + multi_or[15][i].in[6] <== eq[65][i].out; + multi_or[15][i].in[7] <== eq[66][i].out; + multi_or[15][i].in[8] <== eq[67][i].out; + multi_or[15][i].in[9] <== eq[68][i].out; + multi_or[15][i].in[10] <== eq[69][i].out; + multi_or[15][i].in[11] <== eq[70][i].out; + multi_or[15][i].in[12] <== eq[71][i].out; + multi_or[15][i].in[13] <== eq[72][i].out; + multi_or[15][i].in[14] <== eq[73][i].out; + multi_or[15][i].in[15] <== eq[74][i].out; + multi_or[15][i].in[16] <== eq[75][i].out; + multi_or[15][i].in[17] <== eq[76][i].out; + multi_or[15][i].in[18] <== eq[77][i].out; + multi_or[15][i].in[19] <== eq[78][i].out; + multi_or[15][i].in[20] <== eq[79][i].out; + multi_or[15][i].in[21] <== eq[80][i].out; + multi_or[15][i].in[22] <== eq[81][i].out; + multi_or[15][i].in[23] <== eq[82][i].out; + multi_or[15][i].in[24] <== eq[83][i].out; + multi_or[15][i].in[25] <== eq[84][i].out; + and[44][i].b <== multi_or[15][i].out; + and[45][i] = AND(); + and[45][i].a <== states[i][10]; + and[45][i].b <== multi_or[15][i].out; + multi_or[16][i] = MultiOR(2); + multi_or[16][i].in[0] <== and[44][i].out; + multi_or[16][i].in[1] <== and[45][i].out; + states[i+1][10] <== multi_or[16][i].out; + and[46][i] = AND(); + and[46][i].a <== states[i][10]; + and[46][i].b <== eq[55][i].out; + states[i+1][11] <== and[46][i].out; + lt[22][i] = LessEqThan(8); + lt[22][i].in[0] <== 97; + lt[22][i].in[1] <== in[i]; + lt[23][i] = LessEqThan(8); + lt[23][i].in[0] <== in[i]; + lt[23][i].in[1] <== 122; + and[47][i] = AND(); + and[47][i].a <== lt[22][i].out; + and[47][i].b <== lt[23][i].out; + eq[85][i] = IsEqual(); + eq[85][i].in[0] <== in[i]; + eq[85][i].in[1] <== 95; + and[48][i] = AND(); + and[48][i].a <== states[i][11]; + multi_or[17][i] = MultiOR(15); + multi_or[17][i].in[0] <== and[42][i].out; + multi_or[17][i].in[1] <== and[47][i].out; + multi_or[17][i].in[2] <== eq[70][i].out; + multi_or[17][i].in[3] <== eq[71][i].out; + multi_or[17][i].in[4] <== eq[73][i].out; + multi_or[17][i].in[5] <== eq[74][i].out; + multi_or[17][i].in[6] <== eq[75][i].out; + multi_or[17][i].in[7] <== eq[76][i].out; + multi_or[17][i].in[8] <== eq[77][i].out; + multi_or[17][i].in[9] <== eq[78][i].out; + multi_or[17][i].in[10] <== eq[79][i].out; + multi_or[17][i].in[11] <== eq[80][i].out; + multi_or[17][i].in[12] <== eq[81][i].out; + multi_or[17][i].in[13] <== eq[82][i].out; + multi_or[17][i].in[14] <== eq[85][i].out; + and[48][i].b <== multi_or[17][i].out; + and[49][i] = AND(); + and[49][i].a <== states[i][12]; + and[49][i].b <== multi_or[17][i].out; + multi_or[18][i] = MultiOR(2); + multi_or[18][i].in[0] <== and[48][i].out; + multi_or[18][i].in[1] <== and[49][i].out; + states[i+1][12] <== multi_or[18][i].out; + and[50][i] = AND(); + and[50][i].a <== states[i][12]; + and[50][i].b <== eq[54][i].out; + states[i+1][13] <== and[50][i].out; from_zero_enabled[i] <== MultiNOR(13)([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][9], states[i+1][10], states[i+1][11], states[i+1][12], states[i+1][13]]); 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]); + states[i+1][2] <== MultiOR(2)([states_tmp[i+1][2], from_zero_enabled[i] * and[10][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[20][i].out]); + states[i+1][5] <== MultiOR(2)([states_tmp[i+1][5], from_zero_enabled[i] * and[23][i].out]); + states[i+1][6] <== MultiOR(2)([states_tmp[i+1][6], from_zero_enabled[i] * and[26][i].out]); + states[i+1][7] <== MultiOR(2)([states_tmp[i+1][7], from_zero_enabled[i] * and[29][i].out]); + states[i+1][8] <== MultiOR(2)([states_tmp[i+1][8], from_zero_enabled[i] * and[33][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]; diff --git a/packages/circom/tests/from_addr.test.js b/packages/circom/tests/from_addr.test.js index 35959be..234abd9 100644 --- a/packages/circom/tests/from_addr.test.js +++ b/packages/circom/tests/from_addr.test.js @@ -217,17 +217,15 @@ describe("From Addr Regex", () => { }); it("invalid from field", async () => { - const fromStr = "\r\n to:from:Sora Suegami \r\n"; + const fromStr = "\r\nto:from:Sora Suegami \r\n"; const paddedStr = apis.padString(fromStr, 1024); const circuitInputs = { msg: paddedStr, }; - const witness = await circuit.calculateWitness(circuitInputs); - await circuit.checkConstraints(witness); - expect(0n).toEqual(witness[1]); - for (let idx = 0; idx < 1024; ++idx) { - expect(0n).toEqual(witness[2 + idx]); + async function failFn() { + await circuit.calculateWitness(circuitInputs); } + await expect(failFn).rejects.toThrow(); }); }); diff --git a/packages/circom/tests/to_addr.test.js b/packages/circom/tests/to_addr.test.js index 19fd4b1..e981147 100644 --- a/packages/circom/tests/to_addr.test.js +++ b/packages/circom/tests/to_addr.test.js @@ -221,10 +221,9 @@ describe("To Addr Regex", () => { const circuitInputs = { msg: paddedStr, }; - const witness = await circuit.calculateWitness(circuitInputs); - await circuit.checkConstraints(witness); - for (let idx = 0; idx < 1024; ++idx) { - expect(0n).toEqual(witness[2 + idx]); + async function failFn() { + await circuit.calculateWitness(circuitInputs); } + await expect(failFn).rejects.toThrow(); }); }); diff --git a/packages/compiler/src/regex.rs b/packages/compiler/src/regex.rs index ba59725..ddf7a69 100644 --- a/packages/compiler/src/regex.rs +++ b/packages/compiler/src/regex.rs @@ -29,7 +29,7 @@ fn parse_dfa_output(output: &str) -> DFAGraphInfo { if &captures[0][0..1] == "*" { state.typ = String::from("accept"); } - for transition in Regex::new(r"\s+[^=]+\s*=>\s*(\d+)+\s*|\s+=+\s*=>\s*(\d+)+") + for transition in Regex::new(r"\s+[^=]+\s*=>\s*(\d+)+\s*|\s+=+\s*=>\s*(\d+)+|\s+=-[^=]+=>\s*\s*(\d+)+\s*|\s+[^=]+-=\s*=>\s*(\d+)+\s*") .unwrap() .captures_iter(&captures[0].to_string()) {