diff --git a/.gitignore b/.gitignore index 1529d3b..ee605be 100644 --- a/.gitignore +++ b/.gitignore @@ -41,12 +41,6 @@ build/Release node_modules/ jspm_packages/ -# TypeScript v1 declaration files -typings/ - -# TypeScript cache -*.tsbuildinfo - # Optional npm cache directory .npm diff --git a/Cargo.lock b/Cargo.lock index ea8d587..168ed22 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,21 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "addr2line" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - [[package]] name = "ahash" version = "0.8.7" @@ -85,27 +70,6 @@ version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "backtrace" -version = "0.3.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - [[package]] name = "bit-set" version = "0.5.3" @@ -133,21 +97,6 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" -[[package]] -name = "bytes" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" - -[[package]] -name = "cc" -version = "1.0.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "libc", -] - [[package]] name = "cfg-if" version = "1.0.0" @@ -220,12 +169,6 @@ dependencies = [ "windows-sys 0.45.0", ] -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - [[package]] name = "darling" version = "0.10.2" @@ -261,101 +204,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "data-encoding" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" - -[[package]] -name = "debugid" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" -dependencies = [ - "serde", - "uuid", -] - -[[package]] -name = "deno-proc-macro-rules" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c65c2ffdafc1564565200967edc4851c7b55422d3913466688907efd05ea26f" -dependencies = [ - "deno-proc-macro-rules-macros", - "proc-macro2", - "syn 2.0.41", -] - -[[package]] -name = "deno-proc-macro-rules-macros" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3047b312b7451e3190865713a4dd6e1f821aed614ada219766ebc3024a690435" -dependencies = [ - "once_cell", - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "deno_core" -version = "0.209.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c48ff1f83aeeda4b8ed9c101b85380fd2f25a52268130546c610c8e412911d7b" -dependencies = [ - "anyhow", - "bytes", - "deno_ops", - "deno_unsync", - "futures", - "indexmap 1.9.3", - "libc", - "log", - "once_cell", - "parking_lot", - "pin-project", - "serde", - "serde_json", - "serde_v8", - "smallvec", - "sourcemap", - "tokio", - "url", - "v8", -] - -[[package]] -name = "deno_ops" -version = "0.87.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "573a5ae66f76ce159525ab9007433e19d1a074e32c27b17a4753780d659d79fa" -dependencies = [ - "deno-proc-macro-rules", - "lazy-regex", - "once_cell", - "pmutil", - "proc-macro-crate", - "proc-macro2", - "quote", - "regex", - "strum", - "strum_macros", - "syn 2.0.41", - "thiserror", -] - -[[package]] -name = "deno_unsync" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac0984205f25e71ddd1be603d76e70255953c12ff864707359ab195d26dfc7b3" -dependencies = [ - "tokio", -] - [[package]] name = "derive_builder" version = "0.9.0" @@ -381,19 +229,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version 0.4.0", - "syn 1.0.109", -] - [[package]] name = "either" version = "1.9.0" @@ -438,114 +273,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "fslock" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57eafdd0c16f57161105ae1b98a1238f97645f2f588438b2949c99a2af9616bf" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "futures" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" - -[[package]] -name = "futures-executor" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" - -[[package]] -name = "futures-macro" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "futures-sink" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" - -[[package]] -name = "futures-task" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" - -[[package]] -name = "futures-util" -version = "0.3.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - [[package]] name = "getrandom" version = "0.2.11" @@ -557,12 +284,6 @@ dependencies = [ "wasi", ] -[[package]] -name = "gimli" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" - [[package]] name = "graph-cycles" version = "0.1.0" @@ -574,12 +295,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - [[package]] name = "hashbrown" version = "0.14.3" @@ -598,47 +313,12 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" -[[package]] -name = "home" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" -dependencies = [ - "windows-sys 0.48.0", -] - [[package]] name = "ident_case" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "if_chain" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - [[package]] name = "indexmap" version = "2.1.0" @@ -646,7 +326,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown", ] [[package]] @@ -675,50 +355,6 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" -[[package]] -name = "js-sandbox" -version = "0.2.0-rc.2" -source = "git+https://github.com/Bromeon/js-sandbox.git?tag=0.2.0-rc.2#b2946540aa1d67068b659bae5b867ffc4d9739dc" -dependencies = [ - "deno_core", - "js-sandbox-macros", - "serde", - "serde_json", -] - -[[package]] -name = "js-sandbox-macros" -version = "0.2.0-rc.2" -source = "git+https://github.com/Bromeon/js-sandbox.git?tag=0.2.0-rc.2#b2946540aa1d67068b659bae5b867ffc4d9739dc" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "lazy-regex" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff63c423c68ea6814b7da9e88ce585f793c87ddd9e78f646970891769c8235d4" -dependencies = [ - "lazy-regex-proc_macros", - "once_cell", - "regex", -] - -[[package]] -name = "lazy-regex-proc_macros" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8edfc11b8f56ce85e207e62ea21557cfa09bb24a8f6b04ae181b086ff8611c22" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 1.0.109", -] - [[package]] name = "libc" version = "0.2.151" @@ -741,48 +377,12 @@ version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" -[[package]] -name = "lock_api" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" - [[package]] name = "memchr" version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" -[[package]] -name = "miniz_oxide" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.48.0", -] - [[package]] name = "neon" version = "0.10.1" @@ -792,7 +392,7 @@ dependencies = [ "neon-build", "neon-macros", "neon-runtime", - "semver 0.9.0", + "semver", "smallvec", ] @@ -824,91 +424,12 @@ dependencies = [ "smallvec", ] -[[package]] -name = "num-bigint" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", - "rand", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "object" -version = "0.32.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" -dependencies = [ - "memchr", -] - [[package]] name = "once_cell" version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.48.5", -] - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - [[package]] name = "petgraph" version = "0.6.4" @@ -916,60 +437,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 2.1.0", -] - -[[package]] -name = "pin-project" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pmutil" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52a40bc70c2c58040d2d8b167ba9a5ff59fc9dab7ad44771cfde3dcfde7a09c6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit", + "indexmap", ] [[package]] @@ -990,30 +458,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" - -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "regex" version = "1.10.3" @@ -1043,30 +487,6 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver 1.0.20", -] - [[package]] name = "rustix" version = "0.38.28" @@ -1080,24 +500,12 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rustversion" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" - [[package]] name = "ryu" version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - [[package]] name = "semver" version = "0.9.0" @@ -1107,12 +515,6 @@ dependencies = [ "semver-parser", ] -[[package]] -name = "semver" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" - [[package]] name = "semver-parser" version = "0.7.0" @@ -1128,15 +530,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "serde_bytes" -version = "0.11.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff" -dependencies = [ - "serde", -] - [[package]] name = "serde_derive" version = "1.0.193" @@ -1154,78 +547,17 @@ version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ - "indexmap 2.1.0", "itoa", "ryu", "serde", ] -[[package]] -name = "serde_v8" -version = "0.120.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5424b4b41a92222abf9ddbdd78f59164f7594422ee4a61fc3704fc8ba608dc6" -dependencies = [ - "bytes", - "derive_more", - "num-bigint", - "serde", - "serde_bytes", - "smallvec", - "thiserror", - "v8", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" -dependencies = [ - "libc", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - [[package]] name = "smallvec" version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" -[[package]] -name = "socket2" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" -dependencies = [ - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "sourcemap" -version = "6.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4cbf65ca7dc576cf50e21f8d0712d96d4fcfd797389744b7b222a85cdf5bd90" -dependencies = [ - "data-encoding", - "debugid", - "if_chain", - "rustc_version 0.2.3", - "serde", - "serde_json", - "unicode-id", - "url", -] - [[package]] name = "strsim" version = "0.9.3" @@ -1238,28 +570,6 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" -[[package]] -name = "strum" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.41", -] - [[package]] name = "syn" version = "1.0.109" @@ -1324,131 +634,18 @@ dependencies = [ "syn 2.0.41", ] -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d45b238a16291a4e1584e61820b8ae57d696cc5015c459c229ccc6990cc1c" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "num_cpus", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys 0.48.0", -] - -[[package]] -name = "tokio-macros" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.41", -] - -[[package]] -name = "toml_datetime" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap 2.1.0", - "toml_datetime", - "winnow", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" - -[[package]] -name = "unicode-id" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1b6def86329695390197b82c1e244a54a131ceb66c996f2088a3876e2ae083f" - [[package]] name = "unicode-ident" version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "url" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - [[package]] name = "utf8parse" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" -[[package]] -name = "uuid" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" - -[[package]] -name = "v8" -version = "0.75.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0e0cb10989bf856c2fdd1b6bed1bc6f96148230aa0c954634299125c1f64230" -dependencies = [ - "bitflags 1.3.2", - "fslock", - "once_cell", - "which", -] - [[package]] name = "version_check" version = "0.9.4" @@ -1461,18 +658,6 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix", -] - [[package]] name = "winapi" version = "0.3.9" @@ -1693,15 +878,6 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" -[[package]] -name = "winnow" -version = "0.5.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c830786f7720c2fd27a1a0e27a709dbd3c4d009b56d098fc742d4f4eab91fe2" -dependencies = [ - "memchr", -] - [[package]] name = "zerocopy" version = "0.7.31" @@ -1743,7 +919,6 @@ dependencies = [ "fancy-regex", "graph-cycles", "itertools", - "js-sandbox", "neon", "petgraph", "regex", diff --git a/babel.config.js b/babel.config.js index df17070..4d0aa62 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,11 +1,8 @@ module.exports = { - presets: [ - ['@babel/preset-env', { targets: { node: 'current' } }], - '@babel/preset-typescript', - ['@babel/preset-react', { "runtime": "automatic" }], - ['jest'] - ], - plugins: [ - '@babel/plugin-transform-modules-commonjs', - ] -}; \ No newline at end of file + presets: [ + ["@babel/preset-env", { targets: { node: "current" } }], + ["@babel/preset-react", { runtime: "automatic" }], + ["jest"], + ], + plugins: ["@babel/plugin-transform-modules-commonjs"], +}; diff --git a/package.json b/package.json index 318c5b2..b5fb03a 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "install": "yarn workspaces -pt run install", "build": "yarn workspaces -pt run build", "postinstall": "cargo install --path ./packages/compiler", - "test": "npx tsc && yarn workspaces -pt run test", + "test": "yarn workspaces -pt run test", "upload-binary": "yarn workspaces -pt run upload-binary" }, "repository": { @@ -41,17 +41,14 @@ "@babel/plugin-transform-modules-commonjs": "^7.22.15", "@babel/preset-env": "^7.22.2", "@babel/preset-react": "^7.22.0", - "@babel/preset-typescript": "^7.21.5", "@types/jest": "^29.5.4", "babel-jest": "^29.5.0", "babel-preset-jest": "^29.5.0", "jest": "^29.5.0", "prettier": "^3.0.0", - "prettier-plugin-solidity": "^1.1.3", - "ts-jest": "^29.1.1", - "typescript": "^4.5.4" + "prettier-plugin-solidity": "^1.1.3" }, "engines": { "yarn": "^1.22.0" } -} \ No newline at end of file +} diff --git a/packages/circom/circuits/common/body_hash_regex.circom b/packages/circom/circuits/common/body_hash_regex.circom index a341469..ed82ac3 100644 --- a/packages/circom/circuits/common/body_hash_regex.circom +++ b/packages/circom/circuits/common/body_hash_regex.circom @@ -17,7 +17,7 @@ template BodyHashRegex(msg_bytes) { component eq[89][num_bytes]; component lt[24][num_bytes]; component and[76][num_bytes]; - component multi_or[25][num_bytes]; + component multi_or[24][num_bytes]; signal states[num_bytes+1][35]; component state_changed[num_bytes]; @@ -192,7 +192,7 @@ template BodyHashRegex(msg_bytes) { and[20][i].a <== lt[2][i].out; and[20][i].b <== lt[3][i].out; and[21][i] = AND(); - and[21][i].a <== states[i][17]; + and[21][i].a <== states[i][18]; and[21][i].b <== and[20][i].out; lt[4][i] = LessEqThan(8); lt[4][i].in[0] <== 105; @@ -205,10 +205,10 @@ template BodyHashRegex(msg_bytes) { and[22][i].b <== lt[5][i].out; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 102; + eq[16][i].in[1] <== 99; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 99; + eq[17][i].in[1] <== 102; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; eq[18][i].in[1] <== 98; @@ -217,18 +217,18 @@ template BodyHashRegex(msg_bytes) { multi_or[2][i] = MultiOR(8); multi_or[2][i].in[0] <== and[22][i].out; multi_or[2][i].in[1] <== eq[16][i].out; - multi_or[2][i].in[2] <== eq[0][i].out; - multi_or[2][i].in[3] <== eq[17][i].out; - multi_or[2][i].in[4] <== eq[18][i].out; - multi_or[2][i].in[5] <== eq[14][i].out; + multi_or[2][i].in[2] <== eq[17][i].out; + multi_or[2][i].in[3] <== eq[10][i].out; + multi_or[2][i].in[4] <== eq[14][i].out; + multi_or[2][i].in[5] <== eq[18][i].out; multi_or[2][i].in[6] <== eq[8][i].out; - multi_or[2][i].in[7] <== eq[10][i].out; + multi_or[2][i].in[7] <== eq[0][i].out; and[23][i].b <== multi_or[2][i].out; and[24][i] = AND(); - and[24][i].a <== states[i][31]; + and[24][i].a <== states[i][17]; and[24][i].b <== and[20][i].out; and[25][i] = AND(); - and[25][i].a <== states[i][18]; + and[25][i].a <== states[i][31]; and[25][i].b <== and[20][i].out; multi_or[3][i] = MultiOR(5); multi_or[3][i].in[0] <== and[19][i].out; @@ -242,10 +242,10 @@ template BodyHashRegex(msg_bytes) { eq[19][i].in[0] <== in[i]; eq[19][i].in[1] <== 61; and[26][i] = AND(); - and[26][i].a <== states[i][18]; + and[26][i].a <== states[i][30]; and[26][i].b <== eq[19][i].out; and[27][i] = AND(); - and[27][i].a <== states[i][30]; + and[27][i].a <== states[i][18]; and[27][i].b <== eq[19][i].out; multi_or[4][i] = MultiOR(2); multi_or[4][i].in[0] <== and[26][i].out; @@ -257,126 +257,126 @@ template BodyHashRegex(msg_bytes) { lt[6][i].in[1] <== in[i]; lt[7][i] = LessEqThan(8); lt[7][i].in[0] <== in[i]; - lt[7][i].in[1] <== 58; + lt[7][i].in[1] <== 42; and[28][i] = AND(); and[28][i].a <== lt[6][i].out; and[28][i].b <== lt[7][i].out; - lt[8][i] = LessEqThan(8); - lt[8][i].in[0] <== 60; - lt[8][i].in[1] <== in[i]; - lt[9][i] = LessEqThan(8); - lt[9][i].in[0] <== in[i]; - lt[9][i].in[1] <== 127; - and[29][i] = AND(); - and[29][i].a <== lt[8][i].out; - and[29][i].b <== lt[9][i].out; - and[30][i] = AND(); - and[30][i].a <== states[i][19]; - multi_or[5][i] = MultiOR(2); - multi_or[5][i].in[0] <== and[28][i].out; - multi_or[5][i].in[1] <== and[29][i].out; - and[30][i].b <== multi_or[5][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] <== 191; - and[31][i] = AND(); - and[31][i].a <== lt[10][i].out; - and[31][i].b <== lt[11][i].out; - and[32][i] = AND(); - and[32][i].a <== states[i][21]; - and[32][i].b <== and[31][i].out; - and[33][i] = AND(); - and[33][i].a <== states[i][20]; - and[33][i].b <== multi_or[5][i].out; - lt[12][i] = LessEqThan(8); - lt[12][i].in[0] <== 0; - lt[12][i].in[1] <== in[i]; - lt[13][i] = LessEqThan(8); - lt[13][i].in[0] <== in[i]; - lt[13][i].in[1] <== 42; - and[34][i] = AND(); - and[34][i].a <== lt[12][i].out; - and[34][i].b <== lt[13][i].out; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 64; + eq[20][i].in[1] <== 63; eq[21][i] = IsEqual(); eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 44; + eq[21][i].in[1] <== 126; eq[22][i] = IsEqual(); eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 95; + eq[22][i].in[1] <== 94; eq[23][i] = IsEqual(); eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 124; + eq[23][i].in[1] <== 125; eq[24][i] = IsEqual(); eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 46; + eq[24][i].in[1] <== 60; eq[25][i] = IsEqual(); eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 96; + eq[25][i].in[1] <== 92; eq[26][i] = IsEqual(); eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 94; + eq[26][i].in[1] <== 127; eq[27][i] = IsEqual(); eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 125; + eq[27][i].in[1] <== 62; eq[28][i] = IsEqual(); eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 63; + eq[28][i].in[1] <== 46; eq[29][i] = IsEqual(); eq[29][i].in[0] <== in[i]; - eq[29][i].in[1] <== 126; + eq[29][i].in[1] <== 91; eq[30][i] = IsEqual(); eq[30][i].in[0] <== in[i]; - eq[30][i].in[1] <== 93; + eq[30][i].in[1] <== 124; eq[31][i] = IsEqual(); eq[31][i].in[0] <== in[i]; - eq[31][i].in[1] <== 62; + eq[31][i].in[1] <== 95; eq[32][i] = IsEqual(); eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 127; + eq[32][i].in[1] <== 93; eq[33][i] = IsEqual(); eq[33][i].in[0] <== in[i]; - eq[33][i].in[1] <== 92; + eq[33][i].in[1] <== 64; eq[34][i] = IsEqual(); eq[34][i].in[0] <== in[i]; - eq[34][i].in[1] <== 60; + eq[34][i].in[1] <== 96; eq[35][i] = IsEqual(); eq[35][i].in[0] <== in[i]; eq[35][i].in[1] <== 123; eq[36][i] = IsEqual(); eq[36][i].in[0] <== in[i]; - eq[36][i].in[1] <== 91; + eq[36][i].in[1] <== 44; + and[29][i] = AND(); + and[29][i].a <== states[i][32]; + multi_or[5][i] = MultiOR(20); + multi_or[5][i].in[0] <== and[28][i].out; + multi_or[5][i].in[1] <== eq[20][i].out; + multi_or[5][i].in[2] <== eq[15][i].out; + multi_or[5][i].in[3] <== eq[21][i].out; + multi_or[5][i].in[4] <== eq[22][i].out; + multi_or[5][i].in[5] <== eq[23][i].out; + multi_or[5][i].in[6] <== eq[24][i].out; + multi_or[5][i].in[7] <== eq[25][i].out; + multi_or[5][i].in[8] <== eq[26][i].out; + multi_or[5][i].in[9] <== eq[27][i].out; + multi_or[5][i].in[10] <== eq[28][i].out; + multi_or[5][i].in[11] <== eq[6][i].out; + multi_or[5][i].in[12] <== eq[29][i].out; + multi_or[5][i].in[13] <== eq[30][i].out; + multi_or[5][i].in[14] <== eq[31][i].out; + multi_or[5][i].in[15] <== eq[32][i].out; + multi_or[5][i].in[16] <== eq[33][i].out; + multi_or[5][i].in[17] <== eq[34][i].out; + multi_or[5][i].in[18] <== eq[35][i].out; + multi_or[5][i].in[19] <== eq[36][i].out; + and[29][i].b <== multi_or[5][i].out; + lt[8][i] = LessEqThan(8); + lt[8][i].in[0] <== 0; + lt[8][i].in[1] <== in[i]; + lt[9][i] = LessEqThan(8); + lt[9][i].in[0] <== in[i]; + lt[9][i].in[1] <== 58; + and[30][i] = AND(); + and[30][i].a <== lt[8][i].out; + and[30][i].b <== lt[9][i].out; + lt[10][i] = LessEqThan(8); + lt[10][i].in[0] <== 60; + 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[31][i] = AND(); + and[31][i].a <== lt[10][i].out; + and[31][i].b <== lt[11][i].out; + and[32][i] = AND(); + and[32][i].a <== states[i][19]; + multi_or[6][i] = MultiOR(2); + multi_or[6][i].in[0] <== and[30][i].out; + multi_or[6][i].in[1] <== and[31][i].out; + and[32][i].b <== multi_or[6][i].out; + and[33][i] = AND(); + and[33][i].a <== states[i][20]; + and[33][i].b <== multi_or[6][i].out; + lt[12][i] = LessEqThan(8); + lt[12][i].in[0] <== 128; + 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[34][i] = AND(); + and[34][i].a <== lt[12][i].out; + and[34][i].b <== lt[13][i].out; and[35][i] = AND(); - and[35][i].a <== states[i][32]; - multi_or[6][i] = MultiOR(20); - multi_or[6][i].in[0] <== and[34][i].out; - multi_or[6][i].in[1] <== eq[20][i].out; - multi_or[6][i].in[2] <== eq[21][i].out; - multi_or[6][i].in[3] <== eq[22][i].out; - multi_or[6][i].in[4] <== eq[23][i].out; - multi_or[6][i].in[5] <== eq[24][i].out; - multi_or[6][i].in[6] <== eq[25][i].out; - multi_or[6][i].in[7] <== eq[26][i].out; - multi_or[6][i].in[8] <== eq[15][i].out; - multi_or[6][i].in[9] <== eq[6][i].out; - multi_or[6][i].in[10] <== eq[27][i].out; - multi_or[6][i].in[11] <== eq[28][i].out; - multi_or[6][i].in[12] <== eq[29][i].out; - multi_or[6][i].in[13] <== eq[30][i].out; - multi_or[6][i].in[14] <== eq[31][i].out; - multi_or[6][i].in[15] <== eq[32][i].out; - multi_or[6][i].in[16] <== eq[33][i].out; - multi_or[6][i].in[17] <== eq[34][i].out; - multi_or[6][i].in[18] <== eq[35][i].out; - multi_or[6][i].in[19] <== eq[36][i].out; - and[35][i].b <== multi_or[6][i].out; + and[35][i].a <== states[i][21]; + and[35][i].b <== and[34][i].out; multi_or[7][i] = MultiOR(4); - multi_or[7][i].in[0] <== and[30][i].out; + multi_or[7][i].in[0] <== and[29][i].out; multi_or[7][i].in[1] <== and[32][i].out; multi_or[7][i].in[2] <== and[33][i].out; multi_or[7][i].in[3] <== and[35][i].out; @@ -395,44 +395,44 @@ template BodyHashRegex(msg_bytes) { and[37][i].a <== states[i][20]; and[37][i].b <== and[36][i].out; and[38][i] = AND(); - and[38][i].a <== states[i][32]; - and[38][i].b <== and[36][i].out; - and[39][i] = AND(); - and[39][i].a <== states[i][19]; - and[39][i].b <== and[36][i].out; + and[38][i].a <== states[i][23]; + and[38][i].b <== and[34][i].out; lt[16][i] = LessEqThan(8); lt[16][i].in[0] <== 160; lt[16][i].in[1] <== in[i]; lt[17][i] = LessEqThan(8); lt[17][i].in[0] <== in[i]; lt[17][i].in[1] <== 191; + and[39][i] = AND(); + and[39][i].a <== lt[16][i].out; + and[39][i].b <== lt[17][i].out; and[40][i] = AND(); - and[40][i].a <== lt[16][i].out; - and[40][i].b <== lt[17][i].out; + and[40][i].a <== states[i][22]; + and[40][i].b <== and[39][i].out; and[41][i] = AND(); - and[41][i].a <== states[i][22]; - and[41][i].b <== and[40][i].out; - and[42][i] = AND(); - and[42][i].a <== states[i][23]; - and[42][i].b <== and[31][i].out; + and[41][i].a <== states[i][32]; + and[41][i].b <== and[36][i].out; lt[18][i] = LessEqThan(8); lt[18][i].in[0] <== 128; lt[18][i].in[1] <== in[i]; lt[19][i] = LessEqThan(8); lt[19][i].in[0] <== in[i]; lt[19][i].in[1] <== 159; + and[42][i] = AND(); + and[42][i].a <== lt[18][i].out; + and[42][i].b <== lt[19][i].out; and[43][i] = AND(); - and[43][i].a <== lt[18][i].out; - and[43][i].b <== lt[19][i].out; + and[43][i].a <== states[i][24]; + and[43][i].b <== and[42][i].out; and[44][i] = AND(); - and[44][i].a <== states[i][24]; - and[44][i].b <== and[43][i].out; + and[44][i].a <== states[i][19]; + and[44][i].b <== and[36][i].out; multi_or[8][i] = MultiOR(6); multi_or[8][i].in[0] <== and[37][i].out; multi_or[8][i].in[1] <== and[38][i].out; - multi_or[8][i].in[2] <== and[39][i].out; + multi_or[8][i].in[2] <== and[40][i].out; multi_or[8][i].in[3] <== and[41][i].out; - multi_or[8][i].in[4] <== and[42][i].out; + multi_or[8][i].in[4] <== and[43][i].out; multi_or[8][i].in[5] <== and[44][i].out; states[i+1][21] <== multi_or[8][i].out; state_changed[i].in[20] <== states[i+1][21]; @@ -440,10 +440,10 @@ template BodyHashRegex(msg_bytes) { eq[37][i].in[0] <== in[i]; eq[37][i].in[1] <== 224; and[45][i] = AND(); - and[45][i].a <== states[i][19]; + and[45][i].a <== states[i][20]; and[45][i].b <== eq[37][i].out; and[46][i] = AND(); - and[46][i].a <== states[i][20]; + and[46][i].a <== states[i][19]; and[46][i].b <== eq[37][i].out; and[47][i] = AND(); and[47][i].a <== states[i][32]; @@ -456,49 +456,55 @@ template BodyHashRegex(msg_bytes) { state_changed[i].in[21] <== states[i+1][22]; eq[38][i] = IsEqual(); eq[38][i].in[0] <== in[i]; - eq[38][i].in[1] <== 233; + eq[38][i].in[1] <== 141; eq[39][i] = IsEqual(); eq[39][i].in[0] <== in[i]; - eq[39][i].in[1] <== 238; + eq[39][i].in[1] <== 143; eq[40][i] = IsEqual(); eq[40][i].in[0] <== in[i]; - eq[40][i].in[1] <== 230; + eq[40][i].in[1] <== 140; eq[41][i] = IsEqual(); eq[41][i].in[0] <== in[i]; - eq[41][i].in[1] <== 235; + eq[41][i].in[1] <== 139; eq[42][i] = IsEqual(); eq[42][i].in[0] <== in[i]; - eq[42][i].in[1] <== 227; + eq[42][i].in[1] <== 131; eq[43][i] = IsEqual(); eq[43][i].in[0] <== in[i]; - eq[43][i].in[1] <== 228; + eq[43][i].in[1] <== 138; eq[44][i] = IsEqual(); eq[44][i].in[0] <== in[i]; - eq[44][i].in[1] <== 236; + eq[44][i].in[1] <== 128; eq[45][i] = IsEqual(); eq[45][i].in[0] <== in[i]; - eq[45][i].in[1] <== 225; + eq[45][i].in[1] <== 135; eq[46][i] = IsEqual(); eq[46][i].in[0] <== in[i]; - eq[46][i].in[1] <== 226; + eq[46][i].in[1] <== 136; eq[47][i] = IsEqual(); eq[47][i].in[0] <== in[i]; - eq[47][i].in[1] <== 239; + eq[47][i].in[1] <== 134; eq[48][i] = IsEqual(); eq[48][i].in[0] <== in[i]; - eq[48][i].in[1] <== 229; + eq[48][i].in[1] <== 132; eq[49][i] = IsEqual(); eq[49][i].in[0] <== in[i]; - eq[49][i].in[1] <== 231; + eq[49][i].in[1] <== 129; eq[50][i] = IsEqual(); eq[50][i].in[0] <== in[i]; - eq[50][i].in[1] <== 232; + eq[50][i].in[1] <== 130; eq[51][i] = IsEqual(); eq[51][i].in[0] <== in[i]; - eq[51][i].in[1] <== 234; + eq[51][i].in[1] <== 133; + eq[52][i] = IsEqual(); + eq[52][i].in[0] <== in[i]; + eq[52][i].in[1] <== 142; + eq[53][i] = IsEqual(); + eq[53][i].in[0] <== in[i]; + eq[53][i].in[1] <== 137; and[48][i] = AND(); - and[48][i].a <== states[i][19]; - multi_or[10][i] = MultiOR(14); + and[48][i].a <== states[i][27]; + multi_or[10][i] = MultiOR(16); multi_or[10][i].in[0] <== eq[38][i].out; multi_or[10][i].in[1] <== eq[39][i].out; multi_or[10][i].in[2] <== eq[40][i].out; @@ -513,132 +519,126 @@ template BodyHashRegex(msg_bytes) { multi_or[10][i].in[11] <== eq[49][i].out; multi_or[10][i].in[12] <== eq[50][i].out; multi_or[10][i].in[13] <== eq[51][i].out; + multi_or[10][i].in[14] <== eq[52][i].out; + multi_or[10][i].in[15] <== eq[53][i].out; and[48][i].b <== multi_or[10][i].out; + lt[20][i] = LessEqThan(8); + lt[20][i].in[0] <== 144; + lt[20][i].in[1] <== in[i]; + lt[21][i] = LessEqThan(8); + lt[21][i].in[0] <== in[i]; + lt[21][i].in[1] <== 191; and[49][i] = AND(); - and[49][i].a <== states[i][26]; - and[49][i].b <== and[31][i].out; - eq[52][i] = IsEqual(); - eq[52][i].in[0] <== in[i]; - eq[52][i].in[1] <== 131; - eq[53][i] = IsEqual(); - eq[53][i].in[0] <== in[i]; - eq[53][i].in[1] <== 135; + and[49][i].a <== lt[20][i].out; + and[49][i].b <== lt[21][i].out; + and[50][i] = AND(); + and[50][i].a <== states[i][25]; + and[50][i].b <== and[49][i].out; eq[54][i] = IsEqual(); eq[54][i].in[0] <== in[i]; - eq[54][i].in[1] <== 142; + eq[54][i].in[1] <== 225; eq[55][i] = IsEqual(); eq[55][i].in[0] <== in[i]; - eq[55][i].in[1] <== 128; + eq[55][i].in[1] <== 232; eq[56][i] = IsEqual(); eq[56][i].in[0] <== in[i]; - eq[56][i].in[1] <== 132; + eq[56][i].in[1] <== 235; eq[57][i] = IsEqual(); eq[57][i].in[0] <== in[i]; - eq[57][i].in[1] <== 143; + eq[57][i].in[1] <== 227; eq[58][i] = IsEqual(); eq[58][i].in[0] <== in[i]; - eq[58][i].in[1] <== 140; + eq[58][i].in[1] <== 230; eq[59][i] = IsEqual(); eq[59][i].in[0] <== in[i]; - eq[59][i].in[1] <== 137; + eq[59][i].in[1] <== 231; eq[60][i] = IsEqual(); eq[60][i].in[0] <== in[i]; - eq[60][i].in[1] <== 136; + eq[60][i].in[1] <== 233; eq[61][i] = IsEqual(); eq[61][i].in[0] <== in[i]; - eq[61][i].in[1] <== 129; + eq[61][i].in[1] <== 239; eq[62][i] = IsEqual(); eq[62][i].in[0] <== in[i]; - eq[62][i].in[1] <== 138; + eq[62][i].in[1] <== 228; eq[63][i] = IsEqual(); eq[63][i].in[0] <== in[i]; - eq[63][i].in[1] <== 141; + eq[63][i].in[1] <== 236; eq[64][i] = IsEqual(); eq[64][i].in[0] <== in[i]; - eq[64][i].in[1] <== 139; + eq[64][i].in[1] <== 238; eq[65][i] = IsEqual(); eq[65][i].in[0] <== in[i]; - eq[65][i].in[1] <== 133; + eq[65][i].in[1] <== 229; eq[66][i] = IsEqual(); eq[66][i].in[0] <== in[i]; - eq[66][i].in[1] <== 134; + eq[66][i].in[1] <== 234; eq[67][i] = IsEqual(); eq[67][i].in[0] <== in[i]; - eq[67][i].in[1] <== 130; - and[50][i] = AND(); - and[50][i].a <== states[i][27]; - multi_or[11][i] = MultiOR(16); - multi_or[11][i].in[0] <== eq[52][i].out; - multi_or[11][i].in[1] <== eq[53][i].out; - multi_or[11][i].in[2] <== eq[54][i].out; - multi_or[11][i].in[3] <== eq[55][i].out; - multi_or[11][i].in[4] <== eq[56][i].out; - multi_or[11][i].in[5] <== eq[57][i].out; - multi_or[11][i].in[6] <== eq[58][i].out; - multi_or[11][i].in[7] <== eq[59][i].out; - multi_or[11][i].in[8] <== eq[60][i].out; - multi_or[11][i].in[9] <== eq[61][i].out; - multi_or[11][i].in[10] <== eq[62][i].out; - multi_or[11][i].in[11] <== eq[63][i].out; - multi_or[11][i].in[12] <== eq[64][i].out; - multi_or[11][i].in[13] <== eq[65][i].out; - multi_or[11][i].in[14] <== eq[66][i].out; - multi_or[11][i].in[15] <== eq[67][i].out; - and[50][i].b <== multi_or[11][i].out; + eq[67][i].in[1] <== 226; and[51][i] = AND(); - and[51][i].a <== states[i][20]; - multi_or[12][i] = MultiOR(14); - multi_or[12][i].in[0] <== eq[48][i].out; - multi_or[12][i].in[1] <== eq[49][i].out; - multi_or[12][i].in[2] <== eq[50][i].out; - multi_or[12][i].in[3] <== eq[51][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[38][i].out; - multi_or[12][i].in[7] <== eq[42][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[39][i].out; - multi_or[12][i].in[11] <== eq[43][i].out; - multi_or[12][i].in[12] <== eq[47][i].out; - multi_or[12][i].in[13] <== eq[46][i].out; - and[51][i].b <== multi_or[12][i].out; + and[51][i].a <== states[i][19]; + multi_or[11][i] = MultiOR(14); + multi_or[11][i].in[0] <== eq[54][i].out; + multi_or[11][i].in[1] <== eq[55][i].out; + multi_or[11][i].in[2] <== eq[56][i].out; + multi_or[11][i].in[3] <== eq[57][i].out; + multi_or[11][i].in[4] <== eq[58][i].out; + multi_or[11][i].in[5] <== eq[59][i].out; + multi_or[11][i].in[6] <== eq[60][i].out; + multi_or[11][i].in[7] <== eq[61][i].out; + multi_or[11][i].in[8] <== eq[62][i].out; + multi_or[11][i].in[9] <== eq[63][i].out; + multi_or[11][i].in[10] <== eq[64][i].out; + multi_or[11][i].in[11] <== eq[65][i].out; + multi_or[11][i].in[12] <== eq[66][i].out; + multi_or[11][i].in[13] <== eq[67][i].out; + and[51][i].b <== multi_or[11][i].out; and[52][i] = AND(); and[52][i].a <== states[i][32]; - multi_or[13][i] = MultiOR(14); - multi_or[13][i].in[0] <== eq[45][i].out; - multi_or[13][i].in[1] <== eq[47][i].out; - multi_or[13][i].in[2] <== eq[46][i].out; - multi_or[13][i].in[3] <== eq[40][i].out; - multi_or[13][i].in[4] <== eq[49][i].out; - multi_or[13][i].in[5] <== eq[43][i].out; - multi_or[13][i].in[6] <== eq[50][i].out; - multi_or[13][i].in[7] <== eq[48][i].out; - multi_or[13][i].in[8] <== eq[38][i].out; - multi_or[13][i].in[9] <== eq[44][i].out; - multi_or[13][i].in[10] <== eq[39][i].out; - multi_or[13][i].in[11] <== eq[51][i].out; - multi_or[13][i].in[12] <== eq[41][i].out; - multi_or[13][i].in[13] <== eq[42][i].out; - and[52][i].b <== multi_or[13][i].out; - lt[20][i] = LessEqThan(8); - lt[20][i].in[0] <== 144; - lt[20][i].in[1] <== in[i]; - lt[21][i] = LessEqThan(8); - lt[21][i].in[0] <== in[i]; - lt[21][i].in[1] <== 191; + multi_or[12][i] = MultiOR(14); + multi_or[12][i].in[0] <== eq[55][i].out; + multi_or[12][i].in[1] <== eq[58][i].out; + multi_or[12][i].in[2] <== eq[62][i].out; + multi_or[12][i].in[3] <== eq[65][i].out; + multi_or[12][i].in[4] <== eq[60][i].out; + multi_or[12][i].in[5] <== eq[66][i].out; + multi_or[12][i].in[6] <== eq[59][i].out; + multi_or[12][i].in[7] <== eq[56][i].out; + multi_or[12][i].in[8] <== eq[57][i].out; + multi_or[12][i].in[9] <== eq[63][i].out; + multi_or[12][i].in[10] <== eq[61][i].out; + multi_or[12][i].in[11] <== eq[64][i].out; + multi_or[12][i].in[12] <== eq[67][i].out; + multi_or[12][i].in[13] <== eq[54][i].out; + and[52][i].b <== multi_or[12][i].out; and[53][i] = AND(); - and[53][i].a <== lt[20][i].out; - and[53][i].b <== lt[21][i].out; + and[53][i].a <== states[i][26]; + and[53][i].b <== and[34][i].out; and[54][i] = AND(); - and[54][i].a <== states[i][25]; - and[54][i].b <== and[53][i].out; + and[54][i].a <== states[i][20]; + multi_or[13][i] = MultiOR(14); + multi_or[13][i].in[0] <== eq[58][i].out; + multi_or[13][i].in[1] <== eq[59][i].out; + multi_or[13][i].in[2] <== eq[60][i].out; + multi_or[13][i].in[3] <== eq[66][i].out; + multi_or[13][i].in[4] <== eq[55][i].out; + multi_or[13][i].in[5] <== eq[65][i].out; + multi_or[13][i].in[6] <== eq[56][i].out; + multi_or[13][i].in[7] <== eq[54][i].out; + multi_or[13][i].in[8] <== eq[63][i].out; + multi_or[13][i].in[9] <== eq[61][i].out; + multi_or[13][i].in[10] <== eq[57][i].out; + multi_or[13][i].in[11] <== eq[67][i].out; + multi_or[13][i].in[12] <== eq[62][i].out; + multi_or[13][i].in[13] <== eq[64][i].out; + and[54][i].b <== multi_or[13][i].out; multi_or[14][i] = MultiOR(6); multi_or[14][i].in[0] <== and[48][i].out; - multi_or[14][i].in[1] <== and[49][i].out; - multi_or[14][i].in[2] <== and[50][i].out; - multi_or[14][i].in[3] <== and[51][i].out; - multi_or[14][i].in[4] <== and[52][i].out; + multi_or[14][i].in[1] <== and[50][i].out; + multi_or[14][i].in[2] <== and[51][i].out; + multi_or[14][i].in[3] <== and[52][i].out; + multi_or[14][i].in[4] <== and[53][i].out; multi_or[14][i].in[5] <== and[54][i].out; states[i+1][23] <== multi_or[14][i].out; state_changed[i].in[22] <== states[i+1][23]; @@ -664,13 +664,13 @@ template BodyHashRegex(msg_bytes) { eq[69][i].in[0] <== in[i]; eq[69][i].in[1] <== 240; and[58][i] = AND(); - and[58][i].a <== states[i][20]; + and[58][i].a <== states[i][32]; and[58][i].b <== eq[69][i].out; and[59][i] = AND(); - and[59][i].a <== states[i][19]; + and[59][i].a <== states[i][20]; and[59][i].b <== eq[69][i].out; and[60][i] = AND(); - and[60][i].a <== states[i][32]; + and[60][i].a <== states[i][19]; and[60][i].b <== eq[69][i].out; multi_or[16][i] = MultiOR(3); multi_or[16][i].in[0] <== and[58][i].out; @@ -695,42 +695,38 @@ template BodyHashRegex(msg_bytes) { multi_or[17][i].in[2] <== eq[72][i].out; and[61][i].b <== multi_or[17][i].out; and[62][i] = AND(); - and[62][i].a <== states[i][32]; + and[62][i].a <== states[i][19]; multi_or[18][i] = MultiOR(3); - multi_or[18][i].in[0] <== eq[71][i].out; + multi_or[18][i].in[0] <== eq[70][i].out; multi_or[18][i].in[1] <== eq[72][i].out; - multi_or[18][i].in[2] <== eq[70][i].out; + multi_or[18][i].in[2] <== eq[71][i].out; and[62][i].b <== multi_or[18][i].out; and[63][i] = AND(); - and[63][i].a <== states[i][19]; + and[63][i].a <== states[i][32]; + and[63][i].b <== multi_or[17][i].out; multi_or[19][i] = MultiOR(3); - multi_or[19][i].in[0] <== eq[71][i].out; - multi_or[19][i].in[1] <== eq[70][i].out; - multi_or[19][i].in[2] <== eq[72][i].out; - and[63][i].b <== multi_or[19][i].out; - multi_or[20][i] = MultiOR(3); - multi_or[20][i].in[0] <== and[61][i].out; - multi_or[20][i].in[1] <== and[62][i].out; - multi_or[20][i].in[2] <== and[63][i].out; - states[i+1][26] <== multi_or[20][i].out; + multi_or[19][i].in[0] <== and[61][i].out; + multi_or[19][i].in[1] <== and[62][i].out; + multi_or[19][i].in[2] <== and[63][i].out; + states[i+1][26] <== multi_or[19][i].out; state_changed[i].in[25] <== states[i+1][26]; eq[73][i] = IsEqual(); eq[73][i].in[0] <== in[i]; eq[73][i].in[1] <== 244; and[64][i] = AND(); - and[64][i].a <== states[i][20]; + and[64][i].a <== states[i][19]; and[64][i].b <== eq[73][i].out; and[65][i] = AND(); - and[65][i].a <== states[i][19]; + and[65][i].a <== states[i][32]; and[65][i].b <== eq[73][i].out; and[66][i] = AND(); - and[66][i].a <== states[i][32]; + and[66][i].a <== states[i][20]; and[66][i].b <== eq[73][i].out; - multi_or[21][i] = MultiOR(3); - multi_or[21][i].in[0] <== and[64][i].out; - multi_or[21][i].in[1] <== and[65][i].out; - multi_or[21][i].in[2] <== and[66][i].out; - states[i+1][27] <== multi_or[21][i].out; + multi_or[20][i] = MultiOR(3); + multi_or[20][i].in[0] <== and[64][i].out; + multi_or[20][i].in[1] <== and[65][i].out; + multi_or[20][i].in[2] <== and[66][i].out; + states[i+1][27] <== multi_or[20][i].out; state_changed[i].in[26] <== states[i+1][27]; eq[74][i] = IsEqual(); eq[74][i].in[0] <== in[i]; @@ -777,82 +773,82 @@ template BodyHashRegex(msg_bytes) { and[72][i].b <== lt[23][i].out; eq[77][i] = IsEqual(); eq[77][i].in[0] <== in[i]; - eq[77][i].in[1] <== 50; + eq[77][i].in[1] <== 43; eq[78][i] = IsEqual(); eq[78][i].in[0] <== in[i]; - eq[78][i].in[1] <== 49; + eq[78][i].in[1] <== 54; eq[79][i] = IsEqual(); eq[79][i].in[0] <== in[i]; - eq[79][i].in[1] <== 52; + eq[79][i].in[1] <== 55; eq[80][i] = IsEqual(); eq[80][i].in[0] <== in[i]; - eq[80][i].in[1] <== 57; + eq[80][i].in[1] <== 49; eq[81][i] = IsEqual(); eq[81][i].in[0] <== in[i]; eq[81][i].in[1] <== 51; eq[82][i] = IsEqual(); eq[82][i].in[0] <== in[i]; - eq[82][i].in[1] <== 55; + eq[82][i].in[1] <== 52; eq[83][i] = IsEqual(); eq[83][i].in[0] <== in[i]; eq[83][i].in[1] <== 56; eq[84][i] = IsEqual(); eq[84][i].in[0] <== in[i]; - eq[84][i].in[1] <== 47; + eq[84][i].in[1] <== 57; eq[85][i] = IsEqual(); eq[85][i].in[0] <== in[i]; - eq[85][i].in[1] <== 54; + eq[85][i].in[1] <== 50; eq[86][i] = IsEqual(); eq[86][i].in[0] <== in[i]; - eq[86][i].in[1] <== 53; + eq[86][i].in[1] <== 47; eq[87][i] = IsEqual(); eq[87][i].in[0] <== in[i]; eq[87][i].in[1] <== 48; eq[88][i] = IsEqual(); eq[88][i].in[0] <== in[i]; - eq[88][i].in[1] <== 43; + eq[88][i].in[1] <== 53; and[73][i] = AND(); - and[73][i].a <== states[i][32]; + and[73][i].a <== states[i][33]; + multi_or[21][i] = MultiOR(15); + multi_or[21][i].in[0] <== and[72][i].out; + multi_or[21][i].in[1] <== and[20][i].out; + multi_or[21][i].in[2] <== eq[77][i].out; + multi_or[21][i].in[3] <== eq[78][i].out; + multi_or[21][i].in[4] <== eq[79][i].out; + multi_or[21][i].in[5] <== eq[80][i].out; + multi_or[21][i].in[6] <== eq[81][i].out; + multi_or[21][i].in[7] <== eq[82][i].out; + multi_or[21][i].in[8] <== eq[83][i].out; + multi_or[21][i].in[9] <== eq[84][i].out; + multi_or[21][i].in[10] <== eq[85][i].out; + multi_or[21][i].in[11] <== eq[86][i].out; + multi_or[21][i].in[12] <== eq[87][i].out; + multi_or[21][i].in[13] <== eq[19][i].out; + multi_or[21][i].in[14] <== eq[88][i].out; + and[73][i].b <== multi_or[21][i].out; + and[74][i] = AND(); + and[74][i].a <== states[i][32]; multi_or[22][i] = MultiOR(15); multi_or[22][i].in[0] <== and[72][i].out; multi_or[22][i].in[1] <== and[20][i].out; - multi_or[22][i].in[2] <== eq[77][i].out; - multi_or[22][i].in[3] <== eq[78][i].out; - multi_or[22][i].in[4] <== eq[79][i].out; - multi_or[22][i].in[5] <== eq[80][i].out; - multi_or[22][i].in[6] <== eq[81][i].out; - multi_or[22][i].in[7] <== eq[82][i].out; - multi_or[22][i].in[8] <== eq[83][i].out; - multi_or[22][i].in[9] <== eq[84][i].out; - multi_or[22][i].in[10] <== eq[19][i].out; - multi_or[22][i].in[11] <== eq[85][i].out; - multi_or[22][i].in[12] <== eq[86][i].out; - multi_or[22][i].in[13] <== eq[87][i].out; - multi_or[22][i].in[14] <== eq[88][i].out; - and[73][i].b <== multi_or[22][i].out; - and[74][i] = AND(); - and[74][i].a <== states[i][33]; - multi_or[23][i] = MultiOR(15); - multi_or[23][i].in[0] <== and[72][i].out; - multi_or[23][i].in[1] <== and[20][i].out; - multi_or[23][i].in[2] <== eq[78][i].out; - multi_or[23][i].in[3] <== eq[88][i].out; - multi_or[23][i].in[4] <== eq[81][i].out; - multi_or[23][i].in[5] <== eq[79][i].out; - multi_or[23][i].in[6] <== eq[19][i].out; - multi_or[23][i].in[7] <== eq[87][i].out; - multi_or[23][i].in[8] <== eq[85][i].out; - multi_or[23][i].in[9] <== eq[77][i].out; - multi_or[23][i].in[10] <== eq[86][i].out; - multi_or[23][i].in[11] <== eq[84][i].out; - multi_or[23][i].in[12] <== eq[83][i].out; - multi_or[23][i].in[13] <== eq[82][i].out; - multi_or[23][i].in[14] <== eq[80][i].out; - and[74][i].b <== multi_or[23][i].out; - multi_or[24][i] = MultiOR(2); - multi_or[24][i].in[0] <== and[73][i].out; - multi_or[24][i].in[1] <== and[74][i].out; - states[i+1][33] <== multi_or[24][i].out; + multi_or[22][i].in[2] <== eq[88][i].out; + multi_or[22][i].in[3] <== eq[87][i].out; + multi_or[22][i].in[4] <== eq[78][i].out; + multi_or[22][i].in[5] <== eq[19][i].out; + multi_or[22][i].in[6] <== eq[86][i].out; + multi_or[22][i].in[7] <== eq[81][i].out; + multi_or[22][i].in[8] <== eq[85][i].out; + multi_or[22][i].in[9] <== eq[82][i].out; + multi_or[22][i].in[10] <== eq[79][i].out; + multi_or[22][i].in[11] <== eq[84][i].out; + multi_or[22][i].in[12] <== eq[83][i].out; + multi_or[22][i].in[13] <== eq[77][i].out; + multi_or[22][i].in[14] <== eq[80][i].out; + and[74][i].b <== multi_or[22][i].out; + multi_or[23][i] = MultiOR(2); + multi_or[23][i].in[0] <== and[73][i].out; + multi_or[23][i].in[1] <== and[74][i].out; + states[i+1][33] <== multi_or[23][i].out; state_changed[i].in[32] <== states[i+1][33]; and[75][i] = AND(); and[75][i].a <== states[i][33]; @@ -873,7 +869,7 @@ template BodyHashRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][34] * (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: [{(33, 33), (32, 33)}] + // substrings calculated: [{(32, 33), (33, 33)}] signal is_substr0[msg_bytes][3]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/circuits/common/email_addr_regex.circom b/packages/circom/circuits/common/email_addr_regex.circom index 41db0e9..2e71d52 100644 --- a/packages/circom/circuits/common/email_addr_regex.circom +++ b/packages/circom/circuits/common/email_addr_regex.circom @@ -38,7 +38,7 @@ template EmailAddrRegex(msg_bytes) { 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] <== 94; + lt[2][i].in[0] <== 95; lt[2][i].in[1] <== in[i]; lt[3][i] = LessEqThan(8); lt[3][i].in[0] <== in[i]; @@ -48,70 +48,73 @@ template EmailAddrRegex(msg_bytes) { and[1][i].b <== lt[3][i].out; eq[0][i] = IsEqual(); eq[0][i].in[0] <== in[i]; - eq[0][i].in[1] <== 57; + eq[0][i].in[1] <== 61; eq[1][i] = IsEqual(); eq[1][i].in[0] <== in[i]; - eq[1][i].in[1] <== 33; + eq[1][i].in[1] <== 50; eq[2][i] = IsEqual(); eq[2][i].in[0] <== in[i]; - eq[2][i].in[1] <== 37; + eq[2][i].in[1] <== 52; eq[3][i] = IsEqual(); eq[3][i].in[0] <== in[i]; - eq[3][i].in[1] <== 56; + eq[3][i].in[1] <== 48; eq[4][i] = IsEqual(); eq[4][i].in[0] <== in[i]; - eq[4][i].in[1] <== 42; + eq[4][i].in[1] <== 255; eq[5][i] = IsEqual(); eq[5][i].in[0] <== in[i]; - eq[5][i].in[1] <== 53; + eq[5][i].in[1] <== 33; eq[6][i] = IsEqual(); eq[6][i].in[0] <== in[i]; - eq[6][i].in[1] <== 63; + eq[6][i].in[1] <== 39; eq[7][i] = IsEqual(); eq[7][i].in[0] <== in[i]; - eq[7][i].in[1] <== 48; + eq[7][i].in[1] <== 43; eq[8][i] = IsEqual(); eq[8][i].in[0] <== in[i]; - eq[8][i].in[1] <== 35; + eq[8][i].in[1] <== 57; eq[9][i] = IsEqual(); eq[9][i].in[0] <== in[i]; - eq[9][i].in[1] <== 49; + eq[9][i].in[1] <== 54; eq[10][i] = IsEqual(); eq[10][i].in[0] <== in[i]; - eq[10][i].in[1] <== 39; + eq[10][i].in[1] <== 53; eq[11][i] = IsEqual(); eq[11][i].in[0] <== in[i]; - eq[11][i].in[1] <== 43; + eq[11][i].in[1] <== 36; eq[12][i] = IsEqual(); eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 61; + eq[12][i].in[1] <== 51; eq[13][i] = IsEqual(); eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 54; + eq[13][i].in[1] <== 35; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 36; + eq[14][i].in[1] <== 42; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 46; + eq[15][i].in[1] <== 55; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 38; + eq[16][i].in[1] <== 56; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 51; + eq[17][i].in[1] <== 63; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 50; + eq[18][i].in[1] <== 38; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 52; + eq[19][i].in[1] <== 46; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 55; + eq[20][i].in[1] <== 37; + eq[21][i] = IsEqual(); + eq[21][i].in[0] <== in[i]; + eq[21][i].in[1] <== 49; and[2][i] = AND(); - and[2][i].a <== states[i][1]; - multi_or[0][i] = MultiOR(23); + and[2][i].a <== states[i][0]; + multi_or[0][i] = MultiOR(24); 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; @@ -135,9 +138,10 @@ template EmailAddrRegex(msg_bytes) { multi_or[0][i].in[20] <== eq[18][i].out; multi_or[0][i].in[21] <== eq[19][i].out; multi_or[0][i].in[22] <== eq[20][i].out; + multi_or[0][i].in[23] <== eq[21][i].out; and[2][i].b <== multi_or[0][i].out; lt[4][i] = LessEqThan(8); - lt[4][i].in[0] <== 95; + lt[4][i].in[0] <== 94; lt[4][i].in[1] <== in[i]; lt[5][i] = LessEqThan(8); lt[5][i].in[0] <== in[i]; @@ -145,36 +149,32 @@ template EmailAddrRegex(msg_bytes) { and[3][i] = AND(); and[3][i].a <== lt[4][i].out; and[3][i].b <== lt[5][i].out; - eq[21][i] = IsEqual(); - eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 255; and[4][i] = AND(); - and[4][i].a <== states[i][0]; - multi_or[1][i] = MultiOR(24); + and[4][i].a <== states[i][1]; + multi_or[1][i] = MultiOR(23); multi_or[1][i].in[0] <== and[0][i].out; multi_or[1][i].in[1] <== and[3][i].out; - multi_or[1][i].in[2] <== eq[16][i].out; - multi_or[1][i].in[3] <== eq[12][i].out; - multi_or[1][i].in[4] <== eq[11][i].out; - multi_or[1][i].in[5] <== eq[21][i].out; - multi_or[1][i].in[6] <== eq[3][i].out; - multi_or[1][i].in[7] <== eq[0][i].out; - multi_or[1][i].in[8] <== eq[4][i].out; - multi_or[1][i].in[9] <== eq[9][i].out; - multi_or[1][i].in[10] <== eq[8][i].out; - multi_or[1][i].in[11] <== eq[2][i].out; - multi_or[1][i].in[12] <== eq[1][i].out; - multi_or[1][i].in[13] <== eq[15][i].out; - multi_or[1][i].in[14] <== eq[17][i].out; - multi_or[1][i].in[15] <== eq[6][i].out; - multi_or[1][i].in[16] <== eq[20][i].out; - multi_or[1][i].in[17] <== eq[10][i].out; - multi_or[1][i].in[18] <== eq[14][i].out; - multi_or[1][i].in[19] <== eq[7][i].out; - multi_or[1][i].in[20] <== eq[19][i].out; + multi_or[1][i].in[2] <== eq[3][i].out; + multi_or[1][i].in[3] <== eq[15][i].out; + multi_or[1][i].in[4] <== eq[13][i].out; + multi_or[1][i].in[5] <== eq[17][i].out; + multi_or[1][i].in[6] <== eq[21][i].out; + multi_or[1][i].in[7] <== eq[9][i].out; + multi_or[1][i].in[8] <== eq[14][i].out; + multi_or[1][i].in[9] <== eq[16][i].out; + multi_or[1][i].in[10] <== eq[11][i].out; + multi_or[1][i].in[11] <== eq[10][i].out; + multi_or[1][i].in[12] <== eq[7][i].out; + multi_or[1][i].in[13] <== eq[2][i].out; + multi_or[1][i].in[14] <== eq[12][i].out; + multi_or[1][i].in[15] <== eq[20][i].out; + multi_or[1][i].in[16] <== eq[8][i].out; + multi_or[1][i].in[17] <== eq[19][i].out; + multi_or[1][i].in[18] <== eq[1][i].out; + multi_or[1][i].in[19] <== eq[5][i].out; + multi_or[1][i].in[20] <== eq[6][i].out; multi_or[1][i].in[21] <== eq[18][i].out; - multi_or[1][i].in[22] <== eq[13][i].out; - multi_or[1][i].in[23] <== eq[5][i].out; + multi_or[1][i].in[22] <== eq[0][i].out; and[4][i].b <== multi_or[1][i].out; multi_or[2][i] = MultiOR(2); multi_or[2][i].in[0] <== and[2][i].out; @@ -202,40 +202,40 @@ template EmailAddrRegex(msg_bytes) { eq[23][i].in[0] <== in[i]; eq[23][i].in[1] <== 45; and[7][i] = AND(); - and[7][i].a <== states[i][2]; + and[7][i].a <== states[i][3]; multi_or[3][i] = MultiOR(14); multi_or[3][i].in[0] <== and[0][i].out; multi_or[3][i].in[1] <== and[6][i].out; - multi_or[3][i].in[2] <== eq[0][i].out; - multi_or[3][i].in[3] <== eq[23][i].out; - multi_or[3][i].in[4] <== eq[13][i].out; - multi_or[3][i].in[5] <== eq[20][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[17][i].out; - multi_or[3][i].in[9] <== eq[7][i].out; - multi_or[3][i].in[10] <== eq[9][i].out; - multi_or[3][i].in[11] <== eq[3][i].out; - multi_or[3][i].in[12] <== eq[15][i].out; - multi_or[3][i].in[13] <== eq[5][i].out; + multi_or[3][i].in[2] <== eq[12][i].out; + multi_or[3][i].in[3] <== eq[19][i].out; + multi_or[3][i].in[4] <== eq[15][i].out; + multi_or[3][i].in[5] <== eq[8][i].out; + multi_or[3][i].in[6] <== eq[3][i].out; + multi_or[3][i].in[7] <== eq[16][i].out; + multi_or[3][i].in[8] <== eq[1][i].out; + multi_or[3][i].in[9] <== eq[23][i].out; + multi_or[3][i].in[10] <== eq[10][i].out; + multi_or[3][i].in[11] <== eq[21][i].out; + multi_or[3][i].in[12] <== eq[9][i].out; + multi_or[3][i].in[13] <== eq[2][i].out; and[7][i].b <== multi_or[3][i].out; and[8][i] = AND(); - and[8][i].a <== states[i][3]; + and[8][i].a <== states[i][2]; multi_or[4][i] = MultiOR(14); multi_or[4][i].in[0] <== and[0][i].out; multi_or[4][i].in[1] <== and[6][i].out; - multi_or[4][i].in[2] <== eq[20][i].out; - multi_or[4][i].in[3] <== eq[18][i].out; - multi_or[4][i].in[4] <== eq[9][i].out; - multi_or[4][i].in[5] <== eq[13][i].out; - multi_or[4][i].in[6] <== eq[19][i].out; - multi_or[4][i].in[7] <== eq[5][i].out; - multi_or[4][i].in[8] <== eq[3][i].out; - multi_or[4][i].in[9] <== eq[17][i].out; - multi_or[4][i].in[10] <== eq[23][i].out; - multi_or[4][i].in[11] <== eq[7][i].out; + multi_or[4][i].in[2] <== eq[16][i].out; + multi_or[4][i].in[3] <== eq[1][i].out; + multi_or[4][i].in[4] <== eq[23][i].out; + multi_or[4][i].in[5] <== eq[8][i].out; + multi_or[4][i].in[6] <== eq[21][i].out; + multi_or[4][i].in[7] <== eq[12][i].out; + multi_or[4][i].in[8] <== eq[9][i].out; + multi_or[4][i].in[9] <== eq[19][i].out; + multi_or[4][i].in[10] <== eq[2][i].out; + multi_or[4][i].in[11] <== eq[10][i].out; multi_or[4][i].in[12] <== eq[15][i].out; - multi_or[4][i].in[13] <== eq[0][i].out; + multi_or[4][i].in[13] <== eq[3][i].out; and[8][i].b <== multi_or[4][i].out; multi_or[5][i] = MultiOR(2); multi_or[5][i].in[0] <== and[7][i].out; @@ -256,7 +256,7 @@ template EmailAddrRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][3] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(3, 3), (0, 1), (1, 2), (1, 1), (2, 3)}] + // substrings calculated: [{(1, 2), (1, 1), (0, 1), (2, 3), (3, 3)}] signal is_substr0[msg_bytes][6]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/circuits/common/email_addr_with_name_regex.circom b/packages/circom/circuits/common/email_addr_with_name_regex.circom index be1779a..33b92aa 100644 --- a/packages/circom/circuits/common/email_addr_with_name_regex.circom +++ b/packages/circom/circuits/common/email_addr_with_name_regex.circom @@ -39,28 +39,28 @@ template EmailAddrWithNameRegex(msg_bytes) { and[0][i].b <== lt[1][i].out; eq[0][i] = IsEqual(); eq[0][i].in[0] <== in[i]; - eq[0][i].in[1] <== 60; + eq[0][i].in[1] <== 62; eq[1][i] = IsEqual(); eq[1][i].in[0] <== in[i]; - eq[1][i].in[1] <== 58; + eq[1][i].in[1] <== 92; eq[2][i] = IsEqual(); eq[2][i].in[0] <== in[i]; - eq[2][i].in[1] <== 59; + eq[2][i].in[1] <== 93; eq[3][i] = IsEqual(); eq[3][i].in[0] <== in[i]; - eq[3][i].in[1] <== 92; + eq[3][i].in[1] <== 91; eq[4][i] = IsEqual(); eq[4][i].in[0] <== in[i]; - eq[4][i].in[1] <== 93; + eq[4][i].in[1] <== 64; eq[5][i] = IsEqual(); eq[5][i].in[0] <== in[i]; - eq[5][i].in[1] <== 91; + eq[5][i].in[1] <== 60; eq[6][i] = IsEqual(); eq[6][i].in[0] <== in[i]; - eq[6][i].in[1] <== 62; + eq[6][i].in[1] <== 58; eq[7][i] = IsEqual(); eq[7][i].in[0] <== in[i]; - eq[7][i].in[1] <== 64; + eq[7][i].in[1] <== 59; and[1][i] = AND(); and[1][i].a <== states[i][9]; multi_or[0][i] = MultiOR(9); @@ -87,43 +87,43 @@ template EmailAddrWithNameRegex(msg_bytes) { 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] <== 194; + lt[4][i].in[0] <== 128; lt[4][i].in[1] <== in[i]; lt[5][i] = LessEqThan(8); lt[5][i].in[0] <== in[i]; - lt[5][i].in[1] <== 223; + lt[5][i].in[1] <== 159; 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][0]; + and[5][i].a <== states[i][4]; 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; + 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][4]; + and[7][i].a <== states[i][3]; and[7][i].b <== and[6][i].out; lt[8][i] = LessEqThan(8); - lt[8][i].in[0] <== 128; + lt[8][i].in[0] <== 49; lt[8][i].in[1] <== in[i]; lt[9][i] = LessEqThan(8); lt[9][i].in[0] <== in[i]; - lt[9][i].in[1] <== 191; + lt[9][i].in[1] <== 223; and[8][i] = AND(); and[8][i].a <== lt[8][i].out; and[8][i].b <== lt[9][i].out; and[9][i] = AND(); - and[9][i].a <== states[i][3]; + and[9][i].a <== states[i][8]; and[9][i].b <== and[8][i].out; lt[10][i] = LessEqThan(8); - lt[10][i].in[0] <== 49; + lt[10][i].in[0] <== 194; lt[10][i].in[1] <== in[i]; lt[11][i] = LessEqThan(8); lt[11][i].in[0] <== in[i]; @@ -132,7 +132,7 @@ template EmailAddrWithNameRegex(msg_bytes) { 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][8]; + and[11][i].a <== states[i][0]; and[11][i].b <== and[10][i].out; multi_or[1][i] = MultiOR(6); multi_or[1][i].in[0] <== and[1][i].out; @@ -147,10 +147,10 @@ template EmailAddrWithNameRegex(msg_bytes) { eq[8][i].in[0] <== in[i]; eq[8][i].in[1] <== 224; and[12][i] = AND(); - and[12][i].a <== states[i][9]; + and[12][i].a <== states[i][8]; and[12][i].b <== eq[8][i].out; and[13][i] = AND(); - and[13][i].a <== states[i][8]; + and[13][i].a <== states[i][9]; and[13][i].b <== eq[8][i].out; and[14][i] = AND(); and[14][i].a <== states[i][0]; @@ -163,46 +163,46 @@ template EmailAddrWithNameRegex(msg_bytes) { state_changed[i].in[1] <== states[i+1][2]; eq[9][i] = IsEqual(); eq[9][i].in[0] <== in[i]; - eq[9][i].in[1] <== 236; + eq[9][i].in[1] <== 233; eq[10][i] = IsEqual(); eq[10][i].in[0] <== in[i]; - eq[10][i].in[1] <== 238; + eq[10][i].in[1] <== 232; eq[11][i] = IsEqual(); eq[11][i].in[0] <== in[i]; - eq[11][i].in[1] <== 231; + eq[11][i].in[1] <== 225; eq[12][i] = IsEqual(); eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 228; + eq[12][i].in[1] <== 234; eq[13][i] = IsEqual(); eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 229; + eq[13][i].in[1] <== 227; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 225; + eq[14][i].in[1] <== 228; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 234; + eq[15][i].in[1] <== 236; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 227; + eq[16][i].in[1] <== 226; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 239; + eq[17][i].in[1] <== 230; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 233; + eq[18][i].in[1] <== 229; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 226; + eq[19][i].in[1] <== 238; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 230; + eq[20][i].in[1] <== 231; eq[21][i] = IsEqual(); eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 232; + eq[21][i].in[1] <== 235; eq[22][i] = IsEqual(); eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 235; + eq[22][i].in[1] <== 239; and[15][i] = AND(); and[15][i].a <== states[i][0]; multi_or[3][i] = MultiOR(14); @@ -222,129 +222,129 @@ template EmailAddrWithNameRegex(msg_bytes) { multi_or[3][i].in[13] <== eq[22][i].out; and[15][i].b <== multi_or[3][i].out; and[16][i] = AND(); - and[16][i].a <== states[i][6]; - and[16][i].b <== and[8][i].out; - and[17][i] = AND(); - and[17][i].a <== states[i][9]; + and[16][i].a <== states[i][9]; multi_or[4][i] = MultiOR(14); - multi_or[4][i].in[0] <== eq[16][i].out; - multi_or[4][i].in[1] <== eq[11][i].out; - multi_or[4][i].in[2] <== eq[22][i].out; - multi_or[4][i].in[3] <== eq[17][i].out; - multi_or[4][i].in[4] <== eq[13][i].out; - multi_or[4][i].in[5] <== eq[21][i].out; - multi_or[4][i].in[6] <== eq[15][i].out; - multi_or[4][i].in[7] <== eq[14][i].out; - multi_or[4][i].in[8] <== eq[19][i].out; - multi_or[4][i].in[9] <== eq[20][i].out; - multi_or[4][i].in[10] <== eq[9][i].out; - multi_or[4][i].in[11] <== eq[10][i].out; - multi_or[4][i].in[12] <== eq[12][i].out; - multi_or[4][i].in[13] <== eq[18][i].out; - and[17][i].b <== multi_or[4][i].out; - and[18][i] = AND(); - and[18][i].a <== states[i][8]; - multi_or[5][i] = MultiOR(14); - multi_or[5][i].in[0] <== eq[17][i].out; - multi_or[5][i].in[1] <== eq[18][i].out; - multi_or[5][i].in[2] <== eq[16][i].out; - multi_or[5][i].in[3] <== eq[15][i].out; - multi_or[5][i].in[4] <== eq[10][i].out; - multi_or[5][i].in[5] <== eq[22][i].out; - multi_or[5][i].in[6] <== eq[12][i].out; - multi_or[5][i].in[7] <== eq[19][i].out; - multi_or[5][i].in[8] <== eq[11][i].out; - multi_or[5][i].in[9] <== eq[21][i].out; - multi_or[5][i].in[10] <== eq[14][i].out; - multi_or[5][i].in[11] <== eq[9][i].out; - multi_or[5][i].in[12] <== eq[13][i].out; - multi_or[5][i].in[13] <== eq[20][i].out; - and[18][i].b <== multi_or[5][i].out; + multi_or[4][i].in[0] <== eq[17][i].out; + multi_or[4][i].in[1] <== eq[21][i].out; + multi_or[4][i].in[2] <== eq[19][i].out; + multi_or[4][i].in[3] <== eq[13][i].out; + multi_or[4][i].in[4] <== eq[10][i].out; + multi_or[4][i].in[5] <== eq[20][i].out; + multi_or[4][i].in[6] <== eq[16][i].out; + multi_or[4][i].in[7] <== eq[15][i].out; + multi_or[4][i].in[8] <== eq[22][i].out; + multi_or[4][i].in[9] <== eq[14][i].out; + multi_or[4][i].in[10] <== eq[12][i].out; + multi_or[4][i].in[11] <== eq[11][i].out; + multi_or[4][i].in[12] <== eq[18][i].out; + multi_or[4][i].in[13] <== eq[9][i].out; + and[16][i].b <== multi_or[4][i].out; + and[17][i] = AND(); + and[17][i].a <== states[i][6]; + and[17][i].b <== and[6][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[18][i] = AND(); + and[18][i].a <== lt[12][i].out; + and[18][i].b <== lt[13][i].out; and[19][i] = AND(); - and[19][i].a <== lt[12][i].out; - and[19][i].b <== lt[13][i].out; - and[20][i] = AND(); - and[20][i].a <== states[i][5]; - and[20][i].b <== and[19][i].out; + and[19][i].a <== states[i][5]; + and[19][i].b <== and[18][i].out; eq[23][i] = IsEqual(); eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 128; + eq[23][i].in[1] <== 139; eq[24][i] = IsEqual(); eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 130; + eq[24][i].in[1] <== 136; eq[25][i] = IsEqual(); eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 138; + eq[25][i].in[1] <== 133; eq[26][i] = IsEqual(); eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 134; + eq[26][i].in[1] <== 137; eq[27][i] = IsEqual(); eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 132; + eq[27][i].in[1] <== 135; eq[28][i] = IsEqual(); eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 136; + eq[28][i].in[1] <== 142; 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] <== 140; + eq[30][i].in[1] <== 138; eq[31][i] = IsEqual(); eq[31][i].in[0] <== in[i]; - eq[31][i].in[1] <== 139; + eq[31][i].in[1] <== 128; eq[32][i] = IsEqual(); eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 129; + eq[32][i].in[1] <== 143; eq[33][i] = IsEqual(); eq[33][i].in[0] <== in[i]; - eq[33][i].in[1] <== 135; + eq[33][i].in[1] <== 134; eq[34][i] = IsEqual(); eq[34][i].in[0] <== in[i]; - eq[34][i].in[1] <== 142; + eq[34][i].in[1] <== 132; eq[35][i] = IsEqual(); eq[35][i].in[0] <== in[i]; - eq[35][i].in[1] <== 133; + eq[35][i].in[1] <== 129; eq[36][i] = IsEqual(); eq[36][i].in[0] <== in[i]; - eq[36][i].in[1] <== 137; + eq[36][i].in[1] <== 141; eq[37][i] = IsEqual(); eq[37][i].in[0] <== in[i]; - eq[37][i].in[1] <== 141; + eq[37][i].in[1] <== 130; eq[38][i] = IsEqual(); eq[38][i].in[0] <== in[i]; - eq[38][i].in[1] <== 143; + eq[38][i].in[1] <== 140; + and[20][i] = AND(); + and[20][i].a <== states[i][7]; + multi_or[5][i] = MultiOR(16); + multi_or[5][i].in[0] <== eq[23][i].out; + multi_or[5][i].in[1] <== eq[24][i].out; + multi_or[5][i].in[2] <== eq[25][i].out; + multi_or[5][i].in[3] <== eq[26][i].out; + multi_or[5][i].in[4] <== eq[27][i].out; + multi_or[5][i].in[5] <== eq[28][i].out; + multi_or[5][i].in[6] <== eq[29][i].out; + multi_or[5][i].in[7] <== eq[30][i].out; + multi_or[5][i].in[8] <== eq[31][i].out; + multi_or[5][i].in[9] <== eq[32][i].out; + multi_or[5][i].in[10] <== eq[33][i].out; + multi_or[5][i].in[11] <== eq[34][i].out; + multi_or[5][i].in[12] <== eq[35][i].out; + multi_or[5][i].in[13] <== eq[36][i].out; + multi_or[5][i].in[14] <== eq[37][i].out; + multi_or[5][i].in[15] <== eq[38][i].out; + and[20][i].b <== multi_or[5][i].out; and[21][i] = AND(); - and[21][i].a <== states[i][7]; - multi_or[6][i] = MultiOR(16); - multi_or[6][i].in[0] <== eq[23][i].out; - multi_or[6][i].in[1] <== eq[24][i].out; - multi_or[6][i].in[2] <== eq[25][i].out; - multi_or[6][i].in[3] <== eq[26][i].out; - multi_or[6][i].in[4] <== eq[27][i].out; - multi_or[6][i].in[5] <== eq[28][i].out; - multi_or[6][i].in[6] <== eq[29][i].out; - multi_or[6][i].in[7] <== eq[30][i].out; - multi_or[6][i].in[8] <== eq[31][i].out; - multi_or[6][i].in[9] <== eq[32][i].out; - multi_or[6][i].in[10] <== eq[33][i].out; - multi_or[6][i].in[11] <== eq[34][i].out; - multi_or[6][i].in[12] <== eq[35][i].out; - multi_or[6][i].in[13] <== eq[36][i].out; - multi_or[6][i].in[14] <== eq[37][i].out; - multi_or[6][i].in[15] <== eq[38][i].out; + and[21][i].a <== states[i][8]; + multi_or[6][i] = MultiOR(14); + multi_or[6][i].in[0] <== eq[11][i].out; + multi_or[6][i].in[1] <== eq[14][i].out; + multi_or[6][i].in[2] <== eq[16][i].out; + multi_or[6][i].in[3] <== eq[17][i].out; + multi_or[6][i].in[4] <== eq[20][i].out; + multi_or[6][i].in[5] <== eq[19][i].out; + multi_or[6][i].in[6] <== eq[15][i].out; + multi_or[6][i].in[7] <== eq[21][i].out; + multi_or[6][i].in[8] <== eq[13][i].out; + multi_or[6][i].in[9] <== eq[22][i].out; + multi_or[6][i].in[10] <== eq[10][i].out; + multi_or[6][i].in[11] <== eq[18][i].out; + multi_or[6][i].in[12] <== eq[12][i].out; + multi_or[6][i].in[13] <== eq[9][i].out; and[21][i].b <== multi_or[6][i].out; multi_or[7][i] = MultiOR(6); multi_or[7][i].in[0] <== and[15][i].out; multi_or[7][i].in[1] <== and[16][i].out; multi_or[7][i].in[2] <== and[17][i].out; - multi_or[7][i].in[3] <== and[18][i].out; + multi_or[7][i].in[3] <== and[19][i].out; multi_or[7][i].in[4] <== and[20][i].out; multi_or[7][i].in[5] <== and[21][i].out; states[i+1][3] <== multi_or[7][i].out; @@ -353,13 +353,13 @@ template EmailAddrWithNameRegex(msg_bytes) { eq[39][i].in[0] <== in[i]; eq[39][i].in[1] <== 237; and[22][i] = AND(); - and[22][i].a <== states[i][8]; + and[22][i].a <== states[i][9]; and[22][i].b <== eq[39][i].out; and[23][i] = AND(); - and[23][i].a <== states[i][0]; + and[23][i].a <== states[i][8]; and[23][i].b <== eq[39][i].out; and[24][i] = AND(); - and[24][i].a <== states[i][9]; + and[24][i].a <== states[i][0]; and[24][i].b <== eq[39][i].out; multi_or[8][i] = MultiOR(3); multi_or[8][i].in[0] <== and[22][i].out; @@ -374,10 +374,10 @@ template EmailAddrWithNameRegex(msg_bytes) { and[25][i].a <== states[i][8]; and[25][i].b <== eq[40][i].out; and[26][i] = AND(); - and[26][i].a <== states[i][0]; + and[26][i].a <== states[i][9]; and[26][i].b <== eq[40][i].out; and[27][i] = AND(); - and[27][i].a <== states[i][9]; + and[27][i].a <== states[i][0]; and[27][i].b <== eq[40][i].out; multi_or[9][i] = MultiOR(3); multi_or[9][i].in[0] <== and[25][i].out; @@ -387,32 +387,32 @@ template EmailAddrWithNameRegex(msg_bytes) { state_changed[i].in[4] <== states[i+1][5]; eq[41][i] = IsEqual(); eq[41][i].in[0] <== in[i]; - eq[41][i].in[1] <== 242; + eq[41][i].in[1] <== 243; eq[42][i] = IsEqual(); eq[42][i].in[0] <== in[i]; eq[42][i].in[1] <== 241; eq[43][i] = IsEqual(); eq[43][i].in[0] <== in[i]; - eq[43][i].in[1] <== 243; + eq[43][i].in[1] <== 242; and[28][i] = AND(); - and[28][i].a <== states[i][8]; + and[28][i].a <== states[i][0]; multi_or[10][i] = MultiOR(3); multi_or[10][i].in[0] <== eq[41][i].out; multi_or[10][i].in[1] <== eq[42][i].out; multi_or[10][i].in[2] <== eq[43][i].out; and[28][i].b <== multi_or[10][i].out; and[29][i] = AND(); - and[29][i].a <== states[i][9]; + and[29][i].a <== states[i][8]; multi_or[11][i] = MultiOR(3); - multi_or[11][i].in[0] <== eq[43][i].out; - multi_or[11][i].in[1] <== eq[41][i].out; + multi_or[11][i].in[0] <== eq[41][i].out; + multi_or[11][i].in[1] <== eq[43][i].out; multi_or[11][i].in[2] <== eq[42][i].out; and[29][i].b <== multi_or[11][i].out; and[30][i] = AND(); - and[30][i].a <== states[i][0]; + and[30][i].a <== states[i][9]; multi_or[12][i] = MultiOR(3); - multi_or[12][i].in[0] <== eq[43][i].out; - multi_or[12][i].in[1] <== eq[42][i].out; + multi_or[12][i].in[0] <== eq[42][i].out; + multi_or[12][i].in[1] <== eq[43][i].out; multi_or[12][i].in[2] <== eq[41][i].out; and[30][i].b <== multi_or[12][i].out; multi_or[13][i] = MultiOR(3); @@ -439,67 +439,64 @@ template EmailAddrWithNameRegex(msg_bytes) { multi_or[14][i].in[2] <== and[33][i].out; states[i+1][7] <== multi_or[14][i].out; state_changed[i].in[6] <== states[i+1][7]; - and[34][i] = AND(); - and[34][i].a <== states[i][1]; - and[34][i].b <== and[8][i].out; lt[14][i] = LessEqThan(8); lt[14][i].in[0] <== 14; lt[14][i].in[1] <== in[i]; lt[15][i] = LessEqThan(8); lt[15][i].in[0] <== in[i]; lt[15][i].in[1] <== 32; - and[35][i] = AND(); - and[35][i].a <== lt[14][i].out; - and[35][i].b <== lt[15][i].out; + and[34][i] = AND(); + and[34][i].a <== lt[14][i].out; + and[34][i].b <== lt[15][i].out; eq[45][i] = IsEqual(); eq[45][i].in[0] <== in[i]; - eq[45][i].in[1] <== 11; + eq[45][i].in[1] <== 0; eq[46][i] = IsEqual(); eq[46][i].in[0] <== in[i]; - eq[46][i].in[1] <== 7; + eq[46][i].in[1] <== 9; eq[47][i] = IsEqual(); eq[47][i].in[0] <== in[i]; - eq[47][i].in[1] <== 5; + eq[47][i].in[1] <== 3; eq[48][i] = IsEqual(); eq[48][i].in[0] <== in[i]; - eq[48][i].in[1] <== 41; + eq[48][i].in[1] <== 12; eq[49][i] = IsEqual(); eq[49][i].in[0] <== in[i]; - eq[49][i].in[1] <== 6; + eq[49][i].in[1] <== 41; eq[50][i] = IsEqual(); eq[50][i].in[0] <== in[i]; - eq[50][i].in[1] <== 4; + eq[50][i].in[1] <== 7; eq[51][i] = IsEqual(); eq[51][i].in[0] <== in[i]; - eq[51][i].in[1] <== 12; + eq[51][i].in[1] <== 40; eq[52][i] = IsEqual(); eq[52][i].in[0] <== in[i]; - eq[52][i].in[1] <== 34; + eq[52][i].in[1] <== 1; eq[53][i] = IsEqual(); eq[53][i].in[0] <== in[i]; - eq[53][i].in[1] <== 1; + eq[53][i].in[1] <== 4; eq[54][i] = IsEqual(); eq[54][i].in[0] <== in[i]; - eq[54][i].in[1] <== 0; + eq[54][i].in[1] <== 34; eq[55][i] = IsEqual(); eq[55][i].in[0] <== in[i]; - eq[55][i].in[1] <== 8; + eq[55][i].in[1] <== 5; eq[56][i] = IsEqual(); eq[56][i].in[0] <== in[i]; - eq[56][i].in[1] <== 9; + eq[56][i].in[1] <== 8; eq[57][i] = IsEqual(); eq[57][i].in[0] <== in[i]; - eq[57][i].in[1] <== 40; + eq[57][i].in[1] <== 2; eq[58][i] = IsEqual(); eq[58][i].in[0] <== in[i]; - eq[58][i].in[1] <== 2; + eq[58][i].in[1] <== 11; eq[59][i] = IsEqual(); eq[59][i].in[0] <== in[i]; - eq[59][i].in[1] <== 3; - and[36][i] = AND(); - and[36][i].a <== states[i][9]; + eq[59][i].in[1] <== 6; + and[35][i] = AND(); + and[35][i].a <== states[i][9]; multi_or[15][i] = MultiOR(18); - multi_or[15][i].in[0] <== and[35][i].out; + multi_or[15][i].in[0] <== and[34][i].out; multi_or[15][i].in[1] <== eq[45][i].out; multi_or[15][i].in[2] <== eq[46][i].out; multi_or[15][i].in[3] <== eq[47][i].out; @@ -511,84 +508,87 @@ template EmailAddrWithNameRegex(msg_bytes) { multi_or[15][i].in[9] <== eq[53][i].out; multi_or[15][i].in[10] <== eq[54][i].out; multi_or[15][i].in[11] <== eq[55][i].out; - multi_or[15][i].in[12] <== eq[56][i].out; - multi_or[15][i].in[13] <== eq[57][i].out; - multi_or[15][i].in[14] <== eq[58][i].out; - multi_or[15][i].in[15] <== eq[2][i].out; - multi_or[15][i].in[16] <== eq[59][i].out; - multi_or[15][i].in[17] <== eq[1][i].out; - and[36][i].b <== multi_or[15][i].out; + multi_or[15][i].in[12] <== eq[6][i].out; + multi_or[15][i].in[13] <== eq[56][i].out; + multi_or[15][i].in[14] <== eq[57][i].out; + multi_or[15][i].in[15] <== eq[58][i].out; + multi_or[15][i].in[16] <== eq[7][i].out; + multi_or[15][i].in[17] <== eq[59][i].out; + and[35][i].b <== multi_or[15][i].out; lt[16][i] = LessEqThan(8); lt[16][i].in[0] <== 14; lt[16][i].in[1] <== in[i]; lt[17][i] = LessEqThan(8); lt[17][i].in[0] <== in[i]; lt[17][i].in[1] <== 93; - and[37][i] = AND(); - and[37][i].a <== lt[16][i].out; - and[37][i].b <== lt[17][i].out; + and[36][i] = AND(); + and[36][i].a <== lt[16][i].out; + and[36][i].b <== lt[17][i].out; lt[18][i] = LessEqThan(8); lt[18][i].in[0] <== 95; lt[18][i].in[1] <== in[i]; lt[19][i] = LessEqThan(8); lt[19][i].in[0] <== in[i]; lt[19][i].in[1] <== 127; - and[38][i] = AND(); - and[38][i].a <== lt[18][i].out; - and[38][i].b <== lt[19][i].out; - and[39][i] = AND(); - and[39][i].a <== states[i][8]; - multi_or[16][i] = MultiOR(14); - multi_or[16][i].in[0] <== and[37][i].out; - multi_or[16][i].in[1] <== and[38][i].out; - multi_or[16][i].in[2] <== eq[56][i].out; - multi_or[16][i].in[3] <== eq[45][i].out; - multi_or[16][i].in[4] <== eq[59][i].out; - multi_or[16][i].in[5] <== eq[54][i].out; - multi_or[16][i].in[6] <== eq[47][i].out; - multi_or[16][i].in[7] <== eq[55][i].out; - multi_or[16][i].in[8] <== eq[53][i].out; - multi_or[16][i].in[9] <== eq[46][i].out; - multi_or[16][i].in[10] <== eq[58][i].out; - multi_or[16][i].in[11] <== eq[51][i].out; - multi_or[16][i].in[12] <== eq[49][i].out; - multi_or[16][i].in[13] <== eq[50][i].out; - and[39][i].b <== multi_or[16][i].out; + and[37][i] = AND(); + and[37][i].a <== lt[18][i].out; + and[37][i].b <== lt[19][i].out; eq[60][i] = IsEqual(); eq[60][i].in[0] <== in[i]; eq[60][i].in[1] <== 255; + and[38][i] = AND(); + and[38][i].a <== states[i][0]; + multi_or[16][i] = MultiOR(15); + multi_or[16][i].in[0] <== and[36][i].out; + multi_or[16][i].in[1] <== and[37][i].out; + multi_or[16][i].in[2] <== eq[50][i].out; + multi_or[16][i].in[3] <== eq[60][i].out; + multi_or[16][i].in[4] <== eq[59][i].out; + multi_or[16][i].in[5] <== eq[48][i].out; + multi_or[16][i].in[6] <== eq[55][i].out; + multi_or[16][i].in[7] <== eq[58][i].out; + multi_or[16][i].in[8] <== eq[47][i].out; + multi_or[16][i].in[9] <== eq[53][i].out; + multi_or[16][i].in[10] <== eq[52][i].out; + multi_or[16][i].in[11] <== eq[46][i].out; + multi_or[16][i].in[12] <== eq[45][i].out; + multi_or[16][i].in[13] <== eq[56][i].out; + multi_or[16][i].in[14] <== eq[57][i].out; + and[38][i].b <== multi_or[16][i].out; + and[39][i] = AND(); + and[39][i].a <== states[i][1]; + and[39][i].b <== and[6][i].out; and[40][i] = AND(); - and[40][i].a <== states[i][0]; - multi_or[17][i] = MultiOR(15); - multi_or[17][i].in[0] <== and[37][i].out; - multi_or[17][i].in[1] <== and[38][i].out; - multi_or[17][i].in[2] <== eq[54][i].out; - multi_or[17][i].in[3] <== eq[50][i].out; - multi_or[17][i].in[4] <== eq[56][i].out; - multi_or[17][i].in[5] <== eq[55][i].out; - multi_or[17][i].in[6] <== eq[59][i].out; - multi_or[17][i].in[7] <== eq[53][i].out; - multi_or[17][i].in[8] <== eq[51][i].out; - multi_or[17][i].in[9] <== eq[58][i].out; - multi_or[17][i].in[10] <== eq[46][i].out; - multi_or[17][i].in[11] <== eq[47][i].out; - multi_or[17][i].in[12] <== eq[60][i].out; - multi_or[17][i].in[13] <== eq[49][i].out; - multi_or[17][i].in[14] <== eq[45][i].out; + and[40][i].a <== states[i][8]; + multi_or[17][i] = MultiOR(14); + multi_or[17][i].in[0] <== and[36][i].out; + multi_or[17][i].in[1] <== and[37][i].out; + multi_or[17][i].in[2] <== eq[50][i].out; + multi_or[17][i].in[3] <== eq[52][i].out; + multi_or[17][i].in[4] <== eq[48][i].out; + multi_or[17][i].in[5] <== eq[46][i].out; + multi_or[17][i].in[6] <== eq[53][i].out; + multi_or[17][i].in[7] <== eq[58][i].out; + multi_or[17][i].in[8] <== eq[56][i].out; + multi_or[17][i].in[9] <== eq[55][i].out; + multi_or[17][i].in[10] <== eq[57][i].out; + multi_or[17][i].in[11] <== eq[45][i].out; + multi_or[17][i].in[12] <== eq[59][i].out; + multi_or[17][i].in[13] <== eq[47][i].out; and[40][i].b <== multi_or[17][i].out; multi_or[18][i] = MultiOR(4); - multi_or[18][i].in[0] <== and[34][i].out; - multi_or[18][i].in[1] <== and[36][i].out; + multi_or[18][i].in[0] <== and[35][i].out; + multi_or[18][i].in[1] <== and[38][i].out; multi_or[18][i].in[2] <== and[39][i].out; multi_or[18][i].in[3] <== and[40][i].out; states[i+1][8] <== multi_or[18][i].out; state_changed[i].in[7] <== states[i+1][8]; and[41][i] = AND(); - and[41][i].a <== states[i][9]; - and[41][i].b <== eq[0][i].out; + and[41][i].a <== states[i][8]; + and[41][i].b <== eq[5][i].out; and[42][i] = AND(); - and[42][i].a <== states[i][8]; - and[42][i].b <== eq[0][i].out; + and[42][i].a <== states[i][9]; + and[42][i].b <== eq[5][i].out; multi_or[19][i] = MultiOR(2); multi_or[19][i].in[0] <== and[41][i].out; multi_or[19][i].in[1] <== and[42][i].out; @@ -614,78 +614,78 @@ template EmailAddrWithNameRegex(msg_bytes) { and[44][i].b <== lt[23][i].out; eq[61][i] = IsEqual(); eq[61][i].in[0] <== in[i]; - eq[61][i].in[1] <== 36; + eq[61][i].in[1] <== 48; eq[62][i] = IsEqual(); eq[62][i].in[0] <== in[i]; - eq[62][i].in[1] <== 48; + eq[62][i].in[1] <== 36; eq[63][i] = IsEqual(); eq[63][i].in[0] <== in[i]; - eq[63][i].in[1] <== 42; + eq[63][i].in[1] <== 39; eq[64][i] = IsEqual(); eq[64][i].in[0] <== in[i]; - eq[64][i].in[1] <== 43; + eq[64][i].in[1] <== 52; eq[65][i] = IsEqual(); eq[65][i].in[0] <== in[i]; - eq[65][i].in[1] <== 55; + eq[65][i].in[1] <== 47; eq[66][i] = IsEqual(); eq[66][i].in[0] <== in[i]; - eq[66][i].in[1] <== 63; + eq[66][i].in[1] <== 55; eq[67][i] = IsEqual(); eq[67][i].in[0] <== in[i]; - eq[67][i].in[1] <== 52; + eq[67][i].in[1] <== 44; eq[68][i] = IsEqual(); eq[68][i].in[0] <== in[i]; - eq[68][i].in[1] <== 56; + eq[68][i].in[1] <== 54; eq[69][i] = IsEqual(); eq[69][i].in[0] <== in[i]; - eq[69][i].in[1] <== 44; + eq[69][i].in[1] <== 56; eq[70][i] = IsEqual(); eq[70][i].in[0] <== in[i]; - eq[70][i].in[1] <== 39; + eq[70][i].in[1] <== 63; eq[71][i] = IsEqual(); eq[71][i].in[0] <== in[i]; - eq[71][i].in[1] <== 51; + eq[71][i].in[1] <== 61; eq[72][i] = IsEqual(); eq[72][i].in[0] <== in[i]; - eq[72][i].in[1] <== 45; + eq[72][i].in[1] <== 38; eq[73][i] = IsEqual(); eq[73][i].in[0] <== in[i]; - eq[73][i].in[1] <== 35; + eq[73][i].in[1] <== 57; eq[74][i] = IsEqual(); eq[74][i].in[0] <== in[i]; - eq[74][i].in[1] <== 33; + eq[74][i].in[1] <== 50; eq[75][i] = IsEqual(); eq[75][i].in[0] <== in[i]; - eq[75][i].in[1] <== 38; + eq[75][i].in[1] <== 42; eq[76][i] = IsEqual(); eq[76][i].in[0] <== in[i]; - eq[76][i].in[1] <== 50; + eq[76][i].in[1] <== 35; eq[77][i] = IsEqual(); eq[77][i].in[0] <== in[i]; - eq[77][i].in[1] <== 46; + eq[77][i].in[1] <== 37; eq[78][i] = IsEqual(); eq[78][i].in[0] <== in[i]; - eq[78][i].in[1] <== 47; + eq[78][i].in[1] <== 45; eq[79][i] = IsEqual(); eq[79][i].in[0] <== in[i]; - eq[79][i].in[1] <== 57; + eq[79][i].in[1] <== 53; eq[80][i] = IsEqual(); eq[80][i].in[0] <== in[i]; - eq[80][i].in[1] <== 37; + eq[80][i].in[1] <== 51; eq[81][i] = IsEqual(); eq[81][i].in[0] <== in[i]; - eq[81][i].in[1] <== 61; + eq[81][i].in[1] <== 33; eq[82][i] = IsEqual(); eq[82][i].in[0] <== in[i]; - eq[82][i].in[1] <== 54; + eq[82][i].in[1] <== 43; eq[83][i] = IsEqual(); eq[83][i].in[0] <== in[i]; - eq[83][i].in[1] <== 53; + eq[83][i].in[1] <== 49; eq[84][i] = IsEqual(); eq[84][i].in[0] <== in[i]; - eq[84][i].in[1] <== 49; + eq[84][i].in[1] <== 46; and[45][i] = AND(); - and[45][i].a <== states[i][9]; + and[45][i].a <== states[i][10]; multi_or[20][i] = MultiOR(26); multi_or[20][i].in[0] <== and[43][i].out; multi_or[20][i].in[1] <== and[44][i].out; @@ -715,34 +715,34 @@ template EmailAddrWithNameRegex(msg_bytes) { multi_or[20][i].in[25] <== eq[84][i].out; and[45][i].b <== multi_or[20][i].out; and[46][i] = AND(); - and[46][i].a <== states[i][10]; + and[46][i].a <== states[i][9]; multi_or[21][i] = MultiOR(26); multi_or[21][i].in[0] <== and[43][i].out; multi_or[21][i].in[1] <== and[44][i].out; - multi_or[21][i].in[2] <== eq[74][i].out; - multi_or[21][i].in[3] <== eq[71][i].out; - multi_or[21][i].in[4] <== eq[65][i].out; - multi_or[21][i].in[5] <== eq[70][i].out; - multi_or[21][i].in[6] <== eq[75][i].out; - multi_or[21][i].in[7] <== eq[67][i].out; - multi_or[21][i].in[8] <== eq[77][i].out; - multi_or[21][i].in[9] <== eq[62][i].out; - multi_or[21][i].in[10] <== eq[69][i].out; - multi_or[21][i].in[11] <== eq[82][i].out; - multi_or[21][i].in[12] <== eq[72][i].out; - multi_or[21][i].in[13] <== eq[80][i].out; - multi_or[21][i].in[14] <== eq[83][i].out; - multi_or[21][i].in[15] <== eq[84][i].out; + multi_or[21][i].in[2] <== eq[63][i].out; + multi_or[21][i].in[3] <== eq[83][i].out; + multi_or[21][i].in[4] <== eq[67][i].out; + multi_or[21][i].in[5] <== eq[68][i].out; + multi_or[21][i].in[6] <== eq[82][i].out; + multi_or[21][i].in[7] <== eq[73][i].out; + multi_or[21][i].in[8] <== eq[62][i].out; + multi_or[21][i].in[9] <== eq[80][i].out; + multi_or[21][i].in[10] <== eq[77][i].out; + multi_or[21][i].in[11] <== eq[66][i].out; + multi_or[21][i].in[12] <== eq[65][i].out; + multi_or[21][i].in[13] <== eq[70][i].out; + multi_or[21][i].in[14] <== eq[64][i].out; + multi_or[21][i].in[15] <== eq[81][i].out; multi_or[21][i].in[16] <== eq[78][i].out; - multi_or[21][i].in[17] <== eq[76][i].out; - multi_or[21][i].in[18] <== eq[64][i].out; - multi_or[21][i].in[19] <== eq[63][i].out; - multi_or[21][i].in[20] <== eq[66][i].out; - multi_or[21][i].in[21] <== eq[68][i].out; - multi_or[21][i].in[22] <== eq[79][i].out; - multi_or[21][i].in[23] <== eq[61][i].out; - multi_or[21][i].in[24] <== eq[73][i].out; - multi_or[21][i].in[25] <== eq[81][i].out; + multi_or[21][i].in[17] <== eq[74][i].out; + multi_or[21][i].in[18] <== eq[76][i].out; + multi_or[21][i].in[19] <== eq[84][i].out; + multi_or[21][i].in[20] <== eq[69][i].out; + multi_or[21][i].in[21] <== eq[75][i].out; + multi_or[21][i].in[22] <== eq[61][i].out; + multi_or[21][i].in[23] <== eq[79][i].out; + multi_or[21][i].in[24] <== eq[71][i].out; + multi_or[21][i].in[25] <== eq[72][i].out; and[46][i].b <== multi_or[21][i].out; multi_or[22][i] = MultiOR(2); multi_or[22][i].in[0] <== and[45][i].out; @@ -751,7 +751,7 @@ template EmailAddrWithNameRegex(msg_bytes) { state_changed[i].in[9] <== states[i+1][10]; and[47][i] = AND(); and[47][i].a <== states[i][10]; - and[47][i].b <== eq[7][i].out; + and[47][i].b <== eq[4][i].out; states[i+1][11] <== and[47][i].out; state_changed[i].in[10] <== states[i+1][11]; lt[24][i] = LessEqThan(8); @@ -771,38 +771,38 @@ template EmailAddrWithNameRegex(msg_bytes) { multi_or[23][i] = MultiOR(15); multi_or[23][i].in[0] <== and[43][i].out; multi_or[23][i].in[1] <== and[48][i].out; - multi_or[23][i].in[2] <== eq[67][i].out; - multi_or[23][i].in[3] <== eq[84][i].out; - multi_or[23][i].in[4] <== eq[71][i].out; - multi_or[23][i].in[5] <== eq[68][i].out; - multi_or[23][i].in[6] <== eq[77][i].out; - multi_or[23][i].in[7] <== eq[72][i].out; - multi_or[23][i].in[8] <== eq[82][i].out; - multi_or[23][i].in[9] <== eq[85][i].out; - multi_or[23][i].in[10] <== eq[65][i].out; - multi_or[23][i].in[11] <== eq[83][i].out; - multi_or[23][i].in[12] <== eq[79][i].out; - multi_or[23][i].in[13] <== eq[62][i].out; - multi_or[23][i].in[14] <== eq[76][i].out; + multi_or[23][i].in[2] <== eq[84][i].out; + multi_or[23][i].in[3] <== eq[78][i].out; + multi_or[23][i].in[4] <== eq[79][i].out; + multi_or[23][i].in[5] <== eq[61][i].out; + multi_or[23][i].in[6] <== eq[69][i].out; + multi_or[23][i].in[7] <== eq[66][i].out; + multi_or[23][i].in[8] <== eq[83][i].out; + multi_or[23][i].in[9] <== eq[74][i].out; + multi_or[23][i].in[10] <== eq[85][i].out; + multi_or[23][i].in[11] <== eq[80][i].out; + multi_or[23][i].in[12] <== eq[73][i].out; + multi_or[23][i].in[13] <== eq[64][i].out; + multi_or[23][i].in[14] <== eq[68][i].out; and[49][i].b <== multi_or[23][i].out; and[50][i] = AND(); and[50][i].a <== states[i][12]; multi_or[24][i] = MultiOR(15); multi_or[24][i].in[0] <== and[43][i].out; multi_or[24][i].in[1] <== and[48][i].out; - multi_or[24][i].in[2] <== eq[65][i].out; - multi_or[24][i].in[3] <== eq[72][i].out; - multi_or[24][i].in[4] <== eq[62][i].out; - multi_or[24][i].in[5] <== eq[84][i].out; - multi_or[24][i].in[6] <== eq[85][i].out; - multi_or[24][i].in[7] <== eq[83][i].out; - multi_or[24][i].in[8] <== eq[76][i].out; - multi_or[24][i].in[9] <== eq[67][i].out; - multi_or[24][i].in[10] <== eq[79][i].out; - multi_or[24][i].in[11] <== eq[71][i].out; - multi_or[24][i].in[12] <== eq[82][i].out; - multi_or[24][i].in[13] <== eq[77][i].out; - multi_or[24][i].in[14] <== eq[68][i].out; + multi_or[24][i].in[2] <== eq[79][i].out; + multi_or[24][i].in[3] <== eq[73][i].out; + multi_or[24][i].in[4] <== eq[68][i].out; + multi_or[24][i].in[5] <== eq[74][i].out; + multi_or[24][i].in[6] <== eq[84][i].out; + multi_or[24][i].in[7] <== eq[66][i].out; + multi_or[24][i].in[8] <== eq[85][i].out; + multi_or[24][i].in[9] <== eq[69][i].out; + multi_or[24][i].in[10] <== eq[61][i].out; + multi_or[24][i].in[11] <== eq[78][i].out; + multi_or[24][i].in[12] <== eq[64][i].out; + multi_or[24][i].in[13] <== eq[80][i].out; + multi_or[24][i].in[14] <== eq[83][i].out; and[50][i].b <== multi_or[24][i].out; multi_or[25][i] = MultiOR(2); multi_or[25][i].in[0] <== and[49][i].out; @@ -811,7 +811,7 @@ template EmailAddrWithNameRegex(msg_bytes) { state_changed[i].in[11] <== states[i+1][12]; and[51][i] = AND(); and[51][i].a <== states[i][12]; - and[51][i].b <== eq[6][i].out; + and[51][i].b <== eq[0][i].out; states[i+1][13] <== and[51][i].out; state_changed[i].in[12] <== states[i+1][13]; states[i+1][0] <== 1 - state_changed[i].out; @@ -828,7 +828,7 @@ template EmailAddrWithNameRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][13] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(12, 12), (9, 10), (10, 11), (10, 10), (11, 12)}] + // substrings calculated: [{(10, 10), (10, 11), (11, 12), (9, 10), (12, 12)}] signal is_substr0[msg_bytes][6]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/circuits/common/email_domain_regex.circom b/packages/circom/circuits/common/email_domain_regex.circom index 57dced7..fc6ad22 100644 --- a/packages/circom/circuits/common/email_domain_regex.circom +++ b/packages/circom/circuits/common/email_domain_regex.circom @@ -38,7 +38,7 @@ template EmailDomainRegex(msg_bytes) { 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] <== 95; + lt[2][i].in[0] <== 94; lt[2][i].in[1] <== in[i]; lt[3][i] = LessEqThan(8); lt[3][i].in[0] <== in[i]; @@ -48,82 +48,79 @@ template EmailDomainRegex(msg_bytes) { and[1][i].b <== lt[3][i].out; eq[0][i] = IsEqual(); eq[0][i].in[0] <== in[i]; - eq[0][i].in[1] <== 39; + eq[0][i].in[1] <== 42; eq[1][i] = IsEqual(); eq[1][i].in[0] <== in[i]; - eq[1][i].in[1] <== 52; + eq[1][i].in[1] <== 44; eq[2][i] = IsEqual(); eq[2][i].in[0] <== in[i]; - eq[2][i].in[1] <== 51; + eq[2][i].in[1] <== 47; eq[3][i] = IsEqual(); eq[3][i].in[0] <== in[i]; - eq[3][i].in[1] <== 49; + eq[3][i].in[1] <== 50; eq[4][i] = IsEqual(); eq[4][i].in[0] <== in[i]; - eq[4][i].in[1] <== 53; + eq[4][i].in[1] <== 52; eq[5][i] = IsEqual(); eq[5][i].in[0] <== in[i]; - eq[5][i].in[1] <== 54; + eq[5][i].in[1] <== 56; eq[6][i] = IsEqual(); eq[6][i].in[0] <== in[i]; - eq[6][i].in[1] <== 48; + eq[6][i].in[1] <== 57; eq[7][i] = IsEqual(); eq[7][i].in[0] <== in[i]; - eq[7][i].in[1] <== 255; + eq[7][i].in[1] <== 55; eq[8][i] = IsEqual(); eq[8][i].in[0] <== in[i]; - eq[8][i].in[1] <== 45; + eq[8][i].in[1] <== 51; eq[9][i] = IsEqual(); eq[9][i].in[0] <== in[i]; - eq[9][i].in[1] <== 55; + eq[9][i].in[1] <== 63; eq[10][i] = IsEqual(); eq[10][i].in[0] <== in[i]; - eq[10][i].in[1] <== 35; + eq[10][i].in[1] <== 54; eq[11][i] = IsEqual(); eq[11][i].in[0] <== in[i]; - eq[11][i].in[1] <== 42; + eq[11][i].in[1] <== 33; eq[12][i] = IsEqual(); eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 50; + eq[12][i].in[1] <== 49; eq[13][i] = IsEqual(); eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 57; + eq[13][i].in[1] <== 36; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 36; + eq[14][i].in[1] <== 45; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 46; + eq[15][i].in[1] <== 48; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 61; + eq[16][i].in[1] <== 53; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 37; + eq[17][i].in[1] <== 61; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 56; + eq[18][i].in[1] <== 35; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 38; + eq[19][i].in[1] <== 43; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 47; + eq[20][i].in[1] <== 38; eq[21][i] = IsEqual(); eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 43; + eq[21][i].in[1] <== 46; eq[22][i] = IsEqual(); eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 44; + eq[22][i].in[1] <== 37; eq[23][i] = IsEqual(); eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 33; - eq[24][i] = IsEqual(); - eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 63; + eq[23][i].in[1] <== 39; and[2][i] = AND(); - and[2][i].a <== states[i][0]; - multi_or[0][i] = MultiOR(27); + and[2][i].a <== states[i][1]; + multi_or[0][i] = MultiOR(26); 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; @@ -150,10 +147,9 @@ template EmailDomainRegex(msg_bytes) { multi_or[0][i].in[23] <== eq[21][i].out; multi_or[0][i].in[24] <== eq[22][i].out; multi_or[0][i].in[25] <== eq[23][i].out; - multi_or[0][i].in[26] <== eq[24][i].out; and[2][i].b <== multi_or[0][i].out; lt[4][i] = LessEqThan(8); - lt[4][i].in[0] <== 94; + lt[4][i].in[0] <== 95; lt[4][i].in[1] <== in[i]; lt[5][i] = LessEqThan(8); lt[5][i].in[0] <== in[i]; @@ -161,35 +157,39 @@ template EmailDomainRegex(msg_bytes) { and[3][i] = AND(); and[3][i].a <== lt[4][i].out; and[3][i].b <== lt[5][i].out; + eq[24][i] = IsEqual(); + eq[24][i].in[0] <== in[i]; + eq[24][i].in[1] <== 255; and[4][i] = AND(); - and[4][i].a <== states[i][1]; - multi_or[1][i] = MultiOR(26); + and[4][i].a <== states[i][0]; + multi_or[1][i] = MultiOR(27); multi_or[1][i].in[0] <== and[0][i].out; multi_or[1][i].in[1] <== and[3][i].out; - multi_or[1][i].in[2] <== eq[8][i].out; - multi_or[1][i].in[3] <== eq[4][i].out; - multi_or[1][i].in[4] <== eq[17][i].out; - multi_or[1][i].in[5] <== eq[16][i].out; - multi_or[1][i].in[6] <== eq[6][i].out; - multi_or[1][i].in[7] <== eq[3][i].out; - multi_or[1][i].in[8] <== eq[23][i].out; - multi_or[1][i].in[9] <== eq[14][i].out; - multi_or[1][i].in[10] <== eq[11][i].out; - multi_or[1][i].in[11] <== eq[2][i].out; + multi_or[1][i].in[2] <== eq[21][i].out; + multi_or[1][i].in[3] <== eq[2][i].out; + multi_or[1][i].in[4] <== eq[13][i].out; + multi_or[1][i].in[5] <== eq[20][i].out; + multi_or[1][i].in[6] <== eq[23][i].out; + multi_or[1][i].in[7] <== eq[15][i].out; + multi_or[1][i].in[8] <== eq[22][i].out; + multi_or[1][i].in[9] <== eq[8][i].out; + multi_or[1][i].in[10] <== eq[6][i].out; + multi_or[1][i].in[11] <== eq[18][i].out; multi_or[1][i].in[12] <== eq[1][i].out; - multi_or[1][i].in[13] <== eq[21][i].out; - multi_or[1][i].in[14] <== eq[10][i].out; - multi_or[1][i].in[15] <== eq[22][i].out; - multi_or[1][i].in[16] <== eq[15][i].out; - multi_or[1][i].in[17] <== eq[13][i].out; - multi_or[1][i].in[18] <== eq[18][i].out; - multi_or[1][i].in[19] <== eq[24][i].out; - multi_or[1][i].in[20] <== eq[5][i].out; - multi_or[1][i].in[21] <== eq[19][i].out; + multi_or[1][i].in[13] <== eq[24][i].out; + multi_or[1][i].in[14] <== eq[14][i].out; + multi_or[1][i].in[15] <== eq[17][i].out; + multi_or[1][i].in[16] <== eq[11][i].out; + multi_or[1][i].in[17] <== eq[10][i].out; + multi_or[1][i].in[18] <== eq[5][i].out; + multi_or[1][i].in[19] <== eq[7][i].out; + multi_or[1][i].in[20] <== eq[9][i].out; + multi_or[1][i].in[21] <== eq[4][i].out; multi_or[1][i].in[22] <== eq[12][i].out; - multi_or[1][i].in[23] <== eq[9][i].out; - multi_or[1][i].in[24] <== eq[0][i].out; - multi_or[1][i].in[25] <== eq[20][i].out; + multi_or[1][i].in[23] <== eq[16][i].out; + multi_or[1][i].in[24] <== eq[19][i].out; + multi_or[1][i].in[25] <== eq[3][i].out; + multi_or[1][i].in[26] <== eq[0][i].out; and[4][i].b <== multi_or[1][i].out; multi_or[2][i] = MultiOR(2); multi_or[2][i].in[0] <== and[2][i].out; @@ -218,36 +218,36 @@ template EmailDomainRegex(msg_bytes) { multi_or[3][i] = MultiOR(14); multi_or[3][i].in[0] <== and[0][i].out; multi_or[3][i].in[1] <== and[6][i].out; - multi_or[3][i].in[2] <== eq[2][i].out; - multi_or[3][i].in[3] <== eq[1][i].out; - multi_or[3][i].in[4] <== eq[9][i].out; - multi_or[3][i].in[5] <== eq[5][i].out; - multi_or[3][i].in[6] <== eq[12][i].out; - multi_or[3][i].in[7] <== eq[3][i].out; - multi_or[3][i].in[8] <== eq[13][i].out; - multi_or[3][i].in[9] <== eq[15][i].out; - multi_or[3][i].in[10] <== eq[6][i].out; - multi_or[3][i].in[11] <== eq[18][i].out; - multi_or[3][i].in[12] <== eq[4][i].out; - multi_or[3][i].in[13] <== eq[8][i].out; + multi_or[3][i].in[2] <== eq[21][i].out; + multi_or[3][i].in[3] <== eq[16][i].out; + multi_or[3][i].in[4] <== eq[14][i].out; + multi_or[3][i].in[5] <== eq[10][i].out; + multi_or[3][i].in[6] <== eq[6][i].out; + multi_or[3][i].in[7] <== eq[4][i].out; + multi_or[3][i].in[8] <== eq[7][i].out; + multi_or[3][i].in[9] <== eq[12][i].out; + multi_or[3][i].in[10] <== eq[5][i].out; + multi_or[3][i].in[11] <== eq[3][i].out; + multi_or[3][i].in[12] <== eq[8][i].out; + multi_or[3][i].in[13] <== eq[15][i].out; and[7][i].b <== multi_or[3][i].out; and[8][i] = AND(); and[8][i].a <== states[i][2]; multi_or[4][i] = MultiOR(14); multi_or[4][i].in[0] <== and[0][i].out; multi_or[4][i].in[1] <== and[6][i].out; - multi_or[4][i].in[2] <== eq[1][i].out; - multi_or[4][i].in[3] <== eq[12][i].out; - multi_or[4][i].in[4] <== eq[18][i].out; - multi_or[4][i].in[5] <== eq[8][i].out; - multi_or[4][i].in[6] <== eq[2][i].out; - multi_or[4][i].in[7] <== eq[4][i].out; - multi_or[4][i].in[8] <== eq[13][i].out; - multi_or[4][i].in[9] <== eq[9][i].out; - multi_or[4][i].in[10] <== eq[3][i].out; - multi_or[4][i].in[11] <== eq[6][i].out; - multi_or[4][i].in[12] <== eq[5][i].out; - multi_or[4][i].in[13] <== eq[15][i].out; + multi_or[4][i].in[2] <== eq[15][i].out; + multi_or[4][i].in[3] <== eq[7][i].out; + multi_or[4][i].in[4] <== eq[12][i].out; + multi_or[4][i].in[5] <== eq[16][i].out; + multi_or[4][i].in[6] <== eq[8][i].out; + multi_or[4][i].in[7] <== eq[10][i].out; + multi_or[4][i].in[8] <== eq[6][i].out; + multi_or[4][i].in[9] <== eq[14][i].out; + multi_or[4][i].in[10] <== eq[5][i].out; + multi_or[4][i].in[11] <== eq[3][i].out; + multi_or[4][i].in[12] <== eq[21][i].out; + multi_or[4][i].in[13] <== eq[4][i].out; and[8][i].b <== multi_or[4][i].out; multi_or[5][i] = MultiOR(2); multi_or[5][i].in[0] <== and[7][i].out; @@ -268,7 +268,7 @@ 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: [{(3, 3), (2, 3)}] + // substrings calculated: [{(2, 3), (3, 3)}] signal is_substr0[msg_bytes][3]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/circuits/common/from_all_regex.circom b/packages/circom/circuits/common/from_all_regex.circom index 506012f..48d9e9c 100644 --- a/packages/circom/circuits/common/from_all_regex.circom +++ b/packages/circom/circuits/common/from_all_regex.circom @@ -91,16 +91,16 @@ template FromAllRegex(msg_bytes) { states[i+1][7] <== and[7][i].out; state_changed[i].in[6] <== states[i+1][7]; lt[0][i] = LessEqThan(8); - lt[0][i].in[0] <== 194; + lt[0][i].in[0] <== 128; 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; + lt[1][i].in[1] <== 191; and[8][i] = AND(); and[8][i].a <== lt[0][i].out; and[8][i].b <== lt[1][i].out; and[9][i] = AND(); - and[9][i].a <== states[i][15]; + and[9][i].a <== states[i][10]; and[9][i].b <== and[8][i].out; lt[2][i] = LessEqThan(8); lt[2][i].in[0] <== 128; @@ -114,38 +114,38 @@ template FromAllRegex(msg_bytes) { and[11][i] = AND(); and[11][i].a <== states[i][11]; and[11][i].b <== and[10][i].out; - and[12][i] = AND(); - and[12][i].a <== states[i][7]; - and[12][i].b <== and[8][i].out; lt[4][i] = LessEqThan(8); lt[4][i].in[0] <== 160; 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[12][i] = AND(); + and[12][i].a <== lt[4][i].out; + and[12][i].b <== lt[5][i].out; and[13][i] = AND(); - and[13][i].a <== lt[4][i].out; - and[13][i].b <== lt[5][i].out; - and[14][i] = AND(); - and[14][i].a <== states[i][9]; - and[14][i].b <== and[13][i].out; + and[13][i].a <== states[i][9]; + and[13][i].b <== and[12][i].out; lt[6][i] = LessEqThan(8); - lt[6][i].in[0] <== 128; + 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] <== 191; + lt[7][i].in[1] <== 223; + and[14][i] = AND(); + and[14][i].a <== lt[6][i].out; + and[14][i].b <== lt[7][i].out; and[15][i] = AND(); - and[15][i].a <== lt[6][i].out; - and[15][i].b <== lt[7][i].out; + and[15][i].a <== states[i][15]; + and[15][i].b <== and[14][i].out; and[16][i] = AND(); - and[16][i].a <== states[i][10]; - and[16][i].b <== and[15][i].out; + and[16][i].a <== states[i][7]; + and[16][i].b <== and[14][i].out; multi_or[1][i] = MultiOR(5); multi_or[1][i].in[0] <== and[9][i].out; multi_or[1][i].in[1] <== and[11][i].out; - multi_or[1][i].in[2] <== and[12][i].out; - multi_or[1][i].in[3] <== and[14][i].out; + multi_or[1][i].in[2] <== and[13][i].out; + multi_or[1][i].in[3] <== and[15][i].out; multi_or[1][i].in[4] <== and[16][i].out; states[i+1][8] <== multi_or[1][i].out; state_changed[i].in[7] <== states[i+1][8]; @@ -153,72 +153,63 @@ template FromAllRegex(msg_bytes) { eq[7][i].in[0] <== in[i]; eq[7][i].in[1] <== 224; and[17][i] = AND(); - and[17][i].a <== states[i][15]; + and[17][i].a <== states[i][7]; and[17][i].b <== eq[7][i].out; and[18][i] = AND(); - and[18][i].a <== states[i][7]; + and[18][i].a <== states[i][15]; and[18][i].b <== eq[7][i].out; multi_or[2][i] = MultiOR(2); multi_or[2][i].in[0] <== and[17][i].out; multi_or[2][i].in[1] <== and[18][i].out; states[i+1][9] <== multi_or[2][i].out; state_changed[i].in[8] <== states[i+1][9]; - 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[19][i] = AND(); - and[19][i].a <== lt[8][i].out; - and[19][i].b <== lt[9][i].out; - and[20][i] = AND(); - and[20][i].a <== states[i][12]; - and[20][i].b <== and[19][i].out; + and[19][i].a <== states[i][13]; + and[19][i].b <== and[8][i].out; eq[8][i] = IsEqual(); eq[8][i].in[0] <== in[i]; - eq[8][i].in[1] <== 228; + eq[8][i].in[1] <== 235; eq[9][i] = IsEqual(); eq[9][i].in[0] <== in[i]; - eq[9][i].in[1] <== 232; + eq[9][i].in[1] <== 228; eq[10][i] = IsEqual(); eq[10][i].in[0] <== in[i]; - eq[10][i].in[1] <== 226; + eq[10][i].in[1] <== 225; eq[11][i] = IsEqual(); eq[11][i].in[0] <== in[i]; - eq[11][i].in[1] <== 234; + eq[11][i].in[1] <== 232; eq[12][i] = IsEqual(); eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 235; + eq[12][i].in[1] <== 227; eq[13][i] = IsEqual(); eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 233; + eq[13][i].in[1] <== 230; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 236; + eq[14][i].in[1] <== 231; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 238; + eq[15][i].in[1] <== 229; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 230; + eq[16][i].in[1] <== 233; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 239; + eq[17][i].in[1] <== 234; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 225; + eq[18][i].in[1] <== 236; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 229; + eq[19][i].in[1] <== 239; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 231; + eq[20][i].in[1] <== 238; eq[21][i] = IsEqual(); eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 227; - and[21][i] = AND(); - and[21][i].a <== states[i][15]; + eq[21][i].in[1] <== 226; + and[20][i] = AND(); + and[20][i].a <== states[i][7]; multi_or[3][i] = MultiOR(14); multi_or[3][i].in[0] <== eq[8][i].out; multi_or[3][i].in[1] <== eq[9][i].out; @@ -234,75 +225,75 @@ template FromAllRegex(msg_bytes) { multi_or[3][i].in[11] <== eq[19][i].out; multi_or[3][i].in[12] <== eq[20][i].out; multi_or[3][i].in[13] <== eq[21][i].out; - and[21][i].b <== multi_or[3][i].out; - and[22][i] = AND(); - and[22][i].a <== states[i][7]; + and[20][i].b <== multi_or[3][i].out; + and[21][i] = AND(); + and[21][i].a <== states[i][15]; multi_or[4][i] = MultiOR(14); - multi_or[4][i].in[0] <== eq[19][i].out; - multi_or[4][i].in[1] <== eq[9][i].out; - multi_or[4][i].in[2] <== eq[20][i].out; - multi_or[4][i].in[3] <== eq[11][i].out; - multi_or[4][i].in[4] <== eq[12][i].out; + multi_or[4][i].in[0] <== eq[9][i].out; + multi_or[4][i].in[1] <== eq[14][i].out; + multi_or[4][i].in[2] <== eq[11][i].out; + multi_or[4][i].in[3] <== eq[20][i].out; + multi_or[4][i].in[4] <== eq[18][i].out; multi_or[4][i].in[5] <== eq[15][i].out; - multi_or[4][i].in[6] <== eq[13][i].out; - multi_or[4][i].in[7] <== eq[10][i].out; - multi_or[4][i].in[8] <== eq[8][i].out; - multi_or[4][i].in[9] <== eq[16][i].out; - multi_or[4][i].in[10] <== eq[14][i].out; - multi_or[4][i].in[11] <== eq[17][i].out; - multi_or[4][i].in[12] <== eq[21][i].out; - multi_or[4][i].in[13] <== eq[18][i].out; - and[22][i].b <== multi_or[4][i].out; + multi_or[4][i].in[6] <== eq[12][i].out; + multi_or[4][i].in[7] <== eq[19][i].out; + multi_or[4][i].in[8] <== eq[16][i].out; + multi_or[4][i].in[9] <== eq[21][i].out; + multi_or[4][i].in[10] <== eq[8][i].out; + multi_or[4][i].in[11] <== eq[13][i].out; + multi_or[4][i].in[12] <== eq[17][i].out; + multi_or[4][i].in[13] <== eq[10][i].out; + and[21][i].b <== multi_or[4][i].out; eq[22][i] = IsEqual(); eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 134; + eq[22][i].in[1] <== 133; eq[23][i] = IsEqual(); eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 130; + eq[23][i].in[1] <== 142; eq[24][i] = IsEqual(); eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 136; + eq[24][i].in[1] <== 143; eq[25][i] = IsEqual(); eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 140; + eq[25][i].in[1] <== 129; eq[26][i] = IsEqual(); eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 143; + eq[26][i].in[1] <== 138; eq[27][i] = IsEqual(); eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 131; + eq[27][i].in[1] <== 137; eq[28][i] = IsEqual(); eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 132; + eq[28][i].in[1] <== 131; eq[29][i] = IsEqual(); eq[29][i].in[0] <== in[i]; eq[29][i].in[1] <== 128; eq[30][i] = IsEqual(); eq[30][i].in[0] <== in[i]; - eq[30][i].in[1] <== 135; + eq[30][i].in[1] <== 139; eq[31][i] = IsEqual(); eq[31][i].in[0] <== in[i]; - eq[31][i].in[1] <== 138; + eq[31][i].in[1] <== 134; eq[32][i] = IsEqual(); eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 137; + eq[32][i].in[1] <== 136; eq[33][i] = IsEqual(); eq[33][i].in[0] <== in[i]; - eq[33][i].in[1] <== 142; + eq[33][i].in[1] <== 141; eq[34][i] = IsEqual(); eq[34][i].in[0] <== in[i]; - eq[34][i].in[1] <== 139; + eq[34][i].in[1] <== 135; eq[35][i] = IsEqual(); eq[35][i].in[0] <== in[i]; - eq[35][i].in[1] <== 129; + eq[35][i].in[1] <== 132; eq[36][i] = IsEqual(); eq[36][i].in[0] <== in[i]; - eq[36][i].in[1] <== 133; + eq[36][i].in[1] <== 140; eq[37][i] = IsEqual(); eq[37][i].in[0] <== in[i]; - eq[37][i].in[1] <== 141; - and[23][i] = AND(); - and[23][i].a <== states[i][14]; + eq[37][i].in[1] <== 130; + and[22][i] = AND(); + and[22][i].a <== states[i][14]; multi_or[5][i] = MultiOR(16); multi_or[5][i].in[0] <== eq[22][i].out; multi_or[5][i].in[1] <== eq[23][i].out; @@ -320,15 +311,24 @@ template FromAllRegex(msg_bytes) { multi_or[5][i].in[13] <== eq[35][i].out; multi_or[5][i].in[14] <== eq[36][i].out; multi_or[5][i].in[15] <== eq[37][i].out; - and[23][i].b <== multi_or[5][i].out; + and[22][i].b <== multi_or[5][i].out; + lt[8][i] = LessEqThan(8); + lt[8][i].in[0] <== 144; + lt[8][i].in[1] <== in[i]; + lt[9][i] = LessEqThan(8); + lt[9][i].in[0] <== in[i]; + lt[9][i].in[1] <== 191; + and[23][i] = AND(); + and[23][i].a <== lt[8][i].out; + and[23][i].b <== lt[9][i].out; and[24][i] = AND(); - and[24][i].a <== states[i][13]; - and[24][i].b <== and[15][i].out; + and[24][i].a <== states[i][12]; + and[24][i].b <== and[23][i].out; multi_or[6][i] = MultiOR(5); - multi_or[6][i].in[0] <== and[20][i].out; - multi_or[6][i].in[1] <== and[21][i].out; - multi_or[6][i].in[2] <== and[22][i].out; - multi_or[6][i].in[3] <== and[23][i].out; + multi_or[6][i].in[0] <== and[19][i].out; + multi_or[6][i].in[1] <== and[20][i].out; + multi_or[6][i].in[2] <== and[21][i].out; + multi_or[6][i].in[3] <== and[22][i].out; multi_or[6][i].in[4] <== and[24][i].out; states[i+1][10] <== multi_or[6][i].out; state_changed[i].in[9] <== states[i+1][10]; @@ -336,10 +336,10 @@ template FromAllRegex(msg_bytes) { eq[38][i].in[0] <== in[i]; eq[38][i].in[1] <== 237; and[25][i] = AND(); - and[25][i].a <== states[i][7]; + and[25][i].a <== states[i][15]; and[25][i].b <== eq[38][i].out; and[26][i] = AND(); - and[26][i].a <== states[i][15]; + and[26][i].a <== states[i][7]; and[26][i].b <== eq[38][i].out; multi_or[7][i] = MultiOR(2); multi_or[7][i].in[0] <== and[25][i].out; @@ -362,13 +362,13 @@ template FromAllRegex(msg_bytes) { state_changed[i].in[11] <== states[i+1][12]; eq[40][i] = IsEqual(); eq[40][i].in[0] <== in[i]; - eq[40][i].in[1] <== 241; + eq[40][i].in[1] <== 243; eq[41][i] = IsEqual(); eq[41][i].in[0] <== in[i]; - eq[41][i].in[1] <== 243; + eq[41][i].in[1] <== 242; eq[42][i] = IsEqual(); eq[42][i].in[0] <== in[i]; - eq[42][i].in[1] <== 242; + eq[42][i].in[1] <== 241; and[29][i] = AND(); and[29][i].a <== states[i][7]; multi_or[9][i] = MultiOR(3); @@ -379,9 +379,9 @@ template FromAllRegex(msg_bytes) { and[30][i] = AND(); and[30][i].a <== states[i][15]; multi_or[10][i] = MultiOR(3); - multi_or[10][i].in[0] <== eq[40][i].out; - multi_or[10][i].in[1] <== eq[42][i].out; - multi_or[10][i].in[2] <== eq[41][i].out; + multi_or[10][i].in[0] <== eq[41][i].out; + multi_or[10][i].in[1] <== eq[40][i].out; + multi_or[10][i].in[2] <== eq[42][i].out; and[30][i].b <== multi_or[10][i].out; multi_or[11][i] = MultiOR(2); multi_or[11][i].in[0] <== and[29][i].out; @@ -392,68 +392,65 @@ template FromAllRegex(msg_bytes) { eq[43][i].in[0] <== in[i]; eq[43][i].in[1] <== 244; and[31][i] = AND(); - and[31][i].a <== states[i][7]; + and[31][i].a <== states[i][15]; and[31][i].b <== eq[43][i].out; and[32][i] = AND(); - and[32][i].a <== states[i][15]; + and[32][i].a <== states[i][7]; and[32][i].b <== eq[43][i].out; multi_or[12][i] = MultiOR(2); multi_or[12][i].in[0] <== and[31][i].out; multi_or[12][i].in[1] <== and[32][i].out; states[i+1][14] <== multi_or[12][i].out; state_changed[i].in[13] <== states[i+1][14]; - and[33][i] = AND(); - and[33][i].a <== states[i][8]; - and[33][i].b <== and[15][i].out; lt[10][i] = LessEqThan(8); lt[10][i].in[0] <== 14; lt[10][i].in[1] <== in[i]; lt[11][i] = LessEqThan(8); lt[11][i].in[0] <== in[i]; lt[11][i].in[1] <== 127; - and[34][i] = AND(); - and[34][i].a <== lt[10][i].out; - and[34][i].b <== lt[11][i].out; + and[33][i] = AND(); + and[33][i].a <== lt[10][i].out; + and[33][i].b <== lt[11][i].out; eq[44][i] = IsEqual(); eq[44][i].in[0] <== in[i]; - eq[44][i].in[1] <== 6; + eq[44][i].in[1] <== 8; eq[45][i] = IsEqual(); eq[45][i].in[0] <== in[i]; - eq[45][i].in[1] <== 1; + eq[45][i].in[1] <== 12; eq[46][i] = IsEqual(); eq[46][i].in[0] <== in[i]; - eq[46][i].in[1] <== 4; + eq[46][i].in[1] <== 1; eq[47][i] = IsEqual(); eq[47][i].in[0] <== in[i]; - eq[47][i].in[1] <== 9; + eq[47][i].in[1] <== 0; eq[48][i] = IsEqual(); eq[48][i].in[0] <== in[i]; - eq[48][i].in[1] <== 7; + eq[48][i].in[1] <== 3; eq[49][i] = IsEqual(); eq[49][i].in[0] <== in[i]; - eq[49][i].in[1] <== 11; + eq[49][i].in[1] <== 9; eq[50][i] = IsEqual(); eq[50][i].in[0] <== in[i]; - eq[50][i].in[1] <== 2; + eq[50][i].in[1] <== 7; eq[51][i] = IsEqual(); eq[51][i].in[0] <== in[i]; - eq[51][i].in[1] <== 5; + eq[51][i].in[1] <== 6; eq[52][i] = IsEqual(); eq[52][i].in[0] <== in[i]; - eq[52][i].in[1] <== 12; + eq[52][i].in[1] <== 5; eq[53][i] = IsEqual(); eq[53][i].in[0] <== in[i]; - eq[53][i].in[1] <== 3; + eq[53][i].in[1] <== 2; eq[54][i] = IsEqual(); eq[54][i].in[0] <== in[i]; - eq[54][i].in[1] <== 0; + eq[54][i].in[1] <== 11; eq[55][i] = IsEqual(); eq[55][i].in[0] <== in[i]; - eq[55][i].in[1] <== 8; - and[35][i] = AND(); - and[35][i].a <== states[i][15]; + eq[55][i].in[1] <== 4; + and[34][i] = AND(); + and[34][i].a <== states[i][7]; multi_or[13][i] = MultiOR(13); - multi_or[13][i].in[0] <== and[34][i].out; + multi_or[13][i].in[0] <== and[33][i].out; multi_or[13][i].in[1] <== eq[44][i].out; multi_or[13][i].in[2] <== eq[45][i].out; multi_or[13][i].in[3] <== eq[46][i].out; @@ -466,26 +463,29 @@ template FromAllRegex(msg_bytes) { multi_or[13][i].in[10] <== eq[53][i].out; multi_or[13][i].in[11] <== eq[54][i].out; multi_or[13][i].in[12] <== eq[55][i].out; - and[35][i].b <== multi_or[13][i].out; - and[36][i] = AND(); - and[36][i].a <== states[i][7]; + and[34][i].b <== multi_or[13][i].out; + and[35][i] = AND(); + and[35][i].a <== states[i][15]; multi_or[14][i] = MultiOR(13); - multi_or[14][i].in[0] <== and[34][i].out; - multi_or[14][i].in[1] <== eq[46][i].out; - multi_or[14][i].in[2] <== eq[51][i].out; - multi_or[14][i].in[3] <== eq[48][i].out; + multi_or[14][i].in[0] <== and[33][i].out; + multi_or[14][i].in[1] <== eq[44][i].out; + multi_or[14][i].in[2] <== eq[52][i].out; + multi_or[14][i].in[3] <== eq[49][i].out; multi_or[14][i].in[4] <== eq[53][i].out; - multi_or[14][i].in[5] <== eq[44][i].out; - multi_or[14][i].in[6] <== eq[45][i].out; - multi_or[14][i].in[7] <== eq[50][i].out; - multi_or[14][i].in[8] <== eq[47][i].out; - multi_or[14][i].in[9] <== eq[55][i].out; - multi_or[14][i].in[10] <== eq[49][i].out; - multi_or[14][i].in[11] <== eq[52][i].out; - multi_or[14][i].in[12] <== eq[54][i].out; - and[36][i].b <== multi_or[14][i].out; + multi_or[14][i].in[5] <== eq[51][i].out; + multi_or[14][i].in[6] <== eq[55][i].out; + multi_or[14][i].in[7] <== eq[54][i].out; + multi_or[14][i].in[8] <== eq[50][i].out; + multi_or[14][i].in[9] <== eq[48][i].out; + multi_or[14][i].in[10] <== eq[47][i].out; + multi_or[14][i].in[11] <== eq[46][i].out; + multi_or[14][i].in[12] <== eq[45][i].out; + and[35][i].b <== multi_or[14][i].out; + and[36][i] = AND(); + and[36][i].a <== states[i][8]; + and[36][i].b <== and[8][i].out; multi_or[15][i] = MultiOR(3); - multi_or[15][i].in[0] <== and[33][i].out; + multi_or[15][i].in[0] <== and[34][i].out; multi_or[15][i].in[1] <== and[35][i].out; multi_or[15][i].in[2] <== and[36][i].out; states[i+1][15] <== multi_or[15][i].out; @@ -514,7 +514,7 @@ template FromAllRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][17] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(15, 13), (7, 12), (7, 15), (11, 8), (13, 10), (15, 10), (7, 8), (12, 10), (7, 14), (14, 10), (15, 9), (7, 11), (15, 12), (15, 15), (8, 15), (7, 13), (7, 10), (10, 8), (15, 14), (9, 8), (15, 8), (15, 11), (7, 9)}] + // substrings calculated: [{(14, 10), (7, 8), (15, 8), (7, 14), (15, 14), (15, 15), (7, 10), (12, 10), (11, 8), (7, 11), (15, 9), (15, 12), (7, 9), (13, 10), (15, 10), (15, 13), (9, 8), (8, 15), (7, 12), (7, 15), (15, 11), (10, 8), (7, 13)}] signal is_substr0[msg_bytes][24]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/circuits/common/message_id_regex.circom b/packages/circom/circuits/common/message_id_regex.circom index 27d4b5c..83c6d56 100644 --- a/packages/circom/circuits/common/message_id_regex.circom +++ b/packages/circom/circuits/common/message_id_regex.circom @@ -32,10 +32,10 @@ template MessageIdRegex(msg_bytes) { eq[0][i].in[0] <== in[i]; eq[0][i].in[1] <== 109; and[0][i] = AND(); - and[0][i].a <== states[i][4]; + and[0][i].a <== states[i][0]; and[0][i].b <== eq[0][i].out; and[1][i] = AND(); - and[1][i].a <== states[i][0]; + and[1][i].a <== states[i][4]; and[1][i].b <== eq[0][i].out; multi_or[0][i] = MultiOR(2); multi_or[0][i].in[0] <== and[0][i].out; @@ -163,45 +163,45 @@ template MessageIdRegex(msg_bytes) { eq[12][i].in[1] <== 43; eq[13][i] = IsEqual(); eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 46; + eq[13][i].in[1] <== 61; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 52; + eq[14][i].in[1] <== 46; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 61; + eq[15][i].in[1] <== 56; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 50; + eq[16][i].in[1] <== 51; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 53; + eq[17][i].in[1] <== 50; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 56; + eq[18][i].in[1] <== 52; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 49; + eq[19][i].in[1] <== 54; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 54; + eq[20][i].in[1] <== 57; eq[21][i] = IsEqual(); eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 51; + eq[21][i].in[1] <== 55; eq[22][i] = IsEqual(); eq[22][i].in[0] <== in[i]; eq[22][i].in[1] <== 48; eq[23][i] = IsEqual(); eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 95; + eq[23][i].in[1] <== 53; eq[24][i] = IsEqual(); eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 57; + eq[24][i].in[1] <== 95; eq[25][i] = IsEqual(); eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 55; + eq[25][i].in[1] <== 49; and[17][i] = AND(); - and[17][i].a <== states[i][14]; + and[17][i].a <== states[i][15]; multi_or[1][i] = MultiOR(17); multi_or[1][i].in[0] <== and[15][i].out; multi_or[1][i].in[1] <== and[16][i].out; @@ -209,38 +209,38 @@ template MessageIdRegex(msg_bytes) { multi_or[1][i].in[3] <== eq[13][i].out; multi_or[1][i].in[4] <== eq[14][i].out; multi_or[1][i].in[5] <== eq[15][i].out; - multi_or[1][i].in[6] <== eq[16][i].out; - multi_or[1][i].in[7] <== eq[17][i].out; - multi_or[1][i].in[8] <== eq[18][i].out; - multi_or[1][i].in[9] <== eq[19][i].out; - multi_or[1][i].in[10] <== eq[20][i].out; - multi_or[1][i].in[11] <== eq[21][i].out; - multi_or[1][i].in[12] <== eq[22][i].out; - multi_or[1][i].in[13] <== eq[23][i].out; - multi_or[1][i].in[14] <== eq[24][i].out; - multi_or[1][i].in[15] <== eq[25][i].out; - multi_or[1][i].in[16] <== eq[7][i].out; + multi_or[1][i].in[6] <== eq[7][i].out; + multi_or[1][i].in[7] <== eq[16][i].out; + multi_or[1][i].in[8] <== eq[17][i].out; + multi_or[1][i].in[9] <== eq[18][i].out; + multi_or[1][i].in[10] <== eq[19][i].out; + multi_or[1][i].in[11] <== eq[20][i].out; + multi_or[1][i].in[12] <== eq[21][i].out; + multi_or[1][i].in[13] <== eq[22][i].out; + multi_or[1][i].in[14] <== eq[23][i].out; + multi_or[1][i].in[15] <== eq[24][i].out; + multi_or[1][i].in[16] <== eq[25][i].out; and[17][i].b <== multi_or[1][i].out; and[18][i] = AND(); - and[18][i].a <== states[i][15]; + and[18][i].a <== states[i][14]; multi_or[2][i] = MultiOR(17); multi_or[2][i].in[0] <== and[15][i].out; multi_or[2][i].in[1] <== and[16][i].out; - multi_or[2][i].in[2] <== eq[22][i].out; - multi_or[2][i].in[3] <== eq[7][i].out; - multi_or[2][i].in[4] <== eq[12][i].out; - multi_or[2][i].in[5] <== eq[17][i].out; - multi_or[2][i].in[6] <== eq[19][i].out; - multi_or[2][i].in[7] <== eq[24][i].out; - multi_or[2][i].in[8] <== eq[20][i].out; - multi_or[2][i].in[9] <== eq[15][i].out; - multi_or[2][i].in[10] <== eq[21][i].out; - multi_or[2][i].in[11] <== eq[25][i].out; - multi_or[2][i].in[12] <== eq[23][i].out; - multi_or[2][i].in[13] <== eq[18][i].out; - multi_or[2][i].in[14] <== eq[13][i].out; - multi_or[2][i].in[15] <== eq[16][i].out; - multi_or[2][i].in[16] <== eq[14][i].out; + multi_or[2][i].in[2] <== eq[7][i].out; + multi_or[2][i].in[3] <== eq[22][i].out; + multi_or[2][i].in[4] <== eq[24][i].out; + multi_or[2][i].in[5] <== eq[14][i].out; + multi_or[2][i].in[6] <== eq[18][i].out; + multi_or[2][i].in[7] <== eq[16][i].out; + multi_or[2][i].in[8] <== eq[19][i].out; + multi_or[2][i].in[9] <== eq[21][i].out; + multi_or[2][i].in[10] <== eq[25][i].out; + multi_or[2][i].in[11] <== eq[12][i].out; + multi_or[2][i].in[12] <== eq[15][i].out; + multi_or[2][i].in[13] <== eq[13][i].out; + multi_or[2][i].in[14] <== eq[17][i].out; + multi_or[2][i].in[15] <== eq[23][i].out; + multi_or[2][i].in[16] <== eq[20][i].out; and[18][i].b <== multi_or[2][i].out; multi_or[3][i] = MultiOR(2); multi_or[3][i].in[0] <== and[17][i].out; @@ -279,7 +279,7 @@ template MessageIdRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][18] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(13, 14), (15, 15), (14, 15), (15, 16)}] + // substrings calculated: [{(15, 15), (13, 14), (15, 16), (14, 15)}] signal is_substr0[msg_bytes][5]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/circuits/common/subject_all_regex.circom b/packages/circom/circuits/common/subject_all_regex.circom index 5bcadd9..06151c3 100644 --- a/packages/circom/circuits/common/subject_all_regex.circom +++ b/packages/circom/circuits/common/subject_all_regex.circom @@ -127,49 +127,49 @@ template SubjectAllRegex(msg_bytes) { and[12][i].a <== states[i][14]; and[12][i].b <== and[11][i].out; lt[2][i] = LessEqThan(8); - lt[2][i].in[0] <== 160; + lt[2][i].in[0] <== 194; 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; + lt[3][i].in[1] <== 223; and[13][i] = AND(); and[13][i].a <== lt[2][i].out; and[13][i].b <== lt[3][i].out; and[14][i] = AND(); - and[14][i].a <== states[i][12]; + and[14][i].a <== states[i][10]; and[14][i].b <== and[13][i].out; + and[15][i] = AND(); + and[15][i].a <== states[i][18]; + and[15][i].b <== and[13][i].out; lt[4][i] = LessEqThan(8); - lt[4][i].in[0] <== 194; + lt[4][i].in[0] <== 128; lt[4][i].in[1] <== in[i]; lt[5][i] = LessEqThan(8); lt[5][i].in[0] <== in[i]; - lt[5][i].in[1] <== 223; - and[15][i] = AND(); - and[15][i].a <== lt[4][i].out; - and[15][i].b <== lt[5][i].out; + lt[5][i].in[1] <== 191; and[16][i] = AND(); - and[16][i].a <== states[i][18]; - and[16][i].b <== and[15][i].out; + and[16][i].a <== lt[4][i].out; + and[16][i].b <== lt[5][i].out; + and[17][i] = AND(); + and[17][i].a <== states[i][13]; + and[17][i].b <== and[16][i].out; lt[6][i] = LessEqThan(8); - lt[6][i].in[0] <== 128; + 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[17][i] = AND(); - and[17][i].a <== lt[6][i].out; - and[17][i].b <== lt[7][i].out; and[18][i] = AND(); - and[18][i].a <== states[i][13]; - and[18][i].b <== and[17][i].out; + and[18][i].a <== lt[6][i].out; + and[18][i].b <== lt[7][i].out; and[19][i] = AND(); - and[19][i].a <== states[i][10]; - and[19][i].b <== and[15][i].out; + and[19][i].a <== states[i][12]; + and[19][i].b <== and[18][i].out; multi_or[1][i] = MultiOR(5); multi_or[1][i].in[0] <== and[12][i].out; multi_or[1][i].in[1] <== and[14][i].out; - multi_or[1][i].in[2] <== and[16][i].out; - multi_or[1][i].in[3] <== and[18][i].out; + multi_or[1][i].in[2] <== and[15][i].out; + multi_or[1][i].in[3] <== and[17][i].out; multi_or[1][i].in[4] <== and[19][i].out; states[i+1][11] <== multi_or[1][i].out; state_changed[i].in[10] <== states[i+1][11]; @@ -177,63 +177,60 @@ template SubjectAllRegex(msg_bytes) { eq[10][i].in[0] <== in[i]; eq[10][i].in[1] <== 224; and[20][i] = AND(); - and[20][i].a <== states[i][18]; + and[20][i].a <== states[i][10]; and[20][i].b <== eq[10][i].out; and[21][i] = AND(); - and[21][i].a <== states[i][10]; + and[21][i].a <== states[i][18]; and[21][i].b <== eq[10][i].out; multi_or[2][i] = MultiOR(2); multi_or[2][i].in[0] <== and[20][i].out; multi_or[2][i].in[1] <== and[21][i].out; states[i+1][12] <== multi_or[2][i].out; state_changed[i].in[11] <== states[i+1][12]; - and[22][i] = AND(); - and[22][i].a <== states[i][16]; - and[22][i].b <== and[17][i].out; eq[11][i] = IsEqual(); eq[11][i].in[0] <== in[i]; eq[11][i].in[1] <== 231; eq[12][i] = IsEqual(); eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 234; + eq[12][i].in[1] <== 238; eq[13][i] = IsEqual(); eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 239; + eq[13][i].in[1] <== 236; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 228; + eq[14][i].in[1] <== 239; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 226; + eq[15][i].in[1] <== 233; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; eq[16][i].in[1] <== 227; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 235; + eq[17][i].in[1] <== 226; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 236; + eq[18][i].in[1] <== 229; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 238; + eq[19][i].in[1] <== 234; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; eq[20][i].in[1] <== 230; eq[21][i] = IsEqual(); eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 232; + eq[21][i].in[1] <== 235; eq[22][i] = IsEqual(); eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 225; + eq[22][i].in[1] <== 228; eq[23][i] = IsEqual(); eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 233; + eq[23][i].in[1] <== 232; eq[24][i] = IsEqual(); eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 229; - and[23][i] = AND(); - and[23][i].a <== states[i][10]; + eq[24][i].in[1] <== 225; + and[22][i] = AND(); + and[22][i].a <== states[i][10]; multi_or[3][i] = MultiOR(14); multi_or[3][i].in[0] <== eq[11][i].out; multi_or[3][i].in[1] <== eq[12][i].out; @@ -249,105 +246,108 @@ template SubjectAllRegex(msg_bytes) { multi_or[3][i].in[11] <== eq[22][i].out; multi_or[3][i].in[12] <== eq[23][i].out; multi_or[3][i].in[13] <== eq[24][i].out; - and[23][i].b <== multi_or[3][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[24][i] = AND(); - and[24][i].a <== lt[8][i].out; - and[24][i].b <== lt[9][i].out; - and[25][i] = AND(); - and[25][i].a <== states[i][15]; - and[25][i].b <== and[24][i].out; - and[26][i] = AND(); - and[26][i].a <== states[i][18]; - multi_or[4][i] = MultiOR(14); - multi_or[4][i].in[0] <== eq[14][i].out; - multi_or[4][i].in[1] <== eq[15][i].out; - multi_or[4][i].in[2] <== eq[19][i].out; - multi_or[4][i].in[3] <== eq[20][i].out; - multi_or[4][i].in[4] <== eq[17][i].out; - multi_or[4][i].in[5] <== eq[18][i].out; - multi_or[4][i].in[6] <== eq[16][i].out; - multi_or[4][i].in[7] <== eq[13][i].out; - multi_or[4][i].in[8] <== eq[24][i].out; - multi_or[4][i].in[9] <== eq[21][i].out; - multi_or[4][i].in[10] <== eq[22][i].out; - multi_or[4][i].in[11] <== eq[11][i].out; - multi_or[4][i].in[12] <== eq[23][i].out; - multi_or[4][i].in[13] <== eq[12][i].out; - and[26][i].b <== multi_or[4][i].out; + and[22][i].b <== multi_or[3][i].out; eq[25][i] = IsEqual(); eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 128; + eq[25][i].in[1] <== 138; eq[26][i] = IsEqual(); eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 132; + eq[26][i].in[1] <== 139; eq[27][i] = IsEqual(); eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 134; + eq[27][i].in[1] <== 136; eq[28][i] = IsEqual(); eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 143; + eq[28][i].in[1] <== 135; eq[29][i] = IsEqual(); eq[29][i].in[0] <== in[i]; - eq[29][i].in[1] <== 138; + eq[29][i].in[1] <== 140; 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] <== 136; + eq[31][i].in[1] <== 142; eq[32][i] = IsEqual(); eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 137; + eq[32][i].in[1] <== 128; eq[33][i] = IsEqual(); eq[33][i].in[0] <== in[i]; - eq[33][i].in[1] <== 131; + eq[33][i].in[1] <== 134; eq[34][i] = IsEqual(); eq[34][i].in[0] <== in[i]; - eq[34][i].in[1] <== 129; + eq[34][i].in[1] <== 141; eq[35][i] = IsEqual(); eq[35][i].in[0] <== in[i]; - eq[35][i].in[1] <== 142; + eq[35][i].in[1] <== 143; eq[36][i] = IsEqual(); eq[36][i].in[0] <== in[i]; - eq[36][i].in[1] <== 141; + eq[36][i].in[1] <== 130; eq[37][i] = IsEqual(); eq[37][i].in[0] <== in[i]; - eq[37][i].in[1] <== 135; + eq[37][i].in[1] <== 137; eq[38][i] = IsEqual(); eq[38][i].in[0] <== in[i]; - eq[38][i].in[1] <== 139; + eq[38][i].in[1] <== 131; eq[39][i] = IsEqual(); eq[39][i].in[0] <== in[i]; - eq[39][i].in[1] <== 130; + eq[39][i].in[1] <== 129; eq[40][i] = IsEqual(); eq[40][i].in[0] <== in[i]; - eq[40][i].in[1] <== 140; + eq[40][i].in[1] <== 132; + and[23][i] = AND(); + and[23][i].a <== states[i][17]; + multi_or[4][i] = MultiOR(16); + multi_or[4][i].in[0] <== eq[25][i].out; + multi_or[4][i].in[1] <== eq[26][i].out; + multi_or[4][i].in[2] <== eq[27][i].out; + multi_or[4][i].in[3] <== eq[28][i].out; + multi_or[4][i].in[4] <== eq[29][i].out; + multi_or[4][i].in[5] <== eq[30][i].out; + multi_or[4][i].in[6] <== eq[31][i].out; + multi_or[4][i].in[7] <== eq[32][i].out; + multi_or[4][i].in[8] <== eq[33][i].out; + multi_or[4][i].in[9] <== eq[34][i].out; + multi_or[4][i].in[10] <== eq[35][i].out; + multi_or[4][i].in[11] <== eq[36][i].out; + multi_or[4][i].in[12] <== eq[37][i].out; + multi_or[4][i].in[13] <== eq[38][i].out; + multi_or[4][i].in[14] <== eq[39][i].out; + multi_or[4][i].in[15] <== eq[40][i].out; + and[23][i].b <== multi_or[4][i].out; + lt[8][i] = LessEqThan(8); + lt[8][i].in[0] <== 144; + lt[8][i].in[1] <== in[i]; + lt[9][i] = LessEqThan(8); + lt[9][i].in[0] <== in[i]; + lt[9][i].in[1] <== 191; + and[24][i] = AND(); + and[24][i].a <== lt[8][i].out; + and[24][i].b <== lt[9][i].out; + and[25][i] = AND(); + and[25][i].a <== states[i][15]; + and[25][i].b <== and[24][i].out; + and[26][i] = AND(); + and[26][i].a <== states[i][18]; + multi_or[5][i] = MultiOR(14); + multi_or[5][i].in[0] <== eq[20][i].out; + multi_or[5][i].in[1] <== eq[11][i].out; + multi_or[5][i].in[2] <== eq[15][i].out; + multi_or[5][i].in[3] <== eq[18][i].out; + multi_or[5][i].in[4] <== eq[19][i].out; + multi_or[5][i].in[5] <== eq[24][i].out; + multi_or[5][i].in[6] <== eq[23][i].out; + multi_or[5][i].in[7] <== eq[13][i].out; + multi_or[5][i].in[8] <== eq[16][i].out; + multi_or[5][i].in[9] <== eq[12][i].out; + multi_or[5][i].in[10] <== eq[22][i].out; + multi_or[5][i].in[11] <== eq[14][i].out; + multi_or[5][i].in[12] <== eq[21][i].out; + multi_or[5][i].in[13] <== eq[17][i].out; + and[26][i].b <== multi_or[5][i].out; and[27][i] = AND(); - and[27][i].a <== states[i][17]; - multi_or[5][i] = MultiOR(16); - multi_or[5][i].in[0] <== eq[25][i].out; - multi_or[5][i].in[1] <== eq[26][i].out; - multi_or[5][i].in[2] <== eq[27][i].out; - multi_or[5][i].in[3] <== eq[28][i].out; - multi_or[5][i].in[4] <== eq[29][i].out; - multi_or[5][i].in[5] <== eq[30][i].out; - multi_or[5][i].in[6] <== eq[31][i].out; - multi_or[5][i].in[7] <== eq[32][i].out; - multi_or[5][i].in[8] <== eq[33][i].out; - multi_or[5][i].in[9] <== eq[34][i].out; - multi_or[5][i].in[10] <== eq[35][i].out; - multi_or[5][i].in[11] <== eq[36][i].out; - multi_or[5][i].in[12] <== eq[37][i].out; - multi_or[5][i].in[13] <== eq[38][i].out; - multi_or[5][i].in[14] <== eq[39][i].out; - multi_or[5][i].in[15] <== eq[40][i].out; - and[27][i].b <== multi_or[5][i].out; + and[27][i].a <== states[i][16]; + and[27][i].b <== and[16][i].out; multi_or[6][i] = MultiOR(5); multi_or[6][i].in[0] <== and[22][i].out; multi_or[6][i].in[1] <== and[23][i].out; @@ -374,10 +374,10 @@ template SubjectAllRegex(msg_bytes) { eq[42][i].in[0] <== in[i]; eq[42][i].in[1] <== 240; and[30][i] = AND(); - and[30][i].a <== states[i][10]; + and[30][i].a <== states[i][18]; and[30][i].b <== eq[42][i].out; and[31][i] = AND(); - and[31][i].a <== states[i][18]; + and[31][i].a <== states[i][10]; and[31][i].b <== eq[42][i].out; multi_or[8][i] = MultiOR(2); multi_or[8][i].in[0] <== and[30][i].out; @@ -386,13 +386,13 @@ template SubjectAllRegex(msg_bytes) { state_changed[i].in[14] <== states[i+1][15]; eq[43][i] = IsEqual(); eq[43][i].in[0] <== in[i]; - eq[43][i].in[1] <== 241; + eq[43][i].in[1] <== 242; eq[44][i] = IsEqual(); eq[44][i].in[0] <== in[i]; - eq[44][i].in[1] <== 242; + eq[44][i].in[1] <== 243; eq[45][i] = IsEqual(); eq[45][i].in[0] <== in[i]; - eq[45][i].in[1] <== 243; + eq[45][i].in[1] <== 241; and[32][i] = AND(); and[32][i].a <== states[i][18]; multi_or[9][i] = MultiOR(3); @@ -422,58 +422,55 @@ template SubjectAllRegex(msg_bytes) { multi_or[11][i].in[1] <== and[35][i].out; states[i+1][17] <== multi_or[11][i].out; state_changed[i].in[16] <== states[i+1][17]; - and[36][i] = AND(); - and[36][i].a <== states[i][11]; - and[36][i].b <== and[17][i].out; lt[10][i] = LessEqThan(8); lt[10][i].in[0] <== 14; lt[10][i].in[1] <== in[i]; lt[11][i] = LessEqThan(8); lt[11][i].in[0] <== in[i]; lt[11][i].in[1] <== 127; - and[37][i] = AND(); - and[37][i].a <== lt[10][i].out; - and[37][i].b <== lt[11][i].out; + and[36][i] = AND(); + and[36][i].a <== lt[10][i].out; + and[36][i].b <== lt[11][i].out; eq[47][i] = IsEqual(); eq[47][i].in[0] <== in[i]; - eq[47][i].in[1] <== 12; + eq[47][i].in[1] <== 0; eq[48][i] = IsEqual(); eq[48][i].in[0] <== in[i]; - eq[48][i].in[1] <== 6; + eq[48][i].in[1] <== 11; eq[49][i] = IsEqual(); eq[49][i].in[0] <== in[i]; - eq[49][i].in[1] <== 5; + eq[49][i].in[1] <== 4; eq[50][i] = IsEqual(); eq[50][i].in[0] <== in[i]; - eq[50][i].in[1] <== 2; + eq[50][i].in[1] <== 1; eq[51][i] = IsEqual(); eq[51][i].in[0] <== in[i]; - eq[51][i].in[1] <== 1; + eq[51][i].in[1] <== 7; eq[52][i] = IsEqual(); eq[52][i].in[0] <== in[i]; - eq[52][i].in[1] <== 9; + eq[52][i].in[1] <== 3; eq[53][i] = IsEqual(); eq[53][i].in[0] <== in[i]; - eq[53][i].in[1] <== 7; + eq[53][i].in[1] <== 9; eq[54][i] = IsEqual(); eq[54][i].in[0] <== in[i]; - eq[54][i].in[1] <== 11; + eq[54][i].in[1] <== 12; eq[55][i] = IsEqual(); eq[55][i].in[0] <== in[i]; - eq[55][i].in[1] <== 3; + eq[55][i].in[1] <== 8; eq[56][i] = IsEqual(); eq[56][i].in[0] <== in[i]; - eq[56][i].in[1] <== 0; + eq[56][i].in[1] <== 5; eq[57][i] = IsEqual(); eq[57][i].in[0] <== in[i]; - eq[57][i].in[1] <== 8; + eq[57][i].in[1] <== 6; eq[58][i] = IsEqual(); eq[58][i].in[0] <== in[i]; - eq[58][i].in[1] <== 4; - and[38][i] = AND(); - and[38][i].a <== states[i][18]; + eq[58][i].in[1] <== 2; + and[37][i] = AND(); + and[37][i].a <== states[i][18]; multi_or[12][i] = MultiOR(13); - multi_or[12][i].in[0] <== and[37][i].out; + multi_or[12][i].in[0] <== and[36][i].out; multi_or[12][i].in[1] <== eq[47][i].out; multi_or[12][i].in[2] <== eq[48][i].out; multi_or[12][i].in[3] <== eq[49][i].out; @@ -486,26 +483,29 @@ template SubjectAllRegex(msg_bytes) { multi_or[12][i].in[10] <== eq[56][i].out; multi_or[12][i].in[11] <== eq[57][i].out; multi_or[12][i].in[12] <== eq[58][i].out; - and[38][i].b <== multi_or[12][i].out; - and[39][i] = AND(); - and[39][i].a <== states[i][10]; + and[37][i].b <== multi_or[12][i].out; + and[38][i] = AND(); + and[38][i].a <== states[i][10]; multi_or[13][i] = MultiOR(13); - multi_or[13][i].in[0] <== and[37][i].out; - multi_or[13][i].in[1] <== eq[55][i].out; - multi_or[13][i].in[2] <== eq[57][i].out; - multi_or[13][i].in[3] <== eq[50][i].out; - multi_or[13][i].in[4] <== eq[52][i].out; - multi_or[13][i].in[5] <== eq[53][i].out; - multi_or[13][i].in[6] <== eq[54][i].out; - multi_or[13][i].in[7] <== eq[49][i].out; - multi_or[13][i].in[8] <== eq[58][i].out; - multi_or[13][i].in[9] <== eq[51][i].out; - multi_or[13][i].in[10] <== eq[56][i].out; - multi_or[13][i].in[11] <== eq[47][i].out; + multi_or[13][i].in[0] <== and[36][i].out; + multi_or[13][i].in[1] <== eq[58][i].out; + multi_or[13][i].in[2] <== eq[51][i].out; + multi_or[13][i].in[3] <== eq[47][i].out; + multi_or[13][i].in[4] <== eq[57][i].out; + multi_or[13][i].in[5] <== eq[50][i].out; + multi_or[13][i].in[6] <== eq[53][i].out; + multi_or[13][i].in[7] <== eq[55][i].out; + multi_or[13][i].in[8] <== eq[54][i].out; + multi_or[13][i].in[9] <== eq[56][i].out; + multi_or[13][i].in[10] <== eq[52][i].out; + multi_or[13][i].in[11] <== eq[49][i].out; multi_or[13][i].in[12] <== eq[48][i].out; - and[39][i].b <== multi_or[13][i].out; + and[38][i].b <== multi_or[13][i].out; + and[39][i] = AND(); + and[39][i].a <== states[i][11]; + and[39][i].b <== and[16][i].out; multi_or[14][i] = MultiOR(3); - multi_or[14][i].in[0] <== and[36][i].out; + multi_or[14][i].in[0] <== and[37][i].out; multi_or[14][i].in[1] <== and[38][i].out; multi_or[14][i].in[2] <== and[39][i].out; states[i+1][18] <== multi_or[14][i].out; @@ -534,7 +534,7 @@ template SubjectAllRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][20] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(11, 18), (18, 13), (18, 11), (10, 16), (10, 18), (10, 13), (15, 13), (18, 14), (10, 15), (10, 12), (18, 15), (18, 18), (18, 17), (12, 11), (10, 14), (10, 17), (17, 13), (18, 12), (10, 11), (13, 11), (18, 16), (14, 11), (16, 13)}] + // substrings calculated: [{(17, 13), (10, 12), (13, 11), (12, 11), (18, 13), (18, 14), (18, 18), (10, 15), (10, 11), (18, 16), (18, 12), (10, 14), (18, 17), (18, 15), (10, 16), (14, 11), (15, 13), (10, 17), (18, 11), (16, 13), (10, 18), (10, 13), (11, 18)}] signal is_substr0[msg_bytes][24]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/circuits/common/timestamp_regex.circom b/packages/circom/circuits/common/timestamp_regex.circom index a28eec4..e54ed80 100644 --- a/packages/circom/circuits/common/timestamp_regex.circom +++ b/packages/circom/circuits/common/timestamp_regex.circom @@ -32,10 +32,10 @@ template TimestampRegex(msg_bytes) { eq[0][i].in[0] <== in[i]; eq[0][i].in[1] <== 100; and[0][i] = AND(); - and[0][i].a <== states[i][4]; + and[0][i].a <== states[i][0]; and[0][i].b <== eq[0][i].out; and[1][i] = AND(); - and[1][i].a <== states[i][0]; + and[1][i].a <== states[i][4]; and[1][i].b <== eq[0][i].out; multi_or[0][i] = MultiOR(2); multi_or[0][i].in[0] <== and[0][i].out; @@ -172,54 +172,54 @@ template TimestampRegex(msg_bytes) { lt[0][i].in[1] <== in[i]; lt[1][i] = LessEqThan(8); lt[1][i].in[0] <== in[i]; - lt[1][i].in[1] <== 115; + lt[1][i].in[1] <== 122; and[18][i] = AND(); and[18][i].a <== lt[0][i].out; and[18][i].b <== lt[1][i].out; + and[19][i] = AND(); + and[19][i].a <== states[i][18]; + and[19][i].b <== and[18][i].out; + lt[2][i] = LessEqThan(8); + lt[2][i].in[0] <== 97; + lt[2][i].in[1] <== in[i]; + lt[3][i] = LessEqThan(8); + lt[3][i].in[0] <== in[i]; + lt[3][i].in[1] <== 115; + and[20][i] = AND(); + and[20][i].a <== lt[2][i].out; + and[20][i].b <== lt[3][i].out; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; eq[16][i].in[1] <== 119; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 120; + eq[17][i].in[1] <== 118; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 121; + eq[18][i].in[1] <== 120; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 122; + eq[19][i].in[1] <== 121; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 118; - and[19][i] = AND(); - and[19][i].a <== states[i][29]; + eq[20][i].in[1] <== 122; + and[21][i] = AND(); + and[21][i].a <== states[i][29]; multi_or[1][i] = MultiOR(7); - multi_or[1][i].in[0] <== and[18][i].out; - multi_or[1][i].in[1] <== eq[16][i].out; - multi_or[1][i].in[2] <== eq[17][i].out; - multi_or[1][i].in[3] <== eq[18][i].out; - multi_or[1][i].in[4] <== eq[19][i].out; - multi_or[1][i].in[5] <== eq[12][i].out; + multi_or[1][i].in[0] <== and[20][i].out; + multi_or[1][i].in[1] <== eq[12][i].out; + multi_or[1][i].in[2] <== eq[16][i].out; + multi_or[1][i].in[3] <== eq[17][i].out; + multi_or[1][i].in[4] <== eq[18][i].out; + multi_or[1][i].in[5] <== eq[19][i].out; multi_or[1][i].in[6] <== eq[20][i].out; - and[19][i].b <== multi_or[1][i].out; - lt[2][i] = LessEqThan(8); - lt[2][i].in[0] <== 97; - lt[2][i].in[1] <== in[i]; - lt[3][i] = LessEqThan(8); - lt[3][i].in[0] <== in[i]; - lt[3][i].in[1] <== 122; - and[20][i] = AND(); - and[20][i].a <== lt[2][i].out; - and[20][i].b <== lt[3][i].out; - and[21][i] = AND(); - and[21][i].a <== states[i][17]; - and[21][i].b <== and[20][i].out; + and[21][i].b <== multi_or[1][i].out; and[22][i] = AND(); - and[22][i].a <== states[i][30]; - and[22][i].b <== and[20][i].out; + and[22][i].a <== states[i][17]; + and[22][i].b <== and[18][i].out; and[23][i] = AND(); - and[23][i].a <== states[i][18]; - and[23][i].b <== and[20][i].out; + and[23][i].a <== states[i][30]; + and[23][i].b <== and[18][i].out; multi_or[2][i] = MultiOR(4); multi_or[2][i].in[0] <== and[19][i].out; multi_or[2][i].in[1] <== and[21][i].out; @@ -236,118 +236,118 @@ template TimestampRegex(msg_bytes) { states[i+1][19] <== and[24][i].out; state_changed[i].in[18] <== states[i+1][19]; lt[4][i] = LessEqThan(8); - lt[4][i].in[0] <== 128; + lt[4][i].in[0] <== 0; 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; + lt[5][i].in[1] <== 58; and[25][i] = AND(); and[25][i].a <== lt[4][i].out; and[25][i].b <== lt[5][i].out; - and[26][i] = AND(); - and[26][i].a <== states[i][21]; - and[26][i].b <== and[25][i].out; lt[6][i] = LessEqThan(8); - lt[6][i].in[0] <== 0; + lt[6][i].in[0] <== 60; lt[6][i].in[1] <== in[i]; lt[7][i] = LessEqThan(8); lt[7][i].in[0] <== in[i]; - lt[7][i].in[1] <== 58; + lt[7][i].in[1] <== 127; + and[26][i] = AND(); + and[26][i].a <== lt[6][i].out; + and[26][i].b <== lt[7][i].out; and[27][i] = AND(); - and[27][i].a <== lt[6][i].out; - and[27][i].b <== lt[7][i].out; + and[27][i].a <== states[i][20]; + multi_or[3][i] = MultiOR(2); + multi_or[3][i].in[0] <== and[25][i].out; + multi_or[3][i].in[1] <== and[26][i].out; + and[27][i].b <== multi_or[3][i].out; + and[28][i] = AND(); + and[28][i].a <== states[i][19]; + and[28][i].b <== multi_or[3][i].out; lt[8][i] = LessEqThan(8); - lt[8][i].in[0] <== 60; + lt[8][i].in[0] <== 0; lt[8][i].in[1] <== in[i]; lt[9][i] = LessEqThan(8); lt[9][i].in[0] <== in[i]; - lt[9][i].in[1] <== 127; - and[28][i] = AND(); - and[28][i].a <== lt[8][i].out; - and[28][i].b <== lt[9][i].out; + lt[9][i].in[1] <== 47; and[29][i] = AND(); - and[29][i].a <== states[i][20]; - multi_or[3][i] = MultiOR(2); - multi_or[3][i].in[0] <== and[27][i].out; - multi_or[3][i].in[1] <== and[28][i].out; - and[29][i].b <== multi_or[3][i].out; + and[29][i].a <== lt[8][i].out; + and[29][i].b <== lt[9][i].out; and[30][i] = AND(); - and[30][i].a <== states[i][19]; - and[30][i].b <== multi_or[3][i].out; + and[30][i].a <== states[i][31]; + multi_or[4][i] = MultiOR(3); + multi_or[4][i].in[0] <== and[29][i].out; + multi_or[4][i].in[1] <== and[26][i].out; + multi_or[4][i].in[2] <== eq[15][i].out; + and[30][i].b <== multi_or[4][i].out; lt[10][i] = LessEqThan(8); - lt[10][i].in[0] <== 0; + 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] <== 47; + lt[11][i].in[1] <== 191; and[31][i] = AND(); and[31][i].a <== lt[10][i].out; and[31][i].b <== lt[11][i].out; and[32][i] = AND(); - and[32][i].a <== states[i][31]; - multi_or[4][i] = MultiOR(3); - multi_or[4][i].in[0] <== and[31][i].out; - multi_or[4][i].in[1] <== and[28][i].out; - multi_or[4][i].in[2] <== eq[15][i].out; - and[32][i].b <== multi_or[4][i].out; + and[32][i].a <== states[i][21]; + and[32][i].b <== and[31][i].out; multi_or[5][i] = MultiOR(4); - multi_or[5][i].in[0] <== and[26][i].out; - multi_or[5][i].in[1] <== and[29][i].out; + multi_or[5][i].in[0] <== and[27][i].out; + multi_or[5][i].in[1] <== and[28][i].out; multi_or[5][i].in[2] <== and[30][i].out; multi_or[5][i].in[3] <== and[32][i].out; states[i+1][20] <== multi_or[5][i].out; state_changed[i].in[19] <== states[i+1][20]; + and[33][i] = AND(); + and[33][i].a <== states[i][23]; + and[33][i].b <== and[31][i].out; lt[12][i] = LessEqThan(8); - lt[12][i].in[0] <== 194; + lt[12][i].in[0] <== 160; lt[12][i].in[1] <== in[i]; lt[13][i] = LessEqThan(8); lt[13][i].in[0] <== in[i]; - lt[13][i].in[1] <== 223; - and[33][i] = AND(); - and[33][i].a <== lt[12][i].out; - and[33][i].b <== lt[13][i].out; + lt[13][i].in[1] <== 191; and[34][i] = AND(); - and[34][i].a <== states[i][19]; - and[34][i].b <== and[33][i].out; + and[34][i].a <== lt[12][i].out; + and[34][i].b <== lt[13][i].out; and[35][i] = AND(); - and[35][i].a <== states[i][31]; - and[35][i].b <== and[33][i].out; - and[36][i] = AND(); - and[36][i].a <== states[i][20]; - and[36][i].b <== and[33][i].out; - and[37][i] = AND(); - and[37][i].a <== states[i][23]; - and[37][i].b <== and[25][i].out; + and[35][i].a <== states[i][22]; + and[35][i].b <== and[34][i].out; lt[14][i] = LessEqThan(8); - lt[14][i].in[0] <== 160; + lt[14][i].in[0] <== 128; lt[14][i].in[1] <== in[i]; lt[15][i] = LessEqThan(8); lt[15][i].in[0] <== in[i]; - lt[15][i].in[1] <== 191; - and[38][i] = AND(); - and[38][i].a <== lt[14][i].out; - and[38][i].b <== lt[15][i].out; - and[39][i] = AND(); - and[39][i].a <== states[i][22]; - and[39][i].b <== and[38][i].out; + lt[15][i].in[1] <== 159; + and[36][i] = AND(); + and[36][i].a <== lt[14][i].out; + and[36][i].b <== lt[15][i].out; + and[37][i] = AND(); + and[37][i].a <== states[i][24]; + and[37][i].b <== and[36][i].out; lt[16][i] = LessEqThan(8); - lt[16][i].in[0] <== 128; + lt[16][i].in[0] <== 194; lt[16][i].in[1] <== in[i]; lt[17][i] = LessEqThan(8); lt[17][i].in[0] <== in[i]; - lt[17][i].in[1] <== 159; + lt[17][i].in[1] <== 223; + and[38][i] = AND(); + and[38][i].a <== lt[16][i].out; + and[38][i].b <== lt[17][i].out; + and[39][i] = AND(); + and[39][i].a <== states[i][20]; + and[39][i].b <== and[38][i].out; and[40][i] = AND(); - and[40][i].a <== lt[16][i].out; - and[40][i].b <== lt[17][i].out; + and[40][i].a <== states[i][31]; + and[40][i].b <== and[38][i].out; and[41][i] = AND(); - and[41][i].a <== states[i][24]; - and[41][i].b <== and[40][i].out; + and[41][i].a <== states[i][19]; + and[41][i].b <== and[38][i].out; multi_or[6][i] = MultiOR(6); - multi_or[6][i].in[0] <== and[34][i].out; + multi_or[6][i].in[0] <== and[33][i].out; multi_or[6][i].in[1] <== and[35][i].out; - multi_or[6][i].in[2] <== and[36][i].out; - multi_or[6][i].in[3] <== and[37][i].out; - multi_or[6][i].in[4] <== and[39][i].out; + multi_or[6][i].in[2] <== and[37][i].out; + multi_or[6][i].in[3] <== and[39][i].out; + multi_or[6][i].in[4] <== and[40][i].out; multi_or[6][i].in[5] <== and[41][i].out; states[i+1][21] <== multi_or[6][i].out; state_changed[i].in[20] <== states[i+1][21]; @@ -355,13 +355,13 @@ template TimestampRegex(msg_bytes) { eq[22][i].in[0] <== in[i]; eq[22][i].in[1] <== 224; and[42][i] = AND(); - and[42][i].a <== states[i][19]; + and[42][i].a <== states[i][31]; and[42][i].b <== eq[22][i].out; and[43][i] = AND(); - and[43][i].a <== states[i][20]; + and[43][i].a <== states[i][19]; and[43][i].b <== eq[22][i].out; and[44][i] = AND(); - and[44][i].a <== states[i][31]; + and[44][i].a <== states[i][20]; and[44][i].b <== eq[22][i].out; multi_or[7][i] = MultiOR(3); multi_or[7][i].in[0] <== and[42][i].out; @@ -369,50 +369,53 @@ template TimestampRegex(msg_bytes) { multi_or[7][i].in[2] <== and[44][i].out; states[i+1][22] <== multi_or[7][i].out; state_changed[i].in[21] <== states[i+1][22]; + and[45][i] = AND(); + and[45][i].a <== states[i][26]; + and[45][i].b <== and[31][i].out; 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] <== 228; + eq[24][i].in[1] <== 238; eq[25][i] = IsEqual(); eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 227; + eq[25][i].in[1] <== 239; eq[26][i] = IsEqual(); eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 231; + eq[26][i].in[1] <== 228; eq[27][i] = IsEqual(); eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 232; + eq[27][i].in[1] <== 231; eq[28][i] = IsEqual(); eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 233; + eq[28][i].in[1] <== 225; eq[29][i] = IsEqual(); eq[29][i].in[0] <== in[i]; - eq[29][i].in[1] <== 225; + eq[29][i].in[1] <== 235; eq[30][i] = IsEqual(); eq[30][i].in[0] <== in[i]; - eq[30][i].in[1] <== 230; + eq[30][i].in[1] <== 227; eq[31][i] = IsEqual(); eq[31][i].in[0] <== in[i]; - eq[31][i].in[1] <== 235; + eq[31][i].in[1] <== 229; eq[32][i] = IsEqual(); eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 226; + eq[32][i].in[1] <== 232; eq[33][i] = IsEqual(); eq[33][i].in[0] <== in[i]; - eq[33][i].in[1] <== 229; + eq[33][i].in[1] <== 230; eq[34][i] = IsEqual(); eq[34][i].in[0] <== in[i]; - eq[34][i].in[1] <== 234; + eq[34][i].in[1] <== 226; eq[35][i] = IsEqual(); eq[35][i].in[0] <== in[i]; - eq[35][i].in[1] <== 238; + eq[35][i].in[1] <== 233; eq[36][i] = IsEqual(); eq[36][i].in[0] <== in[i]; - eq[36][i].in[1] <== 239; - and[45][i] = AND(); - and[45][i].a <== states[i][19]; + eq[36][i].in[1] <== 234; + and[46][i] = AND(); + and[46][i].a <== states[i][19]; multi_or[8][i] = MultiOR(14); multi_or[8][i].in[0] <== eq[23][i].out; multi_or[8][i].in[1] <== eq[24][i].out; @@ -428,126 +431,123 @@ template TimestampRegex(msg_bytes) { multi_or[8][i].in[11] <== eq[34][i].out; multi_or[8][i].in[12] <== eq[35][i].out; multi_or[8][i].in[13] <== eq[36][i].out; - and[45][i].b <== multi_or[8][i].out; - and[46][i] = AND(); - and[46][i].a <== states[i][31]; - multi_or[9][i] = MultiOR(14); - multi_or[9][i].in[0] <== eq[31][i].out; - multi_or[9][i].in[1] <== eq[33][i].out; - multi_or[9][i].in[2] <== eq[34][i].out; - multi_or[9][i].in[3] <== eq[36][i].out; - multi_or[9][i].in[4] <== eq[25][i].out; - multi_or[9][i].in[5] <== eq[29][i].out; - multi_or[9][i].in[6] <== eq[26][i].out; - multi_or[9][i].in[7] <== eq[30][i].out; - multi_or[9][i].in[8] <== eq[23][i].out; - multi_or[9][i].in[9] <== eq[35][i].out; - multi_or[9][i].in[10] <== eq[27][i].out; - multi_or[9][i].in[11] <== eq[32][i].out; - multi_or[9][i].in[12] <== eq[28][i].out; - multi_or[9][i].in[13] <== eq[24][i].out; - and[46][i].b <== multi_or[9][i].out; - and[47][i] = AND(); - and[47][i].a <== states[i][20]; - multi_or[10][i] = MultiOR(14); - multi_or[10][i].in[0] <== eq[25][i].out; - multi_or[10][i].in[1] <== eq[26][i].out; - multi_or[10][i].in[2] <== eq[32][i].out; - multi_or[10][i].in[3] <== eq[24][i].out; - multi_or[10][i].in[4] <== eq[33][i].out; - multi_or[10][i].in[5] <== eq[29][i].out; - multi_or[10][i].in[6] <== eq[27][i].out; - multi_or[10][i].in[7] <== eq[28][i].out; - multi_or[10][i].in[8] <== eq[34][i].out; - multi_or[10][i].in[9] <== eq[35][i].out; - multi_or[10][i].in[10] <== eq[36][i].out; - multi_or[10][i].in[11] <== eq[31][i].out; - multi_or[10][i].in[12] <== eq[30][i].out; - multi_or[10][i].in[13] <== eq[23][i].out; - and[47][i].b <== multi_or[10][i].out; - lt[18][i] = LessEqThan(8); - lt[18][i].in[0] <== 144; - lt[18][i].in[1] <== in[i]; - lt[19][i] = LessEqThan(8); - lt[19][i].in[0] <== in[i]; - lt[19][i].in[1] <== 191; - and[48][i] = AND(); - and[48][i].a <== lt[18][i].out; - and[48][i].b <== lt[19][i].out; - and[49][i] = AND(); - and[49][i].a <== states[i][25]; - and[49][i].b <== and[48][i].out; + and[46][i].b <== multi_or[8][i].out; eq[37][i] = IsEqual(); eq[37][i].in[0] <== in[i]; - eq[37][i].in[1] <== 141; + eq[37][i].in[1] <== 130; eq[38][i] = IsEqual(); eq[38][i].in[0] <== in[i]; eq[38][i].in[1] <== 133; eq[39][i] = IsEqual(); eq[39][i].in[0] <== in[i]; - eq[39][i].in[1] <== 137; + eq[39][i].in[1] <== 141; eq[40][i] = IsEqual(); eq[40][i].in[0] <== in[i]; - eq[40][i].in[1] <== 139; + eq[40][i].in[1] <== 136; eq[41][i] = IsEqual(); eq[41][i].in[0] <== in[i]; - eq[41][i].in[1] <== 142; + eq[41][i].in[1] <== 138; eq[42][i] = IsEqual(); eq[42][i].in[0] <== in[i]; - eq[42][i].in[1] <== 128; + eq[42][i].in[1] <== 131; eq[43][i] = IsEqual(); eq[43][i].in[0] <== in[i]; - eq[43][i].in[1] <== 132; + eq[43][i].in[1] <== 140; eq[44][i] = IsEqual(); eq[44][i].in[0] <== in[i]; - eq[44][i].in[1] <== 143; + eq[44][i].in[1] <== 142; eq[45][i] = IsEqual(); eq[45][i].in[0] <== in[i]; - eq[45][i].in[1] <== 130; + eq[45][i].in[1] <== 128; eq[46][i] = IsEqual(); eq[46][i].in[0] <== in[i]; - eq[46][i].in[1] <== 131; + eq[46][i].in[1] <== 139; eq[47][i] = IsEqual(); eq[47][i].in[0] <== in[i]; - eq[47][i].in[1] <== 138; + eq[47][i].in[1] <== 132; eq[48][i] = IsEqual(); eq[48][i].in[0] <== in[i]; - eq[48][i].in[1] <== 129; + eq[48][i].in[1] <== 134; eq[49][i] = IsEqual(); eq[49][i].in[0] <== in[i]; eq[49][i].in[1] <== 135; eq[50][i] = IsEqual(); eq[50][i].in[0] <== in[i]; - eq[50][i].in[1] <== 136; + eq[50][i].in[1] <== 137; eq[51][i] = IsEqual(); eq[51][i].in[0] <== in[i]; - eq[51][i].in[1] <== 140; + eq[51][i].in[1] <== 143; eq[52][i] = IsEqual(); eq[52][i].in[0] <== in[i]; - eq[52][i].in[1] <== 134; + eq[52][i].in[1] <== 129; + and[47][i] = AND(); + and[47][i].a <== states[i][27]; + multi_or[9][i] = MultiOR(16); + multi_or[9][i].in[0] <== eq[37][i].out; + multi_or[9][i].in[1] <== eq[38][i].out; + multi_or[9][i].in[2] <== eq[39][i].out; + multi_or[9][i].in[3] <== eq[40][i].out; + multi_or[9][i].in[4] <== eq[41][i].out; + multi_or[9][i].in[5] <== eq[42][i].out; + multi_or[9][i].in[6] <== eq[43][i].out; + multi_or[9][i].in[7] <== eq[44][i].out; + multi_or[9][i].in[8] <== eq[45][i].out; + multi_or[9][i].in[9] <== eq[46][i].out; + multi_or[9][i].in[10] <== eq[47][i].out; + multi_or[9][i].in[11] <== eq[48][i].out; + multi_or[9][i].in[12] <== eq[49][i].out; + multi_or[9][i].in[13] <== eq[50][i].out; + multi_or[9][i].in[14] <== eq[51][i].out; + multi_or[9][i].in[15] <== eq[52][i].out; + and[47][i].b <== multi_or[9][i].out; + lt[18][i] = LessEqThan(8); + lt[18][i].in[0] <== 144; + lt[18][i].in[1] <== in[i]; + lt[19][i] = LessEqThan(8); + lt[19][i].in[0] <== in[i]; + lt[19][i].in[1] <== 191; + and[48][i] = AND(); + and[48][i].a <== lt[18][i].out; + and[48][i].b <== lt[19][i].out; + and[49][i] = AND(); + and[49][i].a <== states[i][25]; + and[49][i].b <== and[48][i].out; and[50][i] = AND(); - and[50][i].a <== states[i][27]; - multi_or[11][i] = MultiOR(16); - multi_or[11][i].in[0] <== eq[37][i].out; - multi_or[11][i].in[1] <== eq[38][i].out; - multi_or[11][i].in[2] <== eq[39][i].out; - multi_or[11][i].in[3] <== eq[40][i].out; - multi_or[11][i].in[4] <== eq[41][i].out; - multi_or[11][i].in[5] <== eq[42][i].out; - multi_or[11][i].in[6] <== eq[43][i].out; - multi_or[11][i].in[7] <== eq[44][i].out; - multi_or[11][i].in[8] <== eq[45][i].out; - multi_or[11][i].in[9] <== eq[46][i].out; - multi_or[11][i].in[10] <== eq[47][i].out; - multi_or[11][i].in[11] <== eq[48][i].out; - multi_or[11][i].in[12] <== eq[49][i].out; - multi_or[11][i].in[13] <== eq[50][i].out; - multi_or[11][i].in[14] <== eq[51][i].out; - multi_or[11][i].in[15] <== eq[52][i].out; - and[50][i].b <== multi_or[11][i].out; + and[50][i].a <== states[i][20]; + multi_or[10][i] = MultiOR(14); + multi_or[10][i].in[0] <== eq[30][i].out; + multi_or[10][i].in[1] <== eq[36][i].out; + multi_or[10][i].in[2] <== eq[29][i].out; + multi_or[10][i].in[3] <== eq[25][i].out; + multi_or[10][i].in[4] <== eq[31][i].out; + multi_or[10][i].in[5] <== eq[34][i].out; + multi_or[10][i].in[6] <== eq[35][i].out; + multi_or[10][i].in[7] <== eq[27][i].out; + multi_or[10][i].in[8] <== eq[33][i].out; + multi_or[10][i].in[9] <== eq[24][i].out; + multi_or[10][i].in[10] <== eq[32][i].out; + multi_or[10][i].in[11] <== eq[26][i].out; + multi_or[10][i].in[12] <== eq[28][i].out; + multi_or[10][i].in[13] <== eq[23][i].out; + and[50][i].b <== multi_or[10][i].out; and[51][i] = AND(); - and[51][i].a <== states[i][26]; - and[51][i].b <== and[25][i].out; + and[51][i].a <== states[i][31]; + multi_or[11][i] = MultiOR(14); + multi_or[11][i].in[0] <== eq[32][i].out; + multi_or[11][i].in[1] <== eq[30][i].out; + multi_or[11][i].in[2] <== eq[31][i].out; + multi_or[11][i].in[3] <== eq[36][i].out; + multi_or[11][i].in[4] <== eq[33][i].out; + multi_or[11][i].in[5] <== eq[34][i].out; + multi_or[11][i].in[6] <== eq[26][i].out; + multi_or[11][i].in[7] <== eq[29][i].out; + multi_or[11][i].in[8] <== eq[24][i].out; + multi_or[11][i].in[9] <== eq[25][i].out; + multi_or[11][i].in[10] <== eq[27][i].out; + multi_or[11][i].in[11] <== eq[28][i].out; + multi_or[11][i].in[12] <== eq[23][i].out; + multi_or[11][i].in[13] <== eq[35][i].out; + and[51][i].b <== multi_or[11][i].out; multi_or[12][i] = MultiOR(6); multi_or[12][i].in[0] <== and[45][i].out; multi_or[12][i].in[1] <== and[46][i].out; @@ -561,13 +561,13 @@ template TimestampRegex(msg_bytes) { eq[53][i].in[0] <== in[i]; eq[53][i].in[1] <== 237; and[52][i] = AND(); - and[52][i].a <== states[i][19]; + and[52][i].a <== states[i][31]; and[52][i].b <== eq[53][i].out; and[53][i] = AND(); - and[53][i].a <== states[i][20]; + and[53][i].a <== states[i][19]; and[53][i].b <== eq[53][i].out; and[54][i] = AND(); - and[54][i].a <== states[i][31]; + and[54][i].a <== states[i][20]; and[54][i].b <== eq[53][i].out; multi_or[13][i] = MultiOR(3); multi_or[13][i].in[0] <== and[52][i].out; @@ -579,10 +579,10 @@ template TimestampRegex(msg_bytes) { eq[54][i].in[0] <== in[i]; eq[54][i].in[1] <== 240; and[55][i] = AND(); - and[55][i].a <== states[i][31]; + and[55][i].a <== states[i][19]; and[55][i].b <== eq[54][i].out; and[56][i] = AND(); - and[56][i].a <== states[i][19]; + and[56][i].a <== states[i][31]; and[56][i].b <== eq[54][i].out; and[57][i] = AND(); and[57][i].a <== states[i][20]; @@ -598,26 +598,26 @@ template TimestampRegex(msg_bytes) { eq[55][i].in[1] <== 242; eq[56][i] = IsEqual(); eq[56][i].in[0] <== in[i]; - eq[56][i].in[1] <== 243; + eq[56][i].in[1] <== 241; eq[57][i] = IsEqual(); eq[57][i].in[0] <== in[i]; - eq[57][i].in[1] <== 241; + eq[57][i].in[1] <== 243; and[58][i] = AND(); - and[58][i].a <== states[i][31]; + and[58][i].a <== states[i][20]; multi_or[15][i] = MultiOR(3); multi_or[15][i].in[0] <== eq[55][i].out; multi_or[15][i].in[1] <== eq[56][i].out; multi_or[15][i].in[2] <== eq[57][i].out; and[58][i].b <== multi_or[15][i].out; and[59][i] = AND(); - and[59][i].a <== states[i][19]; + and[59][i].a <== states[i][31]; multi_or[16][i] = MultiOR(3); multi_or[16][i].in[0] <== eq[56][i].out; multi_or[16][i].in[1] <== eq[57][i].out; multi_or[16][i].in[2] <== eq[55][i].out; and[59][i].b <== multi_or[16][i].out; and[60][i] = AND(); - and[60][i].a <== states[i][20]; + and[60][i].a <== states[i][19]; and[60][i].b <== multi_or[16][i].out; multi_or[17][i] = MultiOR(3); multi_or[17][i].in[0] <== and[58][i].out; @@ -632,10 +632,10 @@ template TimestampRegex(msg_bytes) { and[61][i].a <== states[i][20]; and[61][i].b <== eq[58][i].out; and[62][i] = AND(); - and[62][i].a <== states[i][19]; + and[62][i].a <== states[i][31]; and[62][i].b <== eq[58][i].out; and[63][i] = AND(); - and[63][i].a <== states[i][31]; + and[63][i].a <== states[i][19]; and[63][i].b <== eq[58][i].out; multi_or[18][i] = MultiOR(3); multi_or[18][i].in[0] <== and[61][i].out; @@ -671,34 +671,34 @@ template TimestampRegex(msg_bytes) { state_changed[i].in[30] <== states[i+1][31]; eq[61][i] = IsEqual(); eq[61][i].in[0] <== in[i]; - eq[61][i].in[1] <== 48; + eq[61][i].in[1] <== 55; eq[62][i] = IsEqual(); eq[62][i].in[0] <== in[i]; - eq[62][i].in[1] <== 50; + eq[62][i].in[1] <== 49; eq[63][i] = IsEqual(); eq[63][i].in[0] <== in[i]; - eq[63][i].in[1] <== 52; + eq[63][i].in[1] <== 48; eq[64][i] = IsEqual(); eq[64][i].in[0] <== in[i]; - eq[64][i].in[1] <== 51; + eq[64][i].in[1] <== 52; eq[65][i] = IsEqual(); eq[65][i].in[0] <== in[i]; - eq[65][i].in[1] <== 53; + eq[65][i].in[1] <== 54; eq[66][i] = IsEqual(); eq[66][i].in[0] <== in[i]; - eq[66][i].in[1] <== 54; + eq[66][i].in[1] <== 56; eq[67][i] = IsEqual(); eq[67][i].in[0] <== in[i]; eq[67][i].in[1] <== 57; eq[68][i] = IsEqual(); eq[68][i].in[0] <== in[i]; - eq[68][i].in[1] <== 49; + eq[68][i].in[1] <== 51; eq[69][i] = IsEqual(); eq[69][i].in[0] <== in[i]; - eq[69][i].in[1] <== 55; + eq[69][i].in[1] <== 50; eq[70][i] = IsEqual(); eq[70][i].in[0] <== in[i]; - eq[70][i].in[1] <== 56; + eq[70][i].in[1] <== 53; and[68][i] = AND(); and[68][i].a <== states[i][31]; multi_or[19][i] = MultiOR(10); @@ -716,16 +716,16 @@ template TimestampRegex(msg_bytes) { and[69][i] = AND(); and[69][i].a <== states[i][32]; multi_or[20][i] = MultiOR(10); - multi_or[20][i].in[0] <== eq[61][i].out; - multi_or[20][i].in[1] <== eq[65][i].out; - multi_or[20][i].in[2] <== eq[70][i].out; - multi_or[20][i].in[3] <== eq[62][i].out; - multi_or[20][i].in[4] <== eq[67][i].out; - multi_or[20][i].in[5] <== eq[68][i].out; + multi_or[20][i].in[0] <== eq[67][i].out; + multi_or[20][i].in[1] <== eq[70][i].out; + multi_or[20][i].in[2] <== eq[65][i].out; + multi_or[20][i].in[3] <== eq[68][i].out; + multi_or[20][i].in[4] <== eq[63][i].out; + multi_or[20][i].in[5] <== eq[69][i].out; multi_or[20][i].in[6] <== eq[64][i].out; - multi_or[20][i].in[7] <== eq[63][i].out; - multi_or[20][i].in[8] <== eq[69][i].out; - multi_or[20][i].in[9] <== eq[66][i].out; + multi_or[20][i].in[7] <== eq[61][i].out; + multi_or[20][i].in[8] <== eq[66][i].out; + multi_or[20][i].in[9] <== eq[62][i].out; and[69][i].b <== multi_or[20][i].out; multi_or[21][i] = MultiOR(2); multi_or[21][i].in[0] <== and[68][i].out; diff --git a/packages/circom/circuits/common/to_all_regex.circom b/packages/circom/circuits/common/to_all_regex.circom index 9ba620b..789f681 100644 --- a/packages/circom/circuits/common/to_all_regex.circom +++ b/packages/circom/circuits/common/to_all_regex.circom @@ -32,10 +32,10 @@ template ToAllRegex(msg_bytes) { eq[0][i].in[0] <== in[i]; eq[0][i].in[1] <== 116; and[0][i] = AND(); - and[0][i].a <== states[i][4]; + and[0][i].a <== states[i][0]; and[0][i].b <== eq[0][i].out; and[1][i] = AND(); - and[1][i].a <== states[i][0]; + and[1][i].a <== states[i][4]; and[1][i].b <== eq[0][i].out; multi_or[0][i] = MultiOR(2); multi_or[0][i].in[0] <== and[0][i].out; @@ -75,61 +75,61 @@ template ToAllRegex(msg_bytes) { states[i+1][5] <== and[5][i].out; state_changed[i].in[4] <== states[i+1][5]; lt[0][i] = LessEqThan(8); - lt[0][i].in[0] <== 128; + lt[0][i].in[0] <== 194; lt[0][i].in[1] <== in[i]; lt[1][i] = LessEqThan(8); lt[1][i].in[0] <== in[i]; - lt[1][i].in[1] <== 191; + lt[1][i].in[1] <== 223; and[6][i] = AND(); and[6][i].a <== lt[0][i].out; and[6][i].b <== lt[1][i].out; and[7][i] = AND(); - and[7][i].a <== states[i][8]; + and[7][i].a <== states[i][13]; and[7][i].b <== and[6][i].out; lt[2][i] = LessEqThan(8); - lt[2][i].in[0] <== 128; + lt[2][i].in[0] <== 160; lt[2][i].in[1] <== in[i]; lt[3][i] = LessEqThan(8); lt[3][i].in[0] <== in[i]; - lt[3][i].in[1] <== 159; + lt[3][i].in[1] <== 191; and[8][i] = AND(); and[8][i].a <== lt[2][i].out; and[8][i].b <== lt[3][i].out; and[9][i] = AND(); - and[9][i].a <== states[i][9]; + and[9][i].a <== states[i][7]; and[9][i].b <== and[8][i].out; + and[10][i] = AND(); + and[10][i].a <== states[i][5]; + and[10][i].b <== and[6][i].out; lt[4][i] = LessEqThan(8); - lt[4][i].in[0] <== 160; + lt[4][i].in[0] <== 128; lt[4][i].in[1] <== in[i]; lt[5][i] = LessEqThan(8); lt[5][i].in[0] <== in[i]; - lt[5][i].in[1] <== 191; - and[10][i] = AND(); - and[10][i].a <== lt[4][i].out; - and[10][i].b <== lt[5][i].out; + lt[5][i].in[1] <== 159; and[11][i] = AND(); - and[11][i].a <== states[i][7]; - and[11][i].b <== and[10][i].out; + and[11][i].a <== lt[4][i].out; + and[11][i].b <== lt[5][i].out; + and[12][i] = AND(); + and[12][i].a <== states[i][9]; + and[12][i].b <== and[11][i].out; lt[6][i] = LessEqThan(8); - lt[6][i].in[0] <== 194; + 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] <== 223; - and[12][i] = AND(); - and[12][i].a <== lt[6][i].out; - and[12][i].b <== lt[7][i].out; + lt[7][i].in[1] <== 191; and[13][i] = AND(); - and[13][i].a <== states[i][5]; - and[13][i].b <== and[12][i].out; + and[13][i].a <== lt[6][i].out; + and[13][i].b <== lt[7][i].out; and[14][i] = AND(); - and[14][i].a <== states[i][13]; - and[14][i].b <== and[12][i].out; + and[14][i].a <== states[i][8]; + and[14][i].b <== and[13][i].out; multi_or[1][i] = MultiOR(5); multi_or[1][i].in[0] <== and[7][i].out; multi_or[1][i].in[1] <== and[9][i].out; - multi_or[1][i].in[2] <== and[11][i].out; - multi_or[1][i].in[3] <== and[13][i].out; + multi_or[1][i].in[2] <== and[10][i].out; + multi_or[1][i].in[3] <== and[12][i].out; multi_or[1][i].in[4] <== and[14][i].out; states[i+1][6] <== multi_or[1][i].out; state_changed[i].in[5] <== states[i+1][6]; @@ -137,64 +137,82 @@ template ToAllRegex(msg_bytes) { eq[5][i].in[0] <== in[i]; eq[5][i].in[1] <== 224; and[15][i] = AND(); - and[15][i].a <== states[i][13]; + and[15][i].a <== states[i][5]; and[15][i].b <== eq[5][i].out; and[16][i] = AND(); - and[16][i].a <== states[i][5]; + and[16][i].a <== states[i][13]; and[16][i].b <== eq[5][i].out; multi_or[2][i] = MultiOR(2); multi_or[2][i].in[0] <== and[15][i].out; multi_or[2][i].in[1] <== and[16][i].out; states[i+1][7] <== multi_or[2][i].out; state_changed[i].in[6] <== states[i+1][7]; + 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[17][i] = AND(); - and[17][i].a <== states[i][11]; - and[17][i].b <== and[6][i].out; + and[17][i].a <== lt[8][i].out; + and[17][i].b <== lt[9][i].out; + and[18][i] = AND(); + and[18][i].a <== states[i][10]; + and[18][i].b <== and[17][i].out; + and[19][i] = AND(); + and[19][i].a <== states[i][11]; + and[19][i].b <== and[13][i].out; eq[6][i] = IsEqual(); eq[6][i].in[0] <== in[i]; - eq[6][i].in[1] <== 236; + eq[6][i].in[1] <== 134; eq[7][i] = IsEqual(); eq[7][i].in[0] <== in[i]; - eq[7][i].in[1] <== 232; + eq[7][i].in[1] <== 140; eq[8][i] = IsEqual(); eq[8][i].in[0] <== in[i]; - eq[8][i].in[1] <== 231; + eq[8][i].in[1] <== 136; eq[9][i] = IsEqual(); eq[9][i].in[0] <== in[i]; - eq[9][i].in[1] <== 226; + eq[9][i].in[1] <== 137; eq[10][i] = IsEqual(); eq[10][i].in[0] <== in[i]; - eq[10][i].in[1] <== 235; + eq[10][i].in[1] <== 141; eq[11][i] = IsEqual(); eq[11][i].in[0] <== in[i]; - eq[11][i].in[1] <== 229; + eq[11][i].in[1] <== 135; eq[12][i] = IsEqual(); eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 228; + eq[12][i].in[1] <== 139; eq[13][i] = IsEqual(); eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 233; + eq[13][i].in[1] <== 133; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 227; + eq[14][i].in[1] <== 132; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 234; + eq[15][i].in[1] <== 142; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 225; + eq[16][i].in[1] <== 131; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 238; + eq[17][i].in[1] <== 129; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 239; + eq[18][i].in[1] <== 143; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 230; - and[18][i] = AND(); - and[18][i].a <== states[i][13]; - multi_or[3][i] = MultiOR(14); + eq[19][i].in[1] <== 130; + eq[20][i] = IsEqual(); + eq[20][i].in[0] <== in[i]; + eq[20][i].in[1] <== 128; + eq[21][i] = IsEqual(); + eq[21][i].in[0] <== in[i]; + eq[21][i].in[1] <== 138; + and[20][i] = AND(); + and[20][i].a <== states[i][12]; + multi_or[3][i] = MultiOR(16); multi_or[3][i].in[0] <== eq[6][i].out; multi_or[3][i].in[1] <== eq[7][i].out; multi_or[3][i].in[2] <== eq[8][i].out; @@ -209,108 +227,90 @@ template ToAllRegex(msg_bytes) { multi_or[3][i].in[11] <== eq[17][i].out; multi_or[3][i].in[12] <== eq[18][i].out; multi_or[3][i].in[13] <== eq[19][i].out; - and[18][i].b <== multi_or[3][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[19][i] = AND(); - and[19][i].a <== lt[8][i].out; - and[19][i].b <== lt[9][i].out; - and[20][i] = AND(); - and[20][i].a <== states[i][10]; - and[20][i].b <== and[19][i].out; - eq[20][i] = IsEqual(); - eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 135; - eq[21][i] = IsEqual(); - eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 128; + multi_or[3][i].in[14] <== eq[20][i].out; + multi_or[3][i].in[15] <== eq[21][i].out; + and[20][i].b <== multi_or[3][i].out; eq[22][i] = IsEqual(); eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 140; + eq[22][i].in[1] <== 236; eq[23][i] = IsEqual(); eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 137; + eq[23][i].in[1] <== 230; eq[24][i] = IsEqual(); eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 138; + eq[24][i].in[1] <== 228; eq[25][i] = IsEqual(); eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 132; + eq[25][i].in[1] <== 232; eq[26][i] = IsEqual(); eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 143; + eq[26][i].in[1] <== 233; eq[27][i] = IsEqual(); eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 131; + eq[27][i].in[1] <== 234; eq[28][i] = IsEqual(); eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 130; + eq[28][i].in[1] <== 235; eq[29][i] = IsEqual(); eq[29][i].in[0] <== in[i]; - eq[29][i].in[1] <== 141; + eq[29][i].in[1] <== 239; eq[30][i] = IsEqual(); eq[30][i].in[0] <== in[i]; - eq[30][i].in[1] <== 136; + eq[30][i].in[1] <== 227; eq[31][i] = IsEqual(); eq[31][i].in[0] <== in[i]; - eq[31][i].in[1] <== 134; + eq[31][i].in[1] <== 229; eq[32][i] = IsEqual(); eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 139; + eq[32][i].in[1] <== 231; eq[33][i] = IsEqual(); eq[33][i].in[0] <== in[i]; - eq[33][i].in[1] <== 142; + eq[33][i].in[1] <== 226; eq[34][i] = IsEqual(); eq[34][i].in[0] <== in[i]; - eq[34][i].in[1] <== 129; + eq[34][i].in[1] <== 225; eq[35][i] = IsEqual(); eq[35][i].in[0] <== in[i]; - eq[35][i].in[1] <== 133; + eq[35][i].in[1] <== 238; and[21][i] = AND(); - and[21][i].a <== states[i][12]; - multi_or[4][i] = MultiOR(16); - multi_or[4][i].in[0] <== eq[20][i].out; - multi_or[4][i].in[1] <== eq[21][i].out; - multi_or[4][i].in[2] <== eq[22][i].out; - multi_or[4][i].in[3] <== eq[23][i].out; - multi_or[4][i].in[4] <== eq[24][i].out; - multi_or[4][i].in[5] <== eq[25][i].out; - multi_or[4][i].in[6] <== eq[26][i].out; - multi_or[4][i].in[7] <== eq[27][i].out; - multi_or[4][i].in[8] <== eq[28][i].out; - multi_or[4][i].in[9] <== eq[29][i].out; - multi_or[4][i].in[10] <== eq[30][i].out; - multi_or[4][i].in[11] <== eq[31][i].out; - multi_or[4][i].in[12] <== eq[32][i].out; - multi_or[4][i].in[13] <== eq[33][i].out; - multi_or[4][i].in[14] <== eq[34][i].out; - multi_or[4][i].in[15] <== eq[35][i].out; + and[21][i].a <== states[i][5]; + multi_or[4][i] = MultiOR(14); + multi_or[4][i].in[0] <== eq[22][i].out; + multi_or[4][i].in[1] <== eq[23][i].out; + multi_or[4][i].in[2] <== eq[24][i].out; + multi_or[4][i].in[3] <== eq[25][i].out; + multi_or[4][i].in[4] <== eq[26][i].out; + multi_or[4][i].in[5] <== eq[27][i].out; + multi_or[4][i].in[6] <== eq[28][i].out; + multi_or[4][i].in[7] <== eq[29][i].out; + multi_or[4][i].in[8] <== eq[30][i].out; + multi_or[4][i].in[9] <== eq[31][i].out; + multi_or[4][i].in[10] <== eq[32][i].out; + multi_or[4][i].in[11] <== eq[33][i].out; + multi_or[4][i].in[12] <== eq[34][i].out; + multi_or[4][i].in[13] <== eq[35][i].out; and[21][i].b <== multi_or[4][i].out; and[22][i] = AND(); - and[22][i].a <== states[i][5]; + and[22][i].a <== states[i][13]; multi_or[5][i] = MultiOR(14); - multi_or[5][i].in[0] <== eq[13][i].out; - multi_or[5][i].in[1] <== eq[9][i].out; - multi_or[5][i].in[2] <== eq[15][i].out; - multi_or[5][i].in[3] <== eq[6][i].out; - multi_or[5][i].in[4] <== eq[17][i].out; - multi_or[5][i].in[5] <== eq[18][i].out; - multi_or[5][i].in[6] <== eq[14][i].out; - multi_or[5][i].in[7] <== eq[11][i].out; - multi_or[5][i].in[8] <== eq[10][i].out; - multi_or[5][i].in[9] <== eq[12][i].out; - multi_or[5][i].in[10] <== eq[19][i].out; - multi_or[5][i].in[11] <== eq[7][i].out; - multi_or[5][i].in[12] <== eq[16][i].out; - multi_or[5][i].in[13] <== eq[8][i].out; + multi_or[5][i].in[0] <== eq[30][i].out; + multi_or[5][i].in[1] <== eq[25][i].out; + multi_or[5][i].in[2] <== eq[26][i].out; + multi_or[5][i].in[3] <== eq[28][i].out; + multi_or[5][i].in[4] <== eq[34][i].out; + multi_or[5][i].in[5] <== eq[22][i].out; + multi_or[5][i].in[6] <== eq[24][i].out; + multi_or[5][i].in[7] <== eq[32][i].out; + multi_or[5][i].in[8] <== eq[33][i].out; + multi_or[5][i].in[9] <== eq[27][i].out; + multi_or[5][i].in[10] <== eq[23][i].out; + multi_or[5][i].in[11] <== eq[35][i].out; + multi_or[5][i].in[12] <== eq[29][i].out; + multi_or[5][i].in[13] <== eq[31][i].out; and[22][i].b <== multi_or[5][i].out; multi_or[6][i] = MultiOR(5); - multi_or[6][i].in[0] <== and[17][i].out; - multi_or[6][i].in[1] <== and[18][i].out; + multi_or[6][i].in[0] <== and[18][i].out; + multi_or[6][i].in[1] <== and[19][i].out; multi_or[6][i].in[2] <== and[20][i].out; multi_or[6][i].in[3] <== and[21][i].out; multi_or[6][i].in[4] <== and[22][i].out; @@ -320,10 +320,10 @@ template ToAllRegex(msg_bytes) { eq[36][i].in[0] <== in[i]; eq[36][i].in[1] <== 237; and[23][i] = AND(); - and[23][i].a <== states[i][5]; + and[23][i].a <== states[i][13]; and[23][i].b <== eq[36][i].out; and[24][i] = AND(); - and[24][i].a <== states[i][13]; + and[24][i].a <== states[i][5]; and[24][i].b <== eq[36][i].out; multi_or[7][i] = MultiOR(2); multi_or[7][i].in[0] <== and[23][i].out; @@ -334,10 +334,10 @@ template ToAllRegex(msg_bytes) { eq[37][i].in[0] <== in[i]; eq[37][i].in[1] <== 240; and[25][i] = AND(); - and[25][i].a <== states[i][13]; + and[25][i].a <== states[i][5]; and[25][i].b <== eq[37][i].out; and[26][i] = AND(); - and[26][i].a <== states[i][5]; + and[26][i].a <== states[i][13]; and[26][i].b <== eq[37][i].out; multi_or[8][i] = MultiOR(2); multi_or[8][i].in[0] <== and[25][i].out; @@ -346,13 +346,13 @@ template ToAllRegex(msg_bytes) { state_changed[i].in[9] <== states[i+1][10]; eq[38][i] = IsEqual(); eq[38][i].in[0] <== in[i]; - eq[38][i].in[1] <== 241; + eq[38][i].in[1] <== 243; eq[39][i] = IsEqual(); eq[39][i].in[0] <== in[i]; - eq[39][i].in[1] <== 242; + eq[39][i].in[1] <== 241; eq[40][i] = IsEqual(); eq[40][i].in[0] <== in[i]; - eq[40][i].in[1] <== 243; + eq[40][i].in[1] <== 242; and[27][i] = AND(); and[27][i].a <== states[i][13]; multi_or[9][i] = MultiOR(3); @@ -364,8 +364,8 @@ template ToAllRegex(msg_bytes) { and[28][i].a <== states[i][5]; multi_or[10][i] = MultiOR(3); multi_or[10][i].in[0] <== eq[40][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[1] <== eq[39][i].out; + multi_or[10][i].in[2] <== eq[38][i].out; and[28][i].b <== multi_or[10][i].out; multi_or[11][i] = MultiOR(2); multi_or[11][i].in[0] <== and[27][i].out; @@ -376,65 +376,68 @@ template ToAllRegex(msg_bytes) { eq[41][i].in[0] <== in[i]; eq[41][i].in[1] <== 244; and[29][i] = AND(); - and[29][i].a <== states[i][5]; + and[29][i].a <== states[i][13]; and[29][i].b <== eq[41][i].out; and[30][i] = AND(); - and[30][i].a <== states[i][13]; + and[30][i].a <== states[i][5]; and[30][i].b <== eq[41][i].out; multi_or[12][i] = MultiOR(2); multi_or[12][i].in[0] <== and[29][i].out; multi_or[12][i].in[1] <== and[30][i].out; states[i+1][12] <== multi_or[12][i].out; state_changed[i].in[11] <== states[i+1][12]; + and[31][i] = AND(); + and[31][i].a <== states[i][6]; + and[31][i].b <== and[13][i].out; lt[10][i] = LessEqThan(8); lt[10][i].in[0] <== 14; lt[10][i].in[1] <== in[i]; lt[11][i] = LessEqThan(8); lt[11][i].in[0] <== in[i]; lt[11][i].in[1] <== 127; - and[31][i] = AND(); - and[31][i].a <== lt[10][i].out; - and[31][i].b <== lt[11][i].out; + and[32][i] = AND(); + and[32][i].a <== lt[10][i].out; + and[32][i].b <== lt[11][i].out; eq[42][i] = IsEqual(); eq[42][i].in[0] <== in[i]; - eq[42][i].in[1] <== 6; + eq[42][i].in[1] <== 5; eq[43][i] = IsEqual(); eq[43][i].in[0] <== in[i]; - eq[43][i].in[1] <== 11; + eq[43][i].in[1] <== 3; eq[44][i] = IsEqual(); eq[44][i].in[0] <== in[i]; - eq[44][i].in[1] <== 7; + eq[44][i].in[1] <== 1; eq[45][i] = IsEqual(); eq[45][i].in[0] <== in[i]; - eq[45][i].in[1] <== 2; + eq[45][i].in[1] <== 11; eq[46][i] = IsEqual(); eq[46][i].in[0] <== in[i]; - eq[46][i].in[1] <== 8; + eq[46][i].in[1] <== 2; eq[47][i] = IsEqual(); eq[47][i].in[0] <== in[i]; - eq[47][i].in[1] <== 5; + eq[47][i].in[1] <== 9; eq[48][i] = IsEqual(); eq[48][i].in[0] <== in[i]; - eq[48][i].in[1] <== 0; + eq[48][i].in[1] <== 7; eq[49][i] = IsEqual(); eq[49][i].in[0] <== in[i]; - eq[49][i].in[1] <== 4; + eq[49][i].in[1] <== 12; eq[50][i] = IsEqual(); eq[50][i].in[0] <== in[i]; - eq[50][i].in[1] <== 1; + eq[50][i].in[1] <== 8; eq[51][i] = IsEqual(); eq[51][i].in[0] <== in[i]; - eq[51][i].in[1] <== 12; + eq[51][i].in[1] <== 4; eq[52][i] = IsEqual(); eq[52][i].in[0] <== in[i]; - eq[52][i].in[1] <== 9; + eq[52][i].in[1] <== 0; eq[53][i] = IsEqual(); eq[53][i].in[0] <== in[i]; - eq[53][i].in[1] <== 3; - and[32][i] = AND(); - and[32][i].a <== states[i][5]; + eq[53][i].in[1] <== 6; + and[33][i] = AND(); + and[33][i].a <== states[i][5]; multi_or[13][i] = MultiOR(13); - multi_or[13][i].in[0] <== and[31][i].out; + multi_or[13][i].in[0] <== and[32][i].out; multi_or[13][i].in[1] <== eq[42][i].out; multi_or[13][i].in[2] <== eq[43][i].out; multi_or[13][i].in[3] <== eq[44][i].out; @@ -447,29 +450,26 @@ template ToAllRegex(msg_bytes) { multi_or[13][i].in[10] <== eq[51][i].out; multi_or[13][i].in[11] <== eq[52][i].out; multi_or[13][i].in[12] <== eq[53][i].out; - and[32][i].b <== multi_or[13][i].out; - and[33][i] = AND(); - and[33][i].a <== states[i][13]; + and[33][i].b <== multi_or[13][i].out; + and[34][i] = AND(); + and[34][i].a <== states[i][13]; multi_or[14][i] = MultiOR(13); - multi_or[14][i].in[0] <== and[31][i].out; - multi_or[14][i].in[1] <== eq[44][i].out; - multi_or[14][i].in[2] <== eq[49][i].out; + multi_or[14][i].in[0] <== and[32][i].out; + multi_or[14][i].in[1] <== eq[42][i].out; + multi_or[14][i].in[2] <== eq[52][i].out; multi_or[14][i].in[3] <== eq[47][i].out; - multi_or[14][i].in[4] <== eq[51][i].out; - multi_or[14][i].in[5] <== eq[43][i].out; + multi_or[14][i].in[4] <== eq[49][i].out; + multi_or[14][i].in[5] <== eq[46][i].out; multi_or[14][i].in[6] <== eq[48][i].out; - multi_or[14][i].in[7] <== eq[50][i].out; - multi_or[14][i].in[8] <== eq[42][i].out; - multi_or[14][i].in[9] <== eq[53][i].out; - multi_or[14][i].in[10] <== eq[45][i].out; - multi_or[14][i].in[11] <== eq[52][i].out; - multi_or[14][i].in[12] <== eq[46][i].out; - and[33][i].b <== multi_or[14][i].out; - and[34][i] = AND(); - and[34][i].a <== states[i][6]; - and[34][i].b <== and[6][i].out; + multi_or[14][i].in[7] <== eq[45][i].out; + multi_or[14][i].in[8] <== eq[51][i].out; + multi_or[14][i].in[9] <== eq[44][i].out; + multi_or[14][i].in[10] <== eq[43][i].out; + multi_or[14][i].in[11] <== eq[53][i].out; + multi_or[14][i].in[12] <== eq[50][i].out; + and[34][i].b <== multi_or[14][i].out; multi_or[15][i] = MultiOR(3); - multi_or[15][i].in[0] <== and[32][i].out; + multi_or[15][i].in[0] <== and[31][i].out; multi_or[15][i].in[1] <== and[33][i].out; multi_or[15][i].in[2] <== and[34][i].out; states[i+1][13] <== multi_or[15][i].out; @@ -498,7 +498,7 @@ template ToAllRegex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][15] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(5, 6), (5, 8), (7, 6), (8, 6), (5, 12), (13, 10), (13, 6), (5, 13), (5, 7), (5, 10), (6, 13), (9, 6), (13, 7), (13, 12), (13, 13), (13, 9), (13, 11), (5, 9), (5, 11), (12, 8), (10, 8), (13, 8), (11, 8)}] + // substrings calculated: [{(5, 8), (7, 6), (9, 6), (5, 6), (6, 13), (13, 13), (13, 11), (13, 10), (5, 10), (5, 9), (13, 12), (13, 6), (5, 13), (8, 6), (5, 11), (5, 12), (5, 7), (11, 8), (13, 8), (10, 8), (13, 9), (12, 8), (13, 7)}] signal is_substr0[msg_bytes][24]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/package.json b/packages/circom/package.json index 77abefb..8e6ead2 100644 --- a/packages/circom/package.json +++ b/packages/circom/package.json @@ -27,19 +27,13 @@ "circomlibjs": "^0.1.2", "ffjavascript": "^0.2.59", "jest": "^29.5.0", - "mocha": "^10.2.0", - "ts-jest": "^29.1.1", - "typescript": "^4.8.3" + "mocha": "^10.2.0" }, "babel": { "presets": [ [ "@babel/preset-env" - ], - "@babel/preset-typescript", - [ - "jest" ] ] } -} \ No newline at end of file +} diff --git a/packages/circom/tests/body_hash_regex.test.ts b/packages/circom/tests/body_hash_regex.test.js similarity index 99% rename from packages/circom/tests/body_hash_regex.test.ts rename to packages/circom/tests/body_hash_regex.test.js index 22c2a5e..81e3991 100644 --- a/packages/circom/tests/body_hash_regex.test.ts +++ b/packages/circom/tests/body_hash_regex.test.js @@ -8,7 +8,7 @@ const option = { }; const compiler = require("../../compiler"); -jest.setTimeout(120000); +jest.setTimeout(600000); describe("Bodyhash Regex", () => { let circuit; beforeAll(async () => { diff --git a/packages/circom/tests/circuits/international_chars_decomposed.circom b/packages/circom/tests/circuits/international_chars_decomposed.circom new file mode 100644 index 0000000..ca7cf9e --- /dev/null +++ b/packages/circom/tests/circuits/international_chars_decomposed.circom @@ -0,0 +1,920 @@ +pragma circom 2.1.5; + +include "@zk-email/zk-regex-circom/circuits/regex_helpers.circom"; + +// regex: Latin-Extension=[¡-ƿ]+ Greek=[Ͱ-Ͽ]+ Cyrillic=[Ѐ-ӿ]+ Arabic=[؀-ۿ]+ Devanagari=[ऀ-ॿ]+ Hiragana&Katakana=[ぁ-ヿ]+ +template InternationalCharsDecomposed(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[67][num_bytes]; + component lt[6][num_bytes]; + component and[103][num_bytes]; + component multi_or[22][num_bytes]; + signal states[num_bytes+1][90]; + component state_changed[num_bytes]; + + states[0][0] <== 1; + for (var i = 1; i < 90; i++) { + states[0][i] <== 0; + } + + for (var i = 0; i < num_bytes; i++) { + state_changed[i] = MultiOR(89); + eq[0][i] = IsEqual(); + eq[0][i].in[0] <== in[i]; + eq[0][i].in[1] <== 76; + and[0][i] = AND(); + and[0][i].a <== states[i][0]; + and[0][i].b <== eq[0][i].out; + states[i+1][1] <== and[0][i].out; + state_changed[i].in[0] <== states[i+1][1]; + eq[1][i] = IsEqual(); + eq[1][i].in[0] <== in[i]; + eq[1][i].in[1] <== 97; + and[1][i] = AND(); + and[1][i].a <== states[i][1]; + and[1][i].b <== eq[1][i].out; + states[i+1][2] <== and[1][i].out; + state_changed[i].in[1] <== states[i+1][2]; + eq[2][i] = IsEqual(); + eq[2][i].in[0] <== in[i]; + eq[2][i].in[1] <== 116; + and[2][i] = AND(); + and[2][i].a <== states[i][2]; + and[2][i].b <== eq[2][i].out; + states[i+1][3] <== and[2][i].out; + state_changed[i].in[2] <== states[i+1][3]; + eq[3][i] = IsEqual(); + eq[3][i].in[0] <== in[i]; + eq[3][i].in[1] <== 105; + and[3][i] = AND(); + and[3][i].a <== states[i][3]; + and[3][i].b <== eq[3][i].out; + states[i+1][4] <== and[3][i].out; + state_changed[i].in[3] <== states[i+1][4]; + eq[4][i] = IsEqual(); + eq[4][i].in[0] <== in[i]; + eq[4][i].in[1] <== 110; + and[4][i] = AND(); + and[4][i].a <== states[i][4]; + and[4][i].b <== eq[4][i].out; + states[i+1][5] <== and[4][i].out; + state_changed[i].in[4] <== states[i+1][5]; + eq[5][i] = IsEqual(); + eq[5][i].in[0] <== in[i]; + eq[5][i].in[1] <== 45; + and[5][i] = AND(); + and[5][i].a <== states[i][5]; + and[5][i].b <== eq[5][i].out; + states[i+1][6] <== and[5][i].out; + state_changed[i].in[5] <== states[i+1][6]; + eq[6][i] = IsEqual(); + eq[6][i].in[0] <== in[i]; + eq[6][i].in[1] <== 69; + and[6][i] = AND(); + and[6][i].a <== states[i][6]; + and[6][i].b <== eq[6][i].out; + states[i+1][7] <== and[6][i].out; + state_changed[i].in[6] <== states[i+1][7]; + eq[7][i] = IsEqual(); + eq[7][i].in[0] <== in[i]; + eq[7][i].in[1] <== 120; + and[7][i] = AND(); + and[7][i].a <== states[i][7]; + and[7][i].b <== eq[7][i].out; + states[i+1][8] <== and[7][i].out; + state_changed[i].in[7] <== states[i+1][8]; + and[8][i] = AND(); + and[8][i].a <== states[i][8]; + and[8][i].b <== eq[2][i].out; + states[i+1][9] <== and[8][i].out; + state_changed[i].in[8] <== states[i+1][9]; + eq[8][i] = IsEqual(); + eq[8][i].in[0] <== in[i]; + eq[8][i].in[1] <== 101; + and[9][i] = AND(); + and[9][i].a <== states[i][9]; + and[9][i].b <== eq[8][i].out; + states[i+1][10] <== and[9][i].out; + state_changed[i].in[9] <== states[i+1][10]; + and[10][i] = AND(); + and[10][i].a <== states[i][10]; + and[10][i].b <== eq[4][i].out; + states[i+1][11] <== and[10][i].out; + state_changed[i].in[10] <== states[i+1][11]; + eq[9][i] = IsEqual(); + eq[9][i].in[0] <== in[i]; + eq[9][i].in[1] <== 115; + and[11][i] = AND(); + and[11][i].a <== states[i][11]; + and[11][i].b <== eq[9][i].out; + states[i+1][12] <== and[11][i].out; + state_changed[i].in[11] <== states[i+1][12]; + and[12][i] = AND(); + and[12][i].a <== states[i][12]; + and[12][i].b <== eq[3][i].out; + states[i+1][13] <== and[12][i].out; + state_changed[i].in[12] <== states[i+1][13]; + eq[10][i] = IsEqual(); + eq[10][i].in[0] <== in[i]; + eq[10][i].in[1] <== 111; + and[13][i] = AND(); + and[13][i].a <== states[i][13]; + and[13][i].b <== eq[10][i].out; + states[i+1][14] <== and[13][i].out; + state_changed[i].in[13] <== states[i+1][14]; + and[14][i] = AND(); + and[14][i].a <== states[i][14]; + and[14][i].b <== eq[4][i].out; + states[i+1][15] <== and[14][i].out; + state_changed[i].in[14] <== states[i+1][15]; + eq[11][i] = IsEqual(); + eq[11][i].in[0] <== in[i]; + eq[11][i].in[1] <== 61; + and[15][i] = AND(); + and[15][i].a <== states[i][15]; + and[15][i].b <== eq[11][i].out; + states[i+1][16] <== and[15][i].out; + state_changed[i].in[15] <== states[i+1][16]; + eq[12][i] = IsEqual(); + eq[12][i].in[0] <== in[i]; + eq[12][i].in[1] <== 196; + eq[13][i] = IsEqual(); + eq[13][i].in[0] <== in[i]; + eq[13][i].in[1] <== 197; + eq[14][i] = IsEqual(); + eq[14][i].in[0] <== in[i]; + eq[14][i].in[1] <== 195; + eq[15][i] = IsEqual(); + eq[15][i].in[0] <== in[i]; + eq[15][i].in[1] <== 198; + and[16][i] = AND(); + and[16][i].a <== states[i][19]; + multi_or[0][i] = MultiOR(4); + multi_or[0][i].in[0] <== eq[12][i].out; + multi_or[0][i].in[1] <== eq[13][i].out; + multi_or[0][i].in[2] <== eq[14][i].out; + multi_or[0][i].in[3] <== eq[15][i].out; + and[16][i].b <== multi_or[0][i].out; + and[17][i] = AND(); + and[17][i].a <== states[i][16]; + multi_or[1][i] = MultiOR(4); + multi_or[1][i].in[0] <== eq[14][i].out; + multi_or[1][i].in[1] <== eq[12][i].out; + multi_or[1][i].in[2] <== eq[15][i].out; + multi_or[1][i].in[3] <== eq[13][i].out; + and[17][i].b <== multi_or[1][i].out; + multi_or[2][i] = MultiOR(2); + multi_or[2][i].in[0] <== and[16][i].out; + multi_or[2][i].in[1] <== and[17][i].out; + states[i+1][17] <== multi_or[2][i].out; + state_changed[i].in[16] <== states[i+1][17]; + eq[16][i] = IsEqual(); + eq[16][i].in[0] <== in[i]; + eq[16][i].in[1] <== 194; + and[18][i] = AND(); + and[18][i].a <== states[i][16]; + and[18][i].b <== eq[16][i].out; + and[19][i] = AND(); + and[19][i].a <== states[i][19]; + and[19][i].b <== eq[16][i].out; + multi_or[3][i] = MultiOR(2); + multi_or[3][i].in[0] <== and[18][i].out; + multi_or[3][i].in[1] <== and[19][i].out; + states[i+1][18] <== multi_or[3][i].out; + state_changed[i].in[17] <== states[i+1][18]; + lt[0][i] = LessEqThan(8); + lt[0][i].in[0] <== 161; + lt[0][i].in[1] <== in[i]; + lt[1][i] = LessEqThan(8); + lt[1][i].in[0] <== in[i]; + lt[1][i].in[1] <== 191; + and[20][i] = AND(); + and[20][i].a <== lt[0][i].out; + and[20][i].b <== lt[1][i].out; + and[21][i] = AND(); + and[21][i].a <== states[i][18]; + and[21][i].b <== and[20][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[22][i] = AND(); + and[22][i].a <== lt[2][i].out; + and[22][i].b <== lt[3][i].out; + and[23][i] = AND(); + and[23][i].a <== states[i][17]; + and[23][i].b <== and[22][i].out; + multi_or[4][i] = MultiOR(2); + multi_or[4][i].in[0] <== and[21][i].out; + multi_or[4][i].in[1] <== and[23][i].out; + states[i+1][19] <== multi_or[4][i].out; + state_changed[i].in[18] <== states[i+1][19]; + eq[17][i] = IsEqual(); + eq[17][i].in[0] <== in[i]; + eq[17][i].in[1] <== 32; + and[24][i] = AND(); + and[24][i].a <== states[i][19]; + and[24][i].b <== eq[17][i].out; + states[i+1][20] <== and[24][i].out; + state_changed[i].in[19] <== states[i+1][20]; + eq[18][i] = IsEqual(); + eq[18][i].in[0] <== in[i]; + eq[18][i].in[1] <== 71; + and[25][i] = AND(); + and[25][i].a <== states[i][20]; + and[25][i].b <== eq[18][i].out; + states[i+1][21] <== and[25][i].out; + state_changed[i].in[20] <== states[i+1][21]; + eq[19][i] = IsEqual(); + eq[19][i].in[0] <== in[i]; + eq[19][i].in[1] <== 114; + and[26][i] = AND(); + and[26][i].a <== states[i][21]; + and[26][i].b <== eq[19][i].out; + states[i+1][22] <== and[26][i].out; + state_changed[i].in[21] <== states[i+1][22]; + and[27][i] = AND(); + and[27][i].a <== states[i][22]; + and[27][i].b <== eq[8][i].out; + states[i+1][23] <== and[27][i].out; + state_changed[i].in[22] <== states[i+1][23]; + and[28][i] = AND(); + and[28][i].a <== states[i][23]; + and[28][i].b <== eq[8][i].out; + states[i+1][24] <== and[28][i].out; + state_changed[i].in[23] <== states[i+1][24]; + eq[20][i] = IsEqual(); + eq[20][i].in[0] <== in[i]; + eq[20][i].in[1] <== 107; + and[29][i] = AND(); + and[29][i].a <== states[i][24]; + and[29][i].b <== eq[20][i].out; + states[i+1][25] <== and[29][i].out; + state_changed[i].in[24] <== states[i+1][25]; + and[30][i] = AND(); + and[30][i].a <== states[i][25]; + and[30][i].b <== eq[11][i].out; + states[i+1][26] <== and[30][i].out; + state_changed[i].in[25] <== states[i+1][26]; + eq[21][i] = IsEqual(); + eq[21][i].in[0] <== in[i]; + eq[21][i].in[1] <== 206; + eq[22][i] = IsEqual(); + eq[22][i].in[0] <== in[i]; + eq[22][i].in[1] <== 207; + and[31][i] = AND(); + and[31][i].a <== states[i][26]; + multi_or[5][i] = MultiOR(2); + multi_or[5][i].in[0] <== eq[21][i].out; + multi_or[5][i].in[1] <== eq[22][i].out; + and[31][i].b <== multi_or[5][i].out; + and[32][i] = AND(); + and[32][i].a <== states[i][29]; + multi_or[6][i] = MultiOR(2); + multi_or[6][i].in[0] <== eq[22][i].out; + multi_or[6][i].in[1] <== eq[21][i].out; + and[32][i].b <== multi_or[6][i].out; + multi_or[7][i] = MultiOR(2); + multi_or[7][i].in[0] <== and[31][i].out; + multi_or[7][i].in[1] <== and[32][i].out; + states[i+1][27] <== multi_or[7][i].out; + state_changed[i].in[26] <== states[i+1][27]; + eq[23][i] = IsEqual(); + eq[23][i].in[0] <== in[i]; + eq[23][i].in[1] <== 205; + and[33][i] = AND(); + and[33][i].a <== states[i][26]; + and[33][i].b <== eq[23][i].out; + and[34][i] = AND(); + and[34][i].a <== states[i][29]; + and[34][i].b <== eq[23][i].out; + multi_or[8][i] = MultiOR(2); + multi_or[8][i].in[0] <== and[33][i].out; + multi_or[8][i].in[1] <== and[34][i].out; + states[i+1][28] <== multi_or[8][i].out; + state_changed[i].in[27] <== states[i+1][28]; + and[35][i] = AND(); + and[35][i].a <== states[i][27]; + and[35][i].b <== and[22][i].out; + eq[24][i] = IsEqual(); + eq[24][i].in[0] <== in[i]; + eq[24][i].in[1] <== 178; + eq[25][i] = IsEqual(); + eq[25][i].in[0] <== in[i]; + eq[25][i].in[1] <== 185; + eq[26][i] = IsEqual(); + eq[26][i].in[0] <== in[i]; + eq[26][i].in[1] <== 182; + eq[27][i] = IsEqual(); + eq[27][i].in[0] <== in[i]; + eq[27][i].in[1] <== 187; + eq[28][i] = IsEqual(); + eq[28][i].in[0] <== in[i]; + eq[28][i].in[1] <== 189; + eq[29][i] = IsEqual(); + eq[29][i].in[0] <== in[i]; + eq[29][i].in[1] <== 183; + eq[30][i] = IsEqual(); + eq[30][i].in[0] <== in[i]; + eq[30][i].in[1] <== 179; + eq[31][i] = IsEqual(); + eq[31][i].in[0] <== in[i]; + eq[31][i].in[1] <== 186; + eq[32][i] = IsEqual(); + eq[32][i].in[0] <== in[i]; + eq[32][i].in[1] <== 190; + eq[33][i] = IsEqual(); + eq[33][i].in[0] <== in[i]; + eq[33][i].in[1] <== 191; + eq[34][i] = IsEqual(); + eq[34][i].in[0] <== in[i]; + eq[34][i].in[1] <== 180; + eq[35][i] = IsEqual(); + eq[35][i].in[0] <== in[i]; + eq[35][i].in[1] <== 176; + eq[36][i] = IsEqual(); + eq[36][i].in[0] <== in[i]; + eq[36][i].in[1] <== 184; + eq[37][i] = IsEqual(); + eq[37][i].in[0] <== in[i]; + eq[37][i].in[1] <== 188; + eq[38][i] = IsEqual(); + eq[38][i].in[0] <== in[i]; + eq[38][i].in[1] <== 181; + eq[39][i] = IsEqual(); + eq[39][i].in[0] <== in[i]; + eq[39][i].in[1] <== 177; + and[36][i] = AND(); + and[36][i].a <== states[i][28]; + multi_or[9][i] = MultiOR(16); + multi_or[9][i].in[0] <== eq[24][i].out; + multi_or[9][i].in[1] <== eq[25][i].out; + multi_or[9][i].in[2] <== eq[26][i].out; + multi_or[9][i].in[3] <== eq[27][i].out; + multi_or[9][i].in[4] <== eq[28][i].out; + multi_or[9][i].in[5] <== eq[29][i].out; + multi_or[9][i].in[6] <== eq[30][i].out; + multi_or[9][i].in[7] <== eq[31][i].out; + multi_or[9][i].in[8] <== eq[32][i].out; + multi_or[9][i].in[9] <== eq[33][i].out; + multi_or[9][i].in[10] <== eq[34][i].out; + multi_or[9][i].in[11] <== eq[35][i].out; + multi_or[9][i].in[12] <== eq[36][i].out; + multi_or[9][i].in[13] <== eq[37][i].out; + multi_or[9][i].in[14] <== eq[38][i].out; + multi_or[9][i].in[15] <== eq[39][i].out; + and[36][i].b <== multi_or[9][i].out; + multi_or[10][i] = MultiOR(2); + multi_or[10][i].in[0] <== and[35][i].out; + multi_or[10][i].in[1] <== and[36][i].out; + states[i+1][29] <== multi_or[10][i].out; + state_changed[i].in[28] <== states[i+1][29]; + and[37][i] = AND(); + and[37][i].a <== states[i][29]; + and[37][i].b <== eq[17][i].out; + states[i+1][30] <== and[37][i].out; + state_changed[i].in[29] <== states[i+1][30]; + eq[40][i] = IsEqual(); + eq[40][i].in[0] <== in[i]; + eq[40][i].in[1] <== 67; + and[38][i] = AND(); + and[38][i].a <== states[i][30]; + and[38][i].b <== eq[40][i].out; + states[i+1][31] <== and[38][i].out; + state_changed[i].in[30] <== states[i+1][31]; + eq[41][i] = IsEqual(); + eq[41][i].in[0] <== in[i]; + eq[41][i].in[1] <== 121; + and[39][i] = AND(); + and[39][i].a <== states[i][31]; + and[39][i].b <== eq[41][i].out; + states[i+1][32] <== and[39][i].out; + state_changed[i].in[31] <== states[i+1][32]; + and[40][i] = AND(); + and[40][i].a <== states[i][32]; + and[40][i].b <== eq[19][i].out; + states[i+1][33] <== and[40][i].out; + state_changed[i].in[32] <== states[i+1][33]; + and[41][i] = AND(); + and[41][i].a <== states[i][33]; + and[41][i].b <== eq[3][i].out; + states[i+1][34] <== and[41][i].out; + state_changed[i].in[33] <== states[i+1][34]; + eq[42][i] = IsEqual(); + eq[42][i].in[0] <== in[i]; + eq[42][i].in[1] <== 108; + and[42][i] = AND(); + and[42][i].a <== states[i][34]; + and[42][i].b <== eq[42][i].out; + states[i+1][35] <== and[42][i].out; + state_changed[i].in[34] <== states[i+1][35]; + and[43][i] = AND(); + and[43][i].a <== states[i][35]; + and[43][i].b <== eq[42][i].out; + states[i+1][36] <== and[43][i].out; + state_changed[i].in[35] <== states[i+1][36]; + and[44][i] = AND(); + and[44][i].a <== states[i][36]; + and[44][i].b <== eq[3][i].out; + states[i+1][37] <== and[44][i].out; + state_changed[i].in[36] <== states[i+1][37]; + eq[43][i] = IsEqual(); + eq[43][i].in[0] <== in[i]; + eq[43][i].in[1] <== 99; + and[45][i] = AND(); + and[45][i].a <== states[i][37]; + and[45][i].b <== eq[43][i].out; + states[i+1][38] <== and[45][i].out; + state_changed[i].in[37] <== states[i+1][38]; + and[46][i] = AND(); + and[46][i].a <== states[i][38]; + and[46][i].b <== eq[11][i].out; + states[i+1][39] <== and[46][i].out; + state_changed[i].in[38] <== states[i+1][39]; + eq[44][i] = IsEqual(); + eq[44][i].in[0] <== in[i]; + eq[44][i].in[1] <== 210; + eq[45][i] = IsEqual(); + eq[45][i].in[0] <== in[i]; + eq[45][i].in[1] <== 209; + eq[46][i] = IsEqual(); + eq[46][i].in[0] <== in[i]; + eq[46][i].in[1] <== 211; + eq[47][i] = IsEqual(); + eq[47][i].in[0] <== in[i]; + eq[47][i].in[1] <== 208; + and[47][i] = AND(); + and[47][i].a <== states[i][39]; + multi_or[11][i] = MultiOR(4); + multi_or[11][i].in[0] <== eq[44][i].out; + multi_or[11][i].in[1] <== eq[45][i].out; + multi_or[11][i].in[2] <== eq[46][i].out; + multi_or[11][i].in[3] <== eq[47][i].out; + and[47][i].b <== multi_or[11][i].out; + and[48][i] = AND(); + and[48][i].a <== states[i][41]; + multi_or[12][i] = MultiOR(4); + multi_or[12][i].in[0] <== eq[45][i].out; + multi_or[12][i].in[1] <== eq[47][i].out; + multi_or[12][i].in[2] <== eq[46][i].out; + multi_or[12][i].in[3] <== eq[44][i].out; + and[48][i].b <== multi_or[12][i].out; + multi_or[13][i] = MultiOR(2); + multi_or[13][i].in[0] <== and[47][i].out; + multi_or[13][i].in[1] <== and[48][i].out; + states[i+1][40] <== multi_or[13][i].out; + state_changed[i].in[39] <== states[i+1][40]; + and[49][i] = AND(); + and[49][i].a <== states[i][40]; + and[49][i].b <== and[22][i].out; + states[i+1][41] <== and[49][i].out; + state_changed[i].in[40] <== states[i+1][41]; + and[50][i] = AND(); + and[50][i].a <== states[i][41]; + and[50][i].b <== eq[17][i].out; + states[i+1][42] <== and[50][i].out; + state_changed[i].in[41] <== states[i+1][42]; + eq[48][i] = IsEqual(); + eq[48][i].in[0] <== in[i]; + eq[48][i].in[1] <== 65; + and[51][i] = AND(); + and[51][i].a <== states[i][42]; + and[51][i].b <== eq[48][i].out; + states[i+1][43] <== and[51][i].out; + state_changed[i].in[42] <== states[i+1][43]; + and[52][i] = AND(); + and[52][i].a <== states[i][43]; + and[52][i].b <== eq[19][i].out; + states[i+1][44] <== and[52][i].out; + state_changed[i].in[43] <== states[i+1][44]; + and[53][i] = AND(); + and[53][i].a <== states[i][44]; + and[53][i].b <== eq[1][i].out; + states[i+1][45] <== and[53][i].out; + state_changed[i].in[44] <== states[i+1][45]; + eq[49][i] = IsEqual(); + eq[49][i].in[0] <== in[i]; + eq[49][i].in[1] <== 98; + and[54][i] = AND(); + and[54][i].a <== states[i][45]; + and[54][i].b <== eq[49][i].out; + states[i+1][46] <== and[54][i].out; + state_changed[i].in[45] <== states[i+1][46]; + and[55][i] = AND(); + and[55][i].a <== states[i][46]; + and[55][i].b <== eq[3][i].out; + states[i+1][47] <== and[55][i].out; + state_changed[i].in[46] <== states[i+1][47]; + and[56][i] = AND(); + and[56][i].a <== states[i][47]; + and[56][i].b <== eq[43][i].out; + states[i+1][48] <== and[56][i].out; + state_changed[i].in[47] <== states[i+1][48]; + and[57][i] = AND(); + and[57][i].a <== states[i][48]; + and[57][i].b <== eq[11][i].out; + states[i+1][49] <== and[57][i].out; + state_changed[i].in[48] <== states[i+1][49]; + eq[50][i] = IsEqual(); + eq[50][i].in[0] <== in[i]; + eq[50][i].in[1] <== 217; + eq[51][i] = IsEqual(); + eq[51][i].in[0] <== in[i]; + eq[51][i].in[1] <== 216; + eq[52][i] = IsEqual(); + eq[52][i].in[0] <== in[i]; + eq[52][i].in[1] <== 218; + eq[53][i] = IsEqual(); + eq[53][i].in[0] <== in[i]; + eq[53][i].in[1] <== 219; + and[58][i] = AND(); + and[58][i].a <== states[i][51]; + multi_or[14][i] = MultiOR(4); + multi_or[14][i].in[0] <== eq[50][i].out; + multi_or[14][i].in[1] <== eq[51][i].out; + multi_or[14][i].in[2] <== eq[52][i].out; + multi_or[14][i].in[3] <== eq[53][i].out; + and[58][i].b <== multi_or[14][i].out; + and[59][i] = AND(); + and[59][i].a <== states[i][49]; + multi_or[15][i] = MultiOR(4); + multi_or[15][i].in[0] <== eq[50][i].out; + multi_or[15][i].in[1] <== eq[52][i].out; + multi_or[15][i].in[2] <== eq[53][i].out; + multi_or[15][i].in[3] <== eq[51][i].out; + and[59][i].b <== multi_or[15][i].out; + multi_or[16][i] = MultiOR(2); + multi_or[16][i].in[0] <== and[58][i].out; + multi_or[16][i].in[1] <== and[59][i].out; + states[i+1][50] <== multi_or[16][i].out; + state_changed[i].in[49] <== states[i+1][50]; + and[60][i] = AND(); + and[60][i].a <== states[i][50]; + and[60][i].b <== and[22][i].out; + states[i+1][51] <== and[60][i].out; + state_changed[i].in[50] <== states[i+1][51]; + and[61][i] = AND(); + and[61][i].a <== states[i][51]; + and[61][i].b <== eq[17][i].out; + states[i+1][52] <== and[61][i].out; + state_changed[i].in[51] <== states[i+1][52]; + eq[54][i] = IsEqual(); + eq[54][i].in[0] <== in[i]; + eq[54][i].in[1] <== 68; + and[62][i] = AND(); + and[62][i].a <== states[i][52]; + and[62][i].b <== eq[54][i].out; + states[i+1][53] <== and[62][i].out; + state_changed[i].in[52] <== states[i+1][53]; + and[63][i] = AND(); + and[63][i].a <== states[i][53]; + and[63][i].b <== eq[8][i].out; + states[i+1][54] <== and[63][i].out; + state_changed[i].in[53] <== states[i+1][54]; + eq[55][i] = IsEqual(); + eq[55][i].in[0] <== in[i]; + eq[55][i].in[1] <== 118; + and[64][i] = AND(); + and[64][i].a <== states[i][54]; + and[64][i].b <== eq[55][i].out; + states[i+1][55] <== and[64][i].out; + state_changed[i].in[54] <== states[i+1][55]; + and[65][i] = AND(); + and[65][i].a <== states[i][55]; + and[65][i].b <== eq[1][i].out; + states[i+1][56] <== and[65][i].out; + state_changed[i].in[55] <== states[i+1][56]; + and[66][i] = AND(); + and[66][i].a <== states[i][56]; + and[66][i].b <== eq[4][i].out; + states[i+1][57] <== and[66][i].out; + state_changed[i].in[56] <== states[i+1][57]; + and[67][i] = AND(); + and[67][i].a <== states[i][57]; + and[67][i].b <== eq[1][i].out; + states[i+1][58] <== and[67][i].out; + state_changed[i].in[57] <== states[i+1][58]; + eq[56][i] = IsEqual(); + eq[56][i].in[0] <== in[i]; + eq[56][i].in[1] <== 103; + and[68][i] = AND(); + and[68][i].a <== states[i][58]; + and[68][i].b <== eq[56][i].out; + states[i+1][59] <== and[68][i].out; + state_changed[i].in[58] <== states[i+1][59]; + and[69][i] = AND(); + and[69][i].a <== states[i][59]; + and[69][i].b <== eq[1][i].out; + states[i+1][60] <== and[69][i].out; + state_changed[i].in[59] <== states[i+1][60]; + and[70][i] = AND(); + and[70][i].a <== states[i][60]; + and[70][i].b <== eq[19][i].out; + states[i+1][61] <== and[70][i].out; + state_changed[i].in[60] <== states[i+1][61]; + and[71][i] = AND(); + and[71][i].a <== states[i][61]; + and[71][i].b <== eq[3][i].out; + states[i+1][62] <== and[71][i].out; + state_changed[i].in[61] <== states[i+1][62]; + and[72][i] = AND(); + and[72][i].a <== states[i][62]; + and[72][i].b <== eq[11][i].out; + states[i+1][63] <== and[72][i].out; + state_changed[i].in[62] <== states[i+1][63]; + eq[57][i] = IsEqual(); + eq[57][i].in[0] <== in[i]; + eq[57][i].in[1] <== 224; + and[73][i] = AND(); + and[73][i].a <== states[i][66]; + and[73][i].b <== eq[57][i].out; + and[74][i] = AND(); + and[74][i].a <== states[i][63]; + and[74][i].b <== eq[57][i].out; + multi_or[17][i] = MultiOR(2); + multi_or[17][i].in[0] <== and[73][i].out; + multi_or[17][i].in[1] <== and[74][i].out; + states[i+1][64] <== multi_or[17][i].out; + state_changed[i].in[63] <== states[i+1][64]; + eq[58][i] = IsEqual(); + eq[58][i].in[0] <== in[i]; + eq[58][i].in[1] <== 165; + eq[59][i] = IsEqual(); + eq[59][i].in[0] <== in[i]; + eq[59][i].in[1] <== 164; + and[75][i] = AND(); + and[75][i].a <== states[i][64]; + multi_or[18][i] = MultiOR(2); + multi_or[18][i].in[0] <== eq[58][i].out; + multi_or[18][i].in[1] <== eq[59][i].out; + and[75][i].b <== multi_or[18][i].out; + states[i+1][65] <== and[75][i].out; + state_changed[i].in[64] <== states[i+1][65]; + and[76][i] = AND(); + and[76][i].a <== states[i][65]; + and[76][i].b <== and[22][i].out; + states[i+1][66] <== and[76][i].out; + state_changed[i].in[65] <== states[i+1][66]; + and[77][i] = AND(); + and[77][i].a <== states[i][66]; + and[77][i].b <== eq[17][i].out; + states[i+1][67] <== and[77][i].out; + state_changed[i].in[66] <== states[i+1][67]; + eq[60][i] = IsEqual(); + eq[60][i].in[0] <== in[i]; + eq[60][i].in[1] <== 72; + and[78][i] = AND(); + and[78][i].a <== states[i][67]; + and[78][i].b <== eq[60][i].out; + states[i+1][68] <== and[78][i].out; + state_changed[i].in[67] <== states[i+1][68]; + and[79][i] = AND(); + and[79][i].a <== states[i][68]; + and[79][i].b <== eq[3][i].out; + states[i+1][69] <== and[79][i].out; + state_changed[i].in[68] <== states[i+1][69]; + and[80][i] = AND(); + and[80][i].a <== states[i][69]; + and[80][i].b <== eq[19][i].out; + states[i+1][70] <== and[80][i].out; + state_changed[i].in[69] <== states[i+1][70]; + and[81][i] = AND(); + and[81][i].a <== states[i][70]; + and[81][i].b <== eq[1][i].out; + states[i+1][71] <== and[81][i].out; + state_changed[i].in[70] <== states[i+1][71]; + and[82][i] = AND(); + and[82][i].a <== states[i][71]; + and[82][i].b <== eq[56][i].out; + states[i+1][72] <== and[82][i].out; + state_changed[i].in[71] <== states[i+1][72]; + and[83][i] = AND(); + and[83][i].a <== states[i][72]; + and[83][i].b <== eq[1][i].out; + states[i+1][73] <== and[83][i].out; + state_changed[i].in[72] <== states[i+1][73]; + and[84][i] = AND(); + and[84][i].a <== states[i][73]; + and[84][i].b <== eq[4][i].out; + states[i+1][74] <== and[84][i].out; + state_changed[i].in[73] <== states[i+1][74]; + and[85][i] = AND(); + and[85][i].a <== states[i][74]; + and[85][i].b <== eq[1][i].out; + states[i+1][75] <== and[85][i].out; + state_changed[i].in[74] <== states[i+1][75]; + eq[61][i] = IsEqual(); + eq[61][i].in[0] <== in[i]; + eq[61][i].in[1] <== 38; + and[86][i] = AND(); + and[86][i].a <== states[i][75]; + and[86][i].b <== eq[61][i].out; + states[i+1][76] <== and[86][i].out; + state_changed[i].in[75] <== states[i+1][76]; + eq[62][i] = IsEqual(); + eq[62][i].in[0] <== in[i]; + eq[62][i].in[1] <== 75; + and[87][i] = AND(); + and[87][i].a <== states[i][76]; + and[87][i].b <== eq[62][i].out; + states[i+1][77] <== and[87][i].out; + state_changed[i].in[76] <== states[i+1][77]; + and[88][i] = AND(); + and[88][i].a <== states[i][77]; + and[88][i].b <== eq[1][i].out; + states[i+1][78] <== and[88][i].out; + state_changed[i].in[77] <== states[i+1][78]; + and[89][i] = AND(); + and[89][i].a <== states[i][78]; + and[89][i].b <== eq[2][i].out; + states[i+1][79] <== and[89][i].out; + state_changed[i].in[78] <== states[i+1][79]; + and[90][i] = AND(); + and[90][i].a <== states[i][79]; + and[90][i].b <== eq[1][i].out; + states[i+1][80] <== and[90][i].out; + state_changed[i].in[79] <== states[i+1][80]; + and[91][i] = AND(); + and[91][i].a <== states[i][80]; + and[91][i].b <== eq[20][i].out; + states[i+1][81] <== and[91][i].out; + state_changed[i].in[80] <== states[i+1][81]; + and[92][i] = AND(); + and[92][i].a <== states[i][81]; + and[92][i].b <== eq[1][i].out; + states[i+1][82] <== and[92][i].out; + state_changed[i].in[81] <== states[i+1][82]; + and[93][i] = AND(); + and[93][i].a <== states[i][82]; + and[93][i].b <== eq[4][i].out; + states[i+1][83] <== and[93][i].out; + state_changed[i].in[82] <== states[i+1][83]; + and[94][i] = AND(); + and[94][i].a <== states[i][83]; + and[94][i].b <== eq[1][i].out; + states[i+1][84] <== and[94][i].out; + state_changed[i].in[83] <== states[i+1][84]; + and[95][i] = AND(); + and[95][i].a <== states[i][84]; + and[95][i].b <== eq[11][i].out; + states[i+1][85] <== and[95][i].out; + state_changed[i].in[84] <== states[i+1][85]; + eq[63][i] = IsEqual(); + eq[63][i].in[0] <== in[i]; + eq[63][i].in[1] <== 227; + and[96][i] = AND(); + and[96][i].a <== states[i][89]; + and[96][i].b <== eq[63][i].out; + and[97][i] = AND(); + and[97][i].a <== states[i][85]; + and[97][i].b <== eq[63][i].out; + multi_or[19][i] = MultiOR(2); + multi_or[19][i].in[0] <== and[96][i].out; + multi_or[19][i].in[1] <== and[97][i].out; + states[i+1][86] <== multi_or[19][i].out; + state_changed[i].in[85] <== states[i+1][86]; + eq[64][i] = IsEqual(); + eq[64][i].in[0] <== in[i]; + eq[64][i].in[1] <== 129; + and[98][i] = AND(); + and[98][i].a <== states[i][86]; + and[98][i].b <== eq[64][i].out; + states[i+1][87] <== and[98][i].out; + state_changed[i].in[86] <== states[i+1][87]; + eq[65][i] = IsEqual(); + eq[65][i].in[0] <== in[i]; + eq[65][i].in[1] <== 131; + eq[66][i] = IsEqual(); + eq[66][i].in[0] <== in[i]; + eq[66][i].in[1] <== 130; + and[99][i] = AND(); + and[99][i].a <== states[i][86]; + multi_or[20][i] = MultiOR(2); + multi_or[20][i].in[0] <== eq[65][i].out; + multi_or[20][i].in[1] <== eq[66][i].out; + and[99][i].b <== multi_or[20][i].out; + states[i+1][88] <== and[99][i].out; + state_changed[i].in[87] <== states[i+1][88]; + and[100][i] = AND(); + and[100][i].a <== states[i][88]; + and[100][i].b <== and[22][i].out; + lt[4][i] = LessEqThan(8); + lt[4][i].in[0] <== 129; + lt[4][i].in[1] <== in[i]; + lt[5][i] = LessEqThan(8); + lt[5][i].in[0] <== in[i]; + lt[5][i].in[1] <== 191; + and[101][i] = AND(); + and[101][i].a <== lt[4][i].out; + and[101][i].b <== lt[5][i].out; + and[102][i] = AND(); + and[102][i].a <== states[i][87]; + and[102][i].b <== and[101][i].out; + multi_or[21][i] = MultiOR(2); + multi_or[21][i].in[0] <== and[100][i].out; + multi_or[21][i].in[1] <== and[102][i].out; + states[i+1][89] <== multi_or[21][i].out; + state_changed[i].in[88] <== states[i+1][89]; + states[i+1][0] <== 1 - state_changed[i].out; + } + + component final_state_result = MultiOR(num_bytes+1); + for (var i = 0; i <= num_bytes; i++) { + final_state_result.in[i] <== states[i][89]; + } + out <== final_state_result.out; + signal is_consecutive[msg_bytes+1][2]; + is_consecutive[msg_bytes][1] <== 1; + for (var i = 0; i < msg_bytes; i++) { + is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][89] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; + is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; + } + // substrings calculated: [{(16, 17), (16, 18), (18, 19), (19, 18), (17, 19), (19, 17)}, {(26, 28), (28, 29), (27, 29), (29, 27), (29, 28), (26, 27)}, {(39, 40), (40, 41), (41, 40)}, {(49, 50), (50, 51), (51, 50)}, {(65, 66), (66, 64), (64, 65), (63, 64)}, {(88, 89), (89, 86), (87, 89), (85, 86), (86, 87), (86, 88)}] + signal is_substr0[msg_bytes][7]; + signal is_reveal0[msg_bytes]; + signal output reveal0[msg_bytes]; + for (var i = 0; i < msg_bytes; i++) { + is_substr0[i][0] <== 0; + is_substr0[i][1] <== is_substr0[i][0] + states[i+1][16] * states[i+2][17]; + is_substr0[i][2] <== is_substr0[i][1] + states[i+1][16] * states[i+2][18]; + is_substr0[i][3] <== is_substr0[i][2] + states[i+1][17] * states[i+2][19]; + is_substr0[i][4] <== is_substr0[i][3] + states[i+1][18] * states[i+2][19]; + is_substr0[i][5] <== is_substr0[i][4] + states[i+1][19] * states[i+2][17]; + is_substr0[i][6] <== is_substr0[i][5] + states[i+1][19] * states[i+2][18]; + is_reveal0[i] <== is_substr0[i][6] * is_consecutive[i][1]; + reveal0[i] <== in[i+1] * is_reveal0[i]; + } + signal is_substr1[msg_bytes][7]; + signal is_reveal1[msg_bytes]; + signal output reveal1[msg_bytes]; + for (var i = 0; i < msg_bytes; i++) { + is_substr1[i][0] <== 0; + is_substr1[i][1] <== is_substr1[i][0] + states[i+1][26] * states[i+2][27]; + is_substr1[i][2] <== is_substr1[i][1] + states[i+1][26] * states[i+2][28]; + is_substr1[i][3] <== is_substr1[i][2] + states[i+1][27] * states[i+2][29]; + is_substr1[i][4] <== is_substr1[i][3] + states[i+1][28] * states[i+2][29]; + is_substr1[i][5] <== is_substr1[i][4] + states[i+1][29] * states[i+2][27]; + is_substr1[i][6] <== is_substr1[i][5] + states[i+1][29] * states[i+2][28]; + is_reveal1[i] <== is_substr1[i][6] * is_consecutive[i][1]; + reveal1[i] <== in[i+1] * is_reveal1[i]; + } + signal is_substr2[msg_bytes][4]; + signal is_reveal2[msg_bytes]; + signal output reveal2[msg_bytes]; + for (var i = 0; i < msg_bytes; i++) { + is_substr2[i][0] <== 0; + is_substr2[i][1] <== is_substr2[i][0] + states[i+1][39] * states[i+2][40]; + is_substr2[i][2] <== is_substr2[i][1] + states[i+1][40] * states[i+2][41]; + is_substr2[i][3] <== is_substr2[i][2] + states[i+1][41] * states[i+2][40]; + is_reveal2[i] <== is_substr2[i][3] * is_consecutive[i][1]; + reveal2[i] <== in[i+1] * is_reveal2[i]; + } + signal is_substr3[msg_bytes][4]; + signal is_reveal3[msg_bytes]; + signal output reveal3[msg_bytes]; + for (var i = 0; i < msg_bytes; i++) { + is_substr3[i][0] <== 0; + is_substr3[i][1] <== is_substr3[i][0] + states[i+1][49] * states[i+2][50]; + is_substr3[i][2] <== is_substr3[i][1] + states[i+1][50] * states[i+2][51]; + is_substr3[i][3] <== is_substr3[i][2] + states[i+1][51] * states[i+2][50]; + is_reveal3[i] <== is_substr3[i][3] * is_consecutive[i][1]; + reveal3[i] <== in[i+1] * is_reveal3[i]; + } + signal is_substr4[msg_bytes][5]; + signal is_reveal4[msg_bytes]; + signal output reveal4[msg_bytes]; + for (var i = 0; i < msg_bytes; i++) { + is_substr4[i][0] <== 0; + is_substr4[i][1] <== is_substr4[i][0] + states[i+1][63] * states[i+2][64]; + is_substr4[i][2] <== is_substr4[i][1] + states[i+1][64] * states[i+2][65]; + is_substr4[i][3] <== is_substr4[i][2] + states[i+1][65] * states[i+2][66]; + is_substr4[i][4] <== is_substr4[i][3] + states[i+1][66] * states[i+2][64]; + is_reveal4[i] <== is_substr4[i][4] * is_consecutive[i][1]; + reveal4[i] <== in[i+1] * is_reveal4[i]; + } + signal is_substr5[msg_bytes][7]; + signal is_reveal5[msg_bytes]; + signal output reveal5[msg_bytes]; + for (var i = 0; i < msg_bytes; i++) { + is_substr5[i][0] <== 0; + is_substr5[i][1] <== is_substr5[i][0] + states[i+1][85] * states[i+2][86]; + is_substr5[i][2] <== is_substr5[i][1] + states[i+1][86] * states[i+2][87]; + is_substr5[i][3] <== is_substr5[i][2] + states[i+1][86] * states[i+2][88]; + is_substr5[i][4] <== is_substr5[i][3] + states[i+1][87] * states[i+2][89]; + is_substr5[i][5] <== is_substr5[i][4] + states[i+1][88] * states[i+2][89]; + is_substr5[i][6] <== is_substr5[i][5] + states[i+1][89] * states[i+2][86]; + is_reveal5[i] <== is_substr5[i][6] * is_consecutive[i][1]; + reveal5[i] <== in[i+1] * is_reveal5[i]; + } +} \ No newline at end of file diff --git a/packages/circom/tests/circuits/international_chars_decomposed.json b/packages/circom/tests/circuits/international_chars_decomposed.json new file mode 100644 index 0000000..45590e6 --- /dev/null +++ b/packages/circom/tests/circuits/international_chars_decomposed.json @@ -0,0 +1,52 @@ +{ + "parts": [ + { + "is_public": false, + "regex_def": "Latin-Extension=" + }, + { + "is_public": true, + "regex_def": "[¡-ƿ]+" + }, + { + "is_public": false, + "regex_def": " Greek=" + }, + { + "is_public": true, + "regex_def": "[Ͱ-Ͽ]+" + }, + { + "is_public": false, + "regex_def": " Cyrillic=" + }, + { + "is_public": true, + "regex_def": "[Ѐ-ӿ]+" + }, + { + "is_public": false, + "regex_def": " Arabic=" + }, + { + "is_public": true, + "regex_def": "[؀-ۿ]+" + }, + { + "is_public": false, + "regex_def": " Devanagari=" + }, + { + "is_public": true, + "regex_def": "[ऀ-ॿ]+" + }, + { + "is_public": false, + "regex_def": " Hiragana&Katakana=" + }, + { + "is_public": true, + "regex_def": "[ぁ-ヿ]+" + } + ] +} diff --git a/packages/circom/tests/circuits/negate1_regex.circom b/packages/circom/tests/circuits/negate1_regex.circom index 0b95897..da94b9e 100644 --- a/packages/circom/tests/circuits/negate1_regex.circom +++ b/packages/circom/tests/circuits/negate1_regex.circom @@ -45,61 +45,61 @@ template Negate1Regex(msg_bytes) { states[i+1][2] <== and[1][i].out; state_changed[i].in[1] <== states[i+1][2]; lt[0][i] = LessEqThan(8); - lt[0][i].in[0] <== 128; + lt[0][i].in[0] <== 194; lt[0][i].in[1] <== in[i]; lt[1][i] = LessEqThan(8); lt[1][i].in[0] <== in[i]; - lt[1][i].in[1] <== 159; + lt[1][i].in[1] <== 223; and[2][i] = AND(); and[2][i].a <== lt[0][i].out; and[2][i].b <== lt[1][i].out; and[3][i] = AND(); - and[3][i].a <== states[i][6]; + and[3][i].a <== states[i][10]; and[3][i].b <== and[2][i].out; + and[4][i] = AND(); + and[4][i].a <== states[i][2]; + and[4][i].b <== and[2][i].out; lt[2][i] = LessEqThan(8); lt[2][i].in[0] <== 160; lt[2][i].in[1] <== in[i]; lt[3][i] = LessEqThan(8); lt[3][i].in[0] <== in[i]; lt[3][i].in[1] <== 191; - and[4][i] = AND(); - and[4][i].a <== lt[2][i].out; - and[4][i].b <== lt[3][i].out; and[5][i] = AND(); - and[5][i].a <== states[i][4]; - and[5][i].b <== and[4][i].out; + and[5][i].a <== lt[2][i].out; + and[5][i].b <== lt[3][i].out; + and[6][i] = AND(); + and[6][i].a <== states[i][4]; + and[6][i].b <== and[5][i].out; 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[6][i] = AND(); - and[6][i].a <== lt[4][i].out; - and[6][i].b <== lt[5][i].out; and[7][i] = AND(); - and[7][i].a <== states[i][5]; - and[7][i].b <== and[6][i].out; + and[7][i].a <== lt[4][i].out; + and[7][i].b <== lt[5][i].out; + and[8][i] = AND(); + and[8][i].a <== states[i][5]; + and[8][i].b <== and[7][i].out; lt[6][i] = LessEqThan(8); - lt[6][i].in[0] <== 194; + 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] <== 223; - and[8][i] = AND(); - and[8][i].a <== lt[6][i].out; - and[8][i].b <== lt[7][i].out; + lt[7][i].in[1] <== 159; and[9][i] = AND(); - and[9][i].a <== states[i][2]; - and[9][i].b <== and[8][i].out; + and[9][i].a <== lt[6][i].out; + and[9][i].b <== lt[7][i].out; and[10][i] = AND(); - and[10][i].a <== states[i][10]; - and[10][i].b <== and[8][i].out; + and[10][i].a <== states[i][6]; + and[10][i].b <== and[9][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[9][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[10][i].out; states[i+1][3] <== multi_or[0][i].out; state_changed[i].in[2] <== states[i+1][3]; @@ -117,50 +117,53 @@ template Negate1Regex(msg_bytes) { multi_or[1][i].in[1] <== and[12][i].out; states[i+1][4] <== multi_or[1][i].out; state_changed[i].in[3] <== states[i+1][4]; + and[13][i] = AND(); + and[13][i].a <== states[i][8]; + and[13][i].b <== and[7][i].out; eq[3][i] = IsEqual(); eq[3][i].in[0] <== in[i]; - eq[3][i].in[1] <== 232; + eq[3][i].in[1] <== 238; eq[4][i] = IsEqual(); eq[4][i].in[0] <== in[i]; - eq[4][i].in[1] <== 234; + eq[4][i].in[1] <== 233; eq[5][i] = IsEqual(); eq[5][i].in[0] <== in[i]; - eq[5][i].in[1] <== 238; + eq[5][i].in[1] <== 228; eq[6][i] = IsEqual(); eq[6][i].in[0] <== in[i]; - eq[6][i].in[1] <== 239; + eq[6][i].in[1] <== 235; eq[7][i] = IsEqual(); eq[7][i].in[0] <== in[i]; - eq[7][i].in[1] <== 225; + eq[7][i].in[1] <== 236; eq[8][i] = IsEqual(); eq[8][i].in[0] <== in[i]; eq[8][i].in[1] <== 227; eq[9][i] = IsEqual(); eq[9][i].in[0] <== in[i]; - eq[9][i].in[1] <== 230; + eq[9][i].in[1] <== 226; eq[10][i] = IsEqual(); eq[10][i].in[0] <== in[i]; - eq[10][i].in[1] <== 231; + eq[10][i].in[1] <== 230; eq[11][i] = IsEqual(); eq[11][i].in[0] <== in[i]; - eq[11][i].in[1] <== 233; + eq[11][i].in[1] <== 232; eq[12][i] = IsEqual(); eq[12][i].in[0] <== in[i]; - eq[12][i].in[1] <== 236; + eq[12][i].in[1] <== 231; eq[13][i] = IsEqual(); eq[13][i].in[0] <== in[i]; - eq[13][i].in[1] <== 226; + eq[13][i].in[1] <== 234; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 235; + eq[14][i].in[1] <== 239; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 229; + eq[15][i].in[1] <== 225; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 228; - and[13][i] = AND(); - and[13][i].a <== states[i][2]; + eq[16][i].in[1] <== 229; + and[14][i] = AND(); + and[14][i].a <== states[i][2]; multi_or[2][i] = MultiOR(14); multi_or[2][i].in[0] <== eq[3][i].out; multi_or[2][i].in[1] <== eq[4][i].out; @@ -176,72 +179,57 @@ template Negate1Regex(msg_bytes) { multi_or[2][i].in[11] <== eq[14][i].out; multi_or[2][i].in[12] <== eq[15][i].out; multi_or[2][i].in[13] <== eq[16][i].out; - and[13][i].b <== multi_or[2][i].out; - and[14][i] = AND(); - and[14][i].a <== states[i][8]; - and[14][i].b <== and[6][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[15][i] = AND(); - and[15][i].a <== lt[8][i].out; - and[15][i].b <== lt[9][i].out; - and[16][i] = AND(); - and[16][i].a <== states[i][7]; - and[16][i].b <== and[15][i].out; + and[14][i].b <== multi_or[2][i].out; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 132; + eq[17][i].in[1] <== 134; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 128; + eq[18][i].in[1] <== 136; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 130; + eq[19][i].in[1] <== 139; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 131; + eq[20][i].in[1] <== 138; eq[21][i] = IsEqual(); eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 136; + eq[21][i].in[1] <== 142; eq[22][i] = IsEqual(); eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 141; + eq[22][i].in[1] <== 143; eq[23][i] = IsEqual(); eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 135; + eq[23][i].in[1] <== 129; eq[24][i] = IsEqual(); eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 140; + eq[24][i].in[1] <== 137; eq[25][i] = IsEqual(); eq[25][i].in[0] <== in[i]; - eq[25][i].in[1] <== 138; + eq[25][i].in[1] <== 135; eq[26][i] = IsEqual(); eq[26][i].in[0] <== in[i]; - eq[26][i].in[1] <== 143; + eq[26][i].in[1] <== 131; eq[27][i] = IsEqual(); eq[27][i].in[0] <== in[i]; - eq[27][i].in[1] <== 129; + eq[27][i].in[1] <== 128; eq[28][i] = IsEqual(); eq[28][i].in[0] <== in[i]; - eq[28][i].in[1] <== 142; + eq[28][i].in[1] <== 141; eq[29][i] = IsEqual(); eq[29][i].in[0] <== in[i]; - eq[29][i].in[1] <== 134; + eq[29][i].in[1] <== 133; eq[30][i] = IsEqual(); eq[30][i].in[0] <== in[i]; - eq[30][i].in[1] <== 133; + eq[30][i].in[1] <== 140; eq[31][i] = IsEqual(); eq[31][i].in[0] <== in[i]; - eq[31][i].in[1] <== 137; + eq[31][i].in[1] <== 130; eq[32][i] = IsEqual(); eq[32][i].in[0] <== in[i]; - eq[32][i].in[1] <== 139; - and[17][i] = AND(); - and[17][i].a <== states[i][9]; + eq[32][i].in[1] <== 132; + and[15][i] = AND(); + and[15][i].a <== states[i][9]; multi_or[3][i] = MultiOR(16); multi_or[3][i].in[0] <== eq[17][i].out; multi_or[3][i].in[1] <== eq[18][i].out; @@ -259,30 +247,42 @@ template Negate1Regex(msg_bytes) { multi_or[3][i].in[13] <== eq[30][i].out; multi_or[3][i].in[14] <== eq[31][i].out; multi_or[3][i].in[15] <== eq[32][i].out; - and[17][i].b <== multi_or[3][i].out; - and[18][i] = AND(); - and[18][i].a <== states[i][10]; + and[15][i].b <== multi_or[3][i].out; + and[16][i] = AND(); + and[16][i].a <== states[i][10]; multi_or[4][i] = MultiOR(14); - multi_or[4][i].in[0] <== eq[12][i].out; - multi_or[4][i].in[1] <== eq[10][i].out; - multi_or[4][i].in[2] <== eq[5][i].out; - multi_or[4][i].in[3] <== eq[3][i].out; + multi_or[4][i].in[0] <== eq[9][i].out; + multi_or[4][i].in[1] <== eq[3][i].out; + multi_or[4][i].in[2] <== eq[14][i].out; + multi_or[4][i].in[3] <== eq[13][i].out; multi_or[4][i].in[4] <== eq[7][i].out; - multi_or[4][i].in[5] <== eq[14][i].out; - multi_or[4][i].in[6] <== eq[6][i].out; - multi_or[4][i].in[7] <== eq[16][i].out; - multi_or[4][i].in[8] <== eq[9][i].out; - multi_or[4][i].in[9] <== eq[11][i].out; - multi_or[4][i].in[10] <== eq[15][i].out; - multi_or[4][i].in[11] <== eq[4][i].out; - multi_or[4][i].in[12] <== eq[13][i].out; - multi_or[4][i].in[13] <== eq[8][i].out; - and[18][i].b <== multi_or[4][i].out; + multi_or[4][i].in[5] <== eq[6][i].out; + multi_or[4][i].in[6] <== eq[12][i].out; + multi_or[4][i].in[7] <== eq[8][i].out; + multi_or[4][i].in[8] <== eq[5][i].out; + multi_or[4][i].in[9] <== eq[15][i].out; + multi_or[4][i].in[10] <== eq[16][i].out; + multi_or[4][i].in[11] <== eq[10][i].out; + multi_or[4][i].in[12] <== eq[11][i].out; + multi_or[4][i].in[13] <== eq[4][i].out; + and[16][i].b <== multi_or[4][i].out; + lt[8][i] = LessEqThan(8); + lt[8][i].in[0] <== 144; + lt[8][i].in[1] <== in[i]; + lt[9][i] = LessEqThan(8); + lt[9][i].in[0] <== in[i]; + lt[9][i].in[1] <== 191; + and[17][i] = AND(); + and[17][i].a <== lt[8][i].out; + and[17][i].b <== lt[9][i].out; + and[18][i] = AND(); + and[18][i].a <== states[i][7]; + and[18][i].b <== and[17][i].out; multi_or[5][i] = MultiOR(5); multi_or[5][i].in[0] <== and[13][i].out; multi_or[5][i].in[1] <== and[14][i].out; - multi_or[5][i].in[2] <== and[16][i].out; - multi_or[5][i].in[3] <== and[17][i].out; + multi_or[5][i].in[2] <== and[15][i].out; + multi_or[5][i].in[3] <== and[16][i].out; multi_or[5][i].in[4] <== and[18][i].out; states[i+1][5] <== multi_or[5][i].out; state_changed[i].in[4] <== states[i+1][5]; @@ -304,10 +304,10 @@ template Negate1Regex(msg_bytes) { eq[34][i].in[0] <== in[i]; eq[34][i].in[1] <== 240; and[21][i] = AND(); - and[21][i].a <== states[i][10]; + and[21][i].a <== states[i][2]; and[21][i].b <== eq[34][i].out; and[22][i] = AND(); - and[22][i].a <== states[i][2]; + and[22][i].a <== states[i][10]; and[22][i].b <== eq[34][i].out; multi_or[7][i] = MultiOR(2); multi_or[7][i].in[0] <== and[21][i].out; @@ -319,23 +319,23 @@ template Negate1Regex(msg_bytes) { eq[35][i].in[1] <== 241; eq[36][i] = IsEqual(); eq[36][i].in[0] <== in[i]; - eq[36][i].in[1] <== 242; + eq[36][i].in[1] <== 243; eq[37][i] = IsEqual(); eq[37][i].in[0] <== in[i]; - eq[37][i].in[1] <== 243; + eq[37][i].in[1] <== 242; and[23][i] = AND(); - and[23][i].a <== states[i][10]; + and[23][i].a <== states[i][2]; multi_or[8][i] = MultiOR(3); multi_or[8][i].in[0] <== eq[35][i].out; multi_or[8][i].in[1] <== eq[36][i].out; multi_or[8][i].in[2] <== eq[37][i].out; and[23][i].b <== multi_or[8][i].out; and[24][i] = AND(); - and[24][i].a <== states[i][2]; + and[24][i].a <== states[i][10]; multi_or[9][i] = MultiOR(3); - multi_or[9][i].in[0] <== eq[37][i].out; + multi_or[9][i].in[0] <== eq[36][i].out; multi_or[9][i].in[1] <== eq[35][i].out; - multi_or[9][i].in[2] <== eq[36][i].out; + multi_or[9][i].in[2] <== eq[37][i].out; and[24][i].b <== multi_or[9][i].out; multi_or[10][i] = MultiOR(2); multi_or[10][i].in[0] <== and[23][i].out; @@ -346,76 +346,76 @@ template Negate1Regex(msg_bytes) { eq[38][i].in[0] <== in[i]; eq[38][i].in[1] <== 244; and[25][i] = AND(); - and[25][i].a <== states[i][10]; + and[25][i].a <== states[i][2]; and[25][i].b <== eq[38][i].out; and[26][i] = AND(); - and[26][i].a <== states[i][2]; + and[26][i].a <== states[i][10]; and[26][i].b <== eq[38][i].out; multi_or[11][i] = MultiOR(2); multi_or[11][i].in[0] <== and[25][i].out; multi_or[11][i].in[1] <== and[26][i].out; states[i+1][9] <== multi_or[11][i].out; state_changed[i].in[8] <== states[i+1][9]; - and[27][i] = AND(); - and[27][i].a <== states[i][3]; - and[27][i].b <== and[6][i].out; lt[10][i] = LessEqThan(8); lt[10][i].in[0] <== 0; lt[10][i].in[1] <== in[i]; lt[11][i] = LessEqThan(8); lt[11][i].in[0] <== in[i]; lt[11][i].in[1] <== 45; - and[28][i] = AND(); - and[28][i].a <== lt[10][i].out; - and[28][i].b <== lt[11][i].out; + and[27][i] = AND(); + and[27][i].a <== lt[10][i].out; + and[27][i].b <== lt[11][i].out; lt[12][i] = LessEqThan(8); lt[12][i].in[0] <== 47; lt[12][i].in[1] <== in[i]; lt[13][i] = LessEqThan(8); lt[13][i].in[0] <== in[i]; lt[13][i].in[1] <== 96; - and[29][i] = AND(); - and[29][i].a <== lt[12][i].out; - and[29][i].b <== lt[13][i].out; + and[28][i] = AND(); + and[28][i].a <== lt[12][i].out; + and[28][i].b <== lt[13][i].out; eq[39][i] = IsEqual(); eq[39][i].in[0] <== in[i]; - eq[39][i].in[1] <== 123; + eq[39][i].in[1] <== 125; eq[40][i] = IsEqual(); eq[40][i].in[0] <== in[i]; - eq[40][i].in[1] <== 124; + eq[40][i].in[1] <== 123; eq[41][i] = IsEqual(); eq[41][i].in[0] <== in[i]; - eq[41][i].in[1] <== 125; + eq[41][i].in[1] <== 124; eq[42][i] = IsEqual(); eq[42][i].in[0] <== in[i]; - eq[42][i].in[1] <== 127; + eq[42][i].in[1] <== 126; eq[43][i] = IsEqual(); eq[43][i].in[0] <== in[i]; - eq[43][i].in[1] <== 126; - and[30][i] = AND(); - and[30][i].a <== states[i][2]; + eq[43][i].in[1] <== 127; + and[29][i] = AND(); + and[29][i].a <== states[i][10]; multi_or[12][i] = MultiOR(7); - multi_or[12][i].in[0] <== and[28][i].out; - multi_or[12][i].in[1] <== and[29][i].out; + multi_or[12][i].in[0] <== and[27][i].out; + multi_or[12][i].in[1] <== and[28][i].out; multi_or[12][i].in[2] <== eq[39][i].out; multi_or[12][i].in[3] <== eq[40][i].out; multi_or[12][i].in[4] <== eq[41][i].out; multi_or[12][i].in[5] <== eq[42][i].out; multi_or[12][i].in[6] <== eq[43][i].out; - and[30][i].b <== multi_or[12][i].out; - and[31][i] = AND(); - and[31][i].a <== states[i][10]; + and[29][i].b <== multi_or[12][i].out; + and[30][i] = AND(); + and[30][i].a <== states[i][2]; multi_or[13][i] = MultiOR(7); - multi_or[13][i].in[0] <== and[28][i].out; - multi_or[13][i].in[1] <== and[29][i].out; - multi_or[13][i].in[2] <== eq[42][i].out; - multi_or[13][i].in[3] <== eq[43][i].out; - multi_or[13][i].in[4] <== eq[40][i].out; - multi_or[13][i].in[5] <== eq[41][i].out; - multi_or[13][i].in[6] <== eq[39][i].out; - and[31][i].b <== multi_or[13][i].out; + multi_or[13][i].in[0] <== and[27][i].out; + multi_or[13][i].in[1] <== and[28][i].out; + multi_or[13][i].in[2] <== eq[43][i].out; + multi_or[13][i].in[3] <== eq[42][i].out; + multi_or[13][i].in[4] <== eq[39][i].out; + multi_or[13][i].in[5] <== eq[40][i].out; + multi_or[13][i].in[6] <== eq[41][i].out; + and[30][i].b <== multi_or[13][i].out; + and[31][i] = AND(); + and[31][i].a <== states[i][3]; + and[31][i].b <== and[7][i].out; multi_or[14][i] = MultiOR(3); - multi_or[14][i].in[0] <== and[27][i].out; + multi_or[14][i].in[0] <== and[29][i].out; multi_or[14][i].in[1] <== and[30][i].out; multi_or[14][i].in[2] <== and[31][i].out; states[i+1][10] <== multi_or[14][i].out; @@ -442,7 +442,7 @@ template Negate1Regex(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][11] * (1 - is_consecutive[msg_bytes-i][1]) + is_consecutive[msg_bytes-i][1]; is_consecutive[msg_bytes-1-i][1] <== state_changed[msg_bytes-i].out * is_consecutive[msg_bytes-1-i][0]; } - // substrings calculated: [{(2, 6), (2, 9), (10, 3), (10, 8), (2, 10), (2, 4), (7, 5), (2, 7), (10, 5), (2, 3), (2, 8), (4, 3), (3, 10), (6, 3), (2, 5), (10, 4), (10, 9), (9, 5), (10, 10), (5, 3), (10, 7), (8, 5), (10, 6)}] + // substrings calculated: [{(10, 6), (10, 7), (2, 7), (2, 4), (2, 8), (2, 10), (10, 3), (3, 10), (10, 10), (10, 9), (10, 8), (4, 3), (5, 3), (2, 9), (8, 5), (10, 4), (9, 5), (6, 3), (2, 5), (2, 6), (7, 5), (2, 3), (10, 5)}] signal is_substr0[msg_bytes][24]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/tests/circuits/simple_regex.circom b/packages/circom/tests/circuits/simple_regex.circom index c7bb21a..ebaea17 100644 --- a/packages/circom/tests/circuits/simple_regex.circom +++ b/packages/circom/tests/circuits/simple_regex.circom @@ -16,7 +16,7 @@ template SimpleRegex(msg_bytes) { component eq[8][num_bytes]; component and[11][num_bytes]; - component multi_or[5][num_bytes]; + component multi_or[4][num_bytes]; signal states[num_bytes+1][10]; component state_changed[num_bytes]; @@ -45,10 +45,10 @@ template SimpleRegex(msg_bytes) { state_changed[i].in[1] <== states[i+1][2]; eq[2][i] = IsEqual(); eq[2][i].in[0] <== in[i]; - eq[2][i].in[1] <== 97; + eq[2][i].in[1] <== 98; eq[3][i] = IsEqual(); eq[3][i].in[0] <== in[i]; - eq[3][i].in[1] <== 98; + eq[3][i].in[1] <== 97; and[2][i] = AND(); and[2][i].a <== states[i][2]; multi_or[0][i] = MultiOR(2); @@ -69,10 +69,10 @@ template SimpleRegex(msg_bytes) { eq[5][i].in[0] <== in[i]; eq[5][i].in[1] <== 50; and[4][i] = AND(); - and[4][i].a <== states[i][8]; + and[4][i].a <== states[i][4]; and[4][i].b <== eq[5][i].out; and[5][i] = AND(); - and[5][i].a <== states[i][4]; + and[5][i].a <== states[i][8]; and[5][i].b <== eq[5][i].out; multi_or[1][i] = MultiOR(2); multi_or[1][i].in[0] <== and[4][i].out; @@ -90,19 +90,16 @@ template SimpleRegex(msg_bytes) { and[7][i] = AND(); and[7][i].a <== states[i][7]; multi_or[2][i] = MultiOR(2); - multi_or[2][i].in[0] <== eq[6][i].out; - multi_or[2][i].in[1] <== eq[3][i].out; + multi_or[2][i].in[0] <== eq[2][i].out; + multi_or[2][i].in[1] <== eq[6][i].out; and[7][i].b <== multi_or[2][i].out; and[8][i] = AND(); and[8][i].a <== states[i][6]; + and[8][i].b <== multi_or[2][i].out; multi_or[3][i] = MultiOR(2); - multi_or[3][i].in[0] <== eq[3][i].out; - multi_or[3][i].in[1] <== eq[6][i].out; - and[8][i].b <== multi_or[3][i].out; - multi_or[4][i] = MultiOR(2); - multi_or[4][i].in[0] <== and[7][i].out; - multi_or[4][i].in[1] <== and[8][i].out; - states[i+1][7] <== multi_or[4][i].out; + multi_or[3][i].in[0] <== and[7][i].out; + multi_or[3][i].in[1] <== and[8][i].out; + states[i+1][7] <== multi_or[3][i].out; state_changed[i].in[6] <== states[i+1][7]; and[9][i] = AND(); and[9][i].a <== states[i][7]; @@ -131,7 +128,7 @@ 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)}] + // substrings calculated: [{(2, 3)}, {(7, 7), (6, 7)}, {(8, 9)}] signal is_substr0[msg_bytes][2]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/tests/circuits/simple_regex_decomposed.circom b/packages/circom/tests/circuits/simple_regex_decomposed.circom index 2c951cf..1db257f 100644 --- a/packages/circom/tests/circuits/simple_regex_decomposed.circom +++ b/packages/circom/tests/circuits/simple_regex_decomposed.circom @@ -195,37 +195,37 @@ template SimpleRegexDecomposed(msg_bytes) { and[22][i].b <== lt[3][i].out; eq[14][i] = IsEqual(); eq[14][i].in[0] <== in[i]; - eq[14][i].in[1] <== 48; + eq[14][i].in[1] <== 51; eq[15][i] = IsEqual(); eq[15][i].in[0] <== in[i]; - eq[15][i].in[1] <== 95; + eq[15][i].in[1] <== 49; eq[16][i] = IsEqual(); eq[16][i].in[0] <== in[i]; - eq[16][i].in[1] <== 57; + eq[16][i].in[1] <== 52; eq[17][i] = IsEqual(); eq[17][i].in[0] <== in[i]; - eq[17][i].in[1] <== 51; + eq[17][i].in[1] <== 54; eq[18][i] = IsEqual(); eq[18][i].in[0] <== in[i]; - eq[18][i].in[1] <== 52; + eq[18][i].in[1] <== 50; eq[19][i] = IsEqual(); eq[19][i].in[0] <== in[i]; - eq[19][i].in[1] <== 54; + eq[19][i].in[1] <== 55; eq[20][i] = IsEqual(); eq[20][i].in[0] <== in[i]; - eq[20][i].in[1] <== 55; + eq[20][i].in[1] <== 53; eq[21][i] = IsEqual(); eq[21][i].in[0] <== in[i]; - eq[21][i].in[1] <== 50; + eq[21][i].in[1] <== 56; eq[22][i] = IsEqual(); eq[22][i].in[0] <== in[i]; - eq[22][i].in[1] <== 49; + eq[22][i].in[1] <== 95; eq[23][i] = IsEqual(); eq[23][i].in[0] <== in[i]; - eq[23][i].in[1] <== 53; + eq[23][i].in[1] <== 57; eq[24][i] = IsEqual(); eq[24][i].in[0] <== in[i]; - eq[24][i].in[1] <== 56; + eq[24][i].in[1] <== 48; and[23][i] = AND(); and[23][i].a <== states[i][21]; multi_or[0][i] = MultiOR(13); @@ -248,17 +248,17 @@ template SimpleRegexDecomposed(msg_bytes) { multi_or[1][i] = MultiOR(13); multi_or[1][i].in[0] <== and[21][i].out; multi_or[1][i].in[1] <== and[22][i].out; - multi_or[1][i].in[2] <== eq[15][i].out; - multi_or[1][i].in[3] <== eq[23][i].out; - multi_or[1][i].in[4] <== eq[20][i].out; - multi_or[1][i].in[5] <== eq[19][i].out; - multi_or[1][i].in[6] <== eq[17][i].out; - multi_or[1][i].in[7] <== eq[18][i].out; - multi_or[1][i].in[8] <== eq[16][i].out; - multi_or[1][i].in[9] <== eq[24][i].out; - multi_or[1][i].in[10] <== eq[14][i].out; - multi_or[1][i].in[11] <== eq[22][i].out; - multi_or[1][i].in[12] <== eq[21][i].out; + multi_or[1][i].in[2] <== eq[24][i].out; + multi_or[1][i].in[3] <== eq[14][i].out; + multi_or[1][i].in[4] <== eq[17][i].out; + multi_or[1][i].in[5] <== eq[22][i].out; + multi_or[1][i].in[6] <== eq[21][i].out; + multi_or[1][i].in[7] <== eq[19][i].out; + multi_or[1][i].in[8] <== eq[23][i].out; + multi_or[1][i].in[9] <== eq[15][i].out; + multi_or[1][i].in[10] <== eq[16][i].out; + multi_or[1][i].in[11] <== eq[20][i].out; + multi_or[1][i].in[12] <== eq[18][i].out; and[24][i].b <== multi_or[1][i].out; multi_or[2][i] = MultiOR(2); multi_or[2][i].in[0] <== and[23][i].out; @@ -287,7 +287,7 @@ template SimpleRegexDecomposed(msg_bytes) { is_consecutive[msg_bytes-1-i][0] <== states[num_bytes-i][23] * (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: [{(21, 22), (22, 22)}] + // substrings calculated: [{(22, 22), (21, 22)}] signal is_substr0[msg_bytes][3]; signal is_reveal0[msg_bytes]; signal output reveal0[msg_bytes]; diff --git a/packages/circom/tests/circuits/test_international_chars_decomposed.circom b/packages/circom/tests/circuits/test_international_chars_decomposed.circom new file mode 100644 index 0000000..ba2ef02 --- /dev/null +++ b/packages/circom/tests/circuits/test_international_chars_decomposed.circom @@ -0,0 +1,5 @@ +pragma circom 2.1.5; + +include "./international_chars_decomposed.circom"; +// email was meant for @[a-zA-Z0-9_]+\. +component main = InternationalCharsDecomposed(128); \ No newline at end of file diff --git a/packages/circom/tests/email_addr.test.ts b/packages/circom/tests/email_addr.test.js similarity index 100% rename from packages/circom/tests/email_addr.test.ts rename to packages/circom/tests/email_addr.test.js diff --git a/packages/circom/tests/email_domain.test.ts b/packages/circom/tests/email_domain.test.js similarity index 100% rename from packages/circom/tests/email_domain.test.ts rename to packages/circom/tests/email_domain.test.js diff --git a/packages/circom/tests/from_addr.test.ts b/packages/circom/tests/from_addr.test.js similarity index 99% rename from packages/circom/tests/from_addr.test.ts rename to packages/circom/tests/from_addr.test.js index 95ffe99..f4f240f 100644 --- a/packages/circom/tests/from_addr.test.ts +++ b/packages/circom/tests/from_addr.test.js @@ -7,7 +7,7 @@ const option = { }; const compiler = require("../../compiler"); -jest.setTimeout(240000); +jest.setTimeout(600000); describe("From Addr Regex", () => { let circuit; beforeAll(async () => { diff --git a/packages/circom/tests/international_chars.test.js b/packages/circom/tests/international_chars.test.js new file mode 100644 index 0000000..f0bb5ba --- /dev/null +++ b/packages/circom/tests/international_chars.test.js @@ -0,0 +1,64 @@ +const circom_tester = require("circom_tester"); +const wasm_tester = circom_tester.wasm; +import * as path from "path"; +const apis = require("../../apis"); +const option = { + include: path.join(__dirname, "../../../node_modules"), +}; +const compiler = require("../../compiler"); + +jest.setTimeout(300000); +describe("Simple Regex Decomposed", () => { + let circuit; + beforeAll(async () => { + compiler.genFromDecomposed( + path.join(__dirname, "./circuits/international_chars_decomposed.json"), + { + circomFilePath: path.join( + __dirname, + "./circuits/international_chars_decomposed.circom" + ), + templateName: "InternationalCharsDecomposed", + genSubstrs: true, + } + ); + circuit = await wasm_tester( + path.join( + __dirname, + "./circuits/test_international_chars_decomposed.circom" + ), + option + ); + }); + + it("case 1", async () => { + const input = + "Latin-Extension=Ʃƣƙ Greek=ϕω Cyrillic=иЩ Arabic=أبت Devanagari=आदित्य Hiragana&Katakana=なツ"; + const paddedStr = apis.padString(input, 128); + const circuitInputs = { + msg: paddedStr, + }; + const witness = await circuit.calculateWitness(circuitInputs); + await circuit.checkConstraints(witness); + expect(1n).toEqual(witness[1]); + const revealedIdx = [ + [16, 17, 18, 19, 20, 21], + [29, 30, 31, 32], + [43, 44, 45, 46], + [55, 56, 57, 58, 59, 60, 61, 62], + [75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92], + [112, 113, 114, 115, 116, 117], + ]; + for (let substr_idx = 0; substr_idx < 6; ++substr_idx) { + for (let idx = 0; idx < 128; ++idx) { + if (revealedIdx[substr_idx].includes(idx)) { + expect(BigInt(paddedStr[idx])).toEqual( + witness[2 + 128 * substr_idx + idx] + ); + } else { + expect(0n).toEqual(witness[2 + 128 * substr_idx + idx]); + } + } + } + }); +}); diff --git a/packages/circom/tests/message_id_regex.test.ts b/packages/circom/tests/message_id_regex.test.js similarity index 100% rename from packages/circom/tests/message_id_regex.test.ts rename to packages/circom/tests/message_id_regex.test.js diff --git a/packages/circom/tests/negate_regex.test.ts b/packages/circom/tests/negate_regex.test.js similarity index 100% rename from packages/circom/tests/negate_regex.test.ts rename to packages/circom/tests/negate_regex.test.js diff --git a/packages/circom/tests/simple_regex.test.ts b/packages/circom/tests/simple_regex.test.js similarity index 100% rename from packages/circom/tests/simple_regex.test.ts rename to packages/circom/tests/simple_regex.test.js diff --git a/packages/circom/tests/simple_regex_decomposed.test.ts b/packages/circom/tests/simple_regex_decomposed.test.js similarity index 100% rename from packages/circom/tests/simple_regex_decomposed.test.ts rename to packages/circom/tests/simple_regex_decomposed.test.js diff --git a/packages/circom/tests/subject_all.test.ts b/packages/circom/tests/subject_all.test.js similarity index 100% rename from packages/circom/tests/subject_all.test.ts rename to packages/circom/tests/subject_all.test.js diff --git a/packages/circom/tests/timestamp.test.ts b/packages/circom/tests/timestamp.test.js similarity index 99% rename from packages/circom/tests/timestamp.test.ts rename to packages/circom/tests/timestamp.test.js index bf8acfe..59c0e96 100644 --- a/packages/circom/tests/timestamp.test.ts +++ b/packages/circom/tests/timestamp.test.js @@ -7,7 +7,7 @@ const option = { }; const compiler = require("../../compiler"); -jest.setTimeout(120000); +jest.setTimeout(600000); describe("Timestamp Regex", () => { let circuit; beforeAll(async () => { diff --git a/packages/circom/tests/to_addr.test.ts b/packages/circom/tests/to_addr.test.js similarity index 99% rename from packages/circom/tests/to_addr.test.ts rename to packages/circom/tests/to_addr.test.js index e9e068c..79c01f9 100644 --- a/packages/circom/tests/to_addr.test.ts +++ b/packages/circom/tests/to_addr.test.js @@ -7,7 +7,7 @@ const option = { }; const compiler = require("../../compiler"); -jest.setTimeout(240000); +jest.setTimeout(600000); describe("To Addr Regex", () => { let circuit; beforeAll(async () => { diff --git a/packages/compiler/Cargo.toml b/packages/compiler/Cargo.toml index d3976eb..027c083 100644 --- a/packages/compiler/Cargo.toml +++ b/packages/compiler/Cargo.toml @@ -28,7 +28,6 @@ graph-cycles = "0.1.0" thiserror = "1.0.40" serde_json = "1.0.95" serde = { version = "1.0.159", features = ["derive"] } -js-sandbox = { version = "0.2.0-rc.2", git = "https://github.com/Bromeon/js-sandbox.git", tag = "0.2.0-rc.2" } itertools = "0.10.3" clap = { version = "=4.2.1", features = ["derive"] } ahash = "=0.8.7" diff --git a/packages/compiler/src/lib.rs b/packages/compiler/src/lib.rs index c89da46..eb48699 100644 --- a/packages/compiler/src/lib.rs +++ b/packages/compiler/src/lib.rs @@ -12,7 +12,6 @@ use crate::node::*; use crate::regex::*; use neon; -use fancy_regex::Regex; use itertools::Itertools; use petgraph::prelude::*; use serde::{Deserialize, Serialize}; @@ -218,15 +217,15 @@ pub(crate) fn get_accepted_state(dfa_val: &DFAGraph) -> Option { None } -pub(crate) fn get_max_state(dfa_val: &DFAGraph) -> usize { - let mut max_state = 0; - for (_i, val) in dfa_val.states.iter().enumerate() { - if val.state > max_state { - max_state = val.state; - } - } - max_state -} +// pub(crate) fn get_max_state(dfa_val: &DFAGraph) -> usize { +// let mut max_state = 0; +// for (_i, val) in dfa_val.states.iter().enumerate() { +// if val.state > max_state { +// max_state = val.state; +// } +// } +// max_state +// } #[cfg(feature = "export_neon_main")] #[neon::main] @@ -243,18 +242,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 decomposed_regex_path = Path::new("../circom/circuits/common/subject_all.json"); + let circom_file_path = Some("../circom/circuits/common/subject_all_regex.circom"); let circom_template_name = Some("SubjectAllRegex"); let gen_substrs = Some(true); - let result = gen_from_decomposed( + let _result = gen_from_decomposed( decomposed_regex_path.to_str().unwrap(), circom_file_path.map(|s| s), circom_template_name.map(|s| s), gen_substrs, ); - - // assert!(result.is_ok()); } } diff --git a/packages/compiler/src/tests/regex_to_dfa.rs b/packages/compiler/src/tests/regex_to_dfa.rs index 95ddf8b..b2b55ac 100644 --- a/packages/compiler/src/tests/regex_to_dfa.rs +++ b/packages/compiler/src/tests/regex_to_dfa.rs @@ -1,86 +1,94 @@ -use crate::js_caller::{JsCallerError, regex_to_dfa}; +// use crate::js_caller::{regex_to_dfa, JsCallerError}; -#[test] -fn test_regex_to_dfa_case_1() { - let regex = "[a-z]+"; - let dfa = regex_to_dfa(regex).unwrap(); - assert_eq!(serde_json::to_string_pretty(&dfa).unwrap(), r#"[ - { - "type": "", - "edges": { - "[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\"]": 1 - } - }, - { - "type": "accept", - "edges": { - "[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\"]": 1 - } - } -]"#); -} +// #[cfg(test)] +// fn test_regex_to_dfa_case_1() { +// let regex = "[a-z]+"; +// let dfa = regex_to_dfa(regex).unwrap(); +// assert_eq!( +// serde_json::to_string_pretty(&dfa).unwrap(), +// r#"[ +// { +// "type": "", +// "edges": { +// "[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\"]": 1 +// } +// }, +// { +// "type": "accept", +// "edges": { +// "[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\"]": 1 +// } +// } +// ]"# +// ); +// } -#[test] -fn test_regex_to_dfa_case_2() { - let regex = "[a-z0-9]+"; - let dfa = regex_to_dfa(regex).unwrap(); - assert_eq!(serde_json::to_string_pretty(&dfa).unwrap(), r#"[ - { - "type": "", - "edges": { - "[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\"]": 1 - } - }, - { - "type": "accept", - "edges": { - "[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\"]": 1 - } - } -]"#); -} +// #[test] +// fn test_regex_to_dfa_case_2() { +// let regex = "[a-z0-9]+"; +// let dfa = regex_to_dfa(regex).unwrap(); +// assert_eq!( +// serde_json::to_string_pretty(&dfa).unwrap(), +// r#"[ +// { +// "type": "", +// "edges": { +// "[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\"]": 1 +// } +// }, +// { +// "type": "accept", +// "edges": { +// "[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\"]": 1 +// } +// } +// ]"# +// ); +// } -#[test] -fn test_regex_to_dfa_case_3() { - - let regex = "[a-z0-9]+@[a-z0-9]+\r\n"; - let dfa = regex_to_dfa(regex).unwrap(); - assert_eq!(serde_json::to_string_pretty(&dfa).unwrap(), r#"[ - { - "type": "", - "edges": { - "[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\"]": 1 - } - }, - { - "type": "", - "edges": { - "[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\"]": 1, - "[\"@\"]": 2 - } - }, - { - "type": "", - "edges": { - "[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\"]": 3 - } - }, - { - "type": "", - "edges": { - "[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\"]": 3, - "[\"\\r\"]": 4 - } - }, - { - "type": "", - "edges": { - "[\"\\n\"]": 5 - } - }, - { - "type": "accept", - "edges": {} - } -]"#); -} \ No newline at end of file +// #[test] +// fn test_regex_to_dfa_case_3() { +// let regex = "[a-z0-9]+@[a-z0-9]+\r\n"; +// let dfa = regex_to_dfa(regex).unwrap(); +// assert_eq!( +// serde_json::to_string_pretty(&dfa).unwrap(), +// r#"[ +// { +// "type": "", +// "edges": { +// "[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\"]": 1 +// } +// }, +// { +// "type": "", +// "edges": { +// "[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\"]": 1, +// "[\"@\"]": 2 +// } +// }, +// { +// "type": "", +// "edges": { +// "[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\"]": 3 +// } +// }, +// { +// "type": "", +// "edges": { +// "[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\"]": 3, +// "[\"\\r\"]": 4 +// } +// }, +// { +// "type": "", +// "edges": { +// "[\"\\n\"]": 5 +// } +// }, +// { +// "type": "accept", +// "edges": {} +// } +// ]"# +// ); +// } diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 2955be6..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -// Visit https://aka.ms/tsconfig.json for all config options -{ - "compilerOptions": { - "target": "ES2021", - "module": "commonjs", - "strict": true, - "resolveJsonModule": true, - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true - }, - "include": [ - "./scripts", - "./test", - "./packages/compiler/src" - ] -} \ No newline at end of file