diff --git a/Cargo.lock b/Cargo.lock index a1e17634..8b9d4417 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5,17 +5,19 @@ version = 3 [[package]] name = "acir" version = "0.1.0" -source = "git+https://github.com/noir-lang/noir?rev=cc5ee63072e09779bebd7e7dd054ae16be307d7f#cc5ee63072e09779bebd7e7dd054ae16be307d7f" +source = "git+https://github.com/noir-lang/noir?rev=7460dda929130589bccfd6619f9409834b72a135#7460dda929130589bccfd6619f9409834b72a135" dependencies = [ + "flate2", "indexmap", "noir_field", + "rmp-serde", "serde", ] [[package]] name = "acvm" version = "0.1.0" -source = "git+https://github.com/noir-lang/noir?rev=cc5ee63072e09779bebd7e7dd054ae16be307d7f#cc5ee63072e09779bebd7e7dd054ae16be307d7f" +source = "git+https://github.com/noir-lang/noir?rev=7460dda929130589bccfd6619f9409834b72a135#7460dda929130589bccfd6619f9409834b72a135" dependencies = [ "acir", "blake2", @@ -176,7 +178,7 @@ dependencies = [ "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.5.4", "object 0.29.0", "rustc-demangle", ] @@ -719,6 +721,16 @@ dependencies = [ "subtle", ] +[[package]] +name = "flate2" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +dependencies = [ + "crc32fast", + "miniz_oxide 0.6.2", +] + [[package]] name = "fnv" version = "1.0.7" @@ -1238,6 +1250,15 @@ dependencies = [ "adler", ] +[[package]] +name = "miniz_oxide" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +dependencies = [ + "adler", +] + [[package]] name = "mio" version = "0.8.5" @@ -1277,7 +1298,7 @@ dependencies = [ [[package]] name = "noir_field" version = "0.1.0" -source = "git+https://github.com/noir-lang/noir?rev=cc5ee63072e09779bebd7e7dd054ae16be307d7f#cc5ee63072e09779bebd7e7dd054ae16be307d7f" +source = "git+https://github.com/noir-lang/noir?rev=7460dda929130589bccfd6619f9409834b72a135#7460dda929130589bccfd6619f9409834b72a135" dependencies = [ "ark-bn254", "ark-ff", @@ -1761,6 +1782,28 @@ dependencies = [ "syn", ] +[[package]] +name = "rmp" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44519172358fd6d58656c86ab8e7fbc9e1490c3e8f14d35ed78ca0dd07403c9f" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5b13be192e0220b8afb7222aa5813cb62cc269ebb5cac346ca6487681d2913e" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + [[package]] name = "rustc-demangle" version = "0.1.21" diff --git a/barretenberg_static_lib/Cargo.lock b/barretenberg_static_lib/Cargo.lock index fa9ec436..369fd23d 100644 --- a/barretenberg_static_lib/Cargo.lock +++ b/barretenberg_static_lib/Cargo.lock @@ -5,17 +5,19 @@ version = 3 [[package]] name = "acir" version = "0.1.0" -source = "git+https://github.com/noir-lang/noir?rev=cc5ee63072e09779bebd7e7dd054ae16be307d7f#cc5ee63072e09779bebd7e7dd054ae16be307d7f" +source = "git+https://github.com/noir-lang/noir?rev=7460dda929130589bccfd6619f9409834b72a135#7460dda929130589bccfd6619f9409834b72a135" dependencies = [ + "flate2", "indexmap", "noir_field", + "rmp-serde", "serde", ] [[package]] name = "acvm" version = "0.1.0" -source = "git+https://github.com/noir-lang/noir?rev=cc5ee63072e09779bebd7e7dd054ae16be307d7f#cc5ee63072e09779bebd7e7dd054ae16be307d7f" +source = "git+https://github.com/noir-lang/noir?rev=7460dda929130589bccfd6619f9409834b72a135#7460dda929130589bccfd6619f9409834b72a135" dependencies = [ "acir", "blake2", @@ -29,6 +31,12 @@ dependencies = [ "sled", ] +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "aho-corasick" version = "0.7.19" @@ -163,7 +171,7 @@ dependencies = [ [[package]] name = "barretenberg_wrapper" version = "0.1.0" -source = "git+https://github.com/noir-lang/aztec-connect?rev=f12f3e6b838330ea8094284f7a3c0fcc346d46fe#f12f3e6b838330ea8094284f7a3c0fcc346d46fe" +source = "git+https://github.com/noir-lang/aztec-connect?rev=47178e9b4d57e9285c5e059dda5cf0a66392c457#47178e9b4d57e9285c5e059dda5cf0a66392c457" dependencies = [ "bindgen", "cmake", @@ -584,6 +592,16 @@ dependencies = [ "subtle", ] +[[package]] +name = "flate2" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "fnv" version = "1.0.7" @@ -1041,6 +1059,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +dependencies = [ + "adler", +] + [[package]] name = "mio" version = "0.8.5" @@ -1074,7 +1101,7 @@ dependencies = [ [[package]] name = "noir_field" version = "0.1.0" -source = "git+https://github.com/noir-lang/noir?rev=cc5ee63072e09779bebd7e7dd054ae16be307d7f#cc5ee63072e09779bebd7e7dd054ae16be307d7f" +source = "git+https://github.com/noir-lang/noir?rev=7460dda929130589bccfd6619f9409834b72a135#7460dda929130589bccfd6619f9409834b72a135" dependencies = [ "ark-bn254", "ark-ff", @@ -1443,6 +1470,28 @@ dependencies = [ "winreg", ] +[[package]] +name = "rmp" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44519172358fd6d58656c86ab8e7fbc9e1490c3e8f14d35ed78ca0dd07403c9f" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5b13be192e0220b8afb7222aa5813cb62cc269ebb5cac346ca6487681d2913e" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + [[package]] name = "rustc-hash" version = "1.1.0" diff --git a/barretenberg_static_lib/Cargo.toml b/barretenberg_static_lib/Cargo.toml index bb6d99a7..a22662f2 100644 --- a/barretenberg_static_lib/Cargo.toml +++ b/barretenberg_static_lib/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" [dependencies] common = { path = "../common" } -barretenberg_wrapper = { git = "https://github.com/noir-lang/aztec-connect", rev = "f12f3e6b838330ea8094284f7a3c0fcc346d46fe" } +barretenberg_wrapper = { git = "https://github.com/noir-lang/aztec-connect", rev = "d79bbda6ec1fae6650256479a5f044843912ae2c" } sha2 = "0.9.3" blake2 = "0.9.1" diff --git a/barretenberg_static_lib/src/acvm_interop/proof_system.rs b/barretenberg_static_lib/src/acvm_interop/proof_system.rs index 37db69e2..51837eb9 100644 --- a/barretenberg_static_lib/src/acvm_interop/proof_system.rs +++ b/barretenberg_static_lib/src/acvm_interop/proof_system.rs @@ -58,7 +58,9 @@ impl ProofSystemCompiler for Plonk { fn get_exact_circuit_size(&self, circuit: Circuit) -> u32 { let constraint_system = serialise_circuit(&circuit); - let circuit_size = StandardComposer::get_exact_circuit_size(&constraint_system); + let mut composer = StandardComposer::new(constraint_system); + + let circuit_size = composer.get_exact_circuit_size(); circuit_size } diff --git a/barretenberg_static_lib/src/composer.rs b/barretenberg_static_lib/src/composer.rs index 1cf6e01c..dd49ddde 100644 --- a/barretenberg_static_lib/src/composer.rs +++ b/barretenberg_static_lib/src/composer.rs @@ -69,10 +69,10 @@ impl StandardComposer { } } - pub fn get_exact_circuit_size(constraint_system: &ConstraintSystem) -> u32 { + pub fn get_exact_circuit_size(&self) -> u32 { unsafe { barretenberg_wrapper::composer::get_exact_circuit_size( - constraint_system.to_bytes().as_slice().as_ptr(), + self.constraint_system.to_bytes().as_slice().as_ptr(), ) } } diff --git a/barretenberg_wasm/src/acvm_interop/proof_system.rs b/barretenberg_wasm/src/acvm_interop/proof_system.rs index 35b26488..05b14a5e 100644 --- a/barretenberg_wasm/src/acvm_interop/proof_system.rs +++ b/barretenberg_wasm/src/acvm_interop/proof_system.rs @@ -51,4 +51,14 @@ impl ProofSystemCompiler for Plonk { fn np_language(&self) -> Language { Language::PLONKCSat { width: 3 } } + + fn get_exact_circuit_size(&self, circuit: Circuit) -> u32 { + let constraint_system = serialise_circuit(&circuit); + + let mut composer = StandardComposer::new(constraint_system); + + let circuit_size = composer.get_exact_circuit_size(); + + circuit_size + } } diff --git a/barretenberg_wasm/src/barretenberg.wasm b/barretenberg_wasm/src/barretenberg.wasm index 44f2589a..23a50b80 100755 Binary files a/barretenberg_wasm/src/barretenberg.wasm and b/barretenberg_wasm/src/barretenberg.wasm differ diff --git a/barretenberg_wasm/src/composer.rs b/barretenberg_wasm/src/composer.rs index f00b5e46..3b96f6e1 100644 --- a/barretenberg_wasm/src/composer.rs +++ b/barretenberg_wasm/src/composer.rs @@ -102,6 +102,31 @@ impl StandardComposer { } } + pub fn get_exact_circuit_size(&mut self) -> u32 { + let cs_buf = self.constraint_system.to_bytes(); + let cs_ptr = self.barretenberg.allocate(&cs_buf); + + let func = self + .barretenberg + .instance + .exports + .get_function("standard_example__get_exact_circuit_size") + .unwrap(); + + let params: Vec<_> = vec![cs_ptr.clone()]; + match func.call(¶ms) { + Ok(vals) => { + let i32_bytes = vals.first().cloned().unwrap().unwrap_i32().to_be_bytes(); + let u32_val = u32::from_be_bytes(i32_bytes); + self.barretenberg.free(cs_ptr); + u32_val + } + Err(_) => { + unreachable!("failed on standard_example__get_exact_circuit_size call"); + } + } + } + pub fn create_proof(&mut self, witness: WitnessAssignments) -> Vec { let now = std::time::Instant::now(); diff --git a/barretenberg_wasm/src/pedersen.rs b/barretenberg_wasm/src/pedersen.rs index a4d4fa15..fb90c7c1 100644 --- a/barretenberg_wasm/src/pedersen.rs +++ b/barretenberg_wasm/src/pedersen.rs @@ -46,3 +46,20 @@ impl Barretenberg { (point_x, point_y) } } + +#[test] +fn pedersen_hash_to_point() { + let mut barretenberg = Barretenberg::new(); + let (x, y) = barretenberg.encrypt(vec![FieldElement::zero(), FieldElement::one()]); + let expected_x = FieldElement::from_hex( + "0x229fb88be21cec523e9223a21324f2e305aea8bff9cdbcb3d0c6bba384666ea1", + ) + .unwrap(); + let expected_y = FieldElement::from_hex( + "0x296b4b4605e586a91caa3202baad557628a8c56d0a1d6dff1a7ca35aed3029d5", + ) + .unwrap(); + + assert_eq!(expected_x.to_hex(), x.to_hex()); + assert_eq!(expected_y.to_hex(), y.to_hex()); +} diff --git a/common/Cargo.toml b/common/Cargo.toml index 902d515c..fb4f3710 100644 --- a/common/Cargo.toml +++ b/common/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -acvm = { git = "https://github.com/noir-lang/noir", rev = "cc5ee63072e09779bebd7e7dd054ae16be307d7f", features = [ +acvm = { git = "https://github.com/noir-lang/noir", rev = "7460dda929130589bccfd6619f9409834b72a135", features = [ "bn254", ] }