diff --git a/Cargo.lock b/Cargo.lock index 12e7b3ae..d2bb3b03 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -78,6 +78,15 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + [[package]] name = "anstream" version = "0.6.18" @@ -140,13 +149,24 @@ version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec 0.4.2", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + [[package]] name = "ark-bn254" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" dependencies = [ - "ark-ec", + "ark-ec 0.5.0", "ark-ff 0.5.0", "ark-r1cs-std", "ark-std 0.5.0", @@ -158,12 +178,12 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ebc2533f01222bf1ea7158ff32cb90102824f1e3b2c74415194ebfead6d2f34" dependencies = [ - "ark-bn254", + "ark-bn254 0.5.0", "ark-crypto-primitives", - "ark-ec", + "ark-ec 0.5.0", "ark-ff 0.5.0", "ark-groth16", - "ark-poly", + "ark-poly 0.5.0", "ark-relations", "ark-serialize 0.5.0", "ark-std 0.5.0", @@ -189,7 +209,7 @@ checksum = "1e0c292754729c8a190e50414fd1a37093c786c709899f29c9f7daccecfa855e" dependencies = [ "ahash 0.8.11", "ark-crypto-primitives-macros", - "ark-ec", + "ark-ec 0.5.0", "ark-ff 0.5.0", "ark-relations", "ark-serialize 0.5.0", @@ -215,6 +235,23 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff 0.4.2", + "ark-poly 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "zeroize", +] + [[package]] name = "ark-ec" version = "0.5.0" @@ -223,7 +260,7 @@ checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" dependencies = [ "ahash 0.8.11", "ark-ff 0.5.0", - "ark-poly", + "ark-poly 0.5.0", "ark-serialize 0.5.0", "ark-std 0.5.0", "educe", @@ -371,15 +408,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88f1d0f3a534bb54188b8dcc104307db6c56cdae574ddc3212aec0625740fc7e" dependencies = [ "ark-crypto-primitives", - "ark-ec", + "ark-ec 0.5.0", "ark-ff 0.5.0", - "ark-poly", + "ark-poly 0.5.0", "ark-relations", "ark-serialize 0.5.0", "ark-std 0.5.0", "rayon", ] +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", +] + [[package]] name = "ark-poly" version = "0.5.0" @@ -402,7 +452,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "941551ef1df4c7a401de7068758db6503598e6f01850bdb2cfdb614a1f9dbea1" dependencies = [ - "ark-ec", + "ark-ec 0.5.0", "ark-ff 0.5.0", "ark-relations", "ark-std 0.5.0", @@ -441,6 +491,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ + "ark-serialize-derive 0.4.2", "ark-std 0.4.0", "digest 0.10.7", "num-bigint", @@ -452,7 +503,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" dependencies = [ - "ark-serialize-derive", + "ark-serialize-derive 0.5.0", "ark-std 0.5.0", "arrayvec", "digest 0.10.7", @@ -460,6 +511,17 @@ dependencies = [ "rayon", ] +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-serialize-derive" version = "0.5.0" @@ -490,7 +552,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -500,7 +562,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -510,7 +572,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", "rayon", ] @@ -526,6 +588,15 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" +[[package]] +name = "ascii-canvas" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" +dependencies = [ + "term", +] + [[package]] name = "async-trait" version = "0.1.87" @@ -568,6 +639,15 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "autocfg" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" +dependencies = [ + "autocfg 1.4.0", +] + [[package]] name = "autocfg" version = "1.4.0" @@ -616,6 +696,41 @@ dependencies = [ "serde", ] +[[package]] +name = "bindgen" +version = "0.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" +dependencies = [ + "bitflags 2.9.0", + "cexpr", + "clang-sys", + "itertools 0.10.5", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn 2.0.100", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + [[package]] name = "bitflags" version = "1.3.2" @@ -754,6 +869,15 @@ dependencies = [ "shlex", ] +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -802,6 +926,56 @@ dependencies = [ "half", ] +[[package]] +name = "circom_algebra" +version = "2.1.4" +source = "git+https://github.com/olomix/circom.git?branch=master#22de6cb3200ed673c53201d9007ecdf21013783a" +dependencies = [ + "constant_tracking", + "num-bigint-dig", + "num-traits", +] + +[[package]] +name = "circom_witnesscalc" +version = "0.2.0" +source = "git+https://github.com/iden3/circom-witnesscalc?rev=5cb365b6e4d9052ecc69d4567fcf5bc061c20e94#5cb365b6e4d9052ecc69d4567fcf5bc061c20e94" +dependencies = [ + "ark-bn254 0.4.0", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "bindgen", + "byteorder", + "code_producers", + "compiler", + "constraint_generation", + "hex", + "lazy_static", + "libc", + "num-bigint", + "parser", + "program_structure", + "prost", + "prost-build", + "rand 0.8.5", + "ruint", + "serde", + "serde_json", + "type_analysis", + "wtns-file", +] + +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "clap" version = "3.2.25" @@ -863,6 +1037,36 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +[[package]] +name = "code_producers" +version = "2.1.9" +source = "git+https://github.com/olomix/circom.git?branch=master#22de6cb3200ed673c53201d9007ecdf21013783a" +dependencies = [ + "handlebars", + "lz_fnv", + "num-bigint-dig", + "serde_json", +] + +[[package]] +name = "codespan" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ebaf6bb6a863ad6aa3a18729e9710c53d75df03306714d9cc1f7357a00cd789" +dependencies = [ + "codespan-reporting", +] + +[[package]] +name = "codespan-reporting" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e0762455306b1ed42bc651ef6a2197aabda5e1d4a43c34d5eab5c1a3634e81d" +dependencies = [ + "termcolor", + "unicode-width", +] + [[package]] name = "color-eyre" version = "0.6.3" @@ -896,6 +1100,18 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +[[package]] +name = "compiler" +version = "2.1.9" +source = "git+https://github.com/olomix/circom.git?branch=master#22de6cb3200ed673c53201d9007ecdf21013783a" +dependencies = [ + "code_producers", + "constant_tracking", + "num-bigint-dig", + "num-traits", + "program_structure", +] + [[package]] name = "const-hex" version = "1.14.0" @@ -941,6 +1157,49 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +[[package]] +name = "constant_tracking" +version = "2.0.0" +source = "git+https://github.com/olomix/circom.git?branch=master#22de6cb3200ed673c53201d9007ecdf21013783a" + +[[package]] +name = "constraint_generation" +version = "2.1.9" +source = "git+https://github.com/olomix/circom.git?branch=master#22de6cb3200ed673c53201d9007ecdf21013783a" +dependencies = [ + "ansi_term", + "circom_algebra", + "compiler", + "constraint_list", + "constraint_writers", + "dag", + "num-bigint-dig", + "num-traits", + "program_structure", +] + +[[package]] +name = "constraint_list" +version = "2.1.8" +source = "git+https://github.com/olomix/circom.git?branch=master#22de6cb3200ed673c53201d9007ecdf21013783a" +dependencies = [ + "circom_algebra", + "constraint_writers", + "json", + "num_cpus", + "program_structure", + "threadpool", +] + +[[package]] +name = "constraint_writers" +version = "2.1.8" +source = "git+https://github.com/olomix/circom.git?branch=master#22de6cb3200ed673c53201d9007ecdf21013783a" +dependencies = [ + "circom_algebra", + "json", +] + [[package]] name = "cooked-waker" version = "5.0.0" @@ -969,7 +1228,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80128832c58ea9cbd041d2a759ec449224487b2c1e400453d99d244eead87a8e" dependencies = [ - "autocfg", + "autocfg 1.4.0", "cfg-if", "libc", "scopeguard", @@ -1175,7 +1434,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", - "rand_core", + "rand_core 0.6.4", "subtle", "zeroize", ] @@ -1190,6 +1449,18 @@ dependencies = [ "typenum", ] +[[package]] +name = "dag" +version = "2.1.8" +source = "git+https://github.com/olomix/circom.git?branch=master#22de6cb3200ed673c53201d9007ecdf21013783a" +dependencies = [ + "circom_algebra", + "constraint_list", + "constraint_writers", + "json", + "program_structure", +] + [[package]] name = "darling" version = "0.14.4" @@ -1354,6 +1625,12 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + [[package]] name = "digest" version = "0.9.0" @@ -1375,6 +1652,27 @@ dependencies = [ "subtle", ] +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -1452,12 +1750,21 @@ dependencies = [ "generic-array", "group", "pkcs8", - "rand_core", + "rand_core 0.6.4", "sec1", "subtle", "zeroize", ] +[[package]] +name = "ena" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" +dependencies = [ + "log", +] + [[package]] name = "enum-iterator" version = "0.7.0" @@ -1599,7 +1906,7 @@ dependencies = [ "k256", "num_enum 0.7.3", "open-fastrlp", - "rand", + "rand 0.8.5", "rlp", "serde", "serde_json", @@ -1660,7 +1967,7 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -1683,7 +1990,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ "byteorder", - "rand", + "rand 0.8.5", "rustc-hex", "static_assertions", ] @@ -1865,6 +2172,17 @@ dependencies = [ "zeroize", ] +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + [[package]] name = "getrandom" version = "0.2.15" @@ -1907,6 +2225,12 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +[[package]] +name = "glob" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + [[package]] name = "globset" version = "0.4.16" @@ -1917,7 +2241,7 @@ dependencies = [ "bstr", "log", "regex-automata", - "regex-syntax", + "regex-syntax 0.8.5", ] [[package]] @@ -1927,7 +2251,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -1941,6 +2265,20 @@ dependencies = [ "crunchy", ] +[[package]] +name = "handlebars" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" +dependencies = [ + "log", + "pest", + "pest_derive", + "serde", + "serde_json", + "thiserror 1.0.69", +] + [[package]] name = "hash32" version = "0.2.1" @@ -1959,6 +2297,15 @@ dependencies = [ "ahash 0.7.8", ] +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.11", +] + [[package]] name = "hashbrown" version = "0.14.5" @@ -2017,6 +2364,12 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hermit-abi" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e" + [[package]] name = "hex" version = "0.4.3" @@ -2367,7 +2720,7 @@ version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ - "autocfg", + "autocfg 1.4.0", "hashbrown 0.12.3", "serde", ] @@ -2398,6 +2751,17 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +[[package]] +name = "is-terminal" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +dependencies = [ + "hermit-abi 0.5.0", + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -2447,6 +2811,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "json" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "078e285eafdfb6c4b434e0d31e8cfcb5115b651496faca5749b88fafd4f23bfd" + [[package]] name = "k256" version = "0.13.4" @@ -2469,11 +2839,45 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "lalrpop" +version = "0.19.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a1cbf952127589f2851ab2046af368fd20645491bb4b376f04b7f94d7a9837b" +dependencies = [ + "ascii-canvas", + "bit-set", + "diff", + "ena", + "is-terminal", + "itertools 0.10.5", + "lalrpop-util", + "petgraph", + "regex", + "regex-syntax 0.6.29", + "string_cache", + "term", + "tiny-keccak", + "unicode-xid", +] + +[[package]] +name = "lalrpop-util" +version = "0.19.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3c48237b9604c5a4702de6b824e02006c3214327564636aef27c1028a8fa0ed" +dependencies = [ + "regex", +] + [[package]] name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] [[package]] name = "leb128" @@ -2496,6 +2900,16 @@ version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +[[package]] +name = "libloading" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +dependencies = [ + "cfg-if", + "windows-targets 0.48.5", +] + [[package]] name = "libm" version = "0.2.11" @@ -2558,7 +2972,7 @@ version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ - "autocfg", + "autocfg 1.4.0", "scopeguard", ] @@ -2577,6 +2991,12 @@ dependencies = [ "twox-hash", ] +[[package]] +name = "lz_fnv" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bbb1b0dbe51f0976eaa466f4e0bdc11856fe8008aee26f30ccec8de15b28e38" + [[package]] name = "mach2" version = "0.4.2" @@ -2613,7 +3033,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ - "autocfg", + "autocfg 1.4.0", ] [[package]] @@ -2624,7 +3044,7 @@ checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" dependencies = [ "byteorder", "keccak", - "rand_core", + "rand_core 0.6.4", "zeroize", ] @@ -2634,6 +3054,12 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "miniz_oxide" version = "0.7.4" @@ -2670,6 +3096,12 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" +[[package]] +name = "multimap" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" + [[package]] name = "native-tls" version = "0.2.14" @@ -2687,6 +3119,22 @@ dependencies = [ "tempfile", ] +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "num" version = "0.4.3" @@ -2709,7 +3157,25 @@ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", - "rand", + "rand 0.8.5", +] + +[[package]] +name = "num-bigint-dig" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d51546d704f52ef14b3c962b5776e53d5b862e5790e40a350d366c209bd7f7a" +dependencies = [ + "autocfg 0.1.8", + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.7.3", + "serde", + "smallvec", ] [[package]] @@ -2742,7 +3208,7 @@ version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ - "autocfg", + "autocfg 1.4.0", "num-integer", "num-traits", ] @@ -2764,7 +3230,7 @@ version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "autocfg", + "autocfg 1.4.0", "libm", ] @@ -2961,6 +3427,16 @@ dependencies = [ "parking_lot_core 0.8.6", ] +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.10", +] + [[package]] name = "parking_lot_core" version = "0.8.6" @@ -2988,6 +3464,22 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "parser" +version = "2.1.9" +source = "git+https://github.com/olomix/circom.git?branch=master#22de6cb3200ed673c53201d9007ecdf21013783a" +dependencies = [ + "lalrpop", + "lalrpop-util", + "num-bigint-dig", + "num-traits", + "program_structure", + "regex", + "rustc-hex", + "serde", + "serde_derive", +] + [[package]] name = "paste" version = "1.0.15" @@ -3017,6 +3509,40 @@ dependencies = [ "ucd-trie", ] +[[package]] +name = "pest_derive" +version = "2.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "pest_meta" +version = "2.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea" +dependencies = [ + "once_cell", + "pest", + "sha2", +] + [[package]] name = "petgraph" version = "0.6.5" @@ -3027,6 +3553,15 @@ dependencies = [ "indexmap 2.8.0", ] +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher", +] + [[package]] name = "pin-project" version = "1.1.10" @@ -3118,6 +3653,22 @@ dependencies = [ "zerocopy 0.8.23", ] +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "prettyplease" +version = "0.2.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5316f57387668042f561aae71480de936257848f9c43ce528e311d89a07cadeb" +dependencies = [ + "proc-macro2", + "syn 2.0.100", +] + [[package]] name = "primitive-types" version = "0.12.2" @@ -3184,6 +3735,21 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "program_structure" +version = "2.1.9" +source = "git+https://github.com/olomix/circom.git?branch=master#22de6cb3200ed673c53201d9007ecdf21013783a" +dependencies = [ + "codespan", + "codespan-reporting", + "num-bigint-dig", + "num-traits", + "regex", + "rustc-hex", + "serde", + "serde_derive", +] + [[package]] name = "proptest" version = "1.6.0" @@ -3193,10 +3759,10 @@ dependencies = [ "bitflags 2.9.0", "lazy_static", "num-traits", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "rand_xorshift", - "regex-syntax", + "regex-syntax 0.8.5", "unarray", ] @@ -3210,6 +3776,26 @@ dependencies = [ "prost-derive", ] +[[package]] +name = "prost-build" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" +dependencies = [ + "heck 0.5.0", + "itertools 0.10.5", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease", + "prost", + "prost-types", + "regex", + "syn 2.0.100", + "tempfile", +] + [[package]] name = "prost-derive" version = "0.13.5" @@ -3223,6 +3809,15 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "prost-types" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" +dependencies = [ + "prost", +] + [[package]] name = "ptr_meta" version = "0.1.4" @@ -3264,7 +3859,7 @@ dependencies = [ "pin-project-lite", "quinn-proto", "quinn-udp", - "rustc-hash", + "rustc-hash 2.1.1", "rustls", "socket2", "thiserror 2.0.12", @@ -3280,9 +3875,9 @@ checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", "getrandom 0.2.15", - "rand", + "rand 0.8.5", "ring", - "rustc-hash", + "rustc-hash 2.1.1", "rustls", "rustls-pki-types", "slab", @@ -3321,6 +3916,19 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + [[package]] name = "rand" version = "0.8.5" @@ -3328,8 +3936,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", ] [[package]] @@ -3339,7 +3957,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", ] [[package]] @@ -3351,13 +3978,22 @@ dependencies = [ "getrandom 0.2.15", ] +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + [[package]] name = "rand_xorshift" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" dependencies = [ - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -3398,6 +4034,17 @@ dependencies = [ "bitflags 2.9.0", ] +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror 1.0.69", +] + [[package]] name = "regalloc2" version = "0.5.1" @@ -3419,7 +4066,7 @@ dependencies = [ "aho-corasick", "memchr", "regex-automata", - "regex-syntax", + "regex-syntax 0.8.5", ] [[package]] @@ -3430,9 +4077,15 @@ checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.5", ] +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + [[package]] name = "regex-syntax" version = "0.8.5" @@ -3574,9 +4227,9 @@ dependencies = [ name = "rln" version = "0.7.0" dependencies = [ - "ark-bn254", + "ark-bn254 0.5.0", "ark-circom", - "ark-ec", + "ark-ec 0.5.0", "ark-ff 0.5.0", "ark-groth16", "ark-r1cs-std", @@ -3585,6 +4238,7 @@ dependencies = [ "ark-std 0.5.0", "byteorder", "cfg-if", + "circom_witnesscalc", "color-eyre", "criterion", "document-features", @@ -3593,8 +4247,8 @@ dependencies = [ "num-traits", "once_cell", "prost", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "ruint", "serde", "serde_json", @@ -3657,7 +4311,7 @@ dependencies = [ "parity-scale-codec", "primitive-types", "proptest", - "rand", + "rand 0.8.5", "rlp", "ruint-macro", "serde", @@ -3677,6 +4331,12 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc-hash" version = "2.1.1" @@ -4100,7 +4760,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -4109,13 +4769,19 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + [[package]] name = "slab" version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ - "autocfg", + "autocfg 1.4.0", ] [[package]] @@ -4131,7 +4797,7 @@ dependencies = [ "fxhash", "libc", "log", - "parking_lot", + "parking_lot 0.11.2", ] [[package]] @@ -4198,6 +4864,18 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "string_cache" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" +dependencies = [ + "new_debug_unreachable", + "parking_lot 0.12.3", + "phf_shared", + "precomputed-hash", +] + [[package]] name = "strsim" version = "0.10.0" @@ -4316,6 +4994,26 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "term" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +dependencies = [ + "dirs-next", + "rustversion", + "winapi", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + [[package]] name = "terminal_size" version = "0.3.0" @@ -4391,6 +5089,15 @@ dependencies = [ "once_cell", ] +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + [[package]] name = "time" version = "0.3.39" @@ -4702,6 +5409,16 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "type_analysis" +version = "2.1.9" +source = "git+https://github.com/olomix/circom.git?branch=master#22de6cb3200ed673c53201d9007ecdf21013783a" +dependencies = [ + "num-bigint-dig", + "num-traits", + "program_structure", +] + [[package]] name = "typenum" version = "1.18.0" @@ -5016,6 +5733,12 @@ dependencies = [ "try-lock", ] +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -5365,7 +6088,7 @@ dependencies = [ "petgraph", "pin-project", "pin-utils", - "rand", + "rand 0.8.5", "reqwest", "rkyv", "rusty_pool", @@ -5497,7 +6220,7 @@ dependencies = [ "libc", "once_cell", "path-clean", - "rand", + "rand 0.8.5", "semver 1.0.26", "serde", "serde_json", @@ -5886,6 +6609,15 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +[[package]] +name = "wtns-file" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3b856452298f68a5879e3901918bac5d753ca9fa4be8a983a37a3d25dabf0a" +dependencies = [ + "byteorder", +] + [[package]] name = "wyz" version = "0.5.1" @@ -6020,7 +6752,7 @@ dependencies = [ name = "zerokit_utils" version = "0.5.2" dependencies = [ - "ark-bn254", + "ark-bn254 0.5.0", "ark-ff 0.5.0", "color-eyre", "criterion", diff --git a/rln/Cargo.toml b/rln/Cargo.toml index 15d93f1a..33bfd7cf 100644 --- a/rln/Cargo.toml +++ b/rln/Cargo.toml @@ -30,6 +30,19 @@ ark-relations = { version = "0.5.0", default-features = false, features = [ ] } ark-circom = { version = "0.5.0" } ark-r1cs-std = { version = "0.5.0" } +# circom-witnesscalc = { git = "https://github.com/iden3/circom-witnesscalc", branch = "main" } +# Dec 8, 2024 (Note: name is circom_XX and not circom-X in this git rev id) +circom_witnesscalc = { git = "https://github.com/iden3/circom-witnesscalc", rev = "5cb365b6e4d9052ecc69d4567fcf5bc061c20e94" } +# Dec 16, 2024 +# circom_witnesscalc = { git = "https://github.com/iden3/circom-witnesscalc", rev = "bdc15673f7351a1792342e68c659b78d4b327425" } +# Jan 31, 2025 +# circom_witnesscalc = { git = "https://github.com/iden3/circom-witnesscalc", rev = "cec2cdefad044e5c6b796db75267901cc2e6fd6b" } +# Last (e.g. March 23, 2025 - latest) +# circom-witnesscalc = { git = "https://github.com/iden3/circom-witnesscalc", rev = "de9e6f15800d3f37e5d60da4dbc8e07b49c815e6" } + +# local path +# circom-witnesscalc = { path = "../../circom-witnesscalc" } +# circom_witnesscalc = { path = "../../circom-witnesscalc" } # error handling color-eyre = "0.6.2" @@ -94,5 +107,9 @@ required-features = ["arkzkey"] name = "poseidon_tree_benchmark" harness = false +[[bench]] +name = "calc_witness_benchmark" +harness = false + [package.metadata.docs.rs] all-features = true diff --git a/rln/benches/calc_witness_benchmark.rs b/rln/benches/calc_witness_benchmark.rs new file mode 100644 index 00000000..2e95a199 --- /dev/null +++ b/rln/benches/calc_witness_benchmark.rs @@ -0,0 +1,83 @@ +use std::time::Duration; +use criterion::{criterion_group, criterion_main, Criterion, BenchmarkId}; + +use rln::circuit::{calc_witness_2, calculate_rln_witness, graph_from_folder, zkey_from_folder, Fr, TEST_TREE_HEIGHT}; +use rln::hashers::{hash_to_field, poseidon_hash}; +use rln::iden3calc::calc_witness; +use rln::poseidon_tree::PoseidonTree; +use rln::protocol::{inputs_for_witness_calculation, keygen, rln_witness_from_json, rln_witness_from_values, rln_witness_to_json, RLNWitnessInput}; +use utils::ZerokitMerkleTree; + +type ConfigOf = ::Config; + +fn get_test_witness() -> RLNWitnessInput { + let leaf_index = 3; + // Generate identity pair + let (identity_secret_hash, id_commitment) = keygen(); + let user_message_limit = Fr::from(100); + let rate_commitment = poseidon_hash(&[id_commitment, user_message_limit]); + + //// generate merkle tree + let default_leaf = Fr::from(0); + let mut tree = PoseidonTree::new( + TEST_TREE_HEIGHT, + default_leaf, + ConfigOf::::default(), + ) + .unwrap(); + tree.set(leaf_index, rate_commitment.into()).unwrap(); + + let merkle_proof = tree.proof(leaf_index).expect("proof should exist"); + + let signal = b"hey hey"; + let x = hash_to_field(signal); + + // We set the remaining values to random ones + let epoch = hash_to_field(b"test-epoch"); + let rln_identifier = hash_to_field(b"test-rln-identifier"); + let external_nullifier = poseidon_hash(&[epoch, rln_identifier]); + + rln_witness_from_values( + identity_secret_hash, + &merkle_proof, + x, + external_nullifier, + user_message_limit, + Fr::from(1), + ) + .unwrap() +} + +fn bench_calc_witness(c: &mut Criterion) { + + // We generate all relevant keys + let proving_key = zkey_from_folder(); + // let verification_key = &proving_key.0.vk; + let graph_data = graph_from_folder(); + // We compute witness from the json input + let rln_witness = get_test_witness(); + let rln_witness_json = rln_witness_to_json(&rln_witness).unwrap(); + // let rln_witness_deser = rln_witness_from_json(rln_witness_json).unwrap(); + + let inputs_1 = inputs_for_witness_calculation(&rln_witness) + .unwrap() + .into_iter() + .map(|(name, values)| (name.to_string(), values)); + let inputs_2 = inputs_for_witness_calculation(&rln_witness) + .unwrap() + .into_iter() + .map(|(name, values)| (name.to_string(), values)); + + let mut group = c.benchmark_group("calc_witness"); + // group.sample_size(50); + group.measurement_time(Duration::from_secs(11)); + group.bench_function("Circom-witnesscalc current", |b| b.iter(|| calc_witness(inputs_1.clone(), graph_data) )); + // group.bench_function("Circom-witnesscalc crate(git)", |b| b.iter(|| calculate_rln_witness(inputs, graph_data) )); + group.bench_function("Circom-witnesscalc crate(git)", |b| b.iter(|| calc_witness_2(inputs_2.clone(), graph_data) )); + + group.finish(); +} + +criterion_group!(benches, bench_calc_witness); +criterion_main!(benches); + diff --git a/rln/src/circuit.rs b/rln/src/circuit.rs index 7236914d..d36107f8 100644 --- a/rln/src/circuit.rs +++ b/rln/src/circuit.rs @@ -1,16 +1,22 @@ // This crate provides interfaces for the zero-knowledge circuit and keys +use std::collections::HashMap; use ::lazy_static::lazy_static; use ark_bn254::{ Bn254, Fq as ArkFq, Fq2 as ArkFq2, Fr as ArkFr, G1Affine as ArkG1Affine, G1Projective as ArkG1Projective, G2Affine as ArkG2Affine, G2Projective as ArkG2Projective, }; +use ark_ff::{BigInteger, PrimeField}; use ark_groth16::{ProvingKey, VerifyingKey}; use ark_relations::r1cs::ConstraintMatrices; use cfg_if::cfg_if; +use circom_witnesscalc::{calc_witness, deserialize_inputs, graph, Error, InputSignalsInfo}; +use circom_witnesscalc::graph::Node; +use circom_witnesscalc::storage::deserialize_witnesscalc_graph; use color_eyre::{Report, Result}; - -use crate::iden3calc::calc_witness; +use ruint::aliases::U256; +// use crate::iden3calc::calc_witness; +use crate::iden3calc::graph::{fr_to_u256, u256_to_fr}; #[cfg(feature = "arkzkey")] use { @@ -101,7 +107,66 @@ pub fn calculate_rln_witness)>>( inputs: I, graph_data: &[u8], ) -> Vec { - calc_witness(inputs, graph_data) + // calc_witness(inputs, graph_data) + let res = calc_witness_2(inputs, graph_data).unwrap(); + res.iter().map(|v| u256_to_fr(&v)).collect() +} + +pub fn calc_witness_2)>>(inputs: I, graph_data: &[u8]) -> std::result::Result, Error> { + + // HashMap + // let inputs = deserialize_inputs(inputs.as_bytes())?; + + let inputs: HashMap> = inputs + .into_iter() + .map(|(key, value)| (key, value.iter().map(fr_to_u256).collect())) + .collect(); + + let (nodes, signals, input_mapping): (Vec, Vec, InputSignalsInfo) = + deserialize_witnesscalc_graph(std::io::Cursor::new(graph_data)).unwrap(); + + let mut inputs_buffer = get_inputs_buffer(get_inputs_size(&nodes)); + populate_inputs(&inputs, &input_mapping, &mut inputs_buffer); + + Ok(graph::evaluate(&nodes, inputs_buffer.as_slice(), &signals)) +} + +fn get_inputs_buffer(size: usize) -> Vec { + let mut inputs = vec![U256::ZERO; size]; + inputs[0] = U256::from(1); + inputs +} + +fn get_inputs_size(nodes: &[Node]) -> usize { + let mut start = false; + let mut max_index = 0usize; + for &node in nodes.iter() { + if let Node::Input(i) = node { + if i > max_index { + max_index = i; + } + start = true + } else if start { + break; + } + } + max_index + 1 +} + +fn populate_inputs( + input_list: &HashMap>, inputs_info: &InputSignalsInfo, + input_buffer: &mut [U256]) { + for (key, value) in input_list { + let (offset, len) = inputs_info[key]; + if len != value.len() { + panic!("Invalid input length for {}", key); + } + // println!("input {}, offset {}, len {}", key, offset, len); + + for (i, v) in value.iter().enumerate() { + input_buffer[offset + i] = *v; + } + } } pub fn graph_from_folder() -> &'static [u8] {