diff --git a/Cargo.lock b/Cargo.lock index 23784cfc663..ed31ba37f19 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4820,7 +4820,7 @@ dependencies = [ [[package]] name = "mithril-stm" -version = "0.12.6" +version = "0.12.7" dependencies = [ "anyhow", "blake2 0.10.6", diff --git a/mithril-common/Cargo.toml b/mithril-common/Cargo.toml index 92a06bb14d4..bf9781bfbe7 100644 --- a/mithril-common/Cargo.toml +++ b/mithril-common/Cargo.toml @@ -51,7 +51,7 @@ fixed = "1.31.0" hex = { workspace = true } kes-summed-ed25519 = { version = "0.2.1", features = ["serde_enabled", "sk_clone_enabled"] } mithril-merkle-tree = { path = "../internal/mithril-merkle-tree", version = "0.1.4" } -mithril-stm = { path = "../mithril-stm", version = "0.12.6", default-features = false } +mithril-stm = { path = "../mithril-stm", version = "0.12.7", default-features = false } nom = "8.0.0" rand_chacha = { workspace = true } rand_core = { workspace = true } diff --git a/mithril-stm/CHANGELOG.md b/mithril-stm/CHANGELOG.md index 26676531dff..14abd8205d7 100644 --- a/mithril-stm/CHANGELOG.md +++ b/mithril-stm/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 0.12.7 (08-19-2026) + +### Changed + +- Updated the slow certificate proof tests to verify the committed golden proof instead of each generating its own, which removes eight proof generations from the test suite. +- Moved the golden certificate proof tests out of the slow test tier so that they run on every pull request. + ## 0.12.5 (08-05-2026) ### Changed diff --git a/mithril-stm/Cargo.toml b/mithril-stm/Cargo.toml index a918811d356..33a2ccb1989 100644 --- a/mithril-stm/Cargo.toml +++ b/mithril-stm/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mithril-stm" -version = "0.12.6" +version = "0.12.7" edition = { workspace = true } authors = { workspace = true } homepage = { workspace = true } diff --git a/mithril-stm/src/proof_system/halo2_snark/proof.rs b/mithril-stm/src/proof_system/halo2_snark/proof.rs index 3cd192b3942..6f0c1726d42 100644 --- a/mithril-stm/src/proof_system/halo2_snark/proof.rs +++ b/mithril-stm/src/proof_system/halo2_snark/proof.rs @@ -388,6 +388,19 @@ mod tests { !proof.circuit_proof.is_empty(), "Proof bytes should not be empty" ); + + // Every other `prepare_and_check` test runs on the committed golden proof, so this is + // the only coverage of it against a freshly produced one. + let avk = clerk.compute_aggregate_verification_key_for_snark(); + let dual_msm = proof + .prepare_and_check( + &message, + &avk, + prover.verification_key(), + &prover.verifier_params(), + ) + .expect("prepare_and_check should succeed on a freshly produced proof"); + assert!(dual_msm.check(&prover.verifier_params())); } #[test] @@ -440,34 +453,6 @@ mod tests { .expect("SNARK proof verification should succeed"); } - #[test] - fn valid_proof_verifies() { - let mut rng = ChaCha20Rng::from_seed([0u8; 32]); - let params = Parameters { - m: 200, - k: 3, - phi_f: 0.8, - }; - let nparties = 10; - let message = [1u8; 32]; - let (signers, clerk) = setup_signers_and_clerk(params, nparties, &mut rng); - let signatures = collect_signatures(&signers, &message); - let avk = clerk.compute_aggregate_verification_key_for_snark(); - let mut prover = create_prover(params, [0u8; 32]); - - let snark_proof = prover - .aggregate_signatures::(&clerk, &signatures, &message) - .unwrap(); - let result = snark_proof.verify( - message.as_slice(), - &avk, - &snark_verifier_data(&prover), - &prover.verifier_params(), - ); - - assert!(result.is_ok()); - } - #[test] fn different_parameters_prove_and_verify_fails() { let mut rng = ChaCha20Rng::from_seed([0u8; 32]); @@ -507,65 +492,209 @@ mod tests { } #[test] - fn verify_fails_with_random_bytes_or_wrong_number_bytes() { + fn non_deterministic_proofs_verify() { let mut rng = ChaCha20Rng::from_seed([0u8; 32]); let params = Parameters { - m: 200, - k: 3, + m: 100, + k: 5, phi_f: 0.8, }; let nparties = 10; let message = [1u8; 32]; let (signers, clerk) = setup_signers_and_clerk(params, nparties, &mut rng); let signatures = collect_signatures(&signers, &message); - let avk: AggregateVerificationKeyForSnark = - clerk.compute_aggregate_verification_key_for_snark(); - let mut prover = create_prover(params, [0u8; 32]); - let snark_proof = prover + let avk = clerk.compute_aggregate_verification_key_for_snark(); + + let mut prover_1 = create_prover(params, [0u8; 32]); + + let snark_proof_1 = prover_1 + .aggregate_signatures::(&clerk, &signatures, &message) + .unwrap(); + let snark_proof_2 = prover_1 .aggregate_signatures::(&clerk, &signatures, &message) .unwrap(); - let mut random_bytes = vec![0u8; snark_proof.circuit_proof.len()]; - rng.fill_bytes(&mut random_bytes); - let random_proof = SnarkProof::new(random_bytes, params, MERKLE_TREE_DEPTH_FOR_SNARK); - let result = random_proof.verify( - message.as_slice(), - &avk, - &snark_verifier_data(&prover), - &prover.verifier_params(), + assert!( + snark_proof_1 + .verify( + &message, + &avk, + &snark_verifier_data(&prover_1), + &prover_1.verifier_params() + ) + .is_ok() + ); + assert!( + snark_proof_2 + .verify( + &message, + &avk, + &snark_verifier_data(&prover_1), + &prover_1.verifier_params() + ) + .is_ok() + ); + assert_ne!( + snark_proof_1.circuit_proof, snark_proof_2.circuit_proof, + "The two proofs are different but both verify." + ); + } + } + + mod golden { + use super::*; + use crate::{ + AggregateSignature, AggregateVerificationKey, AggregateVerificationKeyForSnark, + AncillaryVerifierData, Clerk, + circuits::halo2::{ + NON_RECURSIVE_CIRCUIT_VERIFICATION_KEY_FOR_PRODUCTION, + keys::NonRecursiveCircuitVerifyingKey, + }, + codec::TryFromBytes, + proof_system::SnarkVerifierSetup, + }; + + const GOLDEN_PROOF_JSON: &str = r#"{"circuit_proof":[150,93,68,35,170,172,196,75,29,57,124,230,155,69,12,183,213,117,50,30,57,211,201,253,244,46,97,220,163,144,229,49,133,249,73,185,24,17,222,122,101,133,108,55,153,118,94,219,162,125,254,250,172,198,62,5,45,154,75,151,161,13,37,155,107,216,139,226,190,165,103,133,223,119,174,161,136,8,42,208,225,94,96,156,184,211,96,30,62,67,252,37,249,201,232,37,172,16,209,180,238,247,40,118,253,209,107,149,106,244,37,9,64,135,40,209,136,221,83,45,0,146,253,100,162,152,229,116,242,169,74,94,5,98,242,1,200,248,64,214,187,231,168,43,148,151,215,99,146,97,47,32,105,25,5,247,193,134,105,1,183,164,153,20,190,163,240,188,139,252,86,90,143,47,124,16,58,16,52,87,63,43,205,44,69,229,192,55,172,120,222,179,134,52,185,111,63,180,19,99,45,148,205,169,100,168,35,41,145,160,51,99,25,78,156,250,39,84,181,112,13,228,106,79,67,184,66,42,152,148,233,170,161,59,181,147,24,125,188,117,161,188,210,115,75,229,18,48,39,77,192,221,160,77,181,167,210,92,108,47,149,194,119,158,182,84,35,123,138,151,240,221,12,24,193,146,69,37,142,63,198,3,94,251,204,219,143,188,169,105,44,246,81,173,147,10,132,138,112,52,165,244,63,115,199,170,159,5,12,145,67,35,70,205,132,7,128,56,149,162,205,113,72,214,59,237,40,76,170,216,144,179,90,244,252,204,171,164,212,225,224,174,207,97,185,138,204,202,197,59,87,109,21,84,99,93,59,231,249,114,135,206,206,171,210,174,171,159,113,157,126,194,234,18,66,3,88,140,224,217,54,114,10,121,175,149,155,25,226,198,116,9,195,209,190,238,71,78,215,128,60,67,220,92,73,172,55,118,86,99,118,186,190,74,125,77,217,213,187,68,44,235,197,177,77,121,224,208,130,123,87,63,151,18,49,164,169,201,14,177,137,174,173,132,210,95,140,94,52,208,22,17,245,190,126,131,183,222,34,151,105,133,124,236,197,205,12,185,139,100,165,231,194,237,249,239,242,108,165,2,173,157,99,248,173,23,168,237,70,29,95,186,199,25,174,247,226,101,104,8,182,61,130,17,44,101,15,89,77,22,8,135,29,144,158,194,103,161,64,90,142,114,195,161,207,172,76,149,139,55,188,40,237,250,228,65,155,187,72,194,194,153,146,8,195,52,53,129,231,207,186,132,101,225,28,169,210,222,144,120,158,92,70,185,25,202,193,54,179,97,8,230,143,113,214,162,135,228,148,235,152,100,166,128,106,125,144,31,124,118,232,139,83,216,43,45,107,36,189,71,41,184,219,58,106,122,131,51,67,219,223,49,122,100,82,168,73,118,220,143,25,14,79,69,162,33,167,204,44,242,127,78,248,107,193,101,80,232,74,221,173,86,31,119,33,104,133,204,74,205,200,66,195,130,54,137,53,182,128,224,84,206,35,65,69,79,165,253,253,246,43,7,144,149,62,143,0,51,241,188,44,109,250,59,104,241,128,99,214,123,104,195,158,126,10,155,221,7,189,200,151,117,86,48,103,62,249,45,154,172,163,73,81,121,82,9,191,116,24,27,178,104,195,19,169,239,145,107,132,24,179,79,253,117,217,143,7,229,195,149,233,94,103,12,150,18,186,219,230,53,244,235,117,76,168,145,91,179,237,109,27,11,92,148,182,113,127,113,134,18,177,28,105,142,21,47,133,230,87,253,190,107,138,20,200,165,69,157,32,32,75,203,49,127,89,75,214,167,209,81,198,158,103,217,143,82,203,50,24,78,153,153,55,232,160,25,128,226,114,218,199,19,182,179,242,151,132,132,79,14,201,177,229,8,120,178,96,165,101,71,4,38,254,34,69,139,146,127,189,101,0,3,2,184,29,115,234,77,85,231,159,217,240,183,143,31,50,38,90,117,99,85,31,196,196,28,196,156,48,63,223,145,65,85,233,190,96,9,36,162,100,55,238,121,202,122,49,166,237,153,213,69,229,166,21,134,117,210,75,16,149,153,139,166,52,215,18,40,16,120,7,249,189,56,93,200,24,123,95,172,220,97,26,125,248,43,218,181,170,52,242,102,44,203,223,70,102,102,58,70,189,160,177,20,47,206,152,37,251,202,150,244,86,129,100,228,85,251,150,129,34,73,105,84,202,44,171,161,219,198,229,26,110,196,130,83,137,231,230,63,183,39,167,176,118,85,232,149,234,69,135,41,174,0,152,34,253,179,136,101,223,30,166,88,10,166,23,91,241,213,123,237,135,226,233,212,158,141,255,45,112,161,169,72,150,252,49,63,42,75,145,89,173,113,18,69,176,228,35,87,169,247,185,28,226,186,161,86,92,215,22,102,9,235,182,191,89,125,166,105,142,155,248,193,245,92,181,74,74,236,216,222,155,161,244,175,205,105,83,237,12,61,181,6,213,102,202,78,58,189,90,115,183,55,174,255,159,37,237,77,250,152,38,84,198,67,138,128,30,23,6,108,168,3,125,34,59,163,16,157,141,114,75,78,179,171,202,191,155,173,72,85,205,224,234,157,225,140,178,168,184,40,160,222,221,96,48,29,44,156,103,185,59,40,42,29,2,91,137,227,109,250,166,196,22,49,177,224,34,153,149,49,64,45,180,240,86,159,72,95,125,169,66,251,187,44,142,166,100,112,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,12,222,180,103,14,251,118,4,179,42,21,113,86,168,26,17,207,48,120,245,169,51,45,211,158,143,125,224,163,160,82,10,143,18,187,50,191,67,244,201,9,46,121,221,58,150,37,225,42,184,4,79,48,157,124,200,115,255,56,126,132,248,39,43,24,64,205,134,179,246,153,80,56,66,40,198,55,71,30,160,93,114,121,190,120,211,222,233,2,198,85,90,210,176,80,80,84,93,152,186,194,86,150,10,236,14,251,246,50,247,222,186,31,100,6,123,15,17,250,133,194,15,195,199,209,169,36,41,182,199,84,132,229,62,182,3,176,181,194,15,234,206,10,244,229,243,116,193,154,202,203,142,1,220,230,36,92,243,205,28,131,139,39,64,182,129,134,244,106,112,151,141,49,101,188,37,50,16,222,198,221,44,106,74,48,108,15,241,65,3,24,31,5,120,101,62,5,46,3,224,34,224,100,97,91,251,116,22,43,223,148,75,189,52,31,235,176,195,206,52,124,178,177,78,192,11,236,86,46,35,145,152,30,249,183,250,151,118,248,101,155,131,100,143,203,81,93,192,66,54,209,200,87,76,147,26,191,130,43,141,233,11,244,41,43,98,140,70,141,22,56,36,59,108,52,242,65,98,111,248,143,118,127,221,77,163,178,78,44,126,79,79,42,74,96,233,174,50,8,241,20,122,51,214,167,104,202,43,108,227,210,47,196,208,209,134,235,211,92,87,63,236,16,210,112,123,54,97,79,125,39,174,221,86,26,116,66,45,178,6,162,71,160,132,9,34,208,176,172,66,184,108,10,211,122,154,238,190,82,154,248,1,68,248,187,118,45,92,38,34,77,217,236,235,45,76,145,45,252,126,212,94,191,86,10,145,235,192,218,58,180,142,124,110,151,121,142,60,148,35,63,168,29,8,92,15,130,10,94,48,44,139,149,109,146,80,212,223,208,144,136,187,25,204,38,153,28,202,124,194,168,203,176,190,170,19,125,191,1,158,229,57,143,55,23,249,73,105,182,85,95,57,230,174,27,14,59,136,69,7,34,16,142,196,50,124,249,89,127,152,196,60,56,254,57,13,102,23,171,112,74,86,151,240,199,231,182,184,25,233,185,242,192,158,138,52,154,4,3,79,218,152,179,43,175,180,52,35,144,31,82,97,119,255,113,70,165,199,237,103,250,245,251,119,118,203,102,125,13,185,204,59,232,197,23,63,216,166,92,117,234,139,82,21,242,219,57,24,238,206,16,17,206,216,2,122,186,149,69,202,41,247,164,176,43,178,204,39,170,58,241,183,161,120,51,60,132,18,188,79,144,229,131,69,180,31,110,172,198,128,128,199,101,114,212,129,94,82,16,44,1,39,20,15,166,63,237,27,220,246,20,80,63,198,52,10,75,178,182,3,222,228,89,255,239,238,18,224,55,231,40,248,122,50,19,126,192,38,97,82,101,126,97,82,193,163,29,21,228,39,251,63,91,4,97,193,190,55,58,141,52,34,150,33,101,134,174,180,67,79,64,96,254,75,174,49,55,3,118,49,83,171,70,180,158,69,204,51,59,217,211,140,153,214,190,252,205,179,244,222,76,208,42,78,171,204,143,107,222,239,137,14,21,107,130,182,5,177,204,235,0,58,38,53,191,162,89,254,3,140,1,251,245,49,65,78,77,215,73,134,255,226,45,59,217,209,91,119,116,76,73,204,134,6,71,239,22,148,222,225,211,106,48,185,232,247,149,98,77,233,20,230,160,196,217,71,60,46,48,60,18,41,18,240,43,39,114,143,133,197,118,126,132,51,93,50,178,172,126,112,250,136,58,32,173,28,175,7,226,89,221,22,204,194,204,151,108,197,55,83,50,159,63,173,89,161,152,238,154,141,150,90,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,214,132,141,154,130,163,200,178,86,26,81,220,63,52,9,73,235,70,110,207,97,201,78,102,30,11,215,54,12,7,42,32,248,69,71,143,240,242,248,64,58,248,100,124,53,116,0,81,122,26,238,179,33,161,193,103,210,216,195,205,155,79,92,50,58,248,102,57,232,26,239,153,137,203,247,188,220,77,207,109,213,199,233,174,39,139,229,84,144,63,96,171,123,151,29,114,58,14,223,160,166,148,122,102,250,2,212,216,77,130,106,149,176,243,203,240,6,255,243,149,77,202,164,235,159,156,71,30,106,156,239,112,64,127,51,245,222,47,1,45,87,24,87,71,17,206,223,32,59,160,226,163,210,234,104,243,209,161,12,5,200,187,145,127,115,172,51,132,182,17,97,232,157,53,119,64,236,151,121,58,250,36,80,67,124,34,240,26,79,202,144,14,243,161,28,177,12,167,71,244,103,94,0,226,72,135,53,254,253,138,26,245,125,107,240,253,110,218,216,72,250,208,240,5,16,21,144,144,81,93,238,244,170,226,196,44,22,196,190,193,12,224,197,251,144,58,163,22,243,10,36,185,240,234,43,53,104,128,38,188,53,226,6,123,53,32,89,245,196,131,39,110,23,201,195,240,63,56,66,160,114,170,181,119,225,137,142,96,11,87,27,96,210,16,252,108,190,82,211,121,213,114,249,45,40,185,52,229,232,121,215,223,136,35,117,169,128,212,104,107,239,35,194,22,108,210,155,170,203,244,123,94,125,47,173,24,77,94,50,237,136,196,168,119,223,181,50,228,29,161,49,93,177,209,115,73,72,217,242,63,170,7,59,167,170,54,79,221,44,167,1,67,41,137,234,234,249,164,186,2,64,127,38,31,128,99,150,130,197,18,114,168,46,113,56,146,189,162,73,37,97,22,74,33,102,50,57,233,18,254,151,56,43,196,142,34,126,248,228,37,163,147,182,250,64,11,89,178,59,47,30,134,195,127,214,128,179,229,151,34,159,155,225,115,51,220,25,113,245,39,124,173,250,80,147,185,166,134,6,104,0,233,66,86,220,195,233,246,51,121,17,153,119,7,9,81,239,175,254,62,243,172,200,186,100,139,212,248,74,202,57,53,66,7,102,147,96,40,65,195,78,39,36,172,129,248,134,48,210,213,207,2,189,173,178,201,109,98,67,188,58,183,53,34,85,212,91,230,113,114,104,74,199,184,70,65,7,91,110,140,200,198,182,34,146,187,2,14,181,59,230,202,173,109,202,16,58,184,29,244,79,20,85,177,79,177,126,238,29,237,33,224,130,99,83,40,149,217,250,149,141,110,68,169,171,165,142,191,92,157,79,186,141,33,90,237,243,176,159,163,206,144,133,255,62,98,94,78,33,206,211,145,249,58,100,134,82,142,241,190,254,165,72,79,199,16,239,146,214,159,152,80,0,249,57,221,155,61,230,12,22,131,181,21,67,203,212,247,33,235,21,44,90,40,78,133,96,17,35,34,236,56,8,105,89,74,67,10,164,195,63,54,157,186,189,106,19,132,201,163,86,59,57,70,221,35,207,12,5,84,124,141,53,171,46,77,248,237,196,59,126,58,44,83,46,159,44,244,249,77,75,87,149,69,49,120,55,105,76,112,44,106,163,148,166,87,57,32,151,116,56,38,98,72,15,70,220,169,118,202,133,201,212,120,60,130,49,42,232,8,255,38,136,92,199,73,136,186,5,236,175,204,162,168,248,27,93,31,173,134,64,1,25,97,13,44,154,249,30,217,13,189,92,244,190,29,160,194,103,149,50,238,125,86,67,179,19,87,188,75,41,92,163,213,68,164,135,183,23,33,187,222,127,46,201,151,207,162,6,6,128,161,163,23,104,111,2,42,2,79,93,59,233,141,142,62,97,23,31,204,115,123,73,76,195,129,20,186,249,137,12,26,16,0,194,51,70,79,236,188,27,54,169,56,72,137,108,194,61,146,117,95,118,172,57,18,66,160,93,229,235,160,11,63,142,35,27,82,243,120,251,248,244,198,203,29,198,11,172,252,189,107,237,33,84,242,113,136,37,248,201,171,75,54,180,178,45,205,179,110,140,54,180,195,215,244,254,5,120,246,220,67,139,120,99,37,184,253,223,30,142,10,3,14,208,252,218,69,92,43,55,202,55,248,200,197,176,94,9,88,185,5,104,95,224,76,232,201,25,18,109,141,181,123,252,223,32,45,86,198,202,152,126,167,254,22,180,92,72,23,47,30,183,13,224,89,229,14,198,207,170,133,112,156,114,228,115,113,48,13,141,198,160,250,236,99,103,148,57,63,168,17,117,25,45,224,47,89,178,139,161,53,51,167,44,32,124,185,219,184,253,182,100,157,49,181,104,175,224,188,117,255,28,175,220,37,127,43,157,196,59,170,109,71,217,213,241,220,211,8,47,140,176,108,2,10,129,206,151,148,148,49,24,103,35,25,142,91,168,76,100,31,247,52,252,172,126,78,4,237,60,35,35,93,71,104,233,31,77,244,6,201,174,254,172,192,191,17,94,69,202,217,48,59,157,109,51,44,123,4,152,237,121,119,1,226,133,70,200,231,143,76,102,72,217,176,234,115,192,168,125,35,91,5,106,222,89,189,215,60,163,81,58,228,138,251,249,34,66,236,239,83,39,41,168,183,205,174,206,104,65,17,99,32,139,251,191,133,190,65,139,202,175,99,115,238,37,240,187,70,248,215,228,196,199,249,142,8,1,220,222,188,38,130,231,61,162,136,225,106,244,46,92,94,46,230,239,119,234,2,59,35,229,181,214,105,27,149,34,127,138,231,145,62,4,57,168,93,142,168,149,86,199,79,72,22,236,199,76,177,85,129,27,95,218,143,10,18,134,212,67,44,125,218,142,134,167,192,225,107,135,13,103,251,91,63,188,132,108,178,165,165,220,11,2,60,178,108,60,194,69,77,191,49,112,68,100,168,90,126,234,195,208,79,23,32,4,138,166,185,244,247,196,66,107,210,3,187,252,219,89,146,157,64,27,178,39,66,41,75,177,18,23,218,147,74,12,8,178,184,155,78,52,112,37,156,249,91,66,36,228,93,192,207,241,159,121,11,199,89,44,32,87,123,94,189,195,166,192,10,141,251,255,67,18,0,28,169,154,129,91,62,68,238,93,122,229,220,126,14,167,41,189,56,255,235,183,77,220,65,177,213,147,253,223,144,78,166,213,81,63,245,186,50,103,43,30,3,74,208,146,232,119,25,17,160,62,40,88,173,36,17,2,71,149,74,200,144,127,33,43,29,229,175,26,10,180,57,170,198,131,205,158,218,217,88,4,134,158,173,86,242,212,183,52,249,56,28,210,28,26,55,226,131,126,217,20,187,169,184,190,252,41,243,252,48,206,100,42,193,197,71,26,135],"params":{"m":200,"k":3,"phi_f":0.8},"merkle_tree_depth":4}"#; + + const GOLDEN_SNARK_VERIFIER_DATA_JSON: &str = r#"{"certificate_circuit_verification_key":[2,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,2,13,2,0,0,0,3,13,22,0,0,0,5,123,147,216,92,24,187,64,247,64,238,194,218,88,196,119,217,185,179,174,240,60,99,203,34,175,77,158,164,188,164,84,191,138,149,103,89,74,141,191,144,158,155,49,51,233,31,80,5,202,247,133,25,205,148,113,242,218,74,234,99,229,32,217,119,65,83,109,245,90,130,104,242,233,27,144,24,224,244,234,49,41,185,57,95,108,186,234,5,63,150,148,183,5,142,243,0,47,95,39,204,168,159,1,222,113,50,68,112,243,224,200,94,14,138,195,227,172,34,250,39,54,38,115,255,74,131,237,246,84,125,54,12,54,15,236,88,73,48,225,115,144,18,112,6,172,127,4,167,239,40,243,208,241,233,64,150,183,250,182,206,154,38,103,122,215,171,71,89,235,215,32,122,228,245,57,186,118,168,174,247,96,239,168,103,6,64,171,26,184,130,10,4,200,209,217,15,12,231,31,140,108,74,33,65,116,208,43,144,190,1,90,123,43,205,154,188,201,192,220,171,73,134,211,41,163,77,239,213,228,253,195,84,69,253,242,85,205,188,111,22,130,253,0,255,154,23,143,35,30,252,17,132,141,206,230,141,252,145,86,216,201,181,25,29,197,200,104,13,40,167,16,142,45,143,33,106,210,138,138,88,139,240,120,82,140,197,99,16,67,70,116,48,206,67,201,10,225,227,82,189,138,181,88,187,83,37,188,96,167,233,227,91,70,89,147,8,243,58,177,180,240,209,116,24,180,210,154,227,30,100,71,147,6,244,15,14,128,89,7,209,191,12,215,104,111,119,7,222,94,213,3,93,171,190,104,191,112,28,130,160,243,159,58,98,50,47,229,151,78,68,216,176,82,67,72,40,197,90,141,249,113,105,10,1,135,185,4,33,154,30,143,68,150,14,63,4,181,70,193,241,228,3,46,216,176,76,220,92,181,20,205,1,211,188,166,53,79,250,164,37,184,212,41,217,236,85,220,77,29,217,29,6,191,144,8,133,49,134,144,214,6,127,125,195,83,195,91,216,158,78,186,119,77,167,88,156,223,217,98,210,3,72,221,35,11,193,193,70,180,12,1,226,17,249,35,188,20,127,82,8,242,36,104,233,127,133,247,53,58,205,2,90,6,121,112,51,134,151,231,107,89,90,116,230,133,214,158,234,9,67,126,106,68,74,152,81,127,55,58,75,185,11,90,200,139,152,119,15,34,60,40,196,110,247,32,248,220,232,171,234,108,7,80,38,10,41,52,137,11,249,29,23,32,232,54,68,185,64,226,180,37,248,102,11,156,128,126,15,219,205,236,132,232,187,115,16,44,68,11,221,190,93,71,147,33,26,225,160,18,71,109,120,233,174,95,178,138,97,165,219,189,104,161,72,2,179,130,80,130,152,24,62,200,185,162,206,156,80,98,0,199,73,51,9,181,1,189,123,235,160,174,117,3,208,225,215,144,20,2,164,68,47,181,27,10,146,64,246,243,127,4,177,212,250,136,80,196,86,60,4,232,145,219,27,160,203,6,25,166,92,89,15,18,210,142,216,195,194,190,11,254,252,36,60,84,163,17,58,196,228,160,51,153,159,226,124,8,255,252,33,84,183,206,241,101,31,222,16,215,24,49,88,76,73,67,138,207,119,236,0,185,92,194,39,160,115,47,20,74,132,106,50,81,212,182,78,145,87,241,244,35,136,211,16,250,70,109,153,66,42,1,85,73,33,26,241,157,190,193,215,154,180,74,79,82,253,214,4,27,144,42,3,123,239,157,206,47,225,152,65,69,220,43,235,163,54,66,243,49,12,155,36,61,186,208,39,83,134,163,80,208,54,174,50,65,6,198,73,220,94,234,195,128,76,150,19,49,237,17,215,22,56,128,200,107,12,79,84,15,196,138,124,247,64,101,154,139,251,111,40,52,179,234,59,32,8,252,169,199,73,222,75,217,213,4,65,140,133,148,80,88,148,239,0,48,195,230,99,68,62,58,83,136,198,1,215,105,201,44,37,157,218,254,240,65,13,66,88,170,115,144,213,137,167,229,123,84,177,15,194,90,10,53,185,149,59,132,21,131,5,53,21,39,158,179,179,183,91,116,229,87,48,240,246,174,253,216,86,49,221,0,189,59,53,246,182,127,156,82,154,93,8,201,219,207,141,252,23,108,82,255,84,238,216,92,94,228,170,88,0,197,90,44,171,74,188,33,87,218,153,53,1,116,122,97,126,22,249,160,109,177,203,253,174,113,38,96,216,63,162,26,179,42,205,96,42,210,34,107,26,73,222,147,89,72,66,60,24,186,89,97,68,43,53,15,77,14,21,167,253,142,205,107,239,241,99,88,105,170,104,135,88,26,127,82,98,147,36,253,42,112,110,173,173,24,126,100,231,36,156,88,236,81,204,6,2,236,153,116,152,97,240,173,163,72,234,18,111,237,140,203,203,103,235,98,21,123,115,34,162,253,210,80,220,117,222,80,117,64,38,246,27,214,180,101,29,236,206,137,121,208,238,126,10,0,213,123,106,239,235,216,208,229,115,110,234,90,206,48,208,108,50,252,127,185,233,219,174,215,104,169,107,253,65,19,77,39,204,246,9,35,159,74,60,3,130,120,154,12,56,200,14,49,4,138,211,182,101,184,89,22,150,202,60,133,17,221,144,172,97,134,190,235,73,179,41,60,224,110,120,28,113,227,226,217,164,208,135,221,222,26,114,95,222,5,93,24,228,251,17,184,164,145,226,18,189,107,240,58,234,143,105,193,93,165,248,231,190,109,110,64,46,63,225,138,157,132,244,10,145,52,172,217,54,132,124,41,193,46,65,74,217,203,1,99,85,120,5,91,183,251,120,232,53,79,227,65,136,51,61,214,19,51,85,229,25,234,82,52,25,27,7,107,74,57,175,9,26,68,16,48,234,219,76,75,221,241,22,199,193,226,112,72,22,161,10,234,180,156,105,150,71,2,86,93,235,143,4,139,26,117,33,173,109,216,162,219,31,151,38,95,194,161,41,81,93,42,74,80,245,54,80,1,44,255,13,226,180,118,117,96,14,209,64,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,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,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,2,153,90,154,113,21,132,245,227,30,35,155,147,22,167,184,51,7,26,202,5,240,171,22,123,123,96,217,143,92,62,203,236,164,135,240,73,22,6,149,194,133,94,202,3,170,69,143,3,227,1,99,72,133,107,94,205,13,207,188,80,185,165,194,25,67,180,85,111,194,87,20,6,146,220,187,215,14,156,0,164,177,3,80,159,61,204,169,240,175,82,234,29,232,174,245,5,15,78,9,98,185,253,142,183,143,36,205,196,205,112,120,83,183,126,33,111,247,185,183,218,12,47,41,149,194,182,236,229,25,9,36,127,200,173,228,139,107,78,33,44,29,195,134,23,20,222,82,212,42,193,144,68,200,6,182,34,222,67,45,23,103,80,126,199,119,40,208,119,68,179,213,156,216,210,189,94,115,122,101,182,100,88,192,29,57,218,236,12,224,136,84,13,246,144,107,23,73,198,6,55,228,233,109,225,85,82,26,184,218,79,121,202,106,7,60,62,249,235,24,12,237,248,83,106,214,115,115,188,78,161,174,163,155,79,249,120,190,118,86,21,77,143,10,240,211,80,55,150,167,63,183,141,220,254,80,40,135,217,45,19,199,9,82,104,88,88,137,102,74,48,188,143,5,96,243,31,221,233,104,78,211,150,128,18,78,196,63,16,125,205,103,249,110,249,37,139,237,90,72,33,178,209,74,104,150,210,80,189,65,110,190,160,57,61,42,48,146,25,79,215,117,239,236,89,148,67,124,221,155,167,244,168,188,250,135,5,165,116,246,174,14,37,188,193,134,10,177,34,129,137,233,76,176,61,180,127,96,180,50,137,15,139,139,144,207,93,3,113,107,149,222,76,90,184,91,104,64,11,142,165,243,91,85,23,202,167,89,151,235,75,85,57,173,174,153,198,155,84,49,213,76,158,33,70,97,215,136,129,129,163,244,159,246,56,71,254,171,15,24,146,36,118,36,143,169,149,10,102,214,47,131,9,62,72,93,7,126,124,35,15,108,154,66,187,246,21,121,71,95,134,89,8,45,132,71,36,163,125,203,246,6,246,122,69,29,1,6,70,238,199,79,89,41,74,204,106,201,238,138,17,121,126,8,188,46,45,199,139,86,111,96,51,196,247,192,33,123,172,137,98,87,27,54,203,124,164,15,1,228,240,157,135,47,85,243,38,126,254,109,4,190,161,86,147,151,41,172,23,119,190,105,215,137,71,212,244,197,75,183,248,13,163,76,23,30,246,201,255,177,172,196,218,26,30,188,151,71,173,191,93,186,110,10,71,32,212,225,23,15,196,122,157,243,253,190,23,40,51,24,2,68,93,15,123,161,132,7,145,27,118,145,242,168,91,161,94,96,134,209,118,68,141,93,93,189,173,252,122,88,6,211,98,75,151,203,11,217,54,75,104,223,198,111,13,79,100,71,54,48,115,113,11,164,14,228,235,157,17,30,178,66,61,103,3,27,228,187,146,195,169,90,240,41,22,13,210,12,140,65,74,80,144,32,232,234,87,233,29,169,46,236,1,184,201,33,222,227,203,178,65,9,153,59,174,116,85,220,249,230,43,124,54,118,186,97,175,181,165,227,104,113,111,141,217,168,96,120,11,45,52,35,6,48,76,184,72,75,53,98,23,114,192,143,31,69,69,234,191,246,158,168,237,235,26,13,12,120,198,74,206,5,124,142,119,200,146,129,254,188,12,223,208,19,20,112,43,128,14,94,103,201,65,28,201,99,2,234,8,100,48,145,66,64,33,202,189,48,94,191,239,6,118,76,139,248,15,191,250,57,198,211,117,76,240,235,126,250,69,32,222,37,43,83,11,63,140,75,190,10,222,221,142,68,232,88,7,219,35,220,160,253,42,138,234,213,41,238,240,99,121,122,217,4,152,159,28,106,194,35,111,45,24,185,10,19,241,73,87,226,217,226,227,89,78,98,46,51,164,53,128,86,99,72,0,13,57,197,240,29,126,54,50,95,220,59,149,73,22,90,60,36,212,29,88,98,219,140,131,133,19,115,116,161,98,57,95,94,44,186,182,187,86,71,225,102,197,230,113,149,135,198,22,210,25,89,24,192,81,40,134,185,158,29,86,241,205,165,164,194,233,68,132,136,252,54,151,128,249,91,233,89,13,220,213,174,113,31,91,71,239,63,177,115,167,56,6,146,66,125,19,112,58,219,44,201,222,2,104,181,139,70,231,119,236,166,218,182,80,168,38,149,46,120,139,42,67,234,216,33,91,181,35,207,118,40,107,189,62,110,135,65,225,200,181,192,193,110,24,48,40,92,85,127,73,186,224,191,165,219,184,14,114,77,171,162,197,178,95,218,97,39,49,156,224,184,243,201,82,25,174,0,54,27,252,240,129,192,23,202,199,45,232,54,19,130,10,243,186,94,3,35,214,115,178,68,153,229,169,26,129,251,158,84,67,136,58,158,85,114,60,30,46,162,36,157,90,83,41,18,60,5,84,98,128,157,29,78,19,89,212,194,42,73,5,69,239,47,175,81,228,250,116,194,99,211,111,182,254,39,249,6,35,135,15,229,139,87,226,78,27,74,185,54,7,69,73,149,43,194,179,44,199,49,8,245,251,230,17,152,141,122,1,158,32,227,52,28,228,174,46,55,18,59,115,27,27,176,95,215,124,57,96,225,171,253,64,40,128,162,193,254,106,104,243,205,235,48,85,184,99,65,142,20,94,68,61,130,224,135,15,119,78,43,190,132,208,35,51,87,78,66,33,16,107,105,187,1,174,78,209,107,37,232,119,154,29,157,197,240,195,38,198,26,244,176,11,254,148,86,31,125,230,127,190,131,141,230,0,152,111,114,21,169,181,228,188,105,96,138,202,235,117,92,192,237,77,215,189,136,151,109,160,126,156,71,117,111,28,155,144,239,73,76,92,195,3,26,198,201,181,87,15,229,196,93,3,101,129,128,254,10,195,171,33,115,1,204,52,210,249,170,4,177,154,59,231,21,74,212,61,23,55,253,22,104,120,58,112,105,100,141,251,36,222,131,166,177,61,114,97,0,16,50,13,170,57,231,14,224,222,197,221,9,72,57,236,142,145,172,223,34,16,130,115,160,141,247,87,142,41,253,115,246,197,226,81,181,245,92,134,240,119,12,14,90,42,96,79,199,91,142,25,79,136,157,97,93,235,14,72,179,167,117,64,142,99,186,188,91,94,24,135,82,81,222,205,63,93,104,161,55,65,144,194,85,140,40,203,134,96,115,157,70,251,199,87,14,175,218,10,69,200,191,216,213,130,73,35,43,193,146,126,226,34,73,234,156,4,87,23,112,24,59,33,190,196,227,103,105,220,30,207,117,73,108,17,168,1,175,123,30,156,253,65,235,193,253,14,100,176,204,84,128,108,178,138,238,160,93,149,182,198,95,68,108,54,77,118,251,51,99,30,72,155,197,227,85,242,121,3,119,48,67,85,99,115,143,107,59,181,81,237,199,71,105,16,180,196,181,211,186,115,234,193,66,21,130,80,172,240,160,67,132,151,210,15,180,209,41,167,80,36,158,104,87,3,141,122,152,61,154,133,139,16,252,108,42,34,20,115,125,82,45,22,217,215,83,251,2,237,88,157,60,94,33,98,236,17,62,81,221,228,124,178,166,248,40,111,148,159,205,171,102,84,49,20,212,166,83,5,135,51,81,4,143,186,87,157,196,138,138]}"#; + + fn golden_snark_aggregate_verification_key_and_message() -> ( + AggregateVerificationKeyForSnark, + [u8; 32], + ) { + let mut rng = ChaCha20Rng::from_seed([0u8; 32]); + let params = Parameters { + m: 200, + k: 3, + phi_f: 0.8, + }; + let (_, clerk) = setup_signers_and_clerk(params, 10, &mut rng); + ( + clerk.compute_aggregate_verification_key_for_snark(), + [1u8; 32], + ) + } + + fn golden_combined_aggregate_verification_key_and_message() + -> (AggregateVerificationKey, [u8; 32]) { + let mut rng = ChaCha20Rng::from_seed([0u8; 32]); + let params = Parameters { + m: 200, + k: 3, + phi_f: 0.8, + }; + let (signers, _) = setup_signers_and_clerk(params, 10, &mut rng); + ( + Clerk::new_clerk_from_signer(&signers[0]).compute_aggregate_verification_key(), + [1u8; 32], + ) + } + + #[test] + #[ignore] + fn generate_golden_values() { + let params = Parameters { + m: 200, + k: 3, + phi_f: 0.8, + }; + let mut rng = ChaCha20Rng::from_seed([0u8; 32]); + let (signers, clerk) = setup_signers_and_clerk(params, 10, &mut rng); + let message = vec![1u8; 32]; + let signatures: Vec = + signers.into_iter().map(|s| s.sign(&message).unwrap()).collect(); + let mut prover = + SnarkProver::try_new_non_deterministic(¶ms, MERKLE_TREE_DEPTH_FOR_SNARK) + .unwrap(); + + let proof: SnarkProof = + prover.aggregate_signatures(&clerk, &signatures, &message).unwrap(); + + println!("proof value: {:?}", serde_json::to_string(&proof)); + println!( + "verifier data: {:?}", + serde_json::to_string(&snark_verifier_data_non_deterministic(&prover)) + ); + } + + fn golden_proof() -> SnarkProof { + serde_json::from_str(GOLDEN_PROOF_JSON) + .expect("golden proof JSON deserialization should not fail") + } + + fn golden_snark_verifier_data() -> SnarkVerifierData { + serde_json::from_str(GOLDEN_SNARK_VERIFIER_DATA_JSON) + .expect("golden verifier data JSON deserialization should not fail") + } + + #[test] + fn golden_conversion() { + let (avk, message) = golden_snark_aggregate_verification_key_and_message(); + let verifier_setup = SnarkVerifierSetup::try_new().unwrap(); + assert!( + golden_proof() + .verify( + &message, + &avk, + &golden_snark_verifier_data(), + &verifier_setup.verifier_params, + ) + .is_ok() ); + } - assert!(result.is_err(), "Verification of random proof should fail"); + #[test] + fn verify_fails_with_random_bytes_or_wrong_number_bytes() { + let mut rng = ChaCha20Rng::from_seed([0u8; 32]); + let (avk, message) = golden_snark_aggregate_verification_key_and_message(); + let verifier_setup = SnarkVerifierSetup::try_new().unwrap(); + let golden = golden_proof(); - let not_enough_bytes = - &snark_proof.circuit_proof[0..snark_proof.circuit_proof.len() - 1]; + let mut random_bytes = vec![0u8; golden.circuit_proof.len()]; + rng.fill_bytes(&mut random_bytes); + let random_proof = + SnarkProof::new(random_bytes, golden.params, golden.merkle_tree_depth); + assert!( + random_proof + .verify( + &message, + &avk, + &golden_snark_verifier_data(), + &verifier_setup.verifier_params, + ) + .is_err(), + "Verification of random proof should fail" + ); + + let not_enough_bytes = &golden.circuit_proof[0..golden.circuit_proof.len() - 1]; let small_proof = SnarkProof::new( not_enough_bytes.to_vec(), - params, - MERKLE_TREE_DEPTH_FOR_SNARK, + golden.params, + golden.merkle_tree_depth, ); assert!( small_proof .verify( - message.as_slice(), + &message, &avk, - &snark_verifier_data(&prover), - &prover.verifier_params(), + &golden_snark_verifier_data(), + &verifier_setup.verifier_params, ) .is_err(), "Verification of small proof should fail" ); - let mut too_many_bytes = snark_proof.circuit_proof.to_vec(); + let mut too_many_bytes = golden.circuit_proof.to_vec(); too_many_bytes.push(0u8); - let large_proof = SnarkProof::new(too_many_bytes, params, MERKLE_TREE_DEPTH_FOR_SNARK); + let large_proof = + SnarkProof::new(too_many_bytes, golden.params, golden.merkle_tree_depth); assert!( large_proof .verify( - message.as_slice(), + &message, &avk, - &snark_verifier_data(&prover), - &prover.verifier_params(), + &golden_snark_verifier_data(), + &verifier_setup.verifier_params, ) .is_err(), "Verification of large proof should fail" @@ -574,131 +703,81 @@ mod tests { #[test] fn verify_fails_with_wrong_message() { - let mut rng = ChaCha20Rng::from_seed([0u8; 32]); - let params = Parameters { - m: 100, - k: 5, - phi_f: 0.8, - }; - let nparties = 10; - let message = [1u8; 32]; + let (avk, message) = golden_snark_aggregate_verification_key_and_message(); let wrong_message = [2u8; 32]; - let (signers, clerk) = setup_signers_and_clerk(params, nparties, &mut rng); - let signatures = collect_signatures(&signers, &message); - let avk = clerk.compute_aggregate_verification_key_for_snark(); - let mut prover = create_prover(params, [0u8; 32]); + assert_ne!(message, wrong_message); + let verifier_setup = SnarkVerifierSetup::try_new().unwrap(); - let snark_proof = prover - .aggregate_signatures::(&clerk, &signatures, &message) - .unwrap(); - let result = snark_proof.verify( - wrong_message.as_slice(), - &avk, - &snark_verifier_data(&prover), - &prover.verifier_params(), + assert!( + golden_proof() + .verify( + &wrong_message, + &avk, + &golden_snark_verifier_data(), + &verifier_setup.verifier_params, + ) + .is_err() ); - - assert!(result.is_err()); } #[test] fn verify_fails_with_wrong_circuit_verification_key() { - let mut rng = ChaCha20Rng::from_seed([0u8; 32]); - let params = Parameters { - m: 200, - k: 3, - phi_f: 0.8, - }; - // Different parameters yield a different circuit and therefore a different verifying key. - let other_params = Parameters { - m: 100, - k: 5, - phi_f: 0.8, - }; - let nparties = 10; - let message = [1u8; 32]; - let (signers, clerk) = setup_signers_and_clerk(params, nparties, &mut rng); - let signatures = collect_signatures(&signers, &message); - let avk = clerk.compute_aggregate_verification_key_for_snark(); - let mut prover = create_prover(params, [0u8; 32]); - - let snark_proof = prover - .aggregate_signatures::(&clerk, &signatures, &message) - .unwrap(); - - // Verifying a valid proof against a verifying key derived for other parameters must - // fail: the ancillary verifier data's key genuinely gates verification. - let wrong_prover = create_prover(other_params, [0u8; 32]); - let result = snark_proof.verify( - message.as_slice(), - &avk, - &snark_verifier_data(&wrong_prover), - &prover.verifier_params(), - ); + let (avk, message) = golden_snark_aggregate_verification_key_and_message(); + let verifier_setup = SnarkVerifierSetup::try_new().unwrap(); + // The production key is derived for a different circuit configuration, so it + // genuinely gates verification of a proof produced by the test configuration. + let production_verification_key = NonRecursiveCircuitVerifyingKey::try_from_bytes( + NON_RECURSIVE_CIRCUIT_VERIFICATION_KEY_FOR_PRODUCTION, + ) + .expect("the embedded production verifying key should deserialize"); assert!( - result.is_err(), + golden_proof() + .verify( + &message, + &avk, + &SnarkVerifierData::new(production_verification_key), + &verifier_setup.verifier_params, + ) + .is_err(), "verification with a wrong circuit verification key must fail" ); } #[test] fn valid_proof_prepares_and_checks() { - let mut rng = ChaCha20Rng::from_seed([0u8; 32]); - let params = Parameters { - m: 200, - k: 3, - phi_f: 0.8, - }; - let nparties = 10; - let message = [1u8; 32]; - let (signers, clerk) = setup_signers_and_clerk(params, nparties, &mut rng); - let signatures = collect_signatures(&signers, &message); - let avk = clerk.compute_aggregate_verification_key_for_snark(); - let mut prover = create_prover(params, [0u8; 32]); + let (avk, message) = golden_snark_aggregate_verification_key_and_message(); + let verifier_setup = SnarkVerifierSetup::try_new().unwrap(); + let verifier_data = golden_snark_verifier_data(); - let snark_proof = prover - .aggregate_signatures::(&clerk, &signatures, &message) - .unwrap(); - let dual_msm = snark_proof + let dual_msm = golden_proof() .prepare_and_check( - message.as_slice(), + &message, &avk, - prover.verification_key(), - &prover.verifier_params(), + verifier_data.certificate_circuit_verification_key(), + &verifier_setup.verifier_params, ) .expect("prepare_and_check should succeed on a valid proof"); // The returned DualMSM must still satisfy its own pairing check; // confirms the caller can reuse it (e.g. wrap into a cert accumulator). - assert!(dual_msm.check(&prover.verifier_params())); + assert!(dual_msm.check(&verifier_setup.verifier_params)); } #[test] fn prepare_and_check_fails_with_wrong_message() { - let mut rng = ChaCha20Rng::from_seed([0u8; 32]); - let params = Parameters { - m: 100, - k: 5, - phi_f: 0.8, - }; - let nparties = 10; - let message = [1u8; 32]; + let (avk, message) = golden_snark_aggregate_verification_key_and_message(); let wrong_message = [2u8; 32]; - let (signers, clerk) = setup_signers_and_clerk(params, nparties, &mut rng); - let signatures = collect_signatures(&signers, &message); - let avk = clerk.compute_aggregate_verification_key_for_snark(); - let mut prover = create_prover(params, [0u8; 32]); + assert_ne!(message, wrong_message); + let verifier_setup = SnarkVerifierSetup::try_new().unwrap(); + let verifier_data = golden_snark_verifier_data(); - let snark_proof = prover - .aggregate_signatures::(&clerk, &signatures, &message) - .unwrap(); - snark_proof + golden_proof() .prepare_and_check( - wrong_message.as_slice(), + &wrong_message, &avk, - prover.verification_key(), - &prover.verifier_params(), + verifier_data.certificate_circuit_verification_key(), + &verifier_setup.verifier_params, ) .expect_err("prepare_and_check should fail"); } @@ -706,114 +785,44 @@ mod tests { #[test] fn prepare_and_check_fails_with_random_bytes() { let mut rng = ChaCha20Rng::from_seed([0u8; 32]); - let params = Parameters { - m: 200, - k: 3, - phi_f: 0.8, - }; - let nparties = 10; - let message = [1u8; 32]; - let (signers, clerk) = setup_signers_and_clerk(params, nparties, &mut rng); - let signatures = collect_signatures(&signers, &message); - let avk: AggregateVerificationKeyForSnark = - clerk.compute_aggregate_verification_key_for_snark(); - let mut prover = create_prover(params, [0u8; 32]); - let snark_proof = prover - .aggregate_signatures::(&clerk, &signatures, &message) - .unwrap(); + let (avk, message) = golden_snark_aggregate_verification_key_and_message(); + let verifier_setup = SnarkVerifierSetup::try_new().unwrap(); + let verifier_data = golden_snark_verifier_data(); + let golden = golden_proof(); - let mut random_bytes = vec![0u8; snark_proof.circuit_proof.len()]; + let mut random_bytes = vec![0u8; golden.circuit_proof.len()]; rng.fill_bytes(&mut random_bytes); - let random_proof = SnarkProof::new(random_bytes, params, MERKLE_TREE_DEPTH_FOR_SNARK); + let random_proof = + SnarkProof::new(random_bytes, golden.params, golden.merkle_tree_depth); random_proof .prepare_and_check( - message.as_slice(), + &message, &avk, - prover.verification_key(), - &prover.verifier_params(), + verifier_data.certificate_circuit_verification_key(), + &verifier_setup.verifier_params, ) .expect_err("prepare_and_check should fail"); } - #[test] - fn non_deterministic_proofs_verify() { - let mut rng = ChaCha20Rng::from_seed([0u8; 32]); - let params = Parameters { - m: 100, - k: 5, - phi_f: 0.8, - }; - let nparties = 10; - let message = [1u8; 32]; - let (signers, clerk) = setup_signers_and_clerk(params, nparties, &mut rng); - let signatures = collect_signatures(&signers, &message); - let avk = clerk.compute_aggregate_verification_key_for_snark(); - - let mut prover_1 = create_prover(params, [0u8; 32]); - - let snark_proof_1 = prover_1 - .aggregate_signatures::(&clerk, &signatures, &message) - .unwrap(); - let snark_proof_2 = prover_1 - .aggregate_signatures::(&clerk, &signatures, &message) - .unwrap(); - - assert!( - snark_proof_1 - .verify( - &message, - &avk, - &snark_verifier_data(&prover_1), - &prover_1.verifier_params() - ) - .is_ok() - ); - assert!( - snark_proof_2 - .verify( - &message, - &avk, - &snark_verifier_data(&prover_1), - &prover_1.verifier_params() - ) - .is_ok() - ); - assert_ne!( - snark_proof_1.circuit_proof, snark_proof_2.circuit_proof, - "The two proofs are different but both verify." - ); - } - #[test] fn snark_proof_to_from_bytes() { - let mut rng = ChaCha20Rng::from_seed([0u8; 32]); - let params = Parameters { - m: 100, - k: 5, - phi_f: 0.8, - }; - let nparties = 10; - let message = [1u8; 32]; - let (signers, clerk) = setup_signers_and_clerk(params, nparties, &mut rng); - let signatures = collect_signatures(&signers, &message); - let avk = clerk.compute_aggregate_verification_key_for_snark(); - let mut prover = create_prover(params, [0u8; 32]); - let snark_proof = prover - .aggregate_signatures::(&clerk, &signatures, &message) - .unwrap(); + let (avk, message) = golden_snark_aggregate_verification_key_and_message(); + let verifier_setup = SnarkVerifierSetup::try_new().unwrap(); + let golden = golden_proof(); + assert!( - snark_proof + golden .verify( &message, &avk, - &snark_verifier_data(&prover), - &prover.verifier_params() + &golden_snark_verifier_data(), + &verifier_setup.verifier_params, ) .is_ok() ); - let proof_bytes = snark_proof.to_bytes().unwrap(); + let proof_bytes = golden.to_bytes().unwrap(); let reconstructed_proof: SnarkProof = SnarkProof::from_bytes(&proof_bytes).unwrap(); @@ -828,126 +837,27 @@ mod tests { .verify( &message, &avk, - &snark_verifier_data(&prover), - &prover.verifier_params() + &golden_snark_verifier_data(), + &verifier_setup.verifier_params, ) .is_ok() ); } - mod golden { - use super::*; - use crate::{ - AggregateSignature, AggregateVerificationKey, AncillaryVerifierData, Clerk, - proof_system::SnarkVerifierSetup, + #[test] + fn golden_aggregate_signature_verifies_with_ancillary() { + let (avk, message) = golden_combined_aggregate_verification_key_and_message(); + let params = Parameters { + m: 200, + k: 3, + phi_f: 0.8, }; - - const GOLDEN_PROOF_JSON: &str = r#"{"circuit_proof":[150,93,68,35,170,172,196,75,29,57,124,230,155,69,12,183,213,117,50,30,57,211,201,253,244,46,97,220,163,144,229,49,133,249,73,185,24,17,222,122,101,133,108,55,153,118,94,219,162,125,254,250,172,198,62,5,45,154,75,151,161,13,37,155,107,216,139,226,190,165,103,133,223,119,174,161,136,8,42,208,225,94,96,156,184,211,96,30,62,67,252,37,249,201,232,37,172,16,209,180,238,247,40,118,253,209,107,149,106,244,37,9,64,135,40,209,136,221,83,45,0,146,253,100,162,152,229,116,242,169,74,94,5,98,242,1,200,248,64,214,187,231,168,43,148,151,215,99,146,97,47,32,105,25,5,247,193,134,105,1,183,164,153,20,190,163,240,188,139,252,86,90,143,47,124,16,58,16,52,87,63,43,205,44,69,229,192,55,172,120,222,179,134,52,185,111,63,180,19,99,45,148,205,169,100,168,35,41,145,160,51,99,25,78,156,250,39,84,181,112,13,228,106,79,67,184,66,42,152,148,233,170,161,59,181,147,24,125,188,117,161,188,210,115,75,229,18,48,39,77,192,221,160,77,181,167,210,92,108,47,149,194,119,158,182,84,35,123,138,151,240,221,12,24,193,146,69,37,142,63,198,3,94,251,204,219,143,188,169,105,44,246,81,173,147,10,132,138,112,52,165,244,63,115,199,170,159,5,12,145,67,35,70,205,132,7,128,56,149,162,205,113,72,214,59,237,40,76,170,216,144,179,90,244,252,204,171,164,212,225,224,174,207,97,185,138,204,202,197,59,87,109,21,84,99,93,59,231,249,114,135,206,206,171,210,174,171,159,113,157,126,194,234,18,66,3,88,140,224,217,54,114,10,121,175,149,155,25,226,198,116,9,195,209,190,238,71,78,215,128,60,67,220,92,73,172,55,118,86,99,118,186,190,74,125,77,217,213,187,68,44,235,197,177,77,121,224,208,130,123,87,63,151,18,49,164,169,201,14,177,137,174,173,132,210,95,140,94,52,208,22,17,245,190,126,131,183,222,34,151,105,133,124,236,197,205,12,185,139,100,165,231,194,237,249,239,242,108,165,2,173,157,99,248,173,23,168,237,70,29,95,186,199,25,174,247,226,101,104,8,182,61,130,17,44,101,15,89,77,22,8,135,29,144,158,194,103,161,64,90,142,114,195,161,207,172,76,149,139,55,188,40,237,250,228,65,155,187,72,194,194,153,146,8,195,52,53,129,231,207,186,132,101,225,28,169,210,222,144,120,158,92,70,185,25,202,193,54,179,97,8,230,143,113,214,162,135,228,148,235,152,100,166,128,106,125,144,31,124,118,232,139,83,216,43,45,107,36,189,71,41,184,219,58,106,122,131,51,67,219,223,49,122,100,82,168,73,118,220,143,25,14,79,69,162,33,167,204,44,242,127,78,248,107,193,101,80,232,74,221,173,86,31,119,33,104,133,204,74,205,200,66,195,130,54,137,53,182,128,224,84,206,35,65,69,79,165,253,253,246,43,7,144,149,62,143,0,51,241,188,44,109,250,59,104,241,128,99,214,123,104,195,158,126,10,155,221,7,189,200,151,117,86,48,103,62,249,45,154,172,163,73,81,121,82,9,191,116,24,27,178,104,195,19,169,239,145,107,132,24,179,79,253,117,217,143,7,229,195,149,233,94,103,12,150,18,186,219,230,53,244,235,117,76,168,145,91,179,237,109,27,11,92,148,182,113,127,113,134,18,177,28,105,142,21,47,133,230,87,253,190,107,138,20,200,165,69,157,32,32,75,203,49,127,89,75,214,167,209,81,198,158,103,217,143,82,203,50,24,78,153,153,55,232,160,25,128,226,114,218,199,19,182,179,242,151,132,132,79,14,201,177,229,8,120,178,96,165,101,71,4,38,254,34,69,139,146,127,189,101,0,3,2,184,29,115,234,77,85,231,159,217,240,183,143,31,50,38,90,117,99,85,31,196,196,28,196,156,48,63,223,145,65,85,233,190,96,9,36,162,100,55,238,121,202,122,49,166,237,153,213,69,229,166,21,134,117,210,75,16,149,153,139,166,52,215,18,40,16,120,7,249,189,56,93,200,24,123,95,172,220,97,26,125,248,43,218,181,170,52,242,102,44,203,223,70,102,102,58,70,189,160,177,20,47,206,152,37,251,202,150,244,86,129,100,228,85,251,150,129,34,73,105,84,202,44,171,161,219,198,229,26,110,196,130,83,137,231,230,63,183,39,167,176,118,85,232,149,234,69,135,41,174,0,152,34,253,179,136,101,223,30,166,88,10,166,23,91,241,213,123,237,135,226,233,212,158,141,255,45,112,161,169,72,150,252,49,63,42,75,145,89,173,113,18,69,176,228,35,87,169,247,185,28,226,186,161,86,92,215,22,102,9,235,182,191,89,125,166,105,142,155,248,193,245,92,181,74,74,236,216,222,155,161,244,175,205,105,83,237,12,61,181,6,213,102,202,78,58,189,90,115,183,55,174,255,159,37,237,77,250,152,38,84,198,67,138,128,30,23,6,108,168,3,125,34,59,163,16,157,141,114,75,78,179,171,202,191,155,173,72,85,205,224,234,157,225,140,178,168,184,40,160,222,221,96,48,29,44,156,103,185,59,40,42,29,2,91,137,227,109,250,166,196,22,49,177,224,34,153,149,49,64,45,180,240,86,159,72,95,125,169,66,251,187,44,142,166,100,112,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,12,222,180,103,14,251,118,4,179,42,21,113,86,168,26,17,207,48,120,245,169,51,45,211,158,143,125,224,163,160,82,10,143,18,187,50,191,67,244,201,9,46,121,221,58,150,37,225,42,184,4,79,48,157,124,200,115,255,56,126,132,248,39,43,24,64,205,134,179,246,153,80,56,66,40,198,55,71,30,160,93,114,121,190,120,211,222,233,2,198,85,90,210,176,80,80,84,93,152,186,194,86,150,10,236,14,251,246,50,247,222,186,31,100,6,123,15,17,250,133,194,15,195,199,209,169,36,41,182,199,84,132,229,62,182,3,176,181,194,15,234,206,10,244,229,243,116,193,154,202,203,142,1,220,230,36,92,243,205,28,131,139,39,64,182,129,134,244,106,112,151,141,49,101,188,37,50,16,222,198,221,44,106,74,48,108,15,241,65,3,24,31,5,120,101,62,5,46,3,224,34,224,100,97,91,251,116,22,43,223,148,75,189,52,31,235,176,195,206,52,124,178,177,78,192,11,236,86,46,35,145,152,30,249,183,250,151,118,248,101,155,131,100,143,203,81,93,192,66,54,209,200,87,76,147,26,191,130,43,141,233,11,244,41,43,98,140,70,141,22,56,36,59,108,52,242,65,98,111,248,143,118,127,221,77,163,178,78,44,126,79,79,42,74,96,233,174,50,8,241,20,122,51,214,167,104,202,43,108,227,210,47,196,208,209,134,235,211,92,87,63,236,16,210,112,123,54,97,79,125,39,174,221,86,26,116,66,45,178,6,162,71,160,132,9,34,208,176,172,66,184,108,10,211,122,154,238,190,82,154,248,1,68,248,187,118,45,92,38,34,77,217,236,235,45,76,145,45,252,126,212,94,191,86,10,145,235,192,218,58,180,142,124,110,151,121,142,60,148,35,63,168,29,8,92,15,130,10,94,48,44,139,149,109,146,80,212,223,208,144,136,187,25,204,38,153,28,202,124,194,168,203,176,190,170,19,125,191,1,158,229,57,143,55,23,249,73,105,182,85,95,57,230,174,27,14,59,136,69,7,34,16,142,196,50,124,249,89,127,152,196,60,56,254,57,13,102,23,171,112,74,86,151,240,199,231,182,184,25,233,185,242,192,158,138,52,154,4,3,79,218,152,179,43,175,180,52,35,144,31,82,97,119,255,113,70,165,199,237,103,250,245,251,119,118,203,102,125,13,185,204,59,232,197,23,63,216,166,92,117,234,139,82,21,242,219,57,24,238,206,16,17,206,216,2,122,186,149,69,202,41,247,164,176,43,178,204,39,170,58,241,183,161,120,51,60,132,18,188,79,144,229,131,69,180,31,110,172,198,128,128,199,101,114,212,129,94,82,16,44,1,39,20,15,166,63,237,27,220,246,20,80,63,198,52,10,75,178,182,3,222,228,89,255,239,238,18,224,55,231,40,248,122,50,19,126,192,38,97,82,101,126,97,82,193,163,29,21,228,39,251,63,91,4,97,193,190,55,58,141,52,34,150,33,101,134,174,180,67,79,64,96,254,75,174,49,55,3,118,49,83,171,70,180,158,69,204,51,59,217,211,140,153,214,190,252,205,179,244,222,76,208,42,78,171,204,143,107,222,239,137,14,21,107,130,182,5,177,204,235,0,58,38,53,191,162,89,254,3,140,1,251,245,49,65,78,77,215,73,134,255,226,45,59,217,209,91,119,116,76,73,204,134,6,71,239,22,148,222,225,211,106,48,185,232,247,149,98,77,233,20,230,160,196,217,71,60,46,48,60,18,41,18,240,43,39,114,143,133,197,118,126,132,51,93,50,178,172,126,112,250,136,58,32,173,28,175,7,226,89,221,22,204,194,204,151,108,197,55,83,50,159,63,173,89,161,152,238,154,141,150,90,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,214,132,141,154,130,163,200,178,86,26,81,220,63,52,9,73,235,70,110,207,97,201,78,102,30,11,215,54,12,7,42,32,248,69,71,143,240,242,248,64,58,248,100,124,53,116,0,81,122,26,238,179,33,161,193,103,210,216,195,205,155,79,92,50,58,248,102,57,232,26,239,153,137,203,247,188,220,77,207,109,213,199,233,174,39,139,229,84,144,63,96,171,123,151,29,114,58,14,223,160,166,148,122,102,250,2,212,216,77,130,106,149,176,243,203,240,6,255,243,149,77,202,164,235,159,156,71,30,106,156,239,112,64,127,51,245,222,47,1,45,87,24,87,71,17,206,223,32,59,160,226,163,210,234,104,243,209,161,12,5,200,187,145,127,115,172,51,132,182,17,97,232,157,53,119,64,236,151,121,58,250,36,80,67,124,34,240,26,79,202,144,14,243,161,28,177,12,167,71,244,103,94,0,226,72,135,53,254,253,138,26,245,125,107,240,253,110,218,216,72,250,208,240,5,16,21,144,144,81,93,238,244,170,226,196,44,22,196,190,193,12,224,197,251,144,58,163,22,243,10,36,185,240,234,43,53,104,128,38,188,53,226,6,123,53,32,89,245,196,131,39,110,23,201,195,240,63,56,66,160,114,170,181,119,225,137,142,96,11,87,27,96,210,16,252,108,190,82,211,121,213,114,249,45,40,185,52,229,232,121,215,223,136,35,117,169,128,212,104,107,239,35,194,22,108,210,155,170,203,244,123,94,125,47,173,24,77,94,50,237,136,196,168,119,223,181,50,228,29,161,49,93,177,209,115,73,72,217,242,63,170,7,59,167,170,54,79,221,44,167,1,67,41,137,234,234,249,164,186,2,64,127,38,31,128,99,150,130,197,18,114,168,46,113,56,146,189,162,73,37,97,22,74,33,102,50,57,233,18,254,151,56,43,196,142,34,126,248,228,37,163,147,182,250,64,11,89,178,59,47,30,134,195,127,214,128,179,229,151,34,159,155,225,115,51,220,25,113,245,39,124,173,250,80,147,185,166,134,6,104,0,233,66,86,220,195,233,246,51,121,17,153,119,7,9,81,239,175,254,62,243,172,200,186,100,139,212,248,74,202,57,53,66,7,102,147,96,40,65,195,78,39,36,172,129,248,134,48,210,213,207,2,189,173,178,201,109,98,67,188,58,183,53,34,85,212,91,230,113,114,104,74,199,184,70,65,7,91,110,140,200,198,182,34,146,187,2,14,181,59,230,202,173,109,202,16,58,184,29,244,79,20,85,177,79,177,126,238,29,237,33,224,130,99,83,40,149,217,250,149,141,110,68,169,171,165,142,191,92,157,79,186,141,33,90,237,243,176,159,163,206,144,133,255,62,98,94,78,33,206,211,145,249,58,100,134,82,142,241,190,254,165,72,79,199,16,239,146,214,159,152,80,0,249,57,221,155,61,230,12,22,131,181,21,67,203,212,247,33,235,21,44,90,40,78,133,96,17,35,34,236,56,8,105,89,74,67,10,164,195,63,54,157,186,189,106,19,132,201,163,86,59,57,70,221,35,207,12,5,84,124,141,53,171,46,77,248,237,196,59,126,58,44,83,46,159,44,244,249,77,75,87,149,69,49,120,55,105,76,112,44,106,163,148,166,87,57,32,151,116,56,38,98,72,15,70,220,169,118,202,133,201,212,120,60,130,49,42,232,8,255,38,136,92,199,73,136,186,5,236,175,204,162,168,248,27,93,31,173,134,64,1,25,97,13,44,154,249,30,217,13,189,92,244,190,29,160,194,103,149,50,238,125,86,67,179,19,87,188,75,41,92,163,213,68,164,135,183,23,33,187,222,127,46,201,151,207,162,6,6,128,161,163,23,104,111,2,42,2,79,93,59,233,141,142,62,97,23,31,204,115,123,73,76,195,129,20,186,249,137,12,26,16,0,194,51,70,79,236,188,27,54,169,56,72,137,108,194,61,146,117,95,118,172,57,18,66,160,93,229,235,160,11,63,142,35,27,82,243,120,251,248,244,198,203,29,198,11,172,252,189,107,237,33,84,242,113,136,37,248,201,171,75,54,180,178,45,205,179,110,140,54,180,195,215,244,254,5,120,246,220,67,139,120,99,37,184,253,223,30,142,10,3,14,208,252,218,69,92,43,55,202,55,248,200,197,176,94,9,88,185,5,104,95,224,76,232,201,25,18,109,141,181,123,252,223,32,45,86,198,202,152,126,167,254,22,180,92,72,23,47,30,183,13,224,89,229,14,198,207,170,133,112,156,114,228,115,113,48,13,141,198,160,250,236,99,103,148,57,63,168,17,117,25,45,224,47,89,178,139,161,53,51,167,44,32,124,185,219,184,253,182,100,157,49,181,104,175,224,188,117,255,28,175,220,37,127,43,157,196,59,170,109,71,217,213,241,220,211,8,47,140,176,108,2,10,129,206,151,148,148,49,24,103,35,25,142,91,168,76,100,31,247,52,252,172,126,78,4,237,60,35,35,93,71,104,233,31,77,244,6,201,174,254,172,192,191,17,94,69,202,217,48,59,157,109,51,44,123,4,152,237,121,119,1,226,133,70,200,231,143,76,102,72,217,176,234,115,192,168,125,35,91,5,106,222,89,189,215,60,163,81,58,228,138,251,249,34,66,236,239,83,39,41,168,183,205,174,206,104,65,17,99,32,139,251,191,133,190,65,139,202,175,99,115,238,37,240,187,70,248,215,228,196,199,249,142,8,1,220,222,188,38,130,231,61,162,136,225,106,244,46,92,94,46,230,239,119,234,2,59,35,229,181,214,105,27,149,34,127,138,231,145,62,4,57,168,93,142,168,149,86,199,79,72,22,236,199,76,177,85,129,27,95,218,143,10,18,134,212,67,44,125,218,142,134,167,192,225,107,135,13,103,251,91,63,188,132,108,178,165,165,220,11,2,60,178,108,60,194,69,77,191,49,112,68,100,168,90,126,234,195,208,79,23,32,4,138,166,185,244,247,196,66,107,210,3,187,252,219,89,146,157,64,27,178,39,66,41,75,177,18,23,218,147,74,12,8,178,184,155,78,52,112,37,156,249,91,66,36,228,93,192,207,241,159,121,11,199,89,44,32,87,123,94,189,195,166,192,10,141,251,255,67,18,0,28,169,154,129,91,62,68,238,93,122,229,220,126,14,167,41,189,56,255,235,183,77,220,65,177,213,147,253,223,144,78,166,213,81,63,245,186,50,103,43,30,3,74,208,146,232,119,25,17,160,62,40,88,173,36,17,2,71,149,74,200,144,127,33,43,29,229,175,26,10,180,57,170,198,131,205,158,218,217,88,4,134,158,173,86,242,212,183,52,249,56,28,210,28,26,55,226,131,126,217,20,187,169,184,190,252,41,243,252,48,206,100,42,193,197,71,26,135],"params":{"m":200,"k":3,"phi_f":0.8},"merkle_tree_depth":4}"#; - - const GOLDEN_SNARK_VERIFIER_DATA_JSON: &str = r#"{"certificate_circuit_verification_key":[2,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,2,13,2,0,0,0,3,13,22,0,0,0,5,123,147,216,92,24,187,64,247,64,238,194,218,88,196,119,217,185,179,174,240,60,99,203,34,175,77,158,164,188,164,84,191,138,149,103,89,74,141,191,144,158,155,49,51,233,31,80,5,202,247,133,25,205,148,113,242,218,74,234,99,229,32,217,119,65,83,109,245,90,130,104,242,233,27,144,24,224,244,234,49,41,185,57,95,108,186,234,5,63,150,148,183,5,142,243,0,47,95,39,204,168,159,1,222,113,50,68,112,243,224,200,94,14,138,195,227,172,34,250,39,54,38,115,255,74,131,237,246,84,125,54,12,54,15,236,88,73,48,225,115,144,18,112,6,172,127,4,167,239,40,243,208,241,233,64,150,183,250,182,206,154,38,103,122,215,171,71,89,235,215,32,122,228,245,57,186,118,168,174,247,96,239,168,103,6,64,171,26,184,130,10,4,200,209,217,15,12,231,31,140,108,74,33,65,116,208,43,144,190,1,90,123,43,205,154,188,201,192,220,171,73,134,211,41,163,77,239,213,228,253,195,84,69,253,242,85,205,188,111,22,130,253,0,255,154,23,143,35,30,252,17,132,141,206,230,141,252,145,86,216,201,181,25,29,197,200,104,13,40,167,16,142,45,143,33,106,210,138,138,88,139,240,120,82,140,197,99,16,67,70,116,48,206,67,201,10,225,227,82,189,138,181,88,187,83,37,188,96,167,233,227,91,70,89,147,8,243,58,177,180,240,209,116,24,180,210,154,227,30,100,71,147,6,244,15,14,128,89,7,209,191,12,215,104,111,119,7,222,94,213,3,93,171,190,104,191,112,28,130,160,243,159,58,98,50,47,229,151,78,68,216,176,82,67,72,40,197,90,141,249,113,105,10,1,135,185,4,33,154,30,143,68,150,14,63,4,181,70,193,241,228,3,46,216,176,76,220,92,181,20,205,1,211,188,166,53,79,250,164,37,184,212,41,217,236,85,220,77,29,217,29,6,191,144,8,133,49,134,144,214,6,127,125,195,83,195,91,216,158,78,186,119,77,167,88,156,223,217,98,210,3,72,221,35,11,193,193,70,180,12,1,226,17,249,35,188,20,127,82,8,242,36,104,233,127,133,247,53,58,205,2,90,6,121,112,51,134,151,231,107,89,90,116,230,133,214,158,234,9,67,126,106,68,74,152,81,127,55,58,75,185,11,90,200,139,152,119,15,34,60,40,196,110,247,32,248,220,232,171,234,108,7,80,38,10,41,52,137,11,249,29,23,32,232,54,68,185,64,226,180,37,248,102,11,156,128,126,15,219,205,236,132,232,187,115,16,44,68,11,221,190,93,71,147,33,26,225,160,18,71,109,120,233,174,95,178,138,97,165,219,189,104,161,72,2,179,130,80,130,152,24,62,200,185,162,206,156,80,98,0,199,73,51,9,181,1,189,123,235,160,174,117,3,208,225,215,144,20,2,164,68,47,181,27,10,146,64,246,243,127,4,177,212,250,136,80,196,86,60,4,232,145,219,27,160,203,6,25,166,92,89,15,18,210,142,216,195,194,190,11,254,252,36,60,84,163,17,58,196,228,160,51,153,159,226,124,8,255,252,33,84,183,206,241,101,31,222,16,215,24,49,88,76,73,67,138,207,119,236,0,185,92,194,39,160,115,47,20,74,132,106,50,81,212,182,78,145,87,241,244,35,136,211,16,250,70,109,153,66,42,1,85,73,33,26,241,157,190,193,215,154,180,74,79,82,253,214,4,27,144,42,3,123,239,157,206,47,225,152,65,69,220,43,235,163,54,66,243,49,12,155,36,61,186,208,39,83,134,163,80,208,54,174,50,65,6,198,73,220,94,234,195,128,76,150,19,49,237,17,215,22,56,128,200,107,12,79,84,15,196,138,124,247,64,101,154,139,251,111,40,52,179,234,59,32,8,252,169,199,73,222,75,217,213,4,65,140,133,148,80,88,148,239,0,48,195,230,99,68,62,58,83,136,198,1,215,105,201,44,37,157,218,254,240,65,13,66,88,170,115,144,213,137,167,229,123,84,177,15,194,90,10,53,185,149,59,132,21,131,5,53,21,39,158,179,179,183,91,116,229,87,48,240,246,174,253,216,86,49,221,0,189,59,53,246,182,127,156,82,154,93,8,201,219,207,141,252,23,108,82,255,84,238,216,92,94,228,170,88,0,197,90,44,171,74,188,33,87,218,153,53,1,116,122,97,126,22,249,160,109,177,203,253,174,113,38,96,216,63,162,26,179,42,205,96,42,210,34,107,26,73,222,147,89,72,66,60,24,186,89,97,68,43,53,15,77,14,21,167,253,142,205,107,239,241,99,88,105,170,104,135,88,26,127,82,98,147,36,253,42,112,110,173,173,24,126,100,231,36,156,88,236,81,204,6,2,236,153,116,152,97,240,173,163,72,234,18,111,237,140,203,203,103,235,98,21,123,115,34,162,253,210,80,220,117,222,80,117,64,38,246,27,214,180,101,29,236,206,137,121,208,238,126,10,0,213,123,106,239,235,216,208,229,115,110,234,90,206,48,208,108,50,252,127,185,233,219,174,215,104,169,107,253,65,19,77,39,204,246,9,35,159,74,60,3,130,120,154,12,56,200,14,49,4,138,211,182,101,184,89,22,150,202,60,133,17,221,144,172,97,134,190,235,73,179,41,60,224,110,120,28,113,227,226,217,164,208,135,221,222,26,114,95,222,5,93,24,228,251,17,184,164,145,226,18,189,107,240,58,234,143,105,193,93,165,248,231,190,109,110,64,46,63,225,138,157,132,244,10,145,52,172,217,54,132,124,41,193,46,65,74,217,203,1,99,85,120,5,91,183,251,120,232,53,79,227,65,136,51,61,214,19,51,85,229,25,234,82,52,25,27,7,107,74,57,175,9,26,68,16,48,234,219,76,75,221,241,22,199,193,226,112,72,22,161,10,234,180,156,105,150,71,2,86,93,235,143,4,139,26,117,33,173,109,216,162,219,31,151,38,95,194,161,41,81,93,42,74,80,245,54,80,1,44,255,13,226,180,118,117,96,14,209,64,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,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,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,2,153,90,154,113,21,132,245,227,30,35,155,147,22,167,184,51,7,26,202,5,240,171,22,123,123,96,217,143,92,62,203,236,164,135,240,73,22,6,149,194,133,94,202,3,170,69,143,3,227,1,99,72,133,107,94,205,13,207,188,80,185,165,194,25,67,180,85,111,194,87,20,6,146,220,187,215,14,156,0,164,177,3,80,159,61,204,169,240,175,82,234,29,232,174,245,5,15,78,9,98,185,253,142,183,143,36,205,196,205,112,120,83,183,126,33,111,247,185,183,218,12,47,41,149,194,182,236,229,25,9,36,127,200,173,228,139,107,78,33,44,29,195,134,23,20,222,82,212,42,193,144,68,200,6,182,34,222,67,45,23,103,80,126,199,119,40,208,119,68,179,213,156,216,210,189,94,115,122,101,182,100,88,192,29,57,218,236,12,224,136,84,13,246,144,107,23,73,198,6,55,228,233,109,225,85,82,26,184,218,79,121,202,106,7,60,62,249,235,24,12,237,248,83,106,214,115,115,188,78,161,174,163,155,79,249,120,190,118,86,21,77,143,10,240,211,80,55,150,167,63,183,141,220,254,80,40,135,217,45,19,199,9,82,104,88,88,137,102,74,48,188,143,5,96,243,31,221,233,104,78,211,150,128,18,78,196,63,16,125,205,103,249,110,249,37,139,237,90,72,33,178,209,74,104,150,210,80,189,65,110,190,160,57,61,42,48,146,25,79,215,117,239,236,89,148,67,124,221,155,167,244,168,188,250,135,5,165,116,246,174,14,37,188,193,134,10,177,34,129,137,233,76,176,61,180,127,96,180,50,137,15,139,139,144,207,93,3,113,107,149,222,76,90,184,91,104,64,11,142,165,243,91,85,23,202,167,89,151,235,75,85,57,173,174,153,198,155,84,49,213,76,158,33,70,97,215,136,129,129,163,244,159,246,56,71,254,171,15,24,146,36,118,36,143,169,149,10,102,214,47,131,9,62,72,93,7,126,124,35,15,108,154,66,187,246,21,121,71,95,134,89,8,45,132,71,36,163,125,203,246,6,246,122,69,29,1,6,70,238,199,79,89,41,74,204,106,201,238,138,17,121,126,8,188,46,45,199,139,86,111,96,51,196,247,192,33,123,172,137,98,87,27,54,203,124,164,15,1,228,240,157,135,47,85,243,38,126,254,109,4,190,161,86,147,151,41,172,23,119,190,105,215,137,71,212,244,197,75,183,248,13,163,76,23,30,246,201,255,177,172,196,218,26,30,188,151,71,173,191,93,186,110,10,71,32,212,225,23,15,196,122,157,243,253,190,23,40,51,24,2,68,93,15,123,161,132,7,145,27,118,145,242,168,91,161,94,96,134,209,118,68,141,93,93,189,173,252,122,88,6,211,98,75,151,203,11,217,54,75,104,223,198,111,13,79,100,71,54,48,115,113,11,164,14,228,235,157,17,30,178,66,61,103,3,27,228,187,146,195,169,90,240,41,22,13,210,12,140,65,74,80,144,32,232,234,87,233,29,169,46,236,1,184,201,33,222,227,203,178,65,9,153,59,174,116,85,220,249,230,43,124,54,118,186,97,175,181,165,227,104,113,111,141,217,168,96,120,11,45,52,35,6,48,76,184,72,75,53,98,23,114,192,143,31,69,69,234,191,246,158,168,237,235,26,13,12,120,198,74,206,5,124,142,119,200,146,129,254,188,12,223,208,19,20,112,43,128,14,94,103,201,65,28,201,99,2,234,8,100,48,145,66,64,33,202,189,48,94,191,239,6,118,76,139,248,15,191,250,57,198,211,117,76,240,235,126,250,69,32,222,37,43,83,11,63,140,75,190,10,222,221,142,68,232,88,7,219,35,220,160,253,42,138,234,213,41,238,240,99,121,122,217,4,152,159,28,106,194,35,111,45,24,185,10,19,241,73,87,226,217,226,227,89,78,98,46,51,164,53,128,86,99,72,0,13,57,197,240,29,126,54,50,95,220,59,149,73,22,90,60,36,212,29,88,98,219,140,131,133,19,115,116,161,98,57,95,94,44,186,182,187,86,71,225,102,197,230,113,149,135,198,22,210,25,89,24,192,81,40,134,185,158,29,86,241,205,165,164,194,233,68,132,136,252,54,151,128,249,91,233,89,13,220,213,174,113,31,91,71,239,63,177,115,167,56,6,146,66,125,19,112,58,219,44,201,222,2,104,181,139,70,231,119,236,166,218,182,80,168,38,149,46,120,139,42,67,234,216,33,91,181,35,207,118,40,107,189,62,110,135,65,225,200,181,192,193,110,24,48,40,92,85,127,73,186,224,191,165,219,184,14,114,77,171,162,197,178,95,218,97,39,49,156,224,184,243,201,82,25,174,0,54,27,252,240,129,192,23,202,199,45,232,54,19,130,10,243,186,94,3,35,214,115,178,68,153,229,169,26,129,251,158,84,67,136,58,158,85,114,60,30,46,162,36,157,90,83,41,18,60,5,84,98,128,157,29,78,19,89,212,194,42,73,5,69,239,47,175,81,228,250,116,194,99,211,111,182,254,39,249,6,35,135,15,229,139,87,226,78,27,74,185,54,7,69,73,149,43,194,179,44,199,49,8,245,251,230,17,152,141,122,1,158,32,227,52,28,228,174,46,55,18,59,115,27,27,176,95,215,124,57,96,225,171,253,64,40,128,162,193,254,106,104,243,205,235,48,85,184,99,65,142,20,94,68,61,130,224,135,15,119,78,43,190,132,208,35,51,87,78,66,33,16,107,105,187,1,174,78,209,107,37,232,119,154,29,157,197,240,195,38,198,26,244,176,11,254,148,86,31,125,230,127,190,131,141,230,0,152,111,114,21,169,181,228,188,105,96,138,202,235,117,92,192,237,77,215,189,136,151,109,160,126,156,71,117,111,28,155,144,239,73,76,92,195,3,26,198,201,181,87,15,229,196,93,3,101,129,128,254,10,195,171,33,115,1,204,52,210,249,170,4,177,154,59,231,21,74,212,61,23,55,253,22,104,120,58,112,105,100,141,251,36,222,131,166,177,61,114,97,0,16,50,13,170,57,231,14,224,222,197,221,9,72,57,236,142,145,172,223,34,16,130,115,160,141,247,87,142,41,253,115,246,197,226,81,181,245,92,134,240,119,12,14,90,42,96,79,199,91,142,25,79,136,157,97,93,235,14,72,179,167,117,64,142,99,186,188,91,94,24,135,82,81,222,205,63,93,104,161,55,65,144,194,85,140,40,203,134,96,115,157,70,251,199,87,14,175,218,10,69,200,191,216,213,130,73,35,43,193,146,126,226,34,73,234,156,4,87,23,112,24,59,33,190,196,227,103,105,220,30,207,117,73,108,17,168,1,175,123,30,156,253,65,235,193,253,14,100,176,204,84,128,108,178,138,238,160,93,149,182,198,95,68,108,54,77,118,251,51,99,30,72,155,197,227,85,242,121,3,119,48,67,85,99,115,143,107,59,181,81,237,199,71,105,16,180,196,181,211,186,115,234,193,66,21,130,80,172,240,160,67,132,151,210,15,180,209,41,167,80,36,158,104,87,3,141,122,152,61,154,133,139,16,252,108,42,34,20,115,125,82,45,22,217,215,83,251,2,237,88,157,60,94,33,98,236,17,62,81,221,228,124,178,166,248,40,111,148,159,205,171,102,84,49,20,212,166,83,5,135,51,81,4,143,186,87,157,196,138,138]}"#; - - fn golden_snark_aggregate_verification_key_and_message() -> ( - AggregateVerificationKeyForSnark, - [u8; 32], - ) { - let mut rng = ChaCha20Rng::from_seed([0u8; 32]); - let params = Parameters { - m: 200, - k: 3, - phi_f: 0.8, - }; - let (_, clerk) = setup_signers_and_clerk(params, 10, &mut rng); - ( - clerk.compute_aggregate_verification_key_for_snark(), - [1u8; 32], - ) - } - - fn golden_combined_aggregate_verification_key_and_message() - -> (AggregateVerificationKey, [u8; 32]) { - let mut rng = ChaCha20Rng::from_seed([0u8; 32]); - let params = Parameters { - m: 200, - k: 3, - phi_f: 0.8, - }; - let (signers, _) = setup_signers_and_clerk(params, 10, &mut rng); - ( - Clerk::new_clerk_from_signer(&signers[0]).compute_aggregate_verification_key(), - [1u8; 32], - ) - } - - #[test] - #[ignore] - fn generate_golden_values() { - let params = Parameters { - m: 200, - k: 3, - phi_f: 0.8, - }; - let mut rng = ChaCha20Rng::from_seed([0u8; 32]); - let (signers, clerk) = setup_signers_and_clerk(params, 10, &mut rng); - let message = vec![1u8; 32]; - let signatures: Vec = - signers.into_iter().map(|s| s.sign(&message).unwrap()).collect(); - let mut prover = - SnarkProver::try_new_non_deterministic(¶ms, MERKLE_TREE_DEPTH_FOR_SNARK) - .unwrap(); - - let proof: SnarkProof = - prover.aggregate_signatures(&clerk, &signatures, &message).unwrap(); - - println!("proof value: {:?}", serde_json::to_string(&proof)); - println!( - "verifier data: {:?}", - serde_json::to_string(&snark_verifier_data_non_deterministic(&prover)) - ); - } - - fn golden_proof() -> SnarkProof { - serde_json::from_str(GOLDEN_PROOF_JSON) - .expect("golden proof JSON deserialization should not fail") - } - - fn golden_snark_verifier_data() -> SnarkVerifierData { - serde_json::from_str(GOLDEN_SNARK_VERIFIER_DATA_JSON) - .expect("golden verifier data JSON deserialization should not fail") - } - - #[test] - fn golden_conversion() { - let (avk, message) = golden_snark_aggregate_verification_key_and_message(); - let verifier_setup = SnarkVerifierSetup::try_new().unwrap(); - assert!( - golden_proof() - .verify( - &message, - &avk, - &golden_snark_verifier_data(), - &verifier_setup.verifier_params, - ) - .is_ok() - ); - } - - #[test] - fn golden_aggregate_signature_verifies_with_ancillary() { - let (avk, message) = golden_combined_aggregate_verification_key_and_message(); - let params = Parameters { - m: 200, - k: 3, - phi_f: 0.8, - }; - let aggregate = - AggregateSignature::::Snark(Box::new(golden_proof())); - let ancillary = AncillaryVerifierData::Snark(golden_snark_verifier_data()); - aggregate - .verify(&message, &avk, ¶ms, Some(ancillary), None) - .expect( - "golden Snark aggregate signature must verify via ancillary verifier data", - ); - } + let aggregate = + AggregateSignature::::Snark(Box::new(golden_proof())); + let ancillary = AncillaryVerifierData::Snark(golden_snark_verifier_data()); + aggregate + .verify(&message, &avk, ¶ms, Some(ancillary), None) + .expect("golden Snark aggregate signature must verify via ancillary verifier data"); } } }