From 7bbf5a2f2094c89a1b59553e433b84dd98180857 Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Sun, 19 May 2024 17:17:44 +0000 Subject: [PATCH 01/10] feat: replace barretenberg wasm with native schnorr signature verification --- Cargo.lock | 792 ++---------------- acvm-repo/bn254_blackbox_solver/Cargo.toml | 14 - acvm-repo/bn254_blackbox_solver/src/lib.rs | 28 +- .../bn254_blackbox_solver/src/schnorr/mod.rs | 66 ++ .../src/wasm/acvm_backend.wasm | Bin 756082 -> 0 bytes .../bn254_blackbox_solver/src/wasm/mod.rs | 332 -------- .../bn254_blackbox_solver/src/wasm/schnorr.rs | 104 --- 7 files changed, 147 insertions(+), 1189 deletions(-) create mode 100644 acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs delete mode 100755 acvm-repo/bn254_blackbox_solver/src/wasm/acvm_backend.wasm delete mode 100644 acvm-repo/bn254_blackbox_solver/src/wasm/mod.rs delete mode 100644 acvm-repo/bn254_blackbox_solver/src/wasm/schnorr.rs diff --git a/Cargo.lock b/Cargo.lock index 2e8eeb10a58..b21bc9f81c3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -117,7 +117,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" dependencies = [ - "gimli 0.27.3", + "gimli", ] [[package]] @@ -132,7 +132,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.15", "once_cell", "version_check", ] @@ -144,7 +144,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if 1.0.0", - "getrandom 0.2.10", + "getrandom 0.2.15", "once_cell", "version_check", "zerocopy", @@ -563,18 +563,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - [[package]] name = "blake2" version = "0.10.6" @@ -617,16 +605,11 @@ dependencies = [ "ark-std", "cfg-if 1.0.0", "criterion", - "getrandom 0.2.10", "hex", - "js-sys", "lazy_static", "noir_grumpkin", "num-bigint", "pprof 0.12.1", - "thiserror", - "wasm-bindgen-futures", - "wasmer", ] [[package]] @@ -693,28 +676,6 @@ version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" -[[package]] -name = "bytecheck" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627" -dependencies = [ - "bytecheck_derive", - "ptr_meta", - "simdutf8", -] - -[[package]] -name = "bytecheck_derive" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "bytecount" version = "0.6.3" @@ -850,9 +811,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.7" +version = "4.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" +checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2" dependencies = [ "clap_builder", "clap_derive", @@ -868,9 +829,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.4.7" +version = "4.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" +checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb" dependencies = [ "anstream", "anstyle", @@ -887,7 +848,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.64", ] [[package]] @@ -925,7 +886,7 @@ checksum = "fc4159b76af02757139baf42c0c971c6dc155330999fbfd8eddb29b97fb2db68" dependencies = [ "codespan-reporting", "lsp-types 0.88.0", - "url 2.4.0", + "url 2.5.0", ] [[package]] @@ -1059,19 +1020,6 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" -[[package]] -name = "corosensei" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80128832c58ea9cbd041d2a759ec449224487b2c1e400453d99d244eead87a8e" -dependencies = [ - "autocfg", - "cfg-if 1.0.0", - "libc", - "scopeguard", - "windows-sys 0.33.0", -] - [[package]] name = "cpp_demangle" version = "0.4.2" @@ -1090,89 +1038,6 @@ dependencies = [ "libc", ] -[[package]] -name = "cranelift-bforest" -version = "0.91.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2ab4512dfd3a6f4be184403a195f76e81a8a9f9e6c898e19d2dc3ce20e0115" -dependencies = [ - "cranelift-entity", -] - -[[package]] -name = "cranelift-codegen" -version = "0.91.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98b022ed2a5913a38839dfbafe6cf135342661293b08049843362df4301261dc" -dependencies = [ - "arrayvec", - "bumpalo", - "cranelift-bforest", - "cranelift-codegen-meta", - "cranelift-codegen-shared", - "cranelift-egraph", - "cranelift-entity", - "cranelift-isle", - "gimli 0.26.2", - "log", - "regalloc2", - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cranelift-codegen-meta" -version = "0.91.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "639307b45434ad112a98f8300c0f0ab085cbefcd767efcdef9ef19d4c0756e74" -dependencies = [ - "cranelift-codegen-shared", -] - -[[package]] -name = "cranelift-codegen-shared" -version = "0.91.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "278e52e29c53fcf32431ef08406c295699a70306d05a0715c5b1bf50e33a9ab7" - -[[package]] -name = "cranelift-egraph" -version = "0.91.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624b54323b06e675293939311943ba82d323bb340468ce1889be5da7932c8d73" -dependencies = [ - "cranelift-entity", - "fxhash", - "hashbrown 0.12.3", - "indexmap 1.9.3", - "log", - "smallvec", -] - -[[package]] -name = "cranelift-entity" -version = "0.91.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a59bcbca89c3f1b70b93ab3cbba5e5e0cbf3e63dadb23c7525cb142e21a9d4c" - -[[package]] -name = "cranelift-frontend" -version = "0.91.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d70abacb8cfef3dc8ff7e8836e9c1d70f7967dfdac824a4cd5e30223415aca6" -dependencies = [ - "cranelift-codegen", - "log", - "smallvec", - "target-lexicon", -] - -[[package]] -name = "cranelift-isle" -version = "0.91.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "393bc73c451830ff8dbb3a07f61843d6cb41a084f9996319917c0b291ed785bb" - [[package]] name = "crc32fast" version = "1.3.2" @@ -1252,24 +1117,11 @@ dependencies = [ "scopeguard", ] -[[package]] -name = "crossbeam-queue" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" -version = "0.8.17" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f" -dependencies = [ - "cfg-if 1.0.0", -] +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crunchy" @@ -1352,7 +1204,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.32", + "syn 2.0.64", ] [[package]] @@ -1363,20 +1215,7 @@ checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", "quote", - "syn 2.0.32", -] - -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if 1.0.0", - "hashbrown 0.14.0", - "lock_api", - "once_cell", - "parking_lot_core 0.9.8", + "syn 2.0.64", ] [[package]] @@ -1584,47 +1423,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" -[[package]] -name = "enum-iterator" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eeac5c5edb79e4e39fe8439ef35207780a11f69c52cbe424ce3dfad4cb78de6" -dependencies = [ - "enum-iterator-derive", -] - -[[package]] -name = "enum-iterator-derive" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c134c37760b27a871ba422106eedbb8247da973a09e82558bf26d619c882b159" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "enumset" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e875f1719c16de097dee81ed675e2d9bb63096823ed3f0ca827b7dea3028bbbb" -dependencies = [ - "enumset_derive", -] - -[[package]] -name = "enumset_derive" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08b6c6ab82d70f08844964ba10c7babb716de2ecaeab9be5717918a5177d3af" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn 2.0.32", -] - [[package]] name = "equivalent" version = "1.0.1" @@ -1661,12 +1459,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "fallible-iterator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" - [[package]] name = "fastrand" version = "2.0.1" @@ -1779,11 +1571,11 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ - "percent-encoding 2.3.0", + "percent-encoding 2.3.1", ] [[package]] @@ -1795,12 +1587,6 @@ dependencies = [ "libc", ] -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - [[package]] name = "futures" version = "0.1.31" @@ -1864,7 +1650,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.64", ] [[package]] @@ -1930,9 +1716,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -1941,17 +1727,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "gimli" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" -dependencies = [ - "fallible-iterator", - "indexmap 1.9.3", - "stable_deref_trait", -] - [[package]] name = "gimli" version = "0.27.3" @@ -2024,7 +1799,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.0.0", + "indexmap 2.2.6", "slab", "tokio", "tokio-util 0.7.10", @@ -2051,9 +1826,6 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.8", -] [[package]] name = "hashbrown" @@ -2066,9 +1838,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.0" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "heck" @@ -2226,9 +1998,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -2309,12 +2081,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.0" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", - "hashbrown 0.14.0", + "hashbrown 0.14.5", "serde", ] @@ -2611,12 +2383,6 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -[[package]] -name = "leb128" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" - [[package]] name = "libaes" version = "0.7.0" @@ -2625,9 +2391,9 @@ checksum = "82903360c009b816f5ab72a9b68158c27c301ee2c3f20655b55c5e589e7d3bb7" [[package]] name = "libc" -version = "0.2.151" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libm" @@ -2687,7 +2453,7 @@ dependencies = [ "serde", "serde_json", "serde_repr", - "url 2.4.0", + "url 2.5.0", ] [[package]] @@ -2700,16 +2466,7 @@ dependencies = [ "serde", "serde_json", "serde_repr", - "url 2.4.0", -] - -[[package]] -name = "mach" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" -dependencies = [ - "libc", + "url 2.5.0", ] [[package]] @@ -2742,15 +2499,6 @@ dependencies = [ "libc", ] -[[package]] -name = "memmap2" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872" -dependencies = [ - "libc", -] - [[package]] name = "memoffset" version = "0.6.5" @@ -2807,12 +2555,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "more-asserts" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" - [[package]] name = "nargo" version = "0.29.0" @@ -2917,7 +2659,7 @@ dependencies = [ "serde", "thiserror", "toml 0.7.6", - "url 2.4.0", + "url 2.5.0", ] [[package]] @@ -3053,7 +2795,7 @@ dependencies = [ "build-data", "console_error_panic_hook", "fm", - "getrandom 0.2.10", + "getrandom 0.2.15", "gloo-utils", "js-sys", "nargo", @@ -3093,7 +2835,7 @@ dependencies = [ "acvm", "build-data", "console_error_panic_hook", - "getrandom 0.2.10", + "getrandom 0.2.15", "gloo-utils", "iter-extended", "js-sys", @@ -3417,9 +3159,9 @@ checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "petgraph" @@ -3428,7 +3170,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 2.0.0", + "indexmap 2.2.6", ] [[package]] @@ -3658,30 +3400,6 @@ dependencies = [ "toml 0.5.11", ] -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro-hack" version = "0.5.20+deprecated" @@ -3690,9 +3408,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.66" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] @@ -3717,26 +3435,6 @@ dependencies = [ "unarray", ] -[[package]] -name = "ptr_meta" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" -dependencies = [ - "ptr_meta_derive", -] - -[[package]] -name = "ptr_meta_derive" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "quick-error" version = "1.2.3" @@ -3754,19 +3452,13 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.31" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - [[package]] name = "radix_trie" version = "0.2.1" @@ -3836,7 +3528,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.15", ] [[package]] @@ -3925,23 +3617,11 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.15", "redox_syscall 0.2.16", "thiserror", ] -[[package]] -name = "regalloc2" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c" -dependencies = [ - "fxhash", - "log", - "slice-group-by", - "smallvec", -] - [[package]] name = "regex" version = "1.10.3" @@ -3998,27 +3678,6 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" -[[package]] -name = "region" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76e189c2369884dce920945e2ddf79b3dff49e071a167dd1817fa9c4c00d512e" -dependencies = [ - "bitflags 1.3.2", - "libc", - "mach", - "winapi", -] - -[[package]] -name = "rend" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581008d2099240d37fb08d77ad713bcaec2c4d89d50b5b21a8bb1996bbab68ab" -dependencies = [ - "bytecheck", -] - [[package]] name = "reqwest" version = "0.11.20" @@ -4040,7 +3699,7 @@ dependencies = [ "log", "mime", "once_cell", - "percent-encoding 2.3.0", + "percent-encoding 2.3.1", "pin-project-lite", "rustls", "rustls-pemfile", @@ -4050,7 +3709,7 @@ dependencies = [ "tokio", "tokio-rustls", "tower-service", - "url 2.4.0", + "url 2.5.0", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -4114,42 +3773,13 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if 1.0.0", - "getrandom 0.2.10", + "getrandom 0.2.15", "libc", "spin 0.9.8", "untrusted 0.9.0", "windows-sys 0.52.0", ] -[[package]] -name = "rkyv" -version = "0.7.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0200c8230b013893c0b2d6213d6ec64ed2b9be2e0e016682b7224ff82cff5c58" -dependencies = [ - "bitvec", - "bytecheck", - "hashbrown 0.12.3", - "indexmap 1.9.3", - "ptr_meta", - "rend", - "rkyv_derive", - "seahash", - "tinyvec", - "uuid", -] - -[[package]] -name = "rkyv_derive" -version = "0.7.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2e06b915b5c230a17d7a736d1e2e63ee753c256a8614ef3f5147b13a4f5541d" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "rust-embed" version = "6.8.1" @@ -4170,7 +3800,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.32", + "syn 2.0.64", "walkdir", ] @@ -4391,12 +4021,6 @@ dependencies = [ "untrusted 0.7.1", ] -[[package]] -name = "seahash" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" - [[package]] name = "sec1" version = "0.3.0" @@ -4411,12 +4035,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "self_cell" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e388332cd64eb80cd595a00941baf513caffae8dce9cfd0467fc9c66397dade6" - [[package]] name = "semver" version = "1.0.20" @@ -4428,9 +4046,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.179" +version = "1.0.202" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a5bf42b8d227d4abf38a1ddb08602e229108a517cd4e5bb28f9c7eaafdce5c0" +checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" dependencies = [ "serde_derive", ] @@ -4469,26 +4087,15 @@ dependencies = [ "thiserror", ] -[[package]] -name = "serde-wasm-bindgen" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b4c031cd0d9014307d82b8abf653c0290fbdaeb4c02d00c63cf52f728628bf" -dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", -] - [[package]] name = "serde_derive" -version = "1.0.179" +version = "1.0.202" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "741e124f5485c7e60c03b043f79f320bff3527f4bbf12cf3831750dc46a0ec2c" +checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.64", ] [[package]] @@ -4510,7 +4117,7 @@ checksum = "1d89a8107374290037607734c0b73a85db7ed80cae314b3c5791f192a496e731" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.64", ] [[package]] @@ -4544,7 +4151,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.0.0", + "indexmap 2.2.6", "serde", "serde_json", "serde_with_macros", @@ -4560,7 +4167,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.64", ] [[package]] @@ -4593,16 +4200,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "shared-buffer" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6c99835bad52957e7aa241d3975ed17c1e5f8c92026377d117a606f36b84b16" -dependencies = [ - "bytes", - "memmap2 0.6.2", -] - [[package]] name = "shell-words" version = "1.1.0" @@ -4619,12 +4216,6 @@ dependencies = [ "rand_core 0.6.4", ] -[[package]] -name = "simdutf8" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" - [[package]] name = "similar" version = "2.3.0" @@ -4670,12 +4261,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "slice-group-by" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" - [[package]] name = "small-ord-set" version = "0.1.3" @@ -4807,7 +4392,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "167a4ffd7c35c143fd1030aa3c2caf76ba42220bd5a6b5f4781896434723b8c3" dependencies = [ "debugid", - "memmap2 0.5.10", + "memmap2", "stable_deref_trait", "uuid", ] @@ -4836,21 +4421,15 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.32" +version = "2.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239814284fd6f1a4ffe4ca893952cdd93c224b6a1571c9a9eadd670295c0c9e2" +checksum = "7ad3dee41f36859875573074334c200d1add8e4a87bb37113ebd31d926b7b11f" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - [[package]] name = "tar" version = "0.4.40" @@ -4862,12 +4441,6 @@ dependencies = [ "xattr", ] -[[package]] -name = "target-lexicon" -version = "0.12.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a" - [[package]] name = "tempfile" version = "3.8.0" @@ -4970,7 +4543,7 @@ checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.64", ] [[package]] @@ -5070,7 +4643,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.64", ] [[package]] @@ -5159,7 +4732,7 @@ version = "0.19.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" dependencies = [ - "indexmap 2.0.0", + "indexmap 2.2.6", "serde", "serde_spanned", "toml_datetime", @@ -5221,7 +4794,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.64", ] [[package]] @@ -5392,13 +4965,13 @@ dependencies = [ [[package]] name = "url" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", - "idna 0.4.0", - "percent-encoding 2.3.0", + "idna 0.5.0", + "percent-encoding 2.3.1", "serde", ] @@ -5499,7 +5072,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.64", "wasm-bindgen-shared", ] @@ -5533,7 +5106,7 @@ checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.64", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5568,179 +5141,6 @@ dependencies = [ "quote", ] -[[package]] -name = "wasm-encoder" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba64e81215916eaeb48fee292f29401d69235d62d8b8fd92a7b2844ec5ae5f7" -dependencies = [ - "leb128", -] - -[[package]] -name = "wasmer" -version = "4.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c15724dc25d1ee57962334aea8e41ade2675e5ea2ac6b8d42da6051b0face66" -dependencies = [ - "bytes", - "cfg-if 1.0.0", - "derivative", - "indexmap 1.9.3", - "js-sys", - "more-asserts", - "rustc-demangle", - "serde", - "serde-wasm-bindgen", - "shared-buffer", - "target-lexicon", - "thiserror", - "tracing", - "wasm-bindgen", - "wasmer-compiler", - "wasmer-compiler-cranelift", - "wasmer-derive", - "wasmer-types", - "wasmer-vm", - "wasmparser", - "wat", - "winapi", -] - -[[package]] -name = "wasmer-compiler" -version = "4.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55a7f3b3a96f8d844c25e2c032af9572306dd63fa93dc17bcca4c5458ac569bd" -dependencies = [ - "backtrace", - "bytes", - "cfg-if 1.0.0", - "enum-iterator", - "enumset", - "lazy_static", - "leb128", - "memmap2 0.5.10", - "more-asserts", - "region", - "rkyv", - "self_cell", - "shared-buffer", - "smallvec", - "thiserror", - "wasmer-types", - "wasmer-vm", - "wasmparser", - "winapi", -] - -[[package]] -name = "wasmer-compiler-cranelift" -version = "4.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "102e2c5bacac69495c4025767e2fa26797ffb27f242dccb7cf57d9cefd944386" -dependencies = [ - "cranelift-codegen", - "cranelift-entity", - "cranelift-frontend", - "gimli 0.26.2", - "more-asserts", - "rayon", - "smallvec", - "target-lexicon", - "tracing", - "wasmer-compiler", - "wasmer-types", -] - -[[package]] -name = "wasmer-derive" -version = "4.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea737fa08f95d6abc4459f42a70a9833e8974b814e74971d77ef473814f4d4c" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "wasmer-types" -version = "4.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0689110e291b0f07fc665f2824e5ff81df120848e8a9acfbf1a9bf7990773f9" -dependencies = [ - "bytecheck", - "enum-iterator", - "enumset", - "indexmap 1.9.3", - "more-asserts", - "rkyv", - "target-lexicon", - "thiserror", -] - -[[package]] -name = "wasmer-vm" -version = "4.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd41f822a1ac4242d478754e8ceba2806a00ea5072803622e1fe91e8e28b2a1" -dependencies = [ - "backtrace", - "cc", - "cfg-if 1.0.0", - "corosensei", - "crossbeam-queue", - "dashmap", - "derivative", - "enum-iterator", - "fnv", - "indexmap 1.9.3", - "lazy_static", - "libc", - "mach", - "memoffset 0.9.0", - "more-asserts", - "region", - "scopeguard", - "thiserror", - "wasmer-types", - "winapi", -] - -[[package]] -name = "wasmparser" -version = "0.121.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dbe55c8f9d0dbd25d9447a5a889ff90c0cc3feaa7395310d3d826b2c703eaab" -dependencies = [ - "bitflags 2.5.0", - "indexmap 2.0.0", - "semver", -] - -[[package]] -name = "wast" -version = "64.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a259b226fd6910225aa7baeba82f9d9933b6d00f2ce1b49b80fa4214328237cc" -dependencies = [ - "leb128", - "memchr", - "unicode-width", - "wasm-encoder", -] - -[[package]] -name = "wat" -version = "1.0.71" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53253d920ab413fca1c7dc2161d601c79b4fdf631d0ba51dd4343bf9b556c3f6" -dependencies = [ - "wast", -] - [[package]] name = "web-sys" version = "0.3.63" @@ -5797,19 +5197,6 @@ dependencies = [ "windows-targets 0.48.1", ] -[[package]] -name = "windows-sys" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43dbb096663629518eb1dfa72d80243ca5a6aca764cae62a2df70af760a9be75" -dependencies = [ - "windows_aarch64_msvc 0.33.0", - "windows_i686_gnu 0.33.0", - "windows_i686_msvc 0.33.0", - "windows_x86_64_gnu 0.33.0", - "windows_x86_64_msvc 0.33.0", -] - [[package]] name = "windows-sys" version = "0.48.0" @@ -5870,12 +5257,6 @@ version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" -[[package]] -name = "windows_aarch64_msvc" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd761fd3eb9ab8cc1ed81e56e567f02dd82c4c837e48ac3b2181b9ffc5060807" - [[package]] name = "windows_aarch64_msvc" version = "0.48.0" @@ -5888,12 +5269,6 @@ version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" -[[package]] -name = "windows_i686_gnu" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab0cf703a96bab2dc0c02c0fa748491294bf9b7feb27e1f4f96340f208ada0e" - [[package]] name = "windows_i686_gnu" version = "0.48.0" @@ -5906,12 +5281,6 @@ version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" -[[package]] -name = "windows_i686_msvc" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cfdbe89cc9ad7ce618ba34abc34bbb6c36d99e96cae2245b7943cd75ee773d0" - [[package]] name = "windows_i686_msvc" version = "0.48.0" @@ -5924,12 +5293,6 @@ version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" -[[package]] -name = "windows_x86_64_gnu" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4dd9b0c0e9ece7bb22e84d70d01b71c6d6248b81a3c60d11869451b4cb24784" - [[package]] name = "windows_x86_64_gnu" version = "0.48.0" @@ -5954,12 +5317,6 @@ version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" -[[package]] -name = "windows_x86_64_msvc" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff1e4aa646495048ec7f3ffddc411e1d829c026a2ec62b39da15c1055e406eaa" - [[package]] name = "windows_x86_64_msvc" version = "0.48.0" @@ -5991,15 +5348,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "wyz" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" -dependencies = [ - "tap", -] - [[package]] name = "xattr" version = "1.0.1" @@ -6026,7 +5374,7 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.64", ] [[package]] @@ -6046,5 +5394,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.32", + "syn 2.0.64", ] diff --git a/acvm-repo/bn254_blackbox_solver/Cargo.toml b/acvm-repo/bn254_blackbox_solver/Cargo.toml index b261be65735..931952343d4 100644 --- a/acvm-repo/bn254_blackbox_solver/Cargo.toml +++ b/acvm-repo/bn254_blackbox_solver/Cargo.toml @@ -15,7 +15,6 @@ repository.workspace = true [dependencies] acir.workspace = true acvm_blackbox_solver.workspace = true -thiserror.workspace = true cfg-if = "1.0.0" hex.workspace = true lazy_static = "1.4" @@ -26,19 +25,6 @@ ark-ec = { version = "^0.4.0", default-features = false } ark-ff = { version = "^0.4.0", default-features = false } num-bigint.workspace = true -[target.'cfg(target_arch = "wasm32")'.dependencies] -wasmer = { version = "4.2.6", default-features = false, features = [ - "js-default", -] } - -getrandom = { workspace = true, features = ["js"] } -wasm-bindgen-futures.workspace = true -js-sys.workspace = true - -[target.'cfg(not(target_arch = "wasm32"))'.dependencies] -getrandom.workspace = true -wasmer = "4.2.6" - [dev-dependencies] ark-std = { version = "^0.4.0", default-features = false } criterion = "0.5.0" diff --git a/acvm-repo/bn254_blackbox_solver/src/lib.rs b/acvm-repo/bn254_blackbox_solver/src/lib.rs index ae6fb7999a0..6610b04fdc0 100644 --- a/acvm-repo/bn254_blackbox_solver/src/lib.rs +++ b/acvm-repo/bn254_blackbox_solver/src/lib.rs @@ -2,25 +2,20 @@ #![warn(clippy::semicolon_if_nothing_returned)] #![cfg_attr(not(test), warn(unused_crate_dependencies, unused_extern_crates))] -use acir::{BlackBoxFunc, FieldElement}; +use acir::FieldElement; use acvm_blackbox_solver::{BlackBoxFunctionSolver, BlackBoxResolutionError}; mod embedded_curve_ops; mod generator; mod pedersen; mod poseidon2; -mod wasm; +mod schnorr; use ark_ec::AffineRepr; pub use embedded_curve_ops::{embedded_curve_add, multi_scalar_mul}; pub use poseidon2::poseidon2_permutation; -use wasm::Barretenberg; -use self::wasm::SchnorrSig; - -pub struct Bn254BlackBoxSolver { - blackbox_vendor: Barretenberg, -} +pub struct Bn254BlackBoxSolver; impl Bn254BlackBoxSolver { pub async fn initialize() -> Bn254BlackBoxSolver { @@ -38,8 +33,7 @@ impl Bn254BlackBoxSolver { #[cfg(not(target_arch = "wasm32"))] pub fn new() -> Bn254BlackBoxSolver { - let blackbox_vendor = Barretenberg::new(); - Bn254BlackBoxSolver { blackbox_vendor } + Bn254BlackBoxSolver } } @@ -58,16 +52,16 @@ impl BlackBoxFunctionSolver for Bn254BlackBoxSolver { signature: &[u8; 64], message: &[u8], ) -> Result { - let pub_key_bytes: Vec = - public_key_x.to_be_bytes().iter().copied().chain(public_key_y.to_be_bytes()).collect(); - - let pub_key: [u8; 64] = pub_key_bytes.try_into().unwrap(); let sig_s: [u8; 32] = signature[0..32].try_into().unwrap(); let sig_e: [u8; 32] = signature[32..64].try_into().unwrap(); - self.blackbox_vendor.verify_signature(pub_key, sig_s, sig_e, message).map_err(|err| { - BlackBoxResolutionError::Failed(BlackBoxFunc::SchnorrVerify, err.to_string()) - }) + Ok(schnorr::verify_signature( + public_key_x.into_repr(), + public_key_y.into_repr(), + sig_s, + sig_e, + message, + )) } fn pedersen_commitment( diff --git a/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs b/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs new file mode 100644 index 00000000000..8950317aba4 --- /dev/null +++ b/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs @@ -0,0 +1,66 @@ +use acvm_blackbox_solver::blake2s; +use ark_ec::{ + short_weierstrass::{Affine, SWCurveConfig}, + AffineRepr, CurveConfig, CurveGroup, +}; +use ark_ff::{BigInteger, PrimeField, Zero}; +use grumpkin::{Fq, GrumpkinParameters}; + +pub(crate) fn verify_signature( + pub_key_x: Fq, + pub_key_y: Fq, + sig_s_bytes: [u8; 32], + sig_e_bytes: [u8; 32], + message: &[u8], +) -> bool { + let pub_key = Affine::::new_unchecked(pub_key_x, pub_key_y); + + // TODO: Check for correct subgroup isn't done in Barretenberg, is it necessary? + if !pub_key.is_on_curve() + || !pub_key.is_in_correct_subgroup_assuming_on_curve() + || pub_key.is_zero() + { + return false; + } + + let sig_s = + ::ScalarField::from_be_bytes_mod_order(&sig_s_bytes); + let sig_e = + ::ScalarField::from_be_bytes_mod_order(&sig_e_bytes); + + if sig_s.is_zero() || sig_e.is_zero() { + return false; + } + + // R = g^{sig.s} • pub^{sig.e} + let r = pub_key * sig_e + GrumpkinParameters::GENERATOR * sig_s; + if r.is_zero() { + // this result implies k == 0, which would be catastrophic for the prover. + // it is a cheap check that ensures this doesn't happen. + return false; + } + + // compare the _hashes_ rather than field elements modulo r + // e = H(pedersen(r, pk.x, pk.y), m), where r = x(R) + let target_e_bytes = schnorr_generate_challenge(message, pub_key, r.into_affine()); + + sig_e_bytes == target_e_bytes +} + +fn schnorr_generate_challenge( + message: &[u8], + pubkey: Affine, + r: Affine, +) -> [u8; 32] { + // create challenge message pedersen_commitment(R.x, pubkey) + + let pedersen_hash = crate::pedersen::hash::hash_with_index( + &[*r.x().unwrap(), *pubkey.x().unwrap(), *pubkey.y().unwrap()], + 0, + ); + + let mut hash_input: Vec = pedersen_hash.into_bigint().to_bytes_be(); + hash_input.extend(message); + + blake2s(&hash_input).unwrap() +} diff --git a/acvm-repo/bn254_blackbox_solver/src/wasm/acvm_backend.wasm b/acvm-repo/bn254_blackbox_solver/src/wasm/acvm_backend.wasm deleted file mode 100755 index bcf3bbf27ee6f7331f0ab8c776fef80ff023e3d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 756082 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 z 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 z�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

dkm%X3=UgWNSw$!dVTVkgzREa8n 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 z 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 diff --git a/acvm-repo/bn254_blackbox_solver/src/wasm/mod.rs b/acvm-repo/bn254_blackbox_solver/src/wasm/mod.rs deleted file mode 100644 index e0a5c4c9069..00000000000 --- a/acvm-repo/bn254_blackbox_solver/src/wasm/mod.rs +++ /dev/null @@ -1,332 +0,0 @@ -//! ACVM execution is independent of the proving backend against which the ACIR code is being proven. -//! However there are currently a few opcodes for which there is currently no rust implementation so we must -//! use the C++ implementations included in Aztec Lab's Barretenberg library. -//! -//! As [`acvm`] includes rust implementations for these opcodes, this module can be removed. - -mod schnorr; - -pub(crate) use schnorr::SchnorrSig; - -/// The number of bytes necessary to store a `FieldElement`. -const FIELD_BYTES: usize = 32; - -#[derive(Debug, thiserror::Error)] -pub(crate) enum Error { - #[error(transparent)] - FromFeature(#[from] FeatureError), -} - -#[derive(Debug, thiserror::Error)] -pub(crate) enum FeatureError { - #[error("Trying to call {name} resulted in an error")] - FunctionCallFailed { name: String, source: wasmer::RuntimeError }, - #[error("Could not find function export named {name}")] - InvalidExport { name: String, source: wasmer::ExportError }, - #[error("No value available when value was expected")] - NoValue, - #[error("Value expected to be i32")] - InvalidI32, - #[error("Could not convert value {value} from i32 to u32")] - InvalidU32 { value: i32, source: std::num::TryFromIntError }, - #[error("Could not convert value {value} from i32 to usize")] - InvalidUsize { value: i32, source: std::num::TryFromIntError }, - #[error("Value expected to be 0 or 1 representing a boolean")] - InvalidBool, -} -#[derive(Debug, thiserror::Error)] -#[error(transparent)] -pub(crate) struct BackendError(#[from] Error); - -impl From for BackendError { - fn from(value: FeatureError) -> Self { - BackendError(Error::FromFeature(value)) - } -} - -#[derive(Debug)] -pub(crate) struct Barretenberg { - store: std::cell::RefCell, - memory: wasmer::Memory, - instance: wasmer::Instance, -} - -use std::cell::RefCell; - -use wasmer::{ - imports, Function, FunctionEnv, FunctionEnvMut, Imports, Instance, Memory, MemoryType, Store, - Value, WasmPtr, -}; - -/// The number of bytes necessary to represent a pointer to memory inside the wasm. -// pub(super) const POINTER_BYTES: usize = 4; - -/// The Barretenberg WASM gives us 1024 bytes of scratch space which we can use without -/// needing to allocate/free it ourselves. This can be useful for when we need to pass in several small variables -/// when calling functions on the wasm, however it's important to not overrun this scratch space as otherwise -/// the written data will begin to corrupt the stack. -/// -/// Using this scratch space isn't particularly safe if we have multiple threads interacting with the wasm however, -/// each thread could write to the same pointer address simultaneously. -pub(super) const WASM_SCRATCH_BYTES: usize = 1024; - -/// Embed the Barretenberg WASM file -const WASM_BIN: &[u8] = include_bytes!("./acvm_backend.wasm"); - -impl Barretenberg { - #[cfg(not(target_arch = "wasm32"))] - pub(crate) fn new() -> Barretenberg { - let (instance, memory, store) = instance_load(); - let barretenberg = Barretenberg { memory, instance, store: RefCell::new(store) }; - barretenberg.call_wasi_initialize(); - barretenberg - } - - #[cfg(target_arch = "wasm32")] - pub(crate) async fn initialize() -> Barretenberg { - let (instance, memory, store) = instance_load().await; - let barretenberg = Barretenberg { memory, instance, store: RefCell::new(store) }; - barretenberg.call_wasi_initialize(); - barretenberg - } - /// Call initialization function for WASI, to initialize all of the appropriate - /// globals. - fn call_wasi_initialize(&self) { - self.call_multiple("_initialize", vec![]) - .expect("expected call to WASI initialization function to not fail"); - } -} - -/// A wrapper around the arguments or return value from a WASM call. -/// Notice, `Option` is used because not every call returns a value, -/// some calls are simply made to free a pointer or manipulate the heap. -#[derive(Debug, Clone)] -pub(crate) struct WASMValue(Option); - -impl From for WASMValue { - fn from(value: usize) -> Self { - WASMValue(Some(Value::I32(value as i32))) - } -} - -impl From for WASMValue { - fn from(value: u32) -> Self { - WASMValue(Some(Value::I32(value as i32))) - } -} - -impl From for WASMValue { - fn from(value: i32) -> Self { - WASMValue(Some(Value::I32(value))) - } -} - -impl From for WASMValue { - fn from(value: Value) -> Self { - WASMValue(Some(value)) - } -} - -impl TryFrom for bool { - type Error = FeatureError; - - fn try_from(value: WASMValue) -> Result { - match value.try_into()? { - 0 => Ok(false), - 1 => Ok(true), - _ => Err(FeatureError::InvalidBool), - } - } -} - -impl TryFrom for usize { - type Error = FeatureError; - - fn try_from(value: WASMValue) -> Result { - let value: i32 = value.try_into()?; - value.try_into().map_err(|source| FeatureError::InvalidUsize { value, source }) - } -} - -impl TryFrom for u32 { - type Error = FeatureError; - - fn try_from(value: WASMValue) -> Result { - let value = value.try_into()?; - u32::try_from(value).map_err(|source| FeatureError::InvalidU32 { value, source }) - } -} - -impl TryFrom for i32 { - type Error = FeatureError; - - fn try_from(value: WASMValue) -> Result { - value.0.map_or(Err(FeatureError::NoValue), |val| val.i32().ok_or(FeatureError::InvalidI32)) - } -} - -impl TryFrom for Value { - type Error = FeatureError; - - fn try_from(value: WASMValue) -> Result { - value.0.ok_or(FeatureError::NoValue) - } -} - -impl Barretenberg { - /// Transfer bytes to WASM heap - // TODO: Consider making this Result-returning - pub(crate) fn transfer_to_heap(&self, data: &[u8], offset: usize) { - let memory = &self.memory; - let store = self.store.borrow(); - let memory_view = memory.view(&store); - - memory_view.write(offset as u64, data).unwrap(); - } - - // TODO: Consider making this Result-returning - pub(crate) fn read_memory(&self, start: usize) -> [u8; SIZE] { - self.read_memory_variable_length(start, SIZE) - .try_into() - .expect("Read memory should be of the specified length") - } - - // TODO: Consider making this Result-returning - pub(crate) fn read_memory_variable_length(&self, offset: usize, length: usize) -> Vec { - let memory = &self.memory; - let store = &self.store.borrow(); - let memory_view = memory.view(&store); - - let mut buf = vec![0; length]; - - memory_view.read(offset as u64, &mut buf).unwrap(); - buf - } - - pub(crate) fn call_multiple( - &self, - name: &str, - params: Vec<&WASMValue>, - ) -> Result { - // We take in a reference to values, since they do not implement Copy. - // We then clone them inside of this function, so that the API does not have a bunch of Clones everywhere - - let mut args: Vec = vec![]; - for param in params.into_iter().cloned() { - args.push(param.try_into()?); - } - let func = self - .instance - .exports - .get_function(name) - .map_err(|source| FeatureError::InvalidExport { name: name.to_string(), source })?; - let boxed_value = func.call(&mut self.store.borrow_mut(), &args).map_err(|source| { - FeatureError::FunctionCallFailed { name: name.to_string(), source } - })?; - let option_value = boxed_value.first().cloned(); - - Ok(WASMValue(option_value)) - } -} - -fn init_memory_and_state() -> (Memory, Store, Imports) { - let mut store = Store::default(); - - let mem_type = MemoryType::new(18, Some(65536), false); - let memory = Memory::new(&mut store, mem_type).unwrap(); - - let function_env = FunctionEnv::new(&mut store, memory.clone()); - let custom_imports = imports! { - "env" => { - "logstr" => Function::new_typed_with_env( - &mut store, - &function_env, - logstr, - ), - "memory" => memory.clone(), - }, - "wasi_snapshot_preview1" => { - "proc_exit" => Function::new_typed(&mut store, proc_exit), - "random_get" => Function::new_typed_with_env( - &mut store, - &function_env, - random_get - ), - }, - }; - - (memory, store, custom_imports) -} - -#[cfg(not(target_arch = "wasm32"))] -fn instance_load() -> (Instance, Memory, Store) { - use wasmer::Module; - - let (memory, mut store, custom_imports) = init_memory_and_state(); - - let module = Module::new(&store, WASM_BIN).unwrap(); - - (Instance::new(&mut store, &module, &custom_imports).unwrap(), memory, store) -} - -#[cfg(target_arch = "wasm32")] -async fn instance_load() -> (Instance, Memory, Store) { - use js_sys::WebAssembly::{self}; - use wasmer::AsJs; - - let (memory, mut store, custom_imports) = init_memory_and_state(); - - let js_bytes = unsafe { js_sys::Uint8Array::view(&WASM_BIN) }; - let js_module_promise = WebAssembly::compile(&js_bytes); - let js_module: js_sys::WebAssembly::Module = - wasm_bindgen_futures::JsFuture::from(js_module_promise).await.unwrap().into(); - - let js_instance_promise = - WebAssembly::instantiate_module(&js_module, &custom_imports.as_jsvalue(&store).into()); - let js_instance = wasm_bindgen_futures::JsFuture::from(js_instance_promise).await.unwrap(); - let module = wasmer::Module::from((js_module, WASM_BIN)); - let instance: wasmer::Instance = Instance::from_jsvalue(&mut store, &module, &js_instance) - .map_err(|_| "Error while creating BlackBox Functions vendor instance") - .unwrap(); - - (instance, memory, store) -} - -fn logstr(mut env: FunctionEnvMut, ptr: i32) { - let (memory, store) = env.data_and_store_mut(); - let memory_view = memory.view(&store); - - let log_str_wasm_ptr: WasmPtr = WasmPtr::new(ptr as u32); - - match log_str_wasm_ptr.read_utf8_string_with_nul(&memory_view) { - Ok(log_string) => println!("{log_string}"), - Err(err) => println!("Error while reading log string from memory: {err}"), - }; -} - -// Based on https://github.com/wasmerio/wasmer/blob/2.3.0/lib/wasi/src/syscalls/mod.rs#L2537 -fn random_get(mut env: FunctionEnvMut, buf_ptr: i32, buf_len: i32) -> i32 { - let mut u8_buffer = vec![0; buf_len as usize]; - let res = getrandom::getrandom(&mut u8_buffer); - match res { - Ok(()) => { - let (memory, store) = env.data_and_store_mut(); - let memory_view = memory.view(&store); - match memory_view.write(buf_ptr as u64, u8_buffer.as_mut_slice()) { - Ok(_) => { - 0_i32 // __WASI_ESUCCESS - } - Err(_) => { - 29_i32 // __WASI_EIO - } - } - } - Err(_) => { - 29_i32 // __WASI_EIO - } - } -} - -fn proc_exit(_: i32) { - unimplemented!("proc_exit is not implemented") -} diff --git a/acvm-repo/bn254_blackbox_solver/src/wasm/schnorr.rs b/acvm-repo/bn254_blackbox_solver/src/wasm/schnorr.rs deleted file mode 100644 index 18c4f04ef64..00000000000 --- a/acvm-repo/bn254_blackbox_solver/src/wasm/schnorr.rs +++ /dev/null @@ -1,104 +0,0 @@ -use super::{Barretenberg, Error, FIELD_BYTES, WASM_SCRATCH_BYTES}; - -pub(crate) trait SchnorrSig { - fn construct_signature( - &self, - message: &[u8], - private_key: [u8; 32], - ) -> Result<([u8; 32], [u8; 32]), Error>; - fn construct_public_key(&self, private_key: [u8; 32]) -> Result<[u8; 64], Error>; - fn verify_signature( - &self, - pub_key: [u8; 64], - sig_s: [u8; 32], - sig_e: [u8; 32], - message: &[u8], - ) -> Result; -} - -impl SchnorrSig for Barretenberg { - fn construct_signature( - &self, - message: &[u8], - private_key: [u8; 32], - ) -> Result<([u8; 32], [u8; 32]), Error> { - let sig_s_ptr: usize = 0; - let sig_e_ptr: usize = sig_s_ptr + FIELD_BYTES; - let private_key_ptr: usize = sig_e_ptr + FIELD_BYTES; - let message_ptr: usize = private_key_ptr + private_key.len(); - assert!( - message_ptr + message.len() < WASM_SCRATCH_BYTES, - "Message overran wasm scratch space" - ); - - self.transfer_to_heap(&private_key, private_key_ptr); - self.transfer_to_heap(message, message_ptr); - self.call_multiple( - "construct_signature", - vec![ - &message_ptr.into(), - &message.len().into(), - &private_key_ptr.into(), - &sig_s_ptr.into(), - &sig_e_ptr.into(), - ], - )?; - - let sig_s: [u8; FIELD_BYTES] = self.read_memory(sig_s_ptr); - let sig_e: [u8; FIELD_BYTES] = self.read_memory(sig_e_ptr); - - Ok((sig_s, sig_e)) - } - - #[allow(dead_code)] - fn construct_public_key(&self, private_key: [u8; 32]) -> Result<[u8; 64], Error> { - let private_key_ptr: usize = 0; - let result_ptr: usize = private_key_ptr + FIELD_BYTES; - - self.transfer_to_heap(&private_key, private_key_ptr); - - self.call_multiple( - "compute_public_key", - vec![&private_key_ptr.into(), &result_ptr.into()], - )?; - - Ok(self.read_memory(result_ptr)) - } - - fn verify_signature( - &self, - pub_key: [u8; 64], - sig_s: [u8; 32], - sig_e: [u8; 32], - message: &[u8], - ) -> Result { - let public_key_ptr: usize = 0; - let sig_s_ptr: usize = public_key_ptr + pub_key.len(); - let sig_e_ptr: usize = sig_s_ptr + sig_s.len(); - let message_ptr: usize = sig_e_ptr + sig_e.len(); - assert!( - message_ptr + message.len() < WASM_SCRATCH_BYTES, - "Message overran wasm scratch space" - ); - - self.transfer_to_heap(&pub_key, public_key_ptr); - self.transfer_to_heap(&sig_s, sig_s_ptr); - self.transfer_to_heap(&sig_e, sig_e_ptr); - self.transfer_to_heap(message, message_ptr); - - let verified = self.call_multiple( - "verify_signature", - vec![ - &message_ptr.into(), - &message.len().into(), - &public_key_ptr.into(), - &sig_s_ptr.into(), - &sig_e_ptr.into(), - ], - )?; - - // Note, currently for Barretenberg plonk, if the signature fails - // then the whole circuit fails. - Ok(verified.try_into()?) - } -} From feb32530b3f349aa60cd3392703be2d21cc15a27 Mon Sep 17 00:00:00 2001 From: TomAFrench Date: Sun, 19 May 2024 20:46:27 +0000 Subject: [PATCH 02/10] chore: add some simple tests for schnorr --- .../bn254_blackbox_solver/src/schnorr/mod.rs | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs b/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs index 8950317aba4..b00a019b28c 100644 --- a/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs +++ b/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs @@ -64,3 +64,76 @@ fn schnorr_generate_challenge( blake2s(&hash_input).unwrap() } + +#[cfg(test)] +mod schnorr_tests { + use ark_ff::MontFp; + + use super::verify_signature; + + #[test] + fn verifies_valid_signature() { + // 0x04b260954662e97f00cab9adb773a259097f7a274b83b113532bce27fa3fb96a + let pub_key_x: grumpkin::Fq = + MontFp!("2124416763957513755957069320378814719427254224313784354193701269410464905578"); + // 0x2fd51571db6c08666b0edfbfbc57d432068bccd0110a39b166ab243da0037197 + let pub_key_y: grumpkin::Fq = MontFp!( + "21635190314466406102464795369176917324283837527799356152433238205601767715223" + ); + let sig_s_bytes: [u8; 32] = [ + 1, 13, 119, 112, 212, 39, 233, 41, 84, 235, 255, 93, 245, 172, 186, 83, 157, 253, 76, + 77, 33, 128, 178, 15, 214, 67, 105, 107, 177, 234, 77, 48, + ]; + let sig_e_bytes: [u8; 32] = [ + 27, 237, 155, 84, 39, 84, 247, 27, 22, 8, 176, 230, 24, 115, 145, 220, 254, 122, 135, + 179, 171, 4, 214, 202, 64, 199, 19, 84, 239, 138, 124, 12, + ]; + let message: &[u8] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; + + assert_eq!(verify_signature(pub_key_x, pub_key_y, sig_s_bytes, sig_e_bytes, message), true) + } + + #[test] + fn rejects_zero_e() { + // 0x04b260954662e97f00cab9adb773a259097f7a274b83b113532bce27fa3fb96a + let pub_key_x: grumpkin::Fq = + MontFp!("2124416763957513755957069320378814719427254224313784354193701269410464905578"); + // 0x2fd51571db6c08666b0edfbfbc57d432068bccd0110a39b166ab243da0037197 + let pub_key_y: grumpkin::Fq = MontFp!( + "21635190314466406102464795369176917324283837527799356152433238205601767715223" + ); + let sig_s_bytes: [u8; 32] = [ + 1, 13, 119, 112, 212, 39, 233, 41, 84, 235, 255, 93, 245, 172, 186, 83, 157, 253, 76, + 77, 33, 128, 178, 15, 214, 67, 105, 107, 177, 234, 77, 48, + ]; + let sig_e_bytes: [u8; 32] = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, + ]; + let message: &[u8] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; + + assert_eq!(verify_signature(pub_key_x, pub_key_y, sig_s_bytes, sig_e_bytes, message), false) + } + + #[test] + fn rejects_zero_s() { + // 0x04b260954662e97f00cab9adb773a259097f7a274b83b113532bce27fa3fb96a + let pub_key_x: grumpkin::Fq = + MontFp!("2124416763957513755957069320378814719427254224313784354193701269410464905578"); + // 0x2fd51571db6c08666b0edfbfbc57d432068bccd0110a39b166ab243da0037197 + let pub_key_y: grumpkin::Fq = MontFp!( + "21635190314466406102464795369176917324283837527799356152433238205601767715223" + ); + let sig_s_bytes: [u8; 32] = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, + ]; + let sig_e_bytes: [u8; 32] = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, + ]; + let message: &[u8] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; + + assert_eq!(verify_signature(pub_key_x, pub_key_y, sig_s_bytes, sig_e_bytes, message), false) + } +} From 07bde4bd3acdae5d3327877219997220bf84e18e Mon Sep 17 00:00:00 2001 From: Tom French Date: Mon, 20 May 2024 17:09:07 +0100 Subject: [PATCH 03/10] chore: clippy --- acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs b/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs index b00a019b28c..e098f93137f 100644 --- a/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs +++ b/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs @@ -90,7 +90,7 @@ mod schnorr_tests { ]; let message: &[u8] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; - assert_eq!(verify_signature(pub_key_x, pub_key_y, sig_s_bytes, sig_e_bytes, message), true) + assert!(verify_signature(pub_key_x, pub_key_y, sig_s_bytes, sig_e_bytes, message)); } #[test] @@ -112,7 +112,7 @@ mod schnorr_tests { ]; let message: &[u8] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; - assert_eq!(verify_signature(pub_key_x, pub_key_y, sig_s_bytes, sig_e_bytes, message), false) + assert!(!verify_signature(pub_key_x, pub_key_y, sig_s_bytes, sig_e_bytes, message)); } #[test] @@ -134,6 +134,6 @@ mod schnorr_tests { ]; let message: &[u8] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; - assert_eq!(verify_signature(pub_key_x, pub_key_y, sig_s_bytes, sig_e_bytes, message), false) + assert!(!verify_signature(pub_key_x, pub_key_y, sig_s_bytes, sig_e_bytes, message)); } } From 15bddcbb9af3e19773cd0a12e18694dec4899612 Mon Sep 17 00:00:00 2001 From: Tom French Date: Mon, 20 May 2024 17:10:42 +0100 Subject: [PATCH 04/10] chore: remove usage of `MontFp!` --- .../bn254_blackbox_solver/src/schnorr/mod.rs | 53 +++++++++++-------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs b/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs index e098f93137f..11da99c6c83 100644 --- a/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs +++ b/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs @@ -67,19 +67,22 @@ fn schnorr_generate_challenge( #[cfg(test)] mod schnorr_tests { - use ark_ff::MontFp; + use acir::FieldElement; use super::verify_signature; #[test] fn verifies_valid_signature() { - // 0x04b260954662e97f00cab9adb773a259097f7a274b83b113532bce27fa3fb96a - let pub_key_x: grumpkin::Fq = - MontFp!("2124416763957513755957069320378814719427254224313784354193701269410464905578"); - // 0x2fd51571db6c08666b0edfbfbc57d432068bccd0110a39b166ab243da0037197 - let pub_key_y: grumpkin::Fq = MontFp!( - "21635190314466406102464795369176917324283837527799356152433238205601767715223" - ); + let pub_key_x: grumpkin::Fq = FieldElement::from_hex( + "0x04b260954662e97f00cab9adb773a259097f7a274b83b113532bce27fa3fb96a", + ) + .unwrap() + .into_repr(); + let pub_key_y: grumpkin::Fq = FieldElement::from_hex( + "0x2fd51571db6c08666b0edfbfbc57d432068bccd0110a39b166ab243da0037197", + ) + .unwrap() + .into_repr(); let sig_s_bytes: [u8; 32] = [ 1, 13, 119, 112, 212, 39, 233, 41, 84, 235, 255, 93, 245, 172, 186, 83, 157, 253, 76, 77, 33, 128, 178, 15, 214, 67, 105, 107, 177, 234, 77, 48, @@ -95,13 +98,16 @@ mod schnorr_tests { #[test] fn rejects_zero_e() { - // 0x04b260954662e97f00cab9adb773a259097f7a274b83b113532bce27fa3fb96a - let pub_key_x: grumpkin::Fq = - MontFp!("2124416763957513755957069320378814719427254224313784354193701269410464905578"); - // 0x2fd51571db6c08666b0edfbfbc57d432068bccd0110a39b166ab243da0037197 - let pub_key_y: grumpkin::Fq = MontFp!( - "21635190314466406102464795369176917324283837527799356152433238205601767715223" - ); + let pub_key_x: grumpkin::Fq = FieldElement::from_hex( + "0x04b260954662e97f00cab9adb773a259097f7a274b83b113532bce27fa3fb96a", + ) + .unwrap() + .into_repr(); + let pub_key_y: grumpkin::Fq = FieldElement::from_hex( + "0x2fd51571db6c08666b0edfbfbc57d432068bccd0110a39b166ab243da0037197", + ) + .unwrap() + .into_repr(); let sig_s_bytes: [u8; 32] = [ 1, 13, 119, 112, 212, 39, 233, 41, 84, 235, 255, 93, 245, 172, 186, 83, 157, 253, 76, 77, 33, 128, 178, 15, 214, 67, 105, 107, 177, 234, 77, 48, @@ -117,13 +123,16 @@ mod schnorr_tests { #[test] fn rejects_zero_s() { - // 0x04b260954662e97f00cab9adb773a259097f7a274b83b113532bce27fa3fb96a - let pub_key_x: grumpkin::Fq = - MontFp!("2124416763957513755957069320378814719427254224313784354193701269410464905578"); - // 0x2fd51571db6c08666b0edfbfbc57d432068bccd0110a39b166ab243da0037197 - let pub_key_y: grumpkin::Fq = MontFp!( - "21635190314466406102464795369176917324283837527799356152433238205601767715223" - ); + let pub_key_x: grumpkin::Fq = FieldElement::from_hex( + "0x04b260954662e97f00cab9adb773a259097f7a274b83b113532bce27fa3fb96a", + ) + .unwrap() + .into_repr(); + let pub_key_y: grumpkin::Fq = FieldElement::from_hex( + "0x2fd51571db6c08666b0edfbfbc57d432068bccd0110a39b166ab243da0037197", + ) + .unwrap() + .into_repr(); let sig_s_bytes: [u8; 32] = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, From d5b7a2c8bd2bc811789d0aa1333331aafd7c6fcc Mon Sep 17 00:00:00 2001 From: Tom French Date: Mon, 20 May 2024 17:13:55 +0100 Subject: [PATCH 05/10] chore: misc changes --- acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs b/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs index 11da99c6c83..3fd39f4f6d0 100644 --- a/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs +++ b/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs @@ -42,22 +42,21 @@ pub(crate) fn verify_signature( // compare the _hashes_ rather than field elements modulo r // e = H(pedersen(r, pk.x, pk.y), m), where r = x(R) - let target_e_bytes = schnorr_generate_challenge(message, pub_key, r.into_affine()); + let target_e_bytes = schnorr_generate_challenge(message, pub_key_x, pub_key_y, r.into_affine()); sig_e_bytes == target_e_bytes } fn schnorr_generate_challenge( message: &[u8], - pubkey: Affine, + pub_key_x: Fq, + pub_key_y: Fq, r: Affine, ) -> [u8; 32] { // create challenge message pedersen_commitment(R.x, pubkey) - let pedersen_hash = crate::pedersen::hash::hash_with_index( - &[*r.x().unwrap(), *pubkey.x().unwrap(), *pubkey.y().unwrap()], - 0, - ); + let r_x = *r.x().expect("r has been checked to be non-zero"); + let pedersen_hash = crate::pedersen::hash::hash_with_index(&[r_x, pub_key_x, pub_key_y], 0); let mut hash_input: Vec = pedersen_hash.into_bigint().to_bytes_be(); hash_input.extend(message); From e466809833588812724d971286bd79434cd78954 Mon Sep 17 00:00:00 2001 From: Tom French <15848336+TomAFrench@users.noreply.github.com> Date: Mon, 20 May 2024 17:33:19 +0100 Subject: [PATCH 06/10] Update acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs --- acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs b/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs index 3fd39f4f6d0..cc2b82bfc76 100644 --- a/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs +++ b/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs @@ -15,7 +15,6 @@ pub(crate) fn verify_signature( ) -> bool { let pub_key = Affine::::new_unchecked(pub_key_x, pub_key_y); - // TODO: Check for correct subgroup isn't done in Barretenberg, is it necessary? if !pub_key.is_on_curve() || !pub_key.is_in_correct_subgroup_assuming_on_curve() || pub_key.is_zero() From 9a6975123db74b3e58253628c66deaa0189b315c Mon Sep 17 00:00:00 2001 From: Tom French Date: Mon, 20 May 2024 17:54:36 +0100 Subject: [PATCH 07/10] chore: fix acvm_js build --- Cargo.lock | 1 + acvm-repo/acvm_js/Cargo.toml | 4 ++++ acvm-repo/acvm_js/src/lib.rs | 3 +++ 3 files changed, 8 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index b21bc9f81c3..16f9f9a0d53 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -100,6 +100,7 @@ dependencies = [ "build-data", "console_error_panic_hook", "const-str", + "getrandom 0.2.15", "gloo-utils", "js-sys", "pkg-config", diff --git a/acvm-repo/acvm_js/Cargo.toml b/acvm-repo/acvm_js/Cargo.toml index 1675d601351..3dc22b5cb00 100644 --- a/acvm-repo/acvm_js/Cargo.toml +++ b/acvm-repo/acvm_js/Cargo.toml @@ -29,6 +29,10 @@ tracing-web.workspace = true const-str = "0.5.5" +# This is an unused dependency, we are adding it +# so that we can enable the js feature in getrandom. +getrandom = { workspace = true, features = ["js"] } + [build-dependencies] build-data.workspace = true pkg-config = "0.3" diff --git a/acvm-repo/acvm_js/src/lib.rs b/acvm-repo/acvm_js/src/lib.rs index 66a4388b132..3b8210f4875 100644 --- a/acvm-repo/acvm_js/src/lib.rs +++ b/acvm-repo/acvm_js/src/lib.rs @@ -2,6 +2,9 @@ #![warn(clippy::semicolon_if_nothing_returned)] #![cfg_attr(not(test), warn(unused_crate_dependencies, unused_extern_crates))] +// See Cargo.toml for explanation. +use getrandom as _; + mod black_box_solvers; mod build_info; mod compression; From 10e16c7fd399abb1f47941c4cf8444cd5c4fbecc Mon Sep 17 00:00:00 2001 From: Tom French Date: Mon, 20 May 2024 22:19:59 +0100 Subject: [PATCH 08/10] chore: fix --- Cargo.lock | 1 - acvm-repo/bn254_blackbox_solver/Cargo.toml | 1 - acvm-repo/bn254_blackbox_solver/src/lib.rs | 12 +----------- 3 files changed, 1 insertion(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 16f9f9a0d53..6b817cf6c81 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -604,7 +604,6 @@ dependencies = [ "ark-ec", "ark-ff", "ark-std", - "cfg-if 1.0.0", "criterion", "hex", "lazy_static", diff --git a/acvm-repo/bn254_blackbox_solver/Cargo.toml b/acvm-repo/bn254_blackbox_solver/Cargo.toml index 931952343d4..7f71a17c0e8 100644 --- a/acvm-repo/bn254_blackbox_solver/Cargo.toml +++ b/acvm-repo/bn254_blackbox_solver/Cargo.toml @@ -15,7 +15,6 @@ repository.workspace = true [dependencies] acir.workspace = true acvm_blackbox_solver.workspace = true -cfg-if = "1.0.0" hex.workspace = true lazy_static = "1.4" diff --git a/acvm-repo/bn254_blackbox_solver/src/lib.rs b/acvm-repo/bn254_blackbox_solver/src/lib.rs index 6610b04fdc0..eebc65db141 100644 --- a/acvm-repo/bn254_blackbox_solver/src/lib.rs +++ b/acvm-repo/bn254_blackbox_solver/src/lib.rs @@ -19,16 +19,7 @@ pub struct Bn254BlackBoxSolver; impl Bn254BlackBoxSolver { pub async fn initialize() -> Bn254BlackBoxSolver { - // We fallback to the sync initialization of barretenberg on non-wasm targets. - // This ensures that wasm packages consuming this still build on the default target (useful for linting, etc.) - cfg_if::cfg_if! { - if #[cfg(target_arch = "wasm32")] { - let blackbox_vendor = Barretenberg::initialize().await; - Bn254BlackBoxSolver { blackbox_vendor } - } else { - Bn254BlackBoxSolver::new() - } - } + Bn254BlackBoxSolver } #[cfg(not(target_arch = "wasm32"))] @@ -54,7 +45,6 @@ impl BlackBoxFunctionSolver for Bn254BlackBoxSolver { ) -> Result { let sig_s: [u8; 32] = signature[0..32].try_into().unwrap(); let sig_e: [u8; 32] = signature[32..64].try_into().unwrap(); - Ok(schnorr::verify_signature( public_key_x.into_repr(), public_key_y.into_repr(), From 1d6f8131c70fa327c5e6b0a62ed7b748e7d364bf Mon Sep 17 00:00:00 2001 From: Tom French <15848336+TomAFrench@users.noreply.github.com> Date: Tue, 21 May 2024 15:53:55 +0100 Subject: [PATCH 09/10] Update acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs Co-authored-by: Maxim Vezenov --- acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs b/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs index cc2b82bfc76..65fda7d39a8 100644 --- a/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs +++ b/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs @@ -32,7 +32,7 @@ pub(crate) fn verify_signature( } // R = g^{sig.s} • pub^{sig.e} - let r = pub_key * sig_e + GrumpkinParameters::GENERATOR * sig_s; + let r = GrumpkinParameters::GENERATOR * sig_s + pub_key * sig_e; if r.is_zero() { // this result implies k == 0, which would be catastrophic for the prover. // it is a cheap check that ensures this doesn't happen. From 20b87914d0e59bbdcd9d33f012018e98c363d896 Mon Sep 17 00:00:00 2001 From: Tom French <15848336+TomAFrench@users.noreply.github.com> Date: Tue, 21 May 2024 15:54:07 +0100 Subject: [PATCH 10/10] Update acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs Co-authored-by: Maxim Vezenov --- acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs b/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs index 65fda7d39a8..cb213726973 100644 --- a/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs +++ b/acvm-repo/bn254_blackbox_solver/src/schnorr/mod.rs @@ -40,7 +40,7 @@ pub(crate) fn verify_signature( } // compare the _hashes_ rather than field elements modulo r - // e = H(pedersen(r, pk.x, pk.y), m), where r = x(R) + // e = H(pedersen(r, pk.x, pk.y), m), where r = R.x let target_e_bytes = schnorr_generate_challenge(message, pub_key_x, pub_key_y, r.into_affine()); sig_e_bytes == target_e_bytes