diff --git a/Cargo.lock b/Cargo.lock index 024d2d84..50cb0c75 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1478,7 +1478,7 @@ version = "0.1.0" source = "git+https://github.com/starkware-libs/stwo-circuits?rev=2591775#2591775ae8fd7634eda7b77c471f87c163f65eb1" dependencies = [ "blake2", - "hashbrown 0.15.5", + "hashbrown 0.17.0", "indexmap", "itertools 0.12.1", "num-traits", @@ -1491,7 +1491,7 @@ version = "0.1.0" source = "git+https://github.com/starkware-libs/stwo-circuits?rev=2591775#2591775ae8fd7634eda7b77c471f87c163f65eb1" dependencies = [ "circuits", - "hashbrown 0.15.5", + "hashbrown 0.17.0", "indexmap", "itertools 0.12.1", "num-traits", @@ -1805,6 +1805,12 @@ dependencies = [ "crypto-common 0.2.1", ] +[[package]] +name = "dissimilar" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aeda16ab4059c5fd2a83f2b9c9e9c981327b18aa8e3b313f7e6563799d4f093e" + [[package]] name = "downcast" version = "0.11.0" @@ -1938,6 +1944,16 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "expect-test" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63af43ff4431e848fb47472a920f14fa71c24de13255a5692e93d4e90302acb0" +dependencies = [ + "dissimilar", + "once_cell", +] + [[package]] name = "fastrand" version = "2.4.1" @@ -2265,7 +2281,6 @@ dependencies = [ "allocator-api2", "equivalent", "foldhash 0.1.5", - "serde", ] [[package]] @@ -3177,6 +3192,7 @@ dependencies = [ "circuits-stark-verifier", "clap", "ctor", + "expect-test", "itertools 0.12.1", "log", "mockall", @@ -4158,7 +4174,7 @@ dependencies = [ "dashmap", "educe 0.5.11", "fnv", - "hashbrown 0.15.5", + "hashbrown 0.17.0", "hex", "indexmap", "itertools 0.12.1", @@ -4187,7 +4203,7 @@ dependencies = [ "dashmap", "educe 0.5.11", "fnv", - "hashbrown 0.15.5", + "hashbrown 0.17.0", "hex", "indexmap", "itertools 0.12.1", @@ -4465,7 +4481,7 @@ name = "stwo-constraint-framework" version = "2.1.0" source = "git+https://github.com/starkware-libs/stwo?rev=aeceb74c#aeceb74c58184d7886ebd7f34a7453fee714ca40" dependencies = [ - "hashbrown 0.15.5", + "hashbrown 0.17.0", "itertools 0.12.1", "num-traits", "rand 0.8.6", @@ -4481,7 +4497,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47aca0d5d36d4b015703fb14f162a23cb685e67f8aa08dbe7faf39bd66fe93f1" dependencies = [ - "hashbrown 0.15.5", + "hashbrown 0.17.0", "itertools 0.12.1", "num-traits", "rand 0.8.6", diff --git a/Cargo.toml b/Cargo.toml index a0d2fd02..416b404e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,6 +42,7 @@ tracing = "0.1.40" tracing-subscriber = { version = "0.3", features = ["env-filter"] } mockall = "0.13.1" rstest = "0.21" +expect-test = "1.4" # cairo-vm cairo-vm = { version = "=3.2.0", features = [ diff --git a/crates/privacy_circuit_verify/src/consts.rs b/crates/privacy_circuit_verify/src/consts.rs index 52af948b..afae4ed5 100644 --- a/crates/privacy_circuit_verify/src/consts.rs +++ b/crates/privacy_circuit_verify/src/consts.rs @@ -23,6 +23,8 @@ pub const MAX_CAIRO_PROOF_UNCOMPRESSED_BYTES: usize = pub const MAX_RECURSIVE_PROOF_UNCOMPRESSED_BYTES: usize = RECURSIVE_PROOF_UNCOMPRESSED_BYTES * PROOF_MAX_DECOMPRESSED_RATIO; +// See comment in privacy_prove::tests::test_privacy_bootloader_program_hash_snapshot for more +// details on how this file was compiled. pub const PRIVACY_BOOTLOADER_JSON: &[u8] = include_bytes!( "../../cairo-program-runner-lib/resources/compiled_programs/bootloaders/privacy_simple_bootloader_compiled.json" ); diff --git a/crates/privacy_prove/Cargo.toml b/crates/privacy_prove/Cargo.toml index 345b2746..6bd026a4 100644 --- a/crates/privacy_prove/Cargo.toml +++ b/crates/privacy_prove/Cargo.toml @@ -56,6 +56,7 @@ stwo = { git = "https://github.com/starkware-libs/stwo", rev = "aeceb74c", featu [dev-dependencies] ctor.workspace = true +expect-test.workspace = true mockall.workspace = true rstest.workspace = true tracing-subscriber.workspace = true diff --git a/crates/privacy_prove/src/tests.rs b/crates/privacy_prove/src/tests.rs index 32638c06..e3631b26 100644 --- a/crates/privacy_prove/src/tests.rs +++ b/crates/privacy_prove/src/tests.rs @@ -1,3 +1,30 @@ +#[test] +fn test_privacy_bootloader_program_hash_snapshot() { + use cairo_program_runner_lib::compute_program_hash_chain; + use cairo_program_runner_lib::types::HashFunc; + use expect_test::expect; + use privacy_circuit_verify::get_privacy_bootloader_program; + + let bootloader_program = get_privacy_bootloader_program().unwrap(); + let stripped_program = bootloader_program.get_stripped_program().unwrap(); + let program_hash = compute_program_hash_chain(&stripped_program, 0, HashFunc::Blake) + .expect("Failed to compute program hash."); + + // Source code for the compiled privacy bootloader producing the following hash can be found at + // Starkware's internal main repo at commit "f65af209cc2a245a7d1c90711b49555ade65dd8c". + // Branch: "dev". + // md5sum of "privacy_simple_bootloader_compiled.json": "88560d8862eb38dc482096b868f5ef7e" + // Compiled with cairo-compile v0.14.2 (from same commit as the bootloader): + // cairo-compile privacy_simple_bootloader.cairo \ + // --output privacy_simple_bootloader_compiled.json \ + // --cairo_path \ + // --debug_info_with_source \ + // --proof_mode + let expected_hash_str = + expect!["1890025921478295787236140635548238999754587527337379830429702962129599171727"]; + expected_hash_str.assert_eq(&program_hash.to_string()); +} + #[cfg(feature = "slow-tests")] pub mod slow_tests { use std::path::PathBuf;