From 2e2bbc9be92f7247dc541a7682164011f84352df Mon Sep 17 00:00:00 2001 From: SoraSuegami Date: Sun, 11 Feb 2024 07:45:40 +0900 Subject: [PATCH] Fix compiler test. --- .../circom/circuits/common/body_hash_regex.circom | 2 +- .../circuits/common/email_addr_regex.circom | 2 +- .../common/email_addr_with_name_regex.circom | 2 +- .../circuits/common/email_domain_regex.circom | 2 +- .../circom/circuits/common/from_all_regex.circom | 2 +- .../circuits/common/message_id_regex.circom | 2 +- .../circuits/common/subject_all_regex.circom | 2 +- .../circom/circuits/common/timestamp_regex.circom | 2 +- .../circom/circuits/common/to_all_regex.circom | 2 +- .../circom/tests/circuits/negate1_regex.circom | 2 +- .../circom/tests/circuits/simple_regex.circom | 4 +++- .../tests/circuits/simple_regex_decomposed.circom | 2 +- packages/compiler/src/circom.rs | 15 +++++++-------- packages/compiler/src/lib.rs | 8 +++++--- 14 files changed, 26 insertions(+), 23 deletions(-) diff --git a/packages/circom/circuits/common/body_hash_regex.circom b/packages/circom/circuits/common/body_hash_regex.circom index 847ccef..5cd99be 100644 --- a/packages/circom/circuits/common/body_hash_regex.circom +++ b/packages/circom/circuits/common/body_hash_regex.circom @@ -504,12 +504,12 @@ template BodyHashRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][8] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(5, 5), (3, 5)}] signal is_substr0[msg_bytes][3]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; for (var i = 0; i < msg_bytes; i++) { is_substr0[i][0] <== 0; + // the 0-th substring transitions: [(3, 5), (5, 5)] is_substr0[i][1] <== is_substr0[i][0] + states[i+1][3] * states[i+2][5]; is_substr0[i][2] <== is_substr0[i][1] + states[i+1][5] * states[i+2][5]; is_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1]; diff --git a/packages/circom/circuits/common/email_addr_regex.circom b/packages/circom/circuits/common/email_addr_regex.circom index 9eb2619..39d55c9 100644 --- a/packages/circom/circuits/common/email_addr_regex.circom +++ b/packages/circom/circuits/common/email_addr_regex.circom @@ -249,12 +249,12 @@ template EmailAddrRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][3] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(1, 1), (0, 1), (3, 3), (1, 2), (2, 3)}] signal is_substr0[msg_bytes][6]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; for (var i = 0; i < msg_bytes; i++) { is_substr0[i][0] <== 0; + // the 0-th substring transitions: [(0, 1), (1, 1), (1, 2), (2, 3), (3, 3)] is_substr0[i][1] <== is_substr0[i][0] + states[i+1][0] * states[i+2][1]; is_substr0[i][2] <== is_substr0[i][1] + states[i+1][1] * states[i+2][1]; is_substr0[i][3] <== is_substr0[i][2] + states[i+1][1] * states[i+2][2]; 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 3d3575f..30dd128 100644 --- a/packages/circom/circuits/common/email_addr_with_name_regex.circom +++ b/packages/circom/circuits/common/email_addr_with_name_regex.circom @@ -581,12 +581,12 @@ template EmailAddrWithNameRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][3] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(5, 4), (2, 2), (4, 5), (4, 4), (6, 2), (6, 4), (5, 6), (5, 5), (2, 4)}] signal is_substr0[msg_bytes][10]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; for (var i = 0; i < msg_bytes; i++) { is_substr0[i][0] <== 0; + // the 0-th substring transitions: [(2, 2), (2, 4), (4, 4), (4, 5), (5, 4), (5, 5), (5, 6), (6, 2), (6, 4)] is_substr0[i][1] <== is_substr0[i][0] + states[i+1][2] * states[i+2][2]; is_substr0[i][2] <== is_substr0[i][1] + states[i+1][2] * states[i+2][4]; is_substr0[i][3] <== is_substr0[i][2] + states[i+1][4] * states[i+2][4]; diff --git a/packages/circom/circuits/common/email_domain_regex.circom b/packages/circom/circuits/common/email_domain_regex.circom index c367bf1..620116a 100644 --- a/packages/circom/circuits/common/email_domain_regex.circom +++ b/packages/circom/circuits/common/email_domain_regex.circom @@ -249,12 +249,12 @@ template EmailDomainRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][3] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(2, 3), (3, 3)}] signal is_substr0[msg_bytes][3]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; for (var i = 0; i < msg_bytes; i++) { is_substr0[i][0] <== 0; + // the 0-th substring transitions: [(2, 3), (3, 3)] is_substr0[i][1] <== is_substr0[i][0] + states[i+1][2] * states[i+2][3]; is_substr0[i][2] <== is_substr0[i][1] + states[i+1][3] * states[i+2][3]; is_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1]; diff --git a/packages/circom/circuits/common/from_all_regex.circom b/packages/circom/circuits/common/from_all_regex.circom index b57e074..291815b 100644 --- a/packages/circom/circuits/common/from_all_regex.circom +++ b/packages/circom/circuits/common/from_all_regex.circom @@ -194,12 +194,12 @@ template FromAllRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][10] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(1, 1), (8, 1)}] signal is_substr0[msg_bytes][3]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; for (var i = 0; i < msg_bytes; i++) { is_substr0[i][0] <== 0; + // the 0-th substring transitions: [(1, 1), (8, 1)] is_substr0[i][1] <== is_substr0[i][0] + states[i+1][1] * states[i+2][1]; is_substr0[i][2] <== is_substr0[i][1] + states[i+1][8] * states[i+2][1]; is_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1]; diff --git a/packages/circom/circuits/common/message_id_regex.circom b/packages/circom/circuits/common/message_id_regex.circom index e15e9e8..4f8131b 100644 --- a/packages/circom/circuits/common/message_id_regex.circom +++ b/packages/circom/circuits/common/message_id_regex.circom @@ -271,12 +271,12 @@ template MessageIdRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][7] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(1, 1), (1, 4), (17, 18), (18, 1)}] signal is_substr0[msg_bytes][5]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; for (var i = 0; i < msg_bytes; i++) { is_substr0[i][0] <== 0; + // the 0-th substring transitions: [(1, 1), (1, 4), (17, 18), (18, 1)] is_substr0[i][1] <== is_substr0[i][0] + states[i+1][1] * states[i+2][1]; is_substr0[i][2] <== is_substr0[i][1] + states[i+1][1] * states[i+2][4]; is_substr0[i][3] <== is_substr0[i][2] + states[i+1][17] * states[i+2][18]; diff --git a/packages/circom/circuits/common/subject_all_regex.circom b/packages/circom/circuits/common/subject_all_regex.circom index 0f26ad4..ab6392b 100644 --- a/packages/circom/circuits/common/subject_all_regex.circom +++ b/packages/circom/circuits/common/subject_all_regex.circom @@ -218,12 +218,12 @@ template SubjectAllRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][13] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(12, 1), (1, 1)}] signal is_substr0[msg_bytes][3]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; for (var i = 0; i < msg_bytes; i++) { is_substr0[i][0] <== 0; + // the 0-th substring transitions: [(1, 1), (12, 1)] is_substr0[i][1] <== is_substr0[i][0] + states[i+1][1] * states[i+2][1]; is_substr0[i][2] <== is_substr0[i][1] + states[i+1][12] * states[i+2][1]; is_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1]; diff --git a/packages/circom/circuits/common/timestamp_regex.circom b/packages/circom/circuits/common/timestamp_regex.circom index 11699cd..13910b2 100644 --- a/packages/circom/circuits/common/timestamp_regex.circom +++ b/packages/circom/circuits/common/timestamp_regex.circom @@ -401,12 +401,12 @@ template TimestampRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][5] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(26, 3), (3, 3)}] signal is_substr0[msg_bytes][3]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; for (var i = 0; i < msg_bytes; i++) { is_substr0[i][0] <== 0; + // the 0-th substring transitions: [(3, 3), (26, 3)] is_substr0[i][1] <== is_substr0[i][0] + states[i+1][3] * states[i+2][3]; is_substr0[i][2] <== is_substr0[i][1] + states[i+1][26] * states[i+2][3]; is_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1]; diff --git a/packages/circom/circuits/common/to_all_regex.circom b/packages/circom/circuits/common/to_all_regex.circom index 06f6c17..1ba5d4f 100644 --- a/packages/circom/circuits/common/to_all_regex.circom +++ b/packages/circom/circuits/common/to_all_regex.circom @@ -178,12 +178,12 @@ template ToAllRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][8] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(6, 1), (1, 1)}] signal is_substr0[msg_bytes][3]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; for (var i = 0; i < msg_bytes; i++) { is_substr0[i][0] <== 0; + // the 0-th substring transitions: [(1, 1), (6, 1)] is_substr0[i][1] <== is_substr0[i][0] + states[i+1][1] * states[i+2][1]; is_substr0[i][2] <== is_substr0[i][1] + states[i+1][6] * states[i+2][1]; is_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1]; diff --git a/packages/circom/tests/circuits/negate1_regex.circom b/packages/circom/tests/circuits/negate1_regex.circom index f0d7788..2b77730 100644 --- a/packages/circom/tests/circuits/negate1_regex.circom +++ b/packages/circom/tests/circuits/negate1_regex.circom @@ -109,12 +109,12 @@ template Negate1Regex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][4] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(1, 1), (3, 1)}] signal is_substr0[msg_bytes][3]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; for (var i = 0; i < msg_bytes; i++) { is_substr0[i][0] <== 0; + // the 0-th substring transitions: [(1, 1), (3, 1)] is_substr0[i][1] <== is_substr0[i][0] + states[i+1][1] * states[i+2][1]; is_substr0[i][2] <== is_substr0[i][1] + states[i+1][3] * states[i+2][1]; is_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1]; diff --git a/packages/circom/tests/circuits/simple_regex.circom b/packages/circom/tests/circuits/simple_regex.circom index 3f499c1..a862e51 100644 --- a/packages/circom/tests/circuits/simple_regex.circom +++ b/packages/circom/tests/circuits/simple_regex.circom @@ -129,12 +129,12 @@ template SimpleRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][9] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(2, 3)}, {(6, 7), (7, 7)}, {(8, 9)}] signal is_substr0[msg_bytes][2]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; for (var i = 0; i < msg_bytes; i++) { is_substr0[i][0] <== 0; + // the 0-th substring transitions: [(2, 3)] is_substr0[i][1] <== is_substr0[i][0] + states[i+1][2] * states[i+2][3]; is_reveal0[i] <== is_substr0[i][1] * is_consecutive[i][1]; reveal0[i] <== in[i+1] * is_reveal0[i]; @@ -144,6 +144,7 @@ template SimpleRegex(msg_bytes) { signal output reveal1[msg_bytes]; for (var i = 0; i < msg_bytes; i++) { is_substr1[i][0] <== 0; + // the 1-th substring transitions: [(6, 7), (7, 7)] is_substr1[i][1] <== is_substr1[i][0] + states[i+1][6] * states[i+2][7]; is_substr1[i][2] <== is_substr1[i][1] + states[i+1][7] * states[i+2][7]; is_reveal1[i] <== is_substr1[i][2] * is_consecutive[i][1]; @@ -154,6 +155,7 @@ template SimpleRegex(msg_bytes) { signal output reveal2[msg_bytes]; for (var i = 0; i < msg_bytes; i++) { is_substr2[i][0] <== 0; + // the 2-th substring transitions: [(8, 9)] is_substr2[i][1] <== is_substr2[i][0] + states[i+1][8] * states[i+2][9]; is_reveal2[i] <== is_substr2[i][1] * is_consecutive[i][1]; reveal2[i] <== in[i+1] * is_reveal2[i]; diff --git a/packages/circom/tests/circuits/simple_regex_decomposed.circom b/packages/circom/tests/circuits/simple_regex_decomposed.circom index 9435091..4eef307 100644 --- a/packages/circom/tests/circuits/simple_regex_decomposed.circom +++ b/packages/circom/tests/circuits/simple_regex_decomposed.circom @@ -274,12 +274,12 @@ template SimpleRegexDecomposed(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][4] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(23, 1), (1, 1)}] signal is_substr0[msg_bytes][3]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; for (var i = 0; i < msg_bytes; i++) { is_substr0[i][0] <== 0; + // the 0-th substring transitions: [(1, 1), (23, 1)] is_substr0[i][1] <== is_substr0[i][0] + states[i+1][1] * states[i+2][1]; is_substr0[i][2] <== is_substr0[i][1] + states[i+1][23] * states[i+2][1]; is_reveal0[i] <== is_substr0[i][2] * is_consecutive[i][1]; diff --git a/packages/compiler/src/circom.rs b/packages/compiler/src/circom.rs index ef0a820..790c4f7 100644 --- a/packages/compiler/src/circom.rs +++ b/packages/compiler/src/circom.rs @@ -4,15 +4,9 @@ use crate::js_caller::*; use crate::RegexAndDFA; // use crate::{AllstrRegexDef, SubstrRegexDef}; - - - - - +use std::fs::File; use std::io::Write; use std::path::PathBuf; -use std::{fs::File}; - impl RegexAndDFA { pub fn gen_circom( @@ -48,7 +42,11 @@ impl RegexAndDFA { circom += "\t}\n"; let substr_defs_array = &self.substrs_defs.substr_defs_array; - circom += &format!("\t// substrings calculated: {:?}\n", &self.substrs_defs.substr_defs_array); + // circom += &format!( + // "\t// substrings calculated: {:?}\n", + // &self.substrs_defs.substr_defs_array + // ); + for (idx, defs) in substr_defs_array.into_iter().enumerate() { let num_defs = defs.len(); circom += &format!("\tsignal is_substr{}[msg_bytes][{}];\n", idx, num_defs + 1); @@ -66,6 +64,7 @@ impl RegexAndDFA { start_cmp } }); + circom += &format!("\t\t // the {}-th substring transitions: {:?}\n", idx, defs); for (j, (cur, next)) in defs.iter().enumerate() { circom += &format!( "\t\tis_substr{}[i][{}] <== is_substr{}[i][{}] + ", diff --git a/packages/compiler/src/lib.rs b/packages/compiler/src/lib.rs index 31ddddf..7331a64 100644 --- a/packages/compiler/src/lib.rs +++ b/packages/compiler/src/lib.rs @@ -542,14 +542,16 @@ mod tests { #[test] fn test_gen_from_decomposed() { - let decomposed_regex_path = Path::new("../circuits/common/subject_all.json"); - let circom_file_path = Some("../circuits/common/subject_all_regex.circom"); + let project_root = PathBuf::new().join(env!("CARGO_MANIFEST_DIR")); + let decomposed_regex_path = project_root.join("../circom/circuits/common/subject_all.json"); + let circom_file_path = + project_root.join("../circom/circuits/common/subject_all_regex.circom"); let circom_template_name = Some("SubjectAllRegex"); let gen_substrs = Some(true); let result = gen_from_decomposed( decomposed_regex_path.to_str().unwrap(), - circom_file_path.map(|s| s), + Some(circom_file_path.to_str().unwrap()), circom_template_name.map(|s| s), gen_substrs, );