diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index b237aad..7384aa0 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -19,6 +19,11 @@ jobs: toolchain: stable override: true components: rustfmt, clippy + - name: install requirements + uses: awalsh128/cache-apt-pkgs-action@v1 + with: + packages: protobuf-compiler + version: 1.0 - name: cargo fmt run: cargo fmt --all -- --check - name: cargo clippy @@ -33,6 +38,11 @@ jobs: with: toolchain: stable override: true + - name: install requirements + uses: awalsh128/cache-apt-pkgs-action@v1 + with: + packages: protobuf-compiler + version: 1.0 - name: Run tests run: cargo test \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index bd2ccdb..f79a156 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -44,6 +44,25 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +[[package]] +name = "alloy-rlp" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f70d83b765fdc080dbcd4f4db70d8d23fe4761f2f02ebfa9146b833900634b4" +dependencies = [ + "arrayvec", + "bytes", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + [[package]] name = "anyhow" version = "1.0.98" @@ -57,9 +76,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3df4dcc01ff89867cd86b0da835f23c3f02738353aaee7dde7495af71363b8d5" dependencies = [ "ark-ec", - "ark-ff", - "ark-serialize", - "ark-std", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", ] [[package]] @@ -69,8 +88,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d69eab57e8d2663efa5c63135b2af4f396d66424f88954c21104125ab6b3e6bc" dependencies = [ "ark-ec", - "ark-ff", - "ark-std", + "ark-ff 0.5.0", + "ark-r1cs-std", + "ark-std 0.5.0", ] [[package]] @@ -82,14 +102,14 @@ dependencies = [ "ahash", "ark-crypto-primitives-macros", "ark-ec", - "ark-ff", + "ark-ff 0.5.0", "ark-relations", - "ark-serialize", + "ark-serialize 0.5.0", "ark-snark", - "ark-std", + "ark-std 0.5.0", "blake2", "derivative", - "digest", + "digest 0.10.7", "fnv", "merlin", "rayon", @@ -114,14 +134,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" dependencies = [ "ahash", - "ark-ff", + "ark-ff 0.5.0", "ark-poly", - "ark-serialize", - "ark-std", + "ark-serialize 0.5.0", + "ark-std 0.5.0", "educe", "fnv", "hashbrown", - "itertools", + "itertools 0.13.0", "num-bigint", "num-integer", "num-traits", @@ -137,8 +157,46 @@ checksum = "962e24e25cbdcaabe619c281a62bccc885f778b188129d6a02875c2671666219" dependencies = [ "ark-bn254", "ark-ec", - "ark-ff", - "ark-std", + "ark-ff 0.5.0", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.4.1", + "zeroize", ] [[package]] @@ -147,14 +205,14 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" dependencies = [ - "ark-ff-asm", - "ark-ff-macros", - "ark-serialize", - "ark-std", + "ark-ff-asm 0.5.0", + "ark-ff-macros 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", "arrayvec", - "digest", + "digest 0.10.7", "educe", - "itertools", + "itertools 0.13.0", "num-bigint", "num-traits", "paste", @@ -162,6 +220,26 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-ff-asm" version = "0.5.0" @@ -172,6 +250,31 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-ff-macros" version = "0.5.0" @@ -193,11 +296,11 @@ checksum = "88f1d0f3a534bb54188b8dcc104307db6c56cdae574ddc3212aec0625740fc7e" dependencies = [ "ark-crypto-primitives", "ark-ec", - "ark-ff", + "ark-ff 0.5.0", "ark-poly", "ark-relations", - "ark-serialize", - "ark-std", + "ark-serialize 0.5.0", + "ark-std 0.5.0", "rayon", ] @@ -208,27 +311,65 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" dependencies = [ "ahash", - "ark-ff", - "ark-serialize", - "ark-std", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", "educe", "fnv", "hashbrown", "rayon", ] +[[package]] +name = "ark-r1cs-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "941551ef1df4c7a401de7068758db6503598e6f01850bdb2cfdb614a1f9dbea1" +dependencies = [ + "ark-ec", + "ark-ff 0.5.0", + "ark-relations", + "ark-std 0.5.0", + "educe", + "num-bigint", + "num-integer", + "num-traits", + "tracing", +] + [[package]] name = "ark-relations" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec46ddc93e7af44bcab5230937635b06fb5744464dd6a7e7b083e80ebd274384" dependencies = [ - "ark-ff", - "ark-std", + "ark-ff 0.5.0", + "ark-std 0.5.0", "tracing", "tracing-subscriber", ] +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint", +] + [[package]] name = "ark-serialize" version = "0.5.0" @@ -236,9 +377,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" dependencies = [ "ark-serialize-derive", - "ark-std", + "ark-std 0.5.0", "arrayvec", - "digest", + "digest 0.10.7", "num-bigint", "rayon", ] @@ -260,10 +401,30 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d368e2848c2d4c129ce7679a7d0d2d612b6a274d3ea6a13bad4445d61b381b88" dependencies = [ - "ark-ff", + "ark-ff 0.5.0", "ark-relations", - "ark-serialize", - "ark-std", + "ark-serialize 0.5.0", + "ark-std 0.5.0", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", ] [[package]] @@ -273,7 +434,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", "rayon", ] @@ -283,6 +444,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 = "atomic-waker" version = "1.1.2" @@ -300,6 +470,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" @@ -308,9 +487,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", "cfg-if", @@ -339,6 +518,40 @@ version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" +[[package]] +name = "bindgen" +version = "0.71.1" +source = "git+https://github.com/rust-lang/rust-bindgen?rev=97ab9152b5edb1fda1ced9bc1604f5e4dc9cfaa9#97ab9152b5edb1fda1ced9bc1604f5e4dc9cfaa9" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "itertools 0.13.0", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "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 = "2.9.0" @@ -373,7 +586,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -423,6 +636,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" @@ -441,30 +663,140 @@ dependencies = [ [[package]] name = "circom-prover" version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f4c6f29135bcff9cc30d98aa94e15b51b62d28c7403edd07a346dffd1e84373" +source = "git+https://github.com/zkmopro/mopro.git?branch=main#ee41c0b82f02c203b857fc3a5a38b14f6999cfe1" dependencies = [ "anyhow", "ark-bls12-381", "ark-bn254", "ark-crypto-primitives", "ark-ec", - "ark-ff", + "ark-ff 0.5.0", "ark-groth16", "ark-poly", "ark-relations", - "ark-serialize", - "ark-std", + "ark-serialize 0.5.0", + "ark-std 0.5.0", "byteorder", + "circom-witnesscalc", "hex-literal", "num", "num-bigint", "num-traits", - "rand", + "once_cell", + "rand 0.8.5", "rayon", "rust-witness", "serde_json", "uuid", + "witnesscalc-adapter", +] + +[[package]] +name = "circom-witnesscalc" +version = "0.2.0" +source = "git+https://github.com/iden3/circom-witnesscalc#73cd8dac738c5ec41428ed878b298c81b700d5d0" +dependencies = [ + "anyhow", + "ark-bn254", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "bindgen", + "byteorder", + "code_producers", + "compiler", + "constraint_generation", + "indicatif", + "libc", + "memmap2", + "num-bigint", + "num-traits", + "parser", + "program_structure", + "prost", + "prost-build", + "rand 0.8.5", + "ruint", + "serde", + "serde_json", + "tempfile", + "type_analysis", + "wtns-file", +] + +[[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 = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[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 0.1.14", +] + +[[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 = "console" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width 0.2.0", + "windows-sys 0.59.0", ] [[package]] @@ -506,6 +838,49 @@ dependencies = [ "unicode-xid", ] +[[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 = "core-foundation" version = "0.9.4" @@ -569,7 +944,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", ] @@ -584,6 +959,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 = "der" version = "0.7.9" @@ -625,6 +1012,21 @@ 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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + [[package]] name = "digest" version = "0.10.7" @@ -637,6 +1039,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" @@ -655,7 +1078,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", - "digest", + "digest 0.10.7", "elliptic-curve", "rfc6979", "signature", @@ -688,17 +1111,32 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", - "digest", + "digest 0.10.7", "ff", "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 = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + [[package]] name = "encoding_rs" version = "0.8.35" @@ -808,7 +1246,7 @@ dependencies = [ "k256", "num_enum", "open-fastrlp", - "rand", + "rand 0.8.5", "rlp", "serde", "serde_json", @@ -825,13 +1263,35 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "fastrlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + [[package]] name = "ff" 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", ] @@ -842,11 +1302,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ "byteorder", - "rand", + "rand 0.8.5", "rustc-hex", "static_assertions", ] +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "fixedbitset" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" + [[package]] name = "fnv" version = "1.0.7" @@ -944,6 +1416,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" @@ -973,6 +1456,12 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +[[package]] +name = "glob" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + [[package]] name = "group" version = "0.13.0" @@ -980,15 +1469,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", - "rand_core", + "rand_core 0.6.4", "subtle", ] [[package]] name = "h2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75249d144030531f8dee69fe9cea04d3edf809a017ae445e2abdff6629e86633" +checksum = "a9421a676d1b147b16b82c9225157dc629087ef8ec4d5e2960f9437a90dac0a5" dependencies = [ "atomic-waker", "bytes", @@ -1003,6 +1492,20 @@ dependencies = [ "tracing", ] +[[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 = "hashbrown" version = "0.15.2" @@ -1013,10 +1516,22 @@ dependencies = [ ] [[package]] -name = "heck" -version = "0.5.0" +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hermit-abi" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" [[package]] name = "hex" @@ -1036,7 +1551,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -1101,11 +1616,10 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.5" +version = "0.27.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +checksum = "03a01595e11bdcec50946522c32dde3fc6914743000a68b93000965f2f02406d" dependencies = [ - "futures-util", "http", "hyper", "hyper-util", @@ -1134,9 +1648,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" +checksum = "cf9f1e950e0d9d1d3c47184416723cf29c0d1f93bd8cccf37e4beb6b44f31710" dependencies = [ "bytes", "futures-channel", @@ -1339,12 +1853,45 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "indicatif" +version = "0.17.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" +dependencies = [ + "console", + "number_prefix", + "portable-atomic", + "unicode-width 0.2.0", + "web-time", +] + [[package]] name = "ipnet" 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.1", + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.13.0" @@ -1380,6 +1927,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" @@ -1402,11 +1955,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 0.6.5", + "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 = "libc" @@ -1414,6 +2001,32 @@ version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +[[package]] +name = "libloading" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" +dependencies = [ + "cfg-if", + "windows-targets 0.53.0", +] + +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags", + "libc", +] + [[package]] name = "light-poseidon" version = "0.3.0" @@ -1421,7 +2034,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39e3d87542063daaccbfecd78b60f988079b6ec4e089249658b9455075c78d42" dependencies = [ "ark-bn254", - "ark-ff", + "ark-ff 0.5.0", "num-bigint", "thiserror 1.0.69", ] @@ -1438,18 +2051,43 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg 1.4.0", + "scopeguard", +] + [[package]] name = "log" version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +[[package]] +name = "lz_fnv" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bbb1b0dbe51f0976eaa466f4e0bdc11856fe8008aee26f30ccec8de15b28e38" + [[package]] name = "memchr" version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +[[package]] +name = "memmap2" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" +dependencies = [ + "libc", +] + [[package]] name = "merlin" version = "3.0.0" @@ -1458,7 +2096,7 @@ checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" dependencies = [ "byteorder", "keccak", - "rand_core", + "rand_core 0.6.4", "zeroize", ] @@ -1468,6 +2106,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.8.8" @@ -1479,15 +2123,21 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] +[[package]] +name = "multimap" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" + [[package]] name = "native-tls" version = "0.2.14" @@ -1505,6 +2155,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" @@ -1527,7 +2193,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]] @@ -1554,7 +2238,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", ] @@ -1576,7 +2260,18 @@ version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "autocfg", + "autocfg 1.4.0", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.9", + "libc", ] [[package]] @@ -1600,6 +2295,12 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + [[package]] name = "object" version = "0.36.7" @@ -1672,6 +2373,15 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" +[[package]] +name = "openssl-src" +version = "300.5.0+3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8ce546f549326b0e6052b649198487d91320875da901e7bd11a06d1ee3f9c2f" +dependencies = [ + "cc", +] + [[package]] name = "openssl-sys" version = "0.9.107" @@ -1680,6 +2390,7 @@ checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" dependencies = [ "cc", "libc", + "openssl-src", "pkg-config", "vcpkg", ] @@ -1712,6 +2423,45 @@ dependencies = [ "syn 2.0.100", ] +[[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", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "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" @@ -1724,6 +2474,80 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "pest" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6" +dependencies = [ + "memchr", + "thiserror 2.0.12", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d725d9cfd79e87dccc9341a2ef39d1b6f6353d68c4b33c177febbe1a402c97c5" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db7d01726be8ab66ab32f9df467ae8b1148906685bbe75c82d1e65d7f5b3f841" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "pest_meta" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9f832470494906d1fca5329f8ab5791cc60beb230c74815dff541cbd2b5ca0" +dependencies = [ + "once_cell", + "pest", + "sha2", +] + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset 0.4.2", + "indexmap", +] + +[[package]] +name = "petgraph" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" +dependencies = [ + "fixedbitset 0.5.7", + "indexmap", +] + +[[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-lite" version = "0.2.16" @@ -1752,6 +2576,12 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "portable-atomic" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" + [[package]] name = "ppv-lite86" version = "0.2.21" @@ -1761,6 +2591,22 @@ dependencies = [ "zerocopy 0.8.24", ] +[[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.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" +dependencies = [ + "proc-macro2", + "syn 2.0.100", +] + [[package]] name = "primitive-types" version = "0.12.2" @@ -1776,37 +2622,104 @@ dependencies = [ ] [[package]] -name = "proc-macro-crate" -version = "3.3.0" +name = "proc-macro-crate" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" +dependencies = [ + "bitflags", + "lazy_static", + "num-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_xorshift", + "regex-syntax 0.8.5", + "unarray", +] + +[[package]] +name = "prost" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-build" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" dependencies = [ - "toml_edit", + "heck", + "itertools 0.13.0", + "log", + "multimap", + "once_cell", + "petgraph 0.7.1", + "prettyplease", + "prost", + "prost-types", + "regex", + "syn 2.0.100", + "tempfile", ] [[package]] -name = "proc-macro2" -version = "1.0.95" +name = "prost-derive" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" dependencies = [ - "unicode-ident", + "anyhow", + "itertools 0.13.0", + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] -name = "proptest" -version = "1.6.0" +name = "prost-types" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" +checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" dependencies = [ - "bitflags", - "lazy_static", - "num-traits", - "rand", - "rand_chacha", - "rand_xorshift", - "regex-syntax", - "unarray", + "prost", ] [[package]] @@ -1830,6 +2743,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" @@ -1837,8 +2763,28 @@ 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" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", +] + +[[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]] @@ -1848,7 +2794,26 @@ 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_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + +[[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]] @@ -1860,13 +2825,31 @@ dependencies = [ "getrandom 0.2.15", ] +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.2", +] + +[[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]] @@ -1889,6 +2872,26 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "redox_syscall" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" +dependencies = [ + "bitflags", +] + +[[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 = "regex" version = "1.11.1" @@ -1898,7 +2901,7 @@ dependencies = [ "aho-corasick", "memchr", "regex-automata", - "regex-syntax", + "regex-syntax 0.8.5", ] [[package]] @@ -1909,9 +2912,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" @@ -2009,6 +3018,39 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ruint" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11256b5fe8c68f56ac6f39ef0720e592f33d2367a4782740d9c9142e889c7fb4" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes", + "fastrlp 0.3.1", + "fastrlp 0.4.0", + "num-bigint", + "num-integer", + "num-traits", + "parity-scale-codec", + "primitive-types", + "proptest", + "rand 0.8.5", + "rand 0.9.1", + "rlp", + "ruint-macro", + "serde", + "valuable", + "zeroize", +] + +[[package]] +name = "ruint-macro" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" + [[package]] name = "rust-witness" version = "0.1.4" @@ -2029,12 +3071,36 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + [[package]] name = "rustc-hex" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.26", +] + [[package]] name = "rustix" version = "1.0.5" @@ -2050,9 +3116,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.26" +version = "0.23.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df51b5869f3a441595eac5e8ff14d486ff285f7b8c0df8770e49c3b56351f0f0" +checksum = "730944ca083c1c233a75c09f199e973ca499344a2b7ba9e755c457e86fb4a321" dependencies = [ "once_cell", "rustls-pki-types", @@ -2072,15 +3138,18 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +dependencies = [ + "zeroize", +] [[package]] name = "rustls-webpki" -version = "0.103.1" +version = "0.103.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fef8b8769aaccf73098557a87cd1816b4f9c7c16811c9c77142aa695c16f2c03" +checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" dependencies = [ "ring", "rustls-pki-types", @@ -2141,6 +3210,12 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "sec1" version = "0.7.3" @@ -2185,21 +3260,45 @@ dependencies = [ "anyhow", "ark-ec", "ark-ed-on-bn254", - "ark-ff", + "ark-ff 0.5.0", "blake", "circom-prover", "ethers-core", "light-poseidon", "num-bigint", "num-traits", + "openssl", "reqwest", - "rust-witness", "serde", "serde_json", "thiserror 2.0.12", "zk-kit-lean-imt", ] +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" + +[[package]] +name = "semver-parser" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" +dependencies = [ + "pest", +] + [[package]] name = "serde" version = "1.0.219" @@ -2252,7 +3351,7 @@ checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", - "digest", + "digest 0.10.7", ] [[package]] @@ -2261,7 +3360,7 @@ version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "digest", + "digest 0.10.7", "keccak", ] @@ -2277,17 +3376,23 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ - "digest", - "rand_core", + "digest 0.10.7", + "rand_core 0.6.4", ] +[[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]] @@ -2298,14 +3403,20 @@ checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "socket2" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", "windows-sys 0.52.0", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "spki" version = "0.7.3" @@ -2328,6 +3439,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", + "phf_shared", + "precomputed-hash", +] + [[package]] name = "strum" version = "0.26.3" @@ -2438,6 +3561,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 = "thiserror" version = "1.0.69" @@ -2478,6 +3621,15 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -2499,9 +3651,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.44.2" +version = "1.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" +checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" dependencies = [ "backtrace", "bytes", @@ -2534,9 +3686,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.14" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" dependencies = [ "bytes", "futures-core", @@ -2596,9 +3748,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "tracing-core" version = "0.1.33" @@ -2624,12 +3788,28 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[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" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + [[package]] name = "uint" version = "0.9.5" @@ -2654,6 +3834,18 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" + [[package]] name = "unicode-xid" version = "0.2.6" @@ -2691,11 +3883,13 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" +checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" dependencies = [ "getrandom 0.3.2", + "js-sys", + "wasm-bindgen", ] [[package]] @@ -2735,6 +3929,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" @@ -2831,6 +4031,32 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + [[package]] name = "winapi-util" version = "0.1.9" @@ -2840,6 +4066,12 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + [[package]] name = "windows-link" version = "0.1.1" @@ -2859,9 +4091,9 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ "windows-link", ] @@ -3039,6 +4271,19 @@ dependencies = [ "bitflags", ] +[[package]] +name = "witnesscalc-adapter" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60f543496383052e42bbc8cb96adf5aeef7964d207b7e267a081371e44aa009d" +dependencies = [ + "anyhow", + "num-bigint", + "num-traits", + "paste", + "serde_json", +] + [[package]] name = "write16" version = "1.0.0" @@ -3051,6 +4296,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" diff --git a/Cargo.toml b/Cargo.toml index 18589ba..dc938a0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,6 +11,8 @@ thiserror = "2.0.12" num-traits = "0.2.19" ethers-core = "2.0.14" anyhow = "1.0.97" +reqwest = { version = "0.12.15", features = ["blocking"] } +openssl = { version = "0.10", features = ["vendored"] } # arkworks ark-ec = { version = "=0.5.0", default-features = false } @@ -25,16 +27,10 @@ serde = { version = "1", features = ["derive"], optional = true } serde_json = "1" # circom-prover -rust-witness = "0.1" -circom-prover = "=0.1.1" +circom-prover = { git = "https://github.com/zkmopro/mopro.git", branch = "main", features = [ + "circom-witnesscalc", +] } [features] default = [] -serde = [ - "dep:serde", - "zk-kit-lean-imt/serde" -] - -[build-dependencies] -rust-witness = "0.1" -reqwest = { version = "0.12.15", features = ["blocking", "json"] } +serde = ["dep:serde", "zk-kit-lean-imt/serde"] diff --git a/README.md b/README.md index 3182c18..02ac789 100644 --- a/README.md +++ b/README.md @@ -67,19 +67,32 @@ All tasks related to the Semaphore Rust implementation are public. You can track their progress, statuses, and additional details in the [Semaphore Rust view](https://github.com/orgs/semaphore-protocol/projects/10/views/29). - - ## 🛠 Install Clone this repository: +```sh +git clone https://github.com/semaphore-protocol/semaphore-rs +``` + +## 📜 Usage + +### Code quality and formatting + +Run [Rustfmt](https://github.com/rust-lang/rustfmt) to automatically format the code + +```bash +cargo fmt --all +``` + +Run [rust-clippy](https://github.com/rust-lang/rust-clippy) to catch common mistakes and improve your Rust code. + ```bash -git clone git@github.com:semaphore-protocol/semaphore-rs.git +cargo clippy ``` -Semaphore uses `Circom-Prover` to generate zero-knowledge proofs for `Circom` circuits. Since `Circom-Prover` generates the witness function at build time, developers must specify the Merkle tree depth during compilation. This can be done by setting the `SEMAPHORE_DEPTH` environment variable: +### Testing ```bash -cd semaphore-rs -SEMAPHORE_DEPTH= cargo build +cargo test ``` diff --git a/build.rs b/build.rs deleted file mode 100644 index eab1b4a..0000000 --- a/build.rs +++ /dev/null @@ -1,66 +0,0 @@ -use reqwest::blocking::Client; -use std::error::Error; -use std::fs::{File, create_dir_all}; -use std::io::copy; -use std::path::{Path, PathBuf}; - -/// download semaphore artifacts by required tree depth -fn download_semaphore_artifacts(depth: usize) -> Result<(), Box> { - let base_url = "https://snark-artifacts.pse.dev/semaphore/latest/"; - let remote_filenames = [ - format!("semaphore-{}.wasm", depth), - format!("semaphore-{}.zkey", depth), - ]; - let local_filenames = ["semaphore.wasm", "semaphore.zkey"]; - - let client = Client::new(); - let target_dir = Path::new("./zkey"); - - // Verify if those files have been downloaded or not. Skip downloading if yes. - let version_path = target_dir.join("depth"); - if version_path.exists() { - let current_version = std::fs::read_to_string(&version_path)?.trim().to_string(); - if current_version == depth.to_string() { - println!( - "Artifacts for depth {} already downloaded, skipping.", - depth - ); - return Ok(()); - } - } - // create ./zkey folder - create_dir_all(target_dir)?; - - // download artifacts - for (remote, local) in remote_filenames.iter().zip(local_filenames.iter()) { - let url = format!("{}{}", base_url, remote); - let dest_path: PathBuf = target_dir.join(local); - - eprintln!("Downloading {}...", url); - let mut resp = client.get(&url).send()?.error_for_status()?; - let mut out = File::create(&dest_path)?; - copy(&mut resp, &mut out)?; - eprintln!("Saved as {}", dest_path.display()); - } - - // update depth info - std::fs::write(&version_path, depth.to_string())?; - - Ok(()) -} - -fn main() { - // Default depth is 10 for testing purposes; can be overridden via SEMAPHORE_DEPTH environment variable - let depth: usize = std::env::var("SEMAPHORE_DEPTH") - .unwrap_or_else(|_| "10".to_string()) - .parse() - .expect("SEMAPHORE_DEPTH must be a valid usize"); - - if depth > 32 { - panic!("The tree depth must be less than 32."); - } - - download_semaphore_artifacts(depth).expect("Failed to download artifacts"); - - rust_witness::transpile::transpile_wasm("./zkey".to_string()); -} diff --git a/src/lib.rs b/src/lib.rs index 617667f..8b88c3a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,6 +9,7 @@ pub mod group; pub mod identity; pub mod proof; pub mod utils; +pub mod witness; pub const MIN_TREE_DEPTH: u16 = 1; pub const MAX_TREE_DEPTH: u16 = 32; diff --git a/src/proof.rs b/src/proof.rs index d611677..ce1486c 100644 --- a/src/proof.rs +++ b/src/proof.rs @@ -2,7 +2,8 @@ use crate::{ MAX_TREE_DEPTH, MIN_TREE_DEPTH, group::{EMPTY_ELEMENT, Element, Group, MerkleProof}, identity::Identity, - utils::{hash, to_big_uint, to_element}, + utils::{download_zkey, hash, to_big_uint, to_element}, + witness::dispatch_witness, }; use anyhow::{Ok, Result, bail}; use circom_prover::{ @@ -17,13 +18,8 @@ use num_bigint::BigUint; use num_traits::{Zero, identities::One}; use std::{collections::HashMap, str::FromStr}; -// Prepare witness generator -rust_witness::witness!(semaphore); - pub type PackedGroth16Proof = [BigUint; 8]; -const ZKEY_PATH: &str = "./zkey/semaphore.zkey"; - pub enum GroupOrMerkleProof { Group(Group), MerkleProof(MerkleProof), @@ -112,11 +108,14 @@ impl Proof { ("message".to_string(), vec![hash(message_uint.clone())]), ]); + let zkey_path = download_zkey(merkle_tree_depth).expect("Failed to download zkey"); + let witness_fn = dispatch_witness(merkle_tree_depth); + let circom_proof = CircomProver::prove( ProofLib::Arkworks, - WitnessFn::RustWitness(semaphore_witness), + WitnessFn::CircomWitnessCalc(witness_fn), serde_json::to_string(&inputs).unwrap(), - ZKEY_PATH.to_string(), + zkey_path, )?; Ok(SemaphoreProof { @@ -148,7 +147,8 @@ impl Proof { pub_inputs, }; - CircomProver::verify(ProofLib::Arkworks, p, ZKEY_PATH.to_string()).unwrap() + let zkey_path = download_zkey(proof.merkle_tree_depth).expect("Failed to download zkey"); + CircomProver::verify(ProofLib::Arkworks, p, zkey_path).unwrap() } pub fn pack_groth16_proof(p: circom::Proof) -> PackedGroth16Proof { @@ -390,6 +390,26 @@ mod tests { assert!(Proof::verify_proof(proof)) } + #[test] + fn test_verify_proof_with_different_depth() { + for depth in MIN_TREE_DEPTH..=MAX_TREE_DEPTH { + let identity = Identity::new("secret".as_bytes()); + let group = + Group::new(&[MEMBER1, MEMBER2, to_element(*identity.commitment())]).unwrap(); + + let proof = Proof::generate_proof( + identity, + GroupOrMerkleProof::Group(group), + MESSAGE.to_string(), + SCOPE.to_string(), + depth as u16, + ) + .unwrap(); + + assert!(Proof::verify_proof(proof)); + } + } + #[test] fn test_panic_verify_invalid_tree_depth() { let identity = Identity::new("secret".as_bytes()); diff --git a/src/utils.rs b/src/utils.rs index f15332f..edbfb61 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -2,6 +2,10 @@ use ark_ed_on_bn254::Fq; use ark_ff::{BigInteger, PrimeField}; use ethers_core::utils::keccak256; use num_bigint::BigUint; +use reqwest::blocking::Client; +use std::error::Error; +use std::fs::File; +use std::io::copy; use crate::group::{EMPTY_ELEMENT, Element}; @@ -33,3 +37,19 @@ pub fn to_element(value: Fq) -> Element { element[..bytes.len()].copy_from_slice(&bytes); element } + +/// Download zkey from artifacts: https://snark-artifacts.pse.dev/ +pub fn download_zkey(depth: u16) -> Result> { + let base_url = "https://snark-artifacts.pse.dev/semaphore/latest/"; + let filename = format!("semaphore-{}.zkey", depth); + let out_dir = std::env::temp_dir(); + let dest_path = out_dir.join(filename.clone()); + if !dest_path.exists() { + let url = format!("{}{}", base_url, filename); + let client = Client::new(); + let mut resp = client.get(&url).send()?.error_for_status()?; + let mut out = File::create(&dest_path)?; + copy(&mut resp, &mut out)?; + } + Ok(dest_path.to_string_lossy().into_owned()) +} diff --git a/src/witness.rs b/src/witness.rs new file mode 100644 index 0000000..abb776d --- /dev/null +++ b/src/witness.rs @@ -0,0 +1,135 @@ +use circom_prover::graph; + +pub fn dispatch_witness(depth: u16) -> fn(&str) -> anyhow::Result> { + match depth { + 1_u16 => { + graph!(semaphore1, "../witness_graph/semaphore-1.bin"); + semaphore1_witness + } + 2_u16 => { + graph!(semaphore2, "../witness_graph/semaphore-2.bin"); + semaphore2_witness + } + 3_u16 => { + graph!(semaphore3, "../witness_graph/semaphore-3.bin"); + semaphore3_witness + } + 4_u16 => { + graph!(semaphore4, "../witness_graph/semaphore-4.bin"); + semaphore4_witness + } + 5_u16 => { + graph!(semaphore5, "../witness_graph/semaphore-5.bin"); + semaphore5_witness + } + 6_u16 => { + graph!(semaphore6, "../witness_graph/semaphore-6.bin"); + semaphore6_witness + } + 7_u16 => { + graph!(semaphore7, "../witness_graph/semaphore-7.bin"); + semaphore7_witness + } + 8_u16 => { + graph!(semaphore8, "../witness_graph/semaphore-8.bin"); + semaphore8_witness + } + 9_u16 => { + graph!(semaphore9, "../witness_graph/semaphore-9.bin"); + semaphore9_witness + } + 10_u16 => { + graph!(semaphore10, "../witness_graph/semaphore-10.bin"); + semaphore10_witness + } + 11_u16 => { + graph!(semaphore11, "../witness_graph/semaphore-11.bin"); + semaphore11_witness + } + 12_u16 => { + graph!(semaphore12, "../witness_graph/semaphore-12.bin"); + semaphore12_witness + } + 13_u16 => { + graph!(semaphore13, "../witness_graph/semaphore-13.bin"); + semaphore13_witness + } + 14_u16 => { + graph!(semaphore14, "../witness_graph/semaphore-14.bin"); + semaphore14_witness + } + 15_u16 => { + graph!(semaphore15, "../witness_graph/semaphore-15.bin"); + semaphore15_witness + } + 16_u16 => { + graph!(semaphore16, "../witness_graph/semaphore-16.bin"); + semaphore16_witness + } + 17_u16 => { + graph!(semaphore17, "../witness_graph/semaphore-17.bin"); + semaphore17_witness + } + 18_u16 => { + graph!(semaphore18, "../witness_graph/semaphore-18.bin"); + semaphore18_witness + } + 19_u16 => { + graph!(semaphore19, "../witness_graph/semaphore-19.bin"); + semaphore19_witness + } + 20_u16 => { + graph!(semaphore20, "../witness_graph/semaphore-20.bin"); + semaphore20_witness + } + 21_u16 => { + graph!(semaphore21, "../witness_graph/semaphore-21.bin"); + semaphore21_witness + } + 22_u16 => { + graph!(semaphore22, "../witness_graph/semaphore-22.bin"); + semaphore22_witness + } + 23_u16 => { + graph!(semaphore23, "../witness_graph/semaphore-23.bin"); + semaphore23_witness + } + 24_u16 => { + graph!(semaphore24, "../witness_graph/semaphore-24.bin"); + semaphore24_witness + } + 25_u16 => { + graph!(semaphore25, "../witness_graph/semaphore-25.bin"); + semaphore25_witness + } + 26_u16 => { + graph!(semaphore26, "../witness_graph/semaphore-26.bin"); + semaphore26_witness + } + 27_u16 => { + graph!(semaphore27, "../witness_graph/semaphore-27.bin"); + semaphore27_witness + } + 28_u16 => { + graph!(semaphore28, "../witness_graph/semaphore-28.bin"); + semaphore28_witness + } + 29_u16 => { + graph!(semaphore29, "../witness_graph/semaphore-29.bin"); + semaphore29_witness + } + 30_u16 => { + graph!(semaphore30, "../witness_graph/semaphore-30.bin"); + semaphore30_witness + } + 31_u16 => { + graph!(semaphore31, "../witness_graph/semaphore-31.bin"); + semaphore31_witness + } + 32_u16 => { + graph!(semaphore32, "../witness_graph/semaphore-32.bin"); + semaphore32_witness + } + _ => panic!("Unsupported depth"), + } +} diff --git a/witness_graph/semaphore-1.bin b/witness_graph/semaphore-1.bin new file mode 100644 index 0000000..8e1f073 Binary files /dev/null and b/witness_graph/semaphore-1.bin differ diff --git a/witness_graph/semaphore-10.bin b/witness_graph/semaphore-10.bin new file mode 100644 index 0000000..b911607 Binary files /dev/null and b/witness_graph/semaphore-10.bin differ diff --git a/witness_graph/semaphore-11.bin b/witness_graph/semaphore-11.bin new file mode 100644 index 0000000..b823445 Binary files /dev/null and b/witness_graph/semaphore-11.bin differ diff --git a/witness_graph/semaphore-12.bin b/witness_graph/semaphore-12.bin new file mode 100644 index 0000000..309c63c Binary files /dev/null and b/witness_graph/semaphore-12.bin differ diff --git a/witness_graph/semaphore-13.bin b/witness_graph/semaphore-13.bin new file mode 100644 index 0000000..fec84d8 Binary files /dev/null and b/witness_graph/semaphore-13.bin differ diff --git a/witness_graph/semaphore-14.bin b/witness_graph/semaphore-14.bin new file mode 100644 index 0000000..bd1b04d Binary files /dev/null and b/witness_graph/semaphore-14.bin differ diff --git a/witness_graph/semaphore-15.bin b/witness_graph/semaphore-15.bin new file mode 100644 index 0000000..e04fa5c Binary files /dev/null and b/witness_graph/semaphore-15.bin differ diff --git a/witness_graph/semaphore-16.bin b/witness_graph/semaphore-16.bin new file mode 100644 index 0000000..f288d9b Binary files /dev/null and b/witness_graph/semaphore-16.bin differ diff --git a/witness_graph/semaphore-17.bin b/witness_graph/semaphore-17.bin new file mode 100644 index 0000000..ee18373 Binary files /dev/null and b/witness_graph/semaphore-17.bin differ diff --git a/witness_graph/semaphore-18.bin b/witness_graph/semaphore-18.bin new file mode 100644 index 0000000..8390fa7 Binary files /dev/null and b/witness_graph/semaphore-18.bin differ diff --git a/witness_graph/semaphore-19.bin b/witness_graph/semaphore-19.bin new file mode 100644 index 0000000..e563c0b Binary files /dev/null and b/witness_graph/semaphore-19.bin differ diff --git a/witness_graph/semaphore-2.bin b/witness_graph/semaphore-2.bin new file mode 100644 index 0000000..2248ef9 Binary files /dev/null and b/witness_graph/semaphore-2.bin differ diff --git a/witness_graph/semaphore-20.bin b/witness_graph/semaphore-20.bin new file mode 100644 index 0000000..4e7530d Binary files /dev/null and b/witness_graph/semaphore-20.bin differ diff --git a/witness_graph/semaphore-21.bin b/witness_graph/semaphore-21.bin new file mode 100644 index 0000000..33f23a7 Binary files /dev/null and b/witness_graph/semaphore-21.bin differ diff --git a/witness_graph/semaphore-22.bin b/witness_graph/semaphore-22.bin new file mode 100644 index 0000000..18c1e8d Binary files /dev/null and b/witness_graph/semaphore-22.bin differ diff --git a/witness_graph/semaphore-23.bin b/witness_graph/semaphore-23.bin new file mode 100644 index 0000000..e0389e3 Binary files /dev/null and b/witness_graph/semaphore-23.bin differ diff --git a/witness_graph/semaphore-24.bin b/witness_graph/semaphore-24.bin new file mode 100644 index 0000000..2d1bc60 Binary files /dev/null and b/witness_graph/semaphore-24.bin differ diff --git a/witness_graph/semaphore-25.bin b/witness_graph/semaphore-25.bin new file mode 100644 index 0000000..220c58a Binary files /dev/null and b/witness_graph/semaphore-25.bin differ diff --git a/witness_graph/semaphore-26.bin b/witness_graph/semaphore-26.bin new file mode 100644 index 0000000..b609abe Binary files /dev/null and b/witness_graph/semaphore-26.bin differ diff --git a/witness_graph/semaphore-27.bin b/witness_graph/semaphore-27.bin new file mode 100644 index 0000000..64ead0d Binary files /dev/null and b/witness_graph/semaphore-27.bin differ diff --git a/witness_graph/semaphore-28.bin b/witness_graph/semaphore-28.bin new file mode 100644 index 0000000..1d4d282 Binary files /dev/null and b/witness_graph/semaphore-28.bin differ diff --git a/witness_graph/semaphore-29.bin b/witness_graph/semaphore-29.bin new file mode 100644 index 0000000..a3dbf65 Binary files /dev/null and b/witness_graph/semaphore-29.bin differ diff --git a/witness_graph/semaphore-3.bin b/witness_graph/semaphore-3.bin new file mode 100644 index 0000000..4871b5c Binary files /dev/null and b/witness_graph/semaphore-3.bin differ diff --git a/witness_graph/semaphore-30.bin b/witness_graph/semaphore-30.bin new file mode 100644 index 0000000..07f9bf8 Binary files /dev/null and b/witness_graph/semaphore-30.bin differ diff --git a/witness_graph/semaphore-31.bin b/witness_graph/semaphore-31.bin new file mode 100644 index 0000000..dcf52ae Binary files /dev/null and b/witness_graph/semaphore-31.bin differ diff --git a/witness_graph/semaphore-32.bin b/witness_graph/semaphore-32.bin new file mode 100644 index 0000000..e87e68d Binary files /dev/null and b/witness_graph/semaphore-32.bin differ diff --git a/witness_graph/semaphore-4.bin b/witness_graph/semaphore-4.bin new file mode 100644 index 0000000..338fcd5 Binary files /dev/null and b/witness_graph/semaphore-4.bin differ diff --git a/witness_graph/semaphore-5.bin b/witness_graph/semaphore-5.bin new file mode 100644 index 0000000..436ae5a Binary files /dev/null and b/witness_graph/semaphore-5.bin differ diff --git a/witness_graph/semaphore-6.bin b/witness_graph/semaphore-6.bin new file mode 100644 index 0000000..277e26e Binary files /dev/null and b/witness_graph/semaphore-6.bin differ diff --git a/witness_graph/semaphore-7.bin b/witness_graph/semaphore-7.bin new file mode 100644 index 0000000..5f75f05 Binary files /dev/null and b/witness_graph/semaphore-7.bin differ diff --git a/witness_graph/semaphore-8.bin b/witness_graph/semaphore-8.bin new file mode 100644 index 0000000..f3d3109 Binary files /dev/null and b/witness_graph/semaphore-8.bin differ diff --git a/witness_graph/semaphore-9.bin b/witness_graph/semaphore-9.bin new file mode 100644 index 0000000..f814d97 Binary files /dev/null and b/witness_graph/semaphore-9.bin differ