diff --git a/.github/workflows/ci-obj-c.yml b/.github/workflows/ci-obj-c.yml index 6933a2e8..6e95ab79 100644 --- a/.github/workflows/ci-obj-c.yml +++ b/.github/workflows/ci-obj-c.yml @@ -1,28 +1,28 @@ -# name: ci-obj-c +name: ci-obj-c -# on: -# pull_request: -# branches: -# - master -# push: -# branches: -# - master +on: + pull_request: + branches: + - master + push: + branches: + - master -# jobs: -# build_test: -# name: Build & Test Objective-C Wrapper -# runs-on: macos-latest -# defaults: -# run: -# working-directory: ./wrappers/obj-c -# steps: -# - name: Checkout -# uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # pin@v3.5.1 +jobs: + build_test: + name: Build & Test Objective-C Wrapper + runs-on: macos-latest + defaults: + run: + working-directory: ./wrappers/obj-c + steps: + - name: Checkout + uses: actions/checkout@83b7061638ee4956cf7545a6f7efe594e5ad0247 # pin@v3.5.1 # - name: Build binary # run: ./scripts/update-libraries.sh # shell: bash -# - name: Verify podspec -# working-directory: ./ -# run: pod lib lint --allow-warnings --verbose + - name: Verify podspec + working-directory: ./ + run: pod lib lint --allow-warnings --verbose diff --git a/.github/workflows/ci-wrapper-wasm.yml b/.github/workflows/ci-wrapper-wasm.yml index fd907003..af853222 100644 --- a/.github/workflows/ci-wrapper-wasm.yml +++ b/.github/workflows/ci-wrapper-wasm.yml @@ -26,9 +26,6 @@ jobs: toolchain: stable override: true - - name: Export Clang - run: export CC=/usr/bin/clang - - name: Run yarn install run: yarn install --frozen-lockfile diff --git a/Cargo.toml b/Cargo.toml index 7c49f320..fa8f37c2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,7 +33,7 @@ sha2 = "0.9" sha3 = "0.9" [dev-dependencies] -criterion = { version = "0.5.1", features = ["html_reports"] } +criterion = { version = "0.4.0", features = ["html_reports"] } hex = "0.4" rand_xorshift = "0.3" bbs-fixtures-generator = {version = "0.1.0", path = "tools/bbs-fixtures-generator"} diff --git a/src/common.rs b/src/common.rs index bdf51da6..256d9b57 100644 --- a/src/common.rs +++ b/src/common.rs @@ -9,7 +9,5 @@ pub(crate) mod key_pair; // Common utilities functions. pub(crate) mod util; -pub use util::vec_to_byte_array; - // Common serialization utils. pub(crate) mod serialization; diff --git a/src/common/key_pair.rs b/src/common/key_pair.rs index 707a80b5..0f68cb8b 100644 --- a/src/common/key_pair.rs +++ b/src/common/key_pair.rs @@ -100,7 +100,7 @@ macro_rules! bbs_bls_key_pair_impl { /// Convert a vector of bytes of big-endian representation of the /// secret key. - pub fn from_vec(bytes: &[u8]) -> Result { + pub fn from_vec(bytes: &Vec) -> Result { match vec_to_byte_array::<{ Self::SIZE_BYTES }>(bytes) { Ok(result) => Self::from_bytes(&result), Err(e) => Err(e), @@ -179,9 +179,6 @@ macro_rules! bbs_bls_key_pair_impl { /// Number of bytes needed to represent the public key in compressed /// form. pub const SIZE_BYTES: usize = $octet_point_length; - /// Number of bytes needed to represent the public key in - /// uncompressed form. - pub const SIZE_BYTES_UNCOMPRESSED: usize = 2 * Self::SIZE_BYTES; /// Check if the `PublicKey` is valid. pub fn is_valid(&self) -> Choice { @@ -196,43 +193,17 @@ macro_rules! bbs_bls_key_pair_impl { self.0.to_affine().to_compressed() } - /// Get the G2 representation in affine, uncompressed and big-endian - /// form of PublicKey. - pub fn to_octets_uncompressed( - &self, - ) -> [u8; Self::SIZE_BYTES_UNCOMPRESSED] { - self.0.to_uncompressed() - } - /// Convert a vector of bytes of big-endian representation of the /// public key. - pub fn from_vec(bytes: &[u8]) -> Result { - let data_len = bytes.len(); - match data_len { - Self::SIZE_BYTES => { - let byte_array = - vec_to_byte_array::<{ Self::SIZE_BYTES }>(bytes)?; - Self::from_octets(&byte_array) - } - Self::SIZE_BYTES_UNCOMPRESSED => { - let byte_array = vec_to_byte_array::< - { Self::SIZE_BYTES_UNCOMPRESSED }, - >(bytes)?; - Self::from_octets_uncompressed(&byte_array) - } - _ => Err(Error::Conversion { - cause: format!( - "source vector size {data_len}, expected \ - destination byte array size of either {} or {}", - Self::SIZE_BYTES, - Self::SIZE_BYTES_UNCOMPRESSED - ), - }), + pub fn from_vec(bytes: &Vec) -> Result { + match vec_to_byte_array::<{ Self::SIZE_BYTES }>(bytes) { + Ok(result) => Self::from_octets(&result), + Err(e) => Err(e), } } - /// Convert from G2 point in affine, compressed and big-endian - /// form to PublicKey. + /// Convert from G2 point in affine, compressed and big-endian form + /// to PublicKey. pub fn from_octets( bytes: &[u8; Self::SIZE_BYTES], ) -> Result { @@ -245,44 +216,6 @@ macro_rules! bbs_bls_key_pair_impl { Err(Error::BadEncoding) } } - - /// Convert from G2 point in affine, uncompressed and big-endian - /// form to PublicKey. - pub fn from_octets_uncompressed( - bytes: &[u8; Self::SIZE_BYTES_UNCOMPRESSED], - ) -> Result { - let result = $point_projective_type::from_uncompressed(bytes); - - if result.is_some().unwrap_u8() == 1u8 { - Ok(Self(result.unwrap())) - } else { - Err(Error::BadEncoding) - } - } - - /// Convert a public key from compressed to uncompressed - /// representation - pub fn compressed_to_uncompressed( - bytes: &[u8], - ) -> Result<[u8; Self::SIZE_BYTES_UNCOMPRESSED], Error> { - match Self::from_vec(bytes) { - Ok(public_key) => { - Ok(Self::to_octets_uncompressed(&public_key)) - } - Err(e) => Err(e), - } - } - - /// Convert a public key from uncompressed to compressed - /// representation - pub fn uncompressed_to_compressed( - bytes: &[u8], - ) -> Result<[u8; Self::SIZE_BYTES], Error> { - match Self::from_vec(bytes) { - Ok(public_key) => Ok(Self::to_octets(&public_key)), - Err(e) => Err(e), - } - } } /// A BBS key pair. diff --git a/src/common/util.rs b/src/common/util.rs index 3e3ed93a..0b44d85f 100644 --- a/src/common/util.rs +++ b/src/common/util.rs @@ -14,10 +14,11 @@ macro_rules! print_byte_array { pub(crate) use print_byte_array; -/// Convert a vec to a byte array -pub fn vec_to_byte_array(vec: &[u8]) -> Result<[u8; N], Error> { +pub fn vec_to_byte_array( + vec: &Vec, +) -> Result<[u8; N], Error> { let data_len = vec.len(); - match <[u8; N]>::try_from(vec.to_owned()) { + match <[u8; N]>::try_from(vec.clone()) { Ok(result) => Ok(result), Err(_) => Err(Error::Conversion { cause: format!( diff --git a/src/curves.rs b/src/curves.rs index fc6d8630..7cdc0283 100644 --- a/src/curves.rs +++ b/src/curves.rs @@ -1,5 +1,5 @@ // Curve specific structures for BLS12-381 -pub(crate) mod bls12_381; +pub mod bls12_381; // Serialization of group points pub(crate) mod point_serde; diff --git a/src/curves/bls12_381.rs b/src/curves/bls12_381.rs index 7fef5003..6c423515 100644 --- a/src/curves/bls12_381.rs +++ b/src/curves/bls12_381.rs @@ -1,10 +1,10 @@ pub use blstrs::*; /// Number of bytes to store a scalar. -pub const OCTET_SCALAR_LENGTH: usize = 32; +pub(crate) const OCTET_SCALAR_LENGTH: usize = 32; /// Number of bytes to store an element of G1 in affine and compressed form. -pub const OCTET_POINT_G1_LENGTH: usize = 48; +pub(crate) const OCTET_POINT_G1_LENGTH: usize = 48; /// Number of bytes to store an element of G2 in affine and compressed form. -pub const OCTET_POINT_G2_LENGTH: usize = 96; +pub(crate) const OCTET_POINT_G2_LENGTH: usize = 96; diff --git a/src/error.rs b/src/error.rs index a461315b..9cdeb492 100644 --- a/src/error.rs +++ b/src/error.rs @@ -68,14 +68,6 @@ pub enum Error { messages: usize, }, - /// Not enough random scalars during Proof initialization. - UndisclosedIndexesRandomScalarsLengthMismatch { - /// Number of random scalars. - random_scalars: usize, - /// Number of messages. - undisclosed_indexes: usize, - }, - /// The given point(from `G1` or `G2`) is an `Identity` element of /// respective subgroup. PointIsIdentity, @@ -143,16 +135,6 @@ impl core::fmt::Debug for Error { #messages: {messages}." ) } - Error::UndisclosedIndexesRandomScalarsLengthMismatch { - random_scalars, - undisclosed_indexes, - } => { - write!( - f, - "length mismatch #random_scalars: {random_scalars}, \ - #undisclosed_indexes: {undisclosed_indexes}." - ) - } Error::PointIsIdentity => { write!(f, "unexpected `Identity` element.") } diff --git a/src/lib.rs b/src/lib.rs index d21e2e0f..aa856d16 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -38,8 +38,8 @@ extern crate alloc; /// Error types mod error; -/// Common types and utilities -pub mod common; +// Common types and utilities +mod common; // Supported Curves mod curves; diff --git a/src/schemes/bbs.rs b/src/schemes/bbs.rs index 5360df92..acdbe492 100644 --- a/src/schemes/bbs.rs +++ b/src/schemes/bbs.rs @@ -7,17 +7,6 @@ pub use crate::schemes::bbs::api::dtos::{ BbsVerifyRequest, }; -// namespace bbs types -/// BBS related types -#[cfg(feature = "__private_bbs_fixtures_generator_api")] -pub mod types { - pub use crate::schemes::bbs::core::types::{ - ProofTrace, - RandomScalars, - SignatureTrace, - }; -} - // Core implementation of BBS scheme. pub(crate) mod core; diff --git a/src/schemes/bbs/api/proof.rs b/src/schemes/bbs/api/proof.rs index 625533bb..b56cf473 100644 --- a/src/schemes/bbs/api/proof.rs +++ b/src/schemes/bbs/api/proof.rs @@ -136,23 +136,15 @@ where request.presentation_header.as_ref(), &generators, &messages, + Some(total_message_count), ) } -// Generate a BBS signature proof of knowledge with a given rng and a trace. -#[cfg_attr( - docsrs, - doc(cfg(feature = "__private_bbs_fixtures_generator_api")) -)] +// Generate a BBS signature proof of knowledge with a given rng. #[cfg(feature = "__private_bbs_fixtures_generator_api")] -use crate::schemes::bbs::core::types::ProofTrace; - -#[cfg_attr(docsrs, doc(cfg(feature = "__private_bbs_fixtures_generator_api")))] -#[cfg(feature = "__private_bbs_fixtures_generator_api")] -pub(crate) fn proof_gen_with_rng_and_trace( +pub(crate) fn proof_gen_with_rng( request: &BbsProofGenRequest<'_, T>, rng: R, - trace: Option<&mut ProofTrace>, ) -> Result, Error> where T: AsRef<[u8]>, @@ -163,7 +155,7 @@ where _parse_request_helper::(request)?; // Generate the proof - let proof = Proof::new_with_trace::<_, _, _, C>( + let proof = Proof::new_with_rng::<_, _, _, C>( &pk, &signature, request.header.as_ref(), @@ -171,7 +163,6 @@ where &generators, &proof_messages, rng, - trace, )?; Ok(proof.to_octets()) diff --git a/src/schemes/bbs/api/signature.rs b/src/schemes/bbs/api/signature.rs index ca8295ac..1839bb59 100644 --- a/src/schemes/bbs/api/signature.rs +++ b/src/schemes/bbs/api/signature.rs @@ -76,44 +76,3 @@ where &messages, ) } - -#[cfg_attr( - docsrs, - doc(cfg(feature = "__private_bbs_fixtures_generator_api")) -)] -#[cfg(feature = "__private_bbs_fixtures_generator_api")] -use crate::bbs::core::types::SignatureTrace; - -#[cfg_attr(docsrs, doc(cfg(feature = "__private_bbs_fixtures_generator_api")))] -#[cfg(feature = "__private_bbs_fixtures_generator_api")] -pub(crate) fn sign_with_trace( - request: &BbsSignRequest<'_, T>, - trace: Option<&mut SignatureTrace>, -) -> Result<[u8; BBS_BLS12381G1_SIGNATURE_LENGTH], Error> -where - T: AsRef<[u8]>, - C: BbsCiphersuiteParameters, -{ - // Parse the secret key - let sk = SecretKey::from_bytes(request.secret_key)?; - - // Parse public key from request - let pk = PublicKey::from_octets(request.public_key)?; - - // Digest the supplied messages - let messages: Vec = digest_messages::<_, C>(request.messages)?; - - // Derive generators - let generators = MemoryCachedGenerators::::new(messages.len(), None)?; - - // Produce the signature and return - Signature::new_with_trace::<_, _, _, C>( - &sk, - &pk, - request.header.as_ref(), - &generators, - &messages, - trace, - ) - .map(|sig| sig.to_octets()) -} diff --git a/src/schemes/bbs/ciphersuites.rs b/src/schemes/bbs/ciphersuites.rs index 213752f1..1823049c 100644 --- a/src/schemes/bbs/ciphersuites.rs +++ b/src/schemes/bbs/ciphersuites.rs @@ -64,7 +64,7 @@ pub(crate) trait BbsCiphersuiteParameters: } /// Point on G2 to be used during signature and proof verification. - fn bp2() -> G2Projective { + fn p2() -> G2Projective { G2Projective::generator() } diff --git a/src/schemes/bbs/ciphersuites/bls12_381.rs b/src/schemes/bbs/ciphersuites/bls12_381.rs index 081f5c86..d8128e16 100644 --- a/src/schemes/bbs/ciphersuites/bls12_381.rs +++ b/src/schemes/bbs/ciphersuites/bls12_381.rs @@ -21,16 +21,7 @@ pub const BBS_BLS12381G1_PUBLIC_KEY_LENGTH: usize = OCTET_POINT_G2_LENGTH; pub const BBS_BLS12381G1_SIGNATURE_LENGTH: usize = OCTET_POINT_G1_LENGTH + OCTET_SCALAR_LENGTH; -/// "Export" the suite specific constants for the fixtures generation tool. +/// Number of random bytes required when creating random scalars. #[cfg(feature = "__private_bbs_fixtures_generator_api")] #[cfg_attr(docsrs, doc(cfg(feature = "__private_bbs_fixtures_generator_api")))] -pub mod suite_constants { - pub use crate::curves::bls12_381::{ - OCTET_POINT_G1_LENGTH, - OCTET_POINT_G2_LENGTH, - OCTET_SCALAR_LENGTH, - }; - - /// Number of random bytes required when creating random scalars. - pub const BBS_BLS12381G1_EXPAND_LEN: usize = 48usize; -} +pub const BBS_BLS12381G1_EXPAND_LEN: usize = 48usize; diff --git a/src/schemes/bbs/ciphersuites/bls12_381_g1_sha_256.rs b/src/schemes/bbs/ciphersuites/bls12_381_g1_sha_256.rs index 4dcc7f2b..5cefac9a 100644 --- a/src/schemes/bbs/ciphersuites/bls12_381_g1_sha_256.rs +++ b/src/schemes/bbs/ciphersuites/bls12_381_g1_sha_256.rs @@ -79,6 +79,25 @@ where ) } +/// Generate a BLS12-381-G1-Sha-256 BBS signature proof of knowledge with +/// a given rng. +#[cfg_attr(docsrs, doc(cfg(feature = "__private_bbs_fixtures_generator_api")))] +#[cfg(feature = "__private_bbs_fixtures_generator_api")] +pub fn proof_gen_with_rng( + request: &BbsProofGenRequest<'_, T>, + rng: R, +) -> Result, Error> +where + T: AsRef<[u8]>, + R: RngCore + CryptoRng, +{ + crate::bbs::api::proof::proof_gen_with_rng::< + _, + _, + Bls12381Sha256CipherSuiteParameter, + >(request, rng) +} + /// Verify a BLS12-381-G1-Sha-256 BBS signature proof of knowledge. pub fn proof_verify( request: &BbsProofVerifyRequest<'_, T>, @@ -104,7 +123,17 @@ pub fn create_generators( } #[cfg(feature = "__private_bbs_fixtures_generator_api")] -use crate::curves::bls12_381::OCTET_SCALAR_LENGTH; +use crate::curves::bls12_381::{OCTET_POINT_G1_LENGTH, OCTET_SCALAR_LENGTH}; + +/// Point of G1 octets representation length +#[cfg(feature = "__private_bbs_fixtures_generator_api")] +#[cfg_attr(docsrs, doc(cfg(feature = "__private_bbs_fixtures_generator_api")))] +pub const POINT_G1_OCTETS_LENGTH: usize = OCTET_POINT_G1_LENGTH; + +/// Scalar value octets representation length +#[cfg(feature = "__private_bbs_fixtures_generator_api")] +#[cfg_attr(docsrs, doc(cfg(feature = "__private_bbs_fixtures_generator_api")))] +pub const SCALAR_OCTETS_LENGTH: usize = OCTET_SCALAR_LENGTH; /// Hash to scalar. #[cfg(feature = "__private_bbs_fixtures_generator_api")] @@ -160,43 +189,3 @@ pub fn default_map_message_to_scalar_as_hash_dst() -> Vec { pub fn ciphersuite_id() -> Vec { Bls12381Sha256CipherSuiteParameter::ID.as_octets().to_vec() } - -#[cfg(feature = "__private_bbs_fixtures_generator_api")] -use crate::schemes::bbs::core::types::{ProofTrace, SignatureTrace}; - -/// Generate a BLS12-381-G1-Sha-256 BBS signature using a trace -/// to populate the signature fixtures. -#[cfg_attr(docsrs, doc(cfg(feature = "__private_bbs_fixtures_generator_api")))] -#[cfg(feature = "__private_bbs_fixtures_generator_api")] -pub fn sign_with_trace( - request: &BbsSignRequest<'_, T>, - trace: Option<&mut SignatureTrace>, -) -> Result<[u8; BBS_BLS12381G1_SIGNATURE_LENGTH], Error> -where - T: AsRef<[u8]>, -{ - crate::bbs::api::signature::sign_with_trace::< - _, - Bls12381Sha256CipherSuiteParameter, - >(request, trace) -} - -/// Generate a BLS12-381-G1-Sha-256 BBS signature proof of knowledge with -/// a given rng. -#[cfg_attr(docsrs, doc(cfg(feature = "__private_bbs_fixtures_generator_api")))] -#[cfg(feature = "__private_bbs_fixtures_generator_api")] -pub fn proof_with_rng_and_trace( - request: &BbsProofGenRequest<'_, T>, - rng: R, - trace: Option<&mut ProofTrace>, -) -> Result, Error> -where - T: AsRef<[u8]>, - R: RngCore + CryptoRng, -{ - crate::bbs::api::proof::proof_gen_with_rng_and_trace::< - _, - _, - Bls12381Sha256CipherSuiteParameter, - >(request, rng, trace) -} diff --git a/src/schemes/bbs/ciphersuites/bls12_381_g1_shake_256.rs b/src/schemes/bbs/ciphersuites/bls12_381_g1_shake_256.rs index 78aba978..0da082f7 100644 --- a/src/schemes/bbs/ciphersuites/bls12_381_g1_shake_256.rs +++ b/src/schemes/bbs/ciphersuites/bls12_381_g1_shake_256.rs @@ -79,6 +79,25 @@ where ) } +/// Generate a BLS12-381-G1-Sha-256 BBS signature proof of knowledge with +/// a given rng. +#[cfg(feature = "__private_bbs_fixtures_generator_api")] +#[cfg_attr(docsrs, doc(cfg(feature = "__private_bbs_fixtures_generator_api")))] +pub fn proof_gen_with_rng( + request: &BbsProofGenRequest<'_, T>, + rng: R, +) -> Result, Error> +where + T: AsRef<[u8]>, + R: RngCore + CryptoRng, +{ + crate::bbs::api::proof::proof_gen_with_rng::< + _, + _, + Bls12381Shake256CipherSuiteParameter, + >(request, rng) +} + /// Verify a BLS12-381-G1-Shake-256 BBS signature proof of knowledge. pub fn proof_verify( request: &BbsProofVerifyRequest<'_, T>, @@ -105,7 +124,17 @@ pub fn create_generators( } #[cfg(feature = "__private_bbs_fixtures_generator_api")] -use crate::curves::bls12_381::OCTET_SCALAR_LENGTH; +use crate::curves::bls12_381::{OCTET_POINT_G1_LENGTH, OCTET_SCALAR_LENGTH}; + +/// Point of G1 octets representation length +#[cfg(feature = "__private_bbs_fixtures_generator_api")] +#[cfg_attr(docsrs, doc(cfg(feature = "__private_bbs_fixtures_generator_api")))] +pub const POINT_G1_OCTETS_LENGTH: usize = OCTET_POINT_G1_LENGTH; + +/// Scalar value octets representation length +#[cfg(feature = "__private_bbs_fixtures_generator_api")] +#[cfg_attr(docsrs, doc(cfg(feature = "__private_bbs_fixtures_generator_api")))] +pub const SCALAR_OCTETS_LENGTH: usize = OCTET_SCALAR_LENGTH; /// Hash to scalar. #[cfg(feature = "__private_bbs_fixtures_generator_api")] @@ -163,43 +192,3 @@ pub fn ciphersuite_id() -> Vec { .as_octets() .to_vec() } - -#[cfg(feature = "__private_bbs_fixtures_generator_api")] -use crate::schemes::bbs::core::types::{ProofTrace, SignatureTrace}; - -/// Generate a BLS12-381-G1-Shake-256 BBS signature using a trace -/// to populate the signature fixtures. -#[cfg_attr(docsrs, doc(cfg(feature = "__private_bbs_fixtures_generator_api")))] -#[cfg(feature = "__private_bbs_fixtures_generator_api")] -pub fn sign_with_trace( - request: &BbsSignRequest<'_, T>, - trace: Option<&mut SignatureTrace>, -) -> Result<[u8; BBS_BLS12381G1_SIGNATURE_LENGTH], Error> -where - T: AsRef<[u8]>, -{ - crate::bbs::api::signature::sign_with_trace::< - _, - Bls12381Shake256CipherSuiteParameter, - >(request, trace) -} - -/// Generate a BLS12-381-G1-Shake-256 BBS signature proof of knowledge with -/// a given rng. -#[cfg_attr(docsrs, doc(cfg(feature = "__private_bbs_fixtures_generator_api")))] -#[cfg(feature = "__private_bbs_fixtures_generator_api")] -pub fn proof_with_rng_and_trace( - request: &BbsProofGenRequest<'_, T>, - rng: R, - trace: Option<&mut ProofTrace>, -) -> Result, Error> -where - T: AsRef<[u8]>, - R: RngCore + CryptoRng, -{ - crate::bbs::api::proof::proof_gen_with_rng_and_trace::< - _, - _, - Bls12381Shake256CipherSuiteParameter, - >(request, rng, trace) -} diff --git a/src/schemes/bbs/core/generator.rs b/src/schemes/bbs/core/generator.rs index 7175928b..e28f1134 100644 --- a/src/schemes/bbs/core/generator.rs +++ b/src/schemes/bbs/core/generator.rs @@ -21,7 +21,7 @@ pub(crate) trait Generators: Debug + Clone { /// Note - `MessageGenerators` is zero indexed, so passed `index` value /// should be in [0, `length`) range. In case of an invalid `index`, `None` /// value is returned. - fn get_message_generator(&self, index: usize) -> Option; + fn get_message_generator(&mut self, index: usize) -> Option; /// Get a `Iterator` for message generators. fn message_generators_iter(&self) -> MessageGeneratorsIter { diff --git a/src/schemes/bbs/core/generator/memory_cached_generator.rs b/src/schemes/bbs/core/generator/memory_cached_generator.rs index 4ca2cdb4..6c6a7b6d 100644 --- a/src/schemes/bbs/core/generator/memory_cached_generator.rs +++ b/src/schemes/bbs/core/generator/memory_cached_generator.rs @@ -76,7 +76,7 @@ impl Generators /// Note `MessageGenerators` is zero indexed, so passed `index` value should /// be in [0, `length`) range. In case of invalid `index`, `None` value /// is returned. - fn get_message_generator(&self, index: usize) -> Option { + fn get_message_generator(&mut self, index: usize) -> Option { if index >= self.H_list.len() { return None; } diff --git a/src/schemes/bbs/core/proof.rs b/src/schemes/bbs/core/proof.rs index fb0eaa6f..374eaa6c 100644 --- a/src/schemes/bbs/core/proof.rs +++ b/src/schemes/bbs/core/proof.rs @@ -4,14 +4,7 @@ use super::{ generator::Generators, key_pair::PublicKey, signature::Signature, - types::{ - Challenge, - FiatShamirProof, - Message, - ProofInitResult, - ProofMessage, - RandomScalars, - }, + types::{Challenge, FiatShamirProof, Message, ProofMessage}, utils::{compute_B, compute_challenge, compute_domain}, }; use crate::{ @@ -37,8 +30,6 @@ use pairing::{MillerLoopResult as _, MultiMillerLoop}; use rand::{CryptoRng, RngCore}; use rand_core::OsRng; -use super::types::ProofTrace; - #[cfg(feature = "alloc")] use alloc::collections::BTreeMap; @@ -63,14 +54,10 @@ pub(crate) struct Proof { pub(crate) A_bar: G1Projective, /// \overline{B} pub(crate) B_bar: G1Projective, - /// D - pub(crate) D: G1Projective, - /// e^ - pub(crate) e_hat: FiatShamirProof, - /// r1^ - pub(crate) r1_hat: FiatShamirProof, - /// r3^ - pub(crate) r3_hat: FiatShamirProof, + /// r2^ + pub(crate) r2_hat: FiatShamirProof, + /// z^ + pub(crate) z_hat: FiatShamirProof, /// (m^_1, ..., m^_U) pub(crate) m_hat_list: Vec, /// c @@ -83,11 +70,7 @@ impl core::fmt::Display for Proof { print_byte_array!(f, point_to_octets_g1(&self.A_bar)); write!(f, ", B_bar: ")?; print_byte_array!(f, point_to_octets_g1(&self.B_bar)); - write!( - f, - ", e^: {}, r1^: {}, r3^: {}, m^_i: [", - self.e_hat.0, self.r1_hat.0, self.r3_hat.0, - )?; + write!(f, ", r2^: {}, z^: {}, m^_i: [", self.r2_hat.0, self.z_hat.0,)?; for (i, m_hat) in self.m_hat_list.iter().enumerate() { write!(f, "m^_{}: {}, ", i + 1, m_hat.0)?; } @@ -115,53 +98,9 @@ impl Proof { PK, signature, header, ph, generators, messages, OsRng, ) } - - pub fn new_with_rng( - PK: &PublicKey, - signature: &Signature, - header: Option, - ph: Option, - generators: &G, - messages: &[ProofMessage], - rng: R, - ) -> Result - where - T: AsRef<[u8]>, - R: RngCore + CryptoRng, - G: Generators, - C: BbsCiphersuiteParameters, - { - Self::new_with_rng_and_trace::<_, _, _, C>( - PK, signature, header, ph, generators, messages, rng, None, - ) - } - - #[cfg(feature = "__private_bbs_fixtures_generator_api")] - pub fn new_with_trace( - PK: &PublicKey, - signature: &Signature, - header: Option, - ph: Option, - generators: &G, - messages: &[ProofMessage], - rng: R, - trace: Option<&mut ProofTrace>, - ) -> Result - where - T: AsRef<[u8]>, - R: RngCore + CryptoRng, - G: Generators, - C: BbsCiphersuiteParameters, - { - Self::new_with_rng_and_trace::<_, _, _, C>( - PK, signature, header, ph, generators, messages, rng, trace, - ) - } - /// Generates the zero-knowledge proof-of-knowledge of a signature, while /// optionally selectively disclosing from the original set of signed messages as defined in `ProofGen` API in BBS Signature specification using an externally supplied random number generator. - #[allow(clippy::too_many_arguments)] - fn new_with_rng_and_trace( + pub fn new_with_rng( PK: &PublicKey, signature: &Signature, header: Option, @@ -169,7 +108,6 @@ impl Proof { generators: &G, messages: &[ProofMessage], mut rng: R, - mut trace: Option<&mut ProofTrace>, ) -> Result where T: AsRef<[u8]>, @@ -192,335 +130,133 @@ impl Proof { }); } - // (r1, r2, e~, s~, r2~, r3~, m~_1, ..., m~_U) = - // calculate_random_scalars(6+U) - let mut random_scalars = RandomScalars { - r1: create_random_scalar(&mut rng)?, - r2: create_random_scalar(&mut rng)?, - e_tilde: create_random_scalar(&mut rng)?, - r1_tilde: create_random_scalar(&mut rng)?, - r3_tilde: create_random_scalar(&mut rng)?, - ..Default::default() - }; - - // Deserialization steps of the `CoreProofGen` operation defined in https://identity.foundation/bbs-signature/draft-irtf-cfrg-bbs-signatures.html#name-coreproofgen - // - // Deserialization: - // ...(implicit steps)... - // 9. undisclosed_indexes = range(1, L) \ disclosed_indexes - // 10. disclosed_messages = (messages[i1], ..., messages[iR]) - let message_scalars: Vec = - messages.iter().map(|m| m.get_message().0).collect(); - let mut undisclosed_indexes = Vec::new(); - let mut disclosed_messages = BTreeMap::new(); - let mut undisclosed_message_scalars = Vec::new(); - for (i, message) in messages.iter().enumerate() { - match message { - ProofMessage::Revealed(m) => { - disclosed_messages.insert(i, *m); - } - ProofMessage::Hidden(m) => { - undisclosed_indexes.push(i); - undisclosed_message_scalars.push(m.0); - - // Get the random scalars m~_j1, ..., m~_jU - random_scalars - .insert_m_tilde(create_random_scalar(&mut rng)?); - } - } - } - - // initialize proof generation - let init_result: ProofInitResult = Self::proof_init::( - PK, - signature, - generators, - &random_scalars, - header, - message_scalars, - undisclosed_indexes, - )?; - - // calculate the challenge - let c = - compute_challenge::<_, C>(&init_result, &disclosed_messages, ph)?; - - // Add to the trace when creating the fixtures - if cfg!(feature = "__private_bbs_fixtures_generator_api") { - if let Some(t) = trace.as_mut() { - (*t).new_with_init_res(&init_result, c, random_scalars.clone()); - } - } - - // finalize the proof - Self::proof_finalize( - c, - signature.e, - random_scalars, - init_result, - undisclosed_message_scalars, - ) - } - - /// Verify the zero-knowledge proof-of-knowledge of a signature with - /// optionally selectively disclosed messages from the original set of signed messages as defined in `ProofGen` API in BBS Signature specification . - pub fn verify( - &self, - PK: &PublicKey, - header: Option, - ph: Option, - generators: &G, - disclosed_messages: &BTreeMap, - ) -> Result - where - T: AsRef<[u8]>, - G: Generators, - C: BbsCiphersuiteParameters, - { - // if KeyValidate(PK) is INVALID, return INVALID - // `PK` should not be an identity and should belong to subgroup G2 - if PK.is_valid().unwrap_u8() == 0u8 { - return Err(Error::InvalidPublicKey); - } - - // initialize the proof verification procedure - let init_res = self.proof_verify_init::( - PK, - header, - generators, - disclosed_messages, - )?; - - // cv_array = (A', Abar, D, C1, C2, R, i1, ..., iR, msg_i1, ..., - // msg_iR, domain, ph) - // cv_for_hash = encode_for_hash(cv_array) - // if cv_for_hash is INVALID, return INVALID - // cv = hash_to_scalar(cv_for_hash, 1) - let cv = compute_challenge::<_, C>(&init_res, disclosed_messages, ph)?; - - // Check the selective disclosure proof - // if c != cv, return INVALID - if self.c != cv { - return Ok(false); - } - - // This check is already done during `Proof` deserialization - // if Abar == 1, return INVALID - if self.A_bar.is_identity().unwrap_u8() == 1 { - return Err(Error::PointIsIdentity); - } - - // Check the signature proof - // if e(Abar, W) * e(Abar, -P2) != 1, return INVALID - // else return VALID - let P2 = C::bp2().to_affine(); - Ok(Bls12::multi_miller_loop(&[ - (&self.A_bar.to_affine(), &G2Prepared::from(PK.0.to_affine())), - (&self.B_bar.to_affine(), &G2Prepared::from(-P2)), - ]) - .final_exponentiation() - .is_identity() - .unwrap_u8() - == 1) - } - - /// Initialize the Proof Generation operation. - pub fn proof_init( - PK: &PublicKey, - signature: &Signature, - generators: &G, - random_scalars: &RandomScalars, - header: Option, - message_scalars: Vec, - undisclosed_indexes: Vec, - ) -> Result - where - T: AsRef<[u8]>, - G: Generators, - C: BbsCiphersuiteParameters, - { - let total_no_of_messages = message_scalars.len(); - - // Check input sizes. - // Number of message generators == number of messages is checked in - // compute_domain. Checking that all the indexes are in the [0, - // length(messages)) range is done before get_message_generator - // bellow. Checking here that number of random scalars == number - // of messages + 3. - if undisclosed_indexes.len() != random_scalars.m_tilde_scalars_len() { - return Err(Error::UndisclosedIndexesRandomScalarsLengthMismatch { - random_scalars: random_scalars.m_tilde_scalars_len(), - undisclosed_indexes: undisclosed_indexes.len(), - }); - } - - // Checking that number of undisclosed messages (/indexes) <= number of - // messages - if undisclosed_indexes.len() > message_scalars.len() { - return Err(Error::BadParams { - cause: format!( - "Not disclosed messages number is invalid. Maximum \ - allowed value is {}", - total_no_of_messages - ), - }); - } + // The following steps from the `ProofGen` operation defined in https://identity.foundation/bbs-signature/draft-bbs-signatures.html#name-proofgen are implicit in this + // implementation + // signature_result = octets_to_signature(signature) + // (i1, i2,..., iR) = RevealedIndexes + // (j1, j2,..., jU) = [L] \ RevealedIndexes + // if signature_result is INVALID, return INVALID + // (A, e) = signature_result + // generators = (Q || || H_1 || ... || H_L) // domain // = hash_to_scalar((PK||L||generators||Ciphersuite_ID||header), 1) - let domain = compute_domain::<_, _, C>( - PK, - header, - message_scalars.len(), - generators, - )?; - - // Abar = A * (r1 * r2) - let A_bar = signature.A * (random_scalars.r1 * random_scalars.r2); - - // B = P1 + Q * domain + H_1 * msg_1 + ... + H_L * msg_L - let B = compute_B::<_, C>(&domain, &message_scalars, generators)?; - - // D = B * r2 - let D = B * random_scalars.r2; + let domain = + compute_domain::<_, _, C>(PK, header, messages.len(), generators)?; - // Bbar = D * r1 - Abar * e - let B_bar = G1Projective::multi_exp( - &[D, A_bar], - &[random_scalars.r1, -signature.e], - ); + // (r1, e~, r2~, r3~, z~) = hash_to_scalar(PRF(8*ceil(log2(r))), 6) + let r1 = create_random_scalar(&mut rng)?; + let r2_tilde = create_random_scalar(&mut rng)?; + let z_tilde = create_random_scalar(&mut rng)?; - // T1 = Abar * e~ + D * r1~ - let T1 = G1Projective::multi_exp( - &[A_bar, D], - &[random_scalars.e_tilde, random_scalars.r1_tilde], - ); + // (m~_j1, ..., m~_jU) = hash_to_scalar(PRF(8*ceil(log2(r))), U) + // these random scalars will be generated further below during `C2` + // computation - // T2 = D * r3~ + H_j1 * m~_j1 + ... + H_jU * m~_jU - let mut H_Points = Vec::new(); - for idx in undisclosed_indexes { - if idx >= total_no_of_messages { - return Err(Error::BadParams { - cause: format!( - "Undisclosed message index is invalid. Maximum \ - allowed value is {}", - total_no_of_messages - 1 - ), - }); - } - // unwrap is safe here since we check the idx value above. - let generator = generators.get_message_generator(idx).unwrap(); - H_Points.push(generator); - } + let msg: Vec<_> = messages.iter().map(|m| m.get_message()).collect(); - // If all messages are revealed, (i.e., H_Points is empty), - // multi_exp will return the wrong result. - // TODO: Update to blstrs 1.7.1 to fix this - let T2 = if H_Points.is_empty() { - D * random_scalars.r3_tilde - } else { - G1Projective::multi_exp( - &[[D].to_vec(), H_Points].concat(), - &[ - [random_scalars.r3_tilde].to_vec(), - random_scalars.m_tilde_scalars.to_vec(), - ] - .concat(), - ) - }; + // Abar = A * r1 + let A_bar = signature.A * r1; - Ok(ProofInitResult { - A_bar, - B_bar, - D, - T1, - T2, - domain, - }) - } + // B = P1 + Q * domain + H_1 * msg_1 + ... + H_L * msg_L + let B = compute_B::<_, C>(&domain, msg.as_ref(), generators)?; - /// Finalize the Proof Generation operation. - pub fn proof_finalize( - challenge: Challenge, - e_value: Scalar, - random_scalars: RandomScalars, - init_res: ProofInitResult, - undisclosed_message_scalars: Vec, - ) -> Result { - // Check that number of random scalars == number of messages + 5 - if undisclosed_message_scalars.len() - != random_scalars.m_tilde_scalars_len() - { - return Err(Error::UndisclosedIndexesRandomScalarsLengthMismatch { - random_scalars: random_scalars.m_tilde_scalars_len(), - undisclosed_indexes: undisclosed_message_scalars.len(), - }); - } + // Bbar = B * r1 - Abar * e + let B_bar = G1Projective::multi_exp(&[B, A_bar], &[r1, -signature.e]); - // r3 = r2 ^ -1 mod r - let r3 = random_scalars.r2.invert(); + // r2 = -r1 ^ -1 mod r + let r2 = r1.invert(); - if r3.is_none().unwrap_u8() == 1u8 { + if r2.is_none().unwrap_u8() == 1u8 { return Err(Error::CryptoOps { cause: "Failed to invert `r1`".to_owned(), }); }; - let r3 = r3.unwrap(); + let r2 = -r2.unwrap(); - // e^ = e~ + e_value * challenge - let e_hat = - FiatShamirProof(random_scalars.e_tilde + challenge.0 * e_value); + // C = Abar * r2~ + Bbar * z~ + H_j1 * m~_j1 + ... + H_jU * m~_jU + let mut H_points = Vec::new(); + let mut m_tilde_scalars = Vec::new(); + let mut hidden_messages = Vec::new(); + let mut disclosed_messages = BTreeMap::new(); + for (i, generator) in generators.message_generators_iter().enumerate() { + match messages[i] { + ProofMessage::Revealed(m) => { + disclosed_messages.insert(i, m); + } + ProofMessage::Hidden(m) => { + H_points.push(generator); + m_tilde_scalars.push(create_random_scalar(&mut rng)?); + hidden_messages.push(m.0); + } + } + } - // r1^ = r1~ - r1 * challenge - let r1_hat = FiatShamirProof( - random_scalars.r1_tilde - challenge.0 * random_scalars.r1, + let C = G1Projective::multi_exp( + &[[A_bar, B_bar].to_vec(), H_points].concat(), + &[[r2_tilde, z_tilde].to_vec(), m_tilde_scalars.clone()].concat(), ); - // r3^ = r3~ - r3 * challenge - let r3_hat = - FiatShamirProof(random_scalars.r3_tilde - challenge.0 * r3); + // c_array = (A_bar, B_bar, C, R, i1, ..., iR, msg_i1, ..., msg_iR, + // domain, ph) + // c_octs = serialize(c_array) + // if c_octs is INVALID, return INVALID + // c = hash_to_scalar(c_octs, 1) + let c = compute_challenge::<_, C>( + &A_bar, + &B_bar, + &C, + &disclosed_messages, + &domain, + ph, + )?; + + // r2^ = r2~ + c * r2 + let r2_hat = FiatShamirProof(r2_tilde + c.0 * signature.e * r2); + + // z^ = z~ + c * e * r2 + let z_hat = FiatShamirProof(z_tilde + c.0 * r2); // for j in (j1, j2,..., jU): m^_j = m~_j + c * msg_j - let m_hat_list = random_scalars - .m_tilde_scalars + let m_hat_list = m_tilde_scalars .iter() - .zip(undisclosed_message_scalars.iter()) + .zip(hidden_messages.iter()) .map(|(m_tilde, msg)| { - let m_hat = *m_tilde + challenge.0 * (*msg); + let m_hat = *m_tilde + c.0 * (*msg); FiatShamirProof(m_hat) }) .collect::>(); Ok(Proof { - A_bar: init_res.A_bar, - B_bar: init_res.B_bar, - D: init_res.D, - e_hat, - r1_hat, - r3_hat, + A_bar, + B_bar, + r2_hat, + z_hat, m_hat_list, - c: challenge, + c, }) } - /// Initialize the Proof Verification operation. - pub fn proof_verify_init( + /// Verify the zero-knowledge proof-of-knowledge of a signature with + /// optionally selectively disclosed messages from the original set of signed messages as defined in `ProofGen` API in BBS Signature specification . + pub fn verify( &self, PK: &PublicKey, header: Option, + ph: Option, generators: &G, disclosed_messages: &BTreeMap, - ) -> Result + total_no_of_messages: Option, + ) -> Result where T: AsRef<[u8]>, G: Generators, C: BbsCiphersuiteParameters, { - // The total number of messages equals disclosed_messages number + m_hat - // number Note that this operation is necessarily repeated at - // the proof verify api. - let total_no_of_messages = - self.m_hat_list.len() + disclosed_messages.len(); + // If total number of messages is not provided, it defaults to + // disclosed_messages number + m_hat number + let total_no_of_messages = total_no_of_messages + .unwrap_or(self.m_hat_list.len() + disclosed_messages.len()); // Input parameter checks // Error out if there is no `header` and not any `ProofMessage` @@ -529,7 +265,6 @@ impl Proof { cause: "nothing to verify".to_owned(), }); } - // Check if input proof data commitments matches no. of hidden messages if total_no_of_messages != generators.message_generators_length() { return Err(Error::BadParams { @@ -543,7 +278,6 @@ impl Proof { ), }); } - if disclosed_messages .keys() .any(|r| *r >= total_no_of_messages) @@ -556,6 +290,20 @@ impl Proof { ), }); } + // if KeyValidate(PK) is INVALID, return INVALID + // `PK` should not be an identity and should belong to subgroup G2 + if PK.is_valid().unwrap_u8() == 0u8 { + return Err(Error::InvalidPublicKey); + } + + // The following steps from the `ProofVerify` operation defined in https://identity.foundation/bbs-signature/draft-bbs-signatures.html#name-proofverify are implicit in this + // implementation + // (i1, i2, ..., iR) = RevealedIndexes + // (j1, j2, ..., jU) = [L]\RevealedIndexes + // proof_value = octets_to_proof(proof) + // if proof_value is INVALID, return INVALID + // (A', Abar, D, c, e^, r2^, z^, (m^_j1,...,m^_jU)) = proof_value + // generators = (Q || H_1 || ... || H_L) // domain // = hash_to_scalar((PK||L||generators||Ciphersuite_ID||header), 1) @@ -566,27 +314,27 @@ impl Proof { generators, )?; - // Bv = P1 + Q_1 * domain + H_i1 * msg_i1 + ... + H_iR * msg_iR - let Bv_len = 1 + 1 + disclosed_messages.len(); - let mut Bv_points = Vec::with_capacity(Bv_len); - let mut Bv_scalars = Vec::with_capacity(Bv_len); + // T = P1 + Q * domain + H_i1 * msg_i1 + ... H_iR * msg_iR + let T_len = 1 + 1 + disclosed_messages.len(); + let mut T_points = Vec::with_capacity(T_len); + let mut T_scalars = Vec::with_capacity(T_len); let P1 = C::p1()?; // P1 - Bv_points.push(P1); - Bv_scalars.push(Scalar::one()); + T_points.push(P1); + T_scalars.push(Scalar::one()); // Q * domain - Bv_points.push(generators.Q()); - Bv_scalars.push(domain); + T_points.push(generators.Q()); + T_scalars.push(domain); let mut C_points_temp = Vec::with_capacity(self.m_hat_list.len()); let mut C_scalars_temp = Vec::with_capacity(self.m_hat_list.len()); let mut j = 0; for (i, generator) in generators.message_generators_iter().enumerate() { if disclosed_messages.contains_key(&i) { - Bv_points.push(generator); + T_points.push(generator); // unwrap() is safe here since we already have checked for // existence of key - Bv_scalars.push(disclosed_messages.get(&i).unwrap().0); + T_scalars.push(disclosed_messages.get(&i).unwrap().0); } else { C_points_temp.push(generator); C_scalars_temp.push(self.m_hat_list[j].0); @@ -594,45 +342,73 @@ impl Proof { } } - // Calculate Bv = P1 + Q * domain + H_i1 * msg_i1 + ... H_iR * msg_iR - let Bv = G1Projective::multi_exp(&Bv_points, &Bv_scalars); + // Calculate T = H_i1 * msg_i1 + ... H_iR * msg_iR + let T = G1Projective::multi_exp(&T_points, &T_scalars); + + // C = T * c + Abar * r2^ + Bbar * z^ + + // + H_j1 * m^_j1 + ... + H_jU * m^_jU + let C_len = 1 + 1 + 1 + self.m_hat_list.len(); + let mut C_points = Vec::with_capacity(C_len); + let mut C_scalars = Vec::with_capacity(C_len); + // T * (-c) + C_points.push(T); + C_scalars.push(self.c.0); + // Abar * r2^ + C_points.push(self.A_bar); + C_scalars.push(self.r2_hat.0); + // Bbar * z^ + C_points.push(self.B_bar); + C_scalars.push(self.z_hat.0); + // H_j1 * m^_j1 + ... + H_jU * m^_jU + C_points.append(&mut C_points_temp); + C_scalars.append(&mut C_scalars_temp); - // T1 = Bbar * c + Abar * e^ + D * r1^ - let T1 = G1Projective::multi_exp( - &[self.B_bar, self.A_bar, self.D], - &[self.c.0, self.e_hat.0, self.r1_hat.0], - ); + let C = G1Projective::multi_exp(&C_points, &C_scalars); - // T2 = Bv * c + D * r3^ + H_j1 * m^_j1 + ... + H_jU * m^_jU - let T2_len = 1 + 1 + self.m_hat_list.len(); - let mut T2_points = Vec::with_capacity(T2_len); - let mut T2_scalars = Vec::with_capacity(T2_len); - // Bv * c - T2_points.push(Bv); - T2_scalars.push(self.c.0); - // D * r3^ - T2_points.push(self.D); - T2_scalars.push(self.r3_hat.0); - // H_j1 * m^_j1 + ... + H_jU * m^_jU - T2_points.append(&mut C_points_temp); - T2_scalars.append(&mut C_scalars_temp); - - let T2 = G1Projective::multi_exp(&T2_points, &T2_scalars); - - Ok(ProofInitResult { - A_bar: self.A_bar, - B_bar: self.B_bar, - D: self.D, - T1, - T2, - domain, - }) + // cv_array = (A', Abar, D, C1, C2, R, i1, ..., iR, msg_i1, ..., + // msg_iR, domain, ph) + // cv_for_hash = encode_for_hash(cv_array) + // if cv_for_hash is INVALID, return INVALID + // cv = hash_to_scalar(cv_for_hash, 1) + let cv = compute_challenge::<_, C>( + &self.A_bar, + &self.B_bar, + &C, + disclosed_messages, + &domain, + ph, + )?; + + // Check the selective disclosure proof + // if c != cv, return INVALID + if self.c != cv { + return Ok(false); + } + + // This check is already done during `Proof` deserialization + // if Abar == 1, return INVALID + if self.A_bar.is_identity().unwrap_u8() == 1 { + return Err(Error::PointIsIdentity); + } + + // Check the signature proof + // if e(Abar, W) * e(Abar, -P2) != 1, return INVALID + // else return VALID + let P2 = C::p2().to_affine(); + Ok(Bls12::multi_miller_loop(&[ + (&self.A_bar.to_affine(), &G2Prepared::from(PK.0.to_affine())), + (&self.B_bar.to_affine(), &G2Prepared::from(-P2)), + ]) + .final_exponentiation() + .is_identity() + .unwrap_u8() + == 1) } /// Return the size of proof in bytes for `num_undisclosed_messages`. pub fn get_size(num_undisclosed_messages: usize) -> usize { - OCTET_POINT_G1_LENGTH * 3 - + OCTET_SCALAR_LENGTH * (4 + num_undisclosed_messages) + OCTET_POINT_G1_LENGTH * 2 + + OCTET_SCALAR_LENGTH * (3 + num_undisclosed_messages) } /// Store the proof as a sequence of bytes in big endian format. @@ -645,22 +421,19 @@ impl Proof { /// `U` number of unrevealed messages. /// For BLS12-381 based implementation, OCTET_POINT_G1_LENGTH is 48 bytes, /// and OCTET_SCALAR_LENGTH is 32 bytes, then for - /// proof = (Abar, Bbar, D, e^, r1^, z^, (m^_1, ..., m^_U), c), and - /// bytes sequence will be [48, 48, 48, 32, 32, 32, 32*U, 32 ]. + /// proof = (Abar, Bbar, c, r2^, z^, (m^_1, ..., m^_U)), and + /// bytes sequence will be [48, 48, 32, 32, 32, 32*U ]. pub fn to_octets(&self) -> Vec { - let size = OCTET_POINT_G1_LENGTH * 3 - + OCTET_SCALAR_LENGTH * (4 + self.m_hat_list.len()); + let size = OCTET_POINT_G1_LENGTH * 2 + + OCTET_SCALAR_LENGTH * (3 + self.m_hat_list.len()); let mut buffer = Vec::with_capacity(size); - // proof = Abar, Bbar, D, e^, s^, r2^, r3^, (m^_j1, ..., m^_jU), - // challenge) + // proof = (Abar, Bbar, c, r2^, z^, (m^_1, ..., m^_U)) buffer.extend_from_slice(&point_to_octets_g1(&self.A_bar)); buffer.extend_from_slice(&point_to_octets_g1(&self.B_bar)); - buffer.extend_from_slice(&point_to_octets_g1(&self.D)); - buffer.extend_from_slice(&self.e_hat.to_bytes()); - buffer.extend_from_slice(&self.r1_hat.to_bytes()); - buffer.extend_from_slice(&self.r3_hat.to_bytes()); + buffer.extend_from_slice(&self.r2_hat.to_bytes()); + buffer.extend_from_slice(&self.z_hat.to_bytes()); for i in 0..self.m_hat_list.len() { buffer.extend_from_slice(&self.m_hat_list[i].to_bytes()); } @@ -674,13 +447,14 @@ impl Proof { /// Expected input size is `OCTET_POINT_G1_LENGTH * 3 + OCTET_SCALAR_LENGTH /// * (5 + U)` where `OCTET_POINT_G1_LENGTH`, size of a point in `G1` in /// ompressed form, `OCTET_SCALAR_LENGTH`, size of a `Scalar`, and `U` is - /// the number of hidden messages. For BLS12-381 based implementation, - /// OCTET_POINT_G1_LENGTH is 48 byes, and OCTET_SCALAR_LENGTH is 32 bytes, - /// then bytes sequence will be treated as [48, 48, 32, 32, 32, 32*U ] to - /// represent proof = (Abar, Bbar, c, r2^, z^, (m^_1, ..., m^_U)). + /// the number of hidden messages. + /// For BLS12-381 based implementation, OCTET_POINT_G1_LENGTH is 48 byes, + /// and OCTET_SCALAR_LENGTH is 32 bytes, then bytes sequence will be + /// treated as [48, 48, 32, 32, 32, 32*U ] to represent + /// proof = (Abar, Bbar, c, r2^, z^, (m^_1, ..., m^_U)). pub fn from_octets>(bytes: B) -> Result { const PROOF_LEN_FLOOR: usize = - OCTET_POINT_G1_LENGTH * 3 + OCTET_SCALAR_LENGTH * 4; + OCTET_POINT_G1_LENGTH * 2 + OCTET_SCALAR_LENGTH * 3; let buffer = bytes.as_ref(); if buffer.len() < PROOF_LEN_FLOOR { return Err(Error::MalformedProof { @@ -713,15 +487,11 @@ impl Proof { // Get B_bar let B_bar = extract_point_value(&mut offset, &mut end, buffer)?; - // Get D - let D = extract_point_value(&mut offset, &mut end, buffer)?; - end = offset + OCTET_SCALAR_LENGTH; - // Get e^, r1^, r3^ - let e_hat = extract_scalar_value(&mut offset, &mut end, buffer)?; - let r1_hat = extract_scalar_value(&mut offset, &mut end, buffer)?; - let r3_hat = extract_scalar_value(&mut offset, &mut end, buffer)?; + // Get r2^, z^ + let r2_hat = extract_scalar_value(&mut offset, &mut end, buffer)?; + let z_hat = extract_scalar_value(&mut offset, &mut end, buffer)?; // Get (m^_j1, ..., m^_jU) let mut m_hat_list = Vec::::with_capacity(unrevealed_message_count); @@ -750,10 +520,8 @@ impl Proof { Ok(Self { A_bar, B_bar, - D, - e_hat, - r1_hat, - r3_hat, + r2_hat, + z_hat, m_hat_list, c, }) diff --git a/src/schemes/bbs/core/signature.rs b/src/schemes/bbs/core/signature.rs index 74772068..5142a14c 100644 --- a/src/schemes/bbs/core/signature.rs +++ b/src/schemes/bbs/core/signature.rs @@ -2,7 +2,7 @@ use super::{ generator::Generators, key_pair::{PublicKey, SecretKey}, - types::{Message, SignatureTrace}, + types::Message, utils::{compute_B, compute_domain}, }; use crate::{ @@ -142,45 +142,6 @@ impl Signature { generators: &G, messages: M, ) -> Result - where - T: AsRef<[u8]>, - M: AsRef<[Message]>, - G: Generators, - C: BbsCiphersuiteParameters, - { - Self::new_private_with_trace::( - SK, PK, header, generators, messages, None, - ) - } - - #[cfg(feature = "__private_bbs_fixtures_generator_api")] - pub fn new_with_trace( - SK: &SecretKey, - PK: &PublicKey, - header: Option, - generators: &G, - messages: M, - trace: Option<&mut SignatureTrace>, - ) -> Result - where - T: AsRef<[u8]>, - M: AsRef<[Message]>, - G: Generators, - C: BbsCiphersuiteParameters, - { - Self::new_private_with_trace::( - SK, PK, header, generators, messages, trace, - ) - } - - fn new_private_with_trace( - SK: &SecretKey, - PK: &PublicKey, - header: Option, - generators: &G, - messages: M, - mut trace: Option<&mut SignatureTrace>, - ) -> Result where T: AsRef<[u8]>, M: AsRef<[Message]>, @@ -216,10 +177,10 @@ impl Signature { // e_s_octs = serialize((SK, domain, msg_1, ..., msg_L)) let mut data_to_hash = vec![]; data_to_hash.extend(SK.to_bytes().as_ref()); + data_to_hash.extend(domain.to_bytes_be().as_ref()); for m in messages { data_to_hash.extend(m.to_bytes().as_ref()); } - data_to_hash.extend(domain.to_bytes_be().as_ref()); // if e_s_octs is INVALID, return INVALID // e_s_expand = expand_message(e_s_octs, expand_dst, expand_len * 2) @@ -229,9 +190,7 @@ impl Signature { let e = C::hash_to_e(&data_to_hash)?; // B = P1 + Q * domain + H_1 * msg_1 + ... + H_L * msg_L - let message_scalars: Vec = - messages.iter().map(|m| m.0).collect(); - let B = compute_B::<_, C>(&domain, &message_scalars, generators)?; + let B = compute_B::<_, C>(&domain, messages, generators)?; let exp = (e + SK.as_scalar()).invert(); let exp = if exp.is_some().unwrap_u8() == 1u8 { exp.unwrap() @@ -243,14 +202,6 @@ impl Signature { }); }; - // Add to the trace when creating the signature fixtures - if cfg!(feature = "__private_bbs_fixtures_generator_api") { - if let Some(t) = trace.as_mut() { - t.B = point_to_octets_g1(&B); - t.domain = domain.to_bytes_be(); - } - } - // A = B * (1 / (SK + e)) Ok(Self { A: B * exp, e }) } @@ -385,20 +336,18 @@ impl Signature { compute_domain::<_, _, C>(PK, header, messages.len(), generators)?; // B = P1 + Q * domain + H_1 * msg_1 + ... + H_L * msg_L - let message_scalars: Vec = - messages.iter().map(|m| m.0).collect(); - let B = compute_B::<_, C>(&domain, &message_scalars, generators)?; + let B = compute_B::<_, C>(&domain, messages, generators)?; - let BP2: blstrs::G2Projective = C::bp2(); - // C1 = (A, W + BP2 * e) + let P2 = C::p2(); + // C1 = (A, W + P2 * e) let C1 = ( &self.A.to_affine(), - &G2Prepared::from((W + BP2 * self.e).to_affine()), + &G2Prepared::from((W + P2 * self.e).to_affine()), ); - // C2 = (B, -BP2) - // -BP2, because we use multi_miller_loop - let C2 = (&B.to_affine(), &G2Prepared::from(-BP2.to_affine())); + // C2 = (B, -P2) + // -P2, because we use multi_miller_loop + let C2 = (&B.to_affine(), &G2Prepared::from(-P2.to_affine())); // C1 == C2 // multi_miller_loop(C1, C2) == 1 diff --git a/src/schemes/bbs/core/types.rs b/src/schemes/bbs/core/types.rs index 41f95b76..fe761cbb 100644 --- a/src/schemes/bbs/core/types.rs +++ b/src/schemes/bbs/core/types.rs @@ -1,14 +1,11 @@ -#![allow(non_snake_case)] use crate::{ bbs::ciphersuites::BbsCiphersuiteParameters, curves::{ - bls12_381::{Scalar, OCTET_POINT_G1_LENGTH, OCTET_SCALAR_LENGTH}, - point_serde::point_to_octets_g1, + bls12_381::{Scalar, OCTET_SCALAR_LENGTH}, scalar_type::scalar_wrapper, }, error::Error, }; -use blstrs::G1Projective; use serde::{Deserialize, Serialize}; use subtle::CtOption; @@ -65,116 +62,3 @@ impl ProofMessage { } } } - -/// Result of proof generation and -/// verification initialization. -#[allow(non_snake_case)] -#[derive(Debug, Default, Clone)] -pub(crate) struct ProofInitResult { - pub A_bar: G1Projective, - pub B_bar: G1Projective, - pub D: G1Projective, - pub T1: G1Projective, - pub T2: G1Projective, - pub domain: Scalar, -} - -/// Random Scalars used to blind the undisclosed messages and the hidden -/// signature value. -#[derive(Default, Debug, Clone)] -pub struct RandomScalars { - /// The r1 random scalar - pub r1: Scalar, - /// The r2 random scalar - pub r2: Scalar, - /// The e_tilde random scalar - pub e_tilde: Scalar, - /// The r1_tilde random scalar - pub r1_tilde: Scalar, - /// The r3_tilde random scalar - pub r3_tilde: Scalar, - /// The list of m~_i, where each m~ a random scalar - pub m_tilde_scalars: Vec, -} - -impl RandomScalars { - pub(crate) fn insert_m_tilde(&mut self, m_tilde: Scalar) { - self.m_tilde_scalars.push(m_tilde); - } - - pub(crate) fn m_tilde_scalars_len(&self) -> usize { - self.m_tilde_scalars.len() - } -} - -/// A struct to hold a trace of the signature generation operation -#[derive(Debug, Clone)] -pub struct SignatureTrace { - /// The point B calculated during proof generation - pub B: [u8; OCTET_POINT_G1_LENGTH], - /// The domain scalar value calculated during proof generation - pub domain: [u8; OCTET_SCALAR_LENGTH], -} - -impl Default for SignatureTrace { - fn default() -> Self { - Self { - B: [0u8; OCTET_POINT_G1_LENGTH], - domain: [0u8; OCTET_SCALAR_LENGTH], - } - } -} - -/// A struct to hold a trace of the proof generation operation -#[derive(Debug, Clone)] -pub struct ProofTrace { - /// The random scalars used during proof generation - pub random_scalars: RandomScalars, - /// The point A_bar calculated during proof generation - pub A_bar: [u8; OCTET_POINT_G1_LENGTH], - /// The point B_bar calculated during proof generation - pub B_bar: [u8; OCTET_POINT_G1_LENGTH], - /// The point D calculated during proof generation - pub D: [u8; OCTET_POINT_G1_LENGTH], - /// The point T1 calculated during proof generation - pub T1: [u8; OCTET_POINT_G1_LENGTH], - /// The point T2 calculated during proof generation - pub T2: [u8; OCTET_POINT_G1_LENGTH], - /// The domain scalar value calculated during proof generation - pub domain: [u8; OCTET_SCALAR_LENGTH], - /// The challenge scalar value calculated during proof generation - pub challenge: [u8; OCTET_SCALAR_LENGTH], -} - -impl Default for ProofTrace { - fn default() -> Self { - Self { - random_scalars: RandomScalars::default(), - A_bar: [0u8; OCTET_POINT_G1_LENGTH], - B_bar: [0u8; OCTET_POINT_G1_LENGTH], - D: [0u8; OCTET_POINT_G1_LENGTH], - T1: [0u8; OCTET_POINT_G1_LENGTH], - T2: [0u8; OCTET_POINT_G1_LENGTH], - domain: [0u8; OCTET_SCALAR_LENGTH], - challenge: [0u8; OCTET_SCALAR_LENGTH], - } - } -} - -impl ProofTrace { - pub(crate) fn new_with_init_res( - &mut self, - init_res: &ProofInitResult, - challenge: Challenge, - random_scalars: RandomScalars, - ) { - self.A_bar = point_to_octets_g1(&init_res.A_bar); - self.B_bar = point_to_octets_g1(&init_res.B_bar); - self.D = point_to_octets_g1(&init_res.D); - self.T1 = point_to_octets_g1(&init_res.T1); - self.T2 = point_to_octets_g1(&init_res.T2); - self.domain = init_res.domain.to_bytes_be(); - self.challenge = challenge.0.to_bytes_be(); - self.random_scalars = random_scalars; - } -} diff --git a/src/schemes/bbs/core/utils.rs b/src/schemes/bbs/core/utils.rs index 8276cdb9..7d0215dd 100644 --- a/src/schemes/bbs/core/utils.rs +++ b/src/schemes/bbs/core/utils.rs @@ -3,7 +3,7 @@ use super::{ generator::Generators, key_pair::PublicKey, - types::{Challenge, Message, ProofInitResult}, + types::{Challenge, Message}, }; use crate::{ bbs::ciphersuites::BbsCiphersuiteParameters, @@ -78,7 +78,7 @@ where /// B = P1 + Q * domain + H_1 * msg_1 + ... + H_L * msg_L pub(crate) fn compute_B( domain: &Scalar, - messages: &[Scalar], + messages: &[Message], generators: &G, ) -> Result where @@ -96,7 +96,11 @@ where let mut points: Vec<_> = vec![C::p1()?, generators.Q()]; points.extend(generators.message_generators_iter()); - let scalars = [&[Scalar::one(), *domain], messages].concat(); + let scalars: Vec<_> = [Scalar::one(), *domain] + .iter() + .copied() + .chain(messages.iter().map(|c| c.0)) + .collect(); Ok(G1Projective::multi_exp(&points, &scalars)) } @@ -104,8 +108,11 @@ where /// Compute Fiat Shamir heuristic challenge. #[allow(clippy::too_many_arguments)] pub(crate) fn compute_challenge( - proof_init_res: &ProofInitResult, + A_bar: &G1Projective, + B_bar: &G1Projective, + C: &G1Projective, disclosed_messages: &BTreeMap, + domain: &Scalar, ph: Option, ) -> Result where @@ -117,25 +124,22 @@ where // c_octs = serialize(c_array) // if c_octs is INVALID, return INVALID let mut data_to_hash = vec![]; + data_to_hash.extend(point_to_octets_g1(A_bar).as_ref()); + data_to_hash.extend(point_to_octets_g1(B_bar).as_ref()); + data_to_hash.extend(point_to_octets_g1(C)); data_to_hash.extend(i2osp( disclosed_messages.len() as u64, NON_NEGATIVE_INTEGER_ENCODING_LENGTH, )?); - - for (&i, &msg) in disclosed_messages { + for &i in disclosed_messages.keys() { data_to_hash .extend(i2osp(i as u64, NON_NEGATIVE_INTEGER_ENCODING_LENGTH)?); + } + for &msg in disclosed_messages.values() { data_to_hash.extend(msg.to_bytes()); } - - data_to_hash.extend(point_to_octets_g1(&proof_init_res.A_bar).as_ref()); - data_to_hash.extend(point_to_octets_g1(&proof_init_res.B_bar).as_ref()); - data_to_hash.extend(point_to_octets_g1(&proof_init_res.D)); - data_to_hash.extend(point_to_octets_g1(&proof_init_res.T1)); - data_to_hash.extend(point_to_octets_g1(&proof_init_res.T2)); - - data_to_hash.extend(proof_init_res.domain.to_bytes_be()); + data_to_hash.extend(domain.to_bytes_be()); let _ph_bytes = ph.as_ref().map_or(&[] as &[u8], |v| v.as_ref()); data_to_hash.extend(i2osp_with_data( diff --git a/src/schemes/bbs_bound/api/proof.rs b/src/schemes/bbs_bound/api/proof.rs index 21b7567c..04bd3209 100644 --- a/src/schemes/bbs_bound/api/proof.rs +++ b/src/schemes/bbs_bound/api/proof.rs @@ -125,5 +125,6 @@ where request.presentation_header.as_ref(), &generators, &messages, + Some(total_message_count), ) } diff --git a/src/schemes/bls/ciphersuites.rs b/src/schemes/bls/ciphersuites.rs index 501bb2fa..b9e1ca41 100644 --- a/src/schemes/bls/ciphersuites.rs +++ b/src/schemes/bls/ciphersuites.rs @@ -20,6 +20,11 @@ pub(crate) trait BlsCiphersuiteParameters: HashToCurveParameter { fn p1() -> G1Projective { G1Projective::generator() } + + // Point on G2 to be used during signature and proof verification. + // fn p2() -> G2Projective { + // G2Projective::generator() + // } } pub(crate) trait BlsSigAugCiphersuiteParameters: diff --git a/src/tests/bbs/generators.rs b/src/tests/bbs/generators.rs index 1abe49b4..8400d216 100644 --- a/src/tests/bbs/generators.rs +++ b/src/tests/bbs/generators.rs @@ -18,13 +18,13 @@ fn creation_nominal() { #[test] fn equality() { const GENERATORS_COUNT: usize = 1000; - let generators_1 = MemoryCachedGenerators::< + let mut generators_1 = MemoryCachedGenerators::< Bls12381Shake256CipherSuiteParameter, >::new(GENERATORS_COUNT, None) .expect("generators creation failed"); assert_eq!(generators_1.message_generators_length(), GENERATORS_COUNT); - let generators_2 = MemoryCachedGenerators::< + let mut generators_2 = MemoryCachedGenerators::< Bls12381Shake256CipherSuiteParameter, >::new(GENERATORS_COUNT, None) .expect("generators creation failed"); @@ -41,7 +41,7 @@ fn equality() { #[test] fn get_point_out_of_bound_index() { // Create 32 message generators - let generators = MemoryCachedGenerators::< + let mut generators = MemoryCachedGenerators::< Bls12381Shake256CipherSuiteParameter, >::new(32, None) .expect("generators creation failed"); diff --git a/src/tests/bbs/key_pair.rs b/src/tests/bbs/key_pair.rs index bf29cd44..f1b36f43 100644 --- a/src/tests/bbs/key_pair.rs +++ b/src/tests/bbs/key_pair.rs @@ -476,31 +476,8 @@ fn key_serde() { #[test] fn from_vec_deserialization_invalid_vec_size() { - let secret_key_expected_error_string = |data_len: usize| -> String { - format!( - "source vector size {data_len}, expected destination byte array \ - size {}", - SecretKey::SIZE_BYTES, - ) - }; - - let public_key_expected_error_string = |data_len: usize| -> String { - format!( - "source vector size {data_len}, expected destination byte array \ - size of either {} or {}", - PublicKey::SIZE_BYTES, - PublicKey::SIZE_BYTES_UNCOMPRESSED - ) - }; - - from_vec_deserialization_invalid_vec_size!( - SecretKey, - secret_key_expected_error_string - ); - from_vec_deserialization_invalid_vec_size!( - PublicKey, - public_key_expected_error_string - ); + from_vec_deserialization_invalid_vec_size!(SecretKey); + from_vec_deserialization_invalid_vec_size!(PublicKey); } #[test] diff --git a/src/tests/bbs/mod.rs b/src/tests/bbs/mod.rs index def5f733..c702f1ce 100644 --- a/src/tests/bbs/mod.rs +++ b/src/tests/bbs/mod.rs @@ -50,22 +50,22 @@ const ANOTHER_TEST_HEADER: &[u8; 23] = b"some_other_test_context"; // Expected signature for TEST_KEY_GEN_IKM, TEST_KEY_INFO, TEST_HEADER and // TEST_CLAIMS -const EXPECTED_SIGNATURE: &str = "8a925a07145e41469f8acd7eed0853bc44f91557c94ed7f55e3e5fc2ee0a2ba65ecfe421c631c424bbe95f5abc6fff8646bfaaeae2bca8636460e0c1f4c1e005ff15872b4d1b8f7e555bf1c39f3306be"; +const EXPECTED_SIGNATURE: &str = "ab32977ca295eeaed27c0c936b3fc60cc55e7cab8219c1017dc498589b487c9f3bff4f063051d69fa157764012686e5b138adde76d2943bfb66ea0e723387b2c526f11bf91cb801baac49f7bbb744a5e"; // Expected signature for an empty header, TEST_KEY_GEN_IKM, TEST_KEY_INFO and // TEST_CLAIMS -const EXPECTED_SIGNATURE_NO_HEADER: &str = "a41a9e4f7660a6745d0b3f8feb930ef66fb0cbe310df6755e4712a634d73f6b7c352349c0159d1af354a53e97689c52735af16881c6e3edd88aafd52f68d4106a905b31d2bf86ed20f900846358f0dad"; +const EXPECTED_SIGNATURE_NO_HEADER: &str = "85d9d04313749c5f4de8a29f89408168b001c342937b88b2b1302b5e8a80ac654b52a980894b8ae22f605af835d72f1e3ed2a5686665de0a66c1414b6e9742ac3395f46a03fcc1c19732a03f5cbfb603"; // Expected signature for TEST_KEY_GEN_IKM, TEST_KEY_INFOS, TEST_HEADER and // TEST_CLAIMS const EXPECTED_SIGNATURES: [&str; 7] = [ - "b46f008c4f94f6476049f3c7723c5c806e20ae8ffa5eb2a39b614ac1d6224379db7ef8134d661462fba5568e392bc49c393e2d810f5542c2726328b198f200068636fe181c4fad8b0d356d68b13f58ed", - "96684adf52b173cd94128f1e813edce620c2a5ab4522a74834cdf69886482c45fd1802514961ee93d6692814bfbce02f7322ff0e8bc125261fdf88cafbeca26c41b91e8442c82ed5471043af825586ba", - "80e959398370ad309a32f9267c50bf66452627e7e28fac211863c85a09d20a4674eee215cf6535c7366fe124699dc39e661f909ddf0d3f6423fb42b580523cc00882708ef1f61ad7437c643351bab0e0", - "91929bc91a8fe66767a070e319fe5dc2ee3f09ea3cd65f7b60c78f77eaa689e8630147b2eeb0c534631265f064caed90618cd86061ddcd7432254fa786c733d042131cc36c845f9a2622f22af41e2893", - "b72d23538f6fe0a5512cb8a647b71fcb2fb50322cf046676955c3cab81ad9a435a5d1d80c64c0e96597957d5a9368d9c5ca42073a13a0401370fca42e0144721f1f5f11512b72826c905c2fa4d1a8273", - "8ec6f78bb5e67b5567025003bd307599b6bdb64fafbf48e17bcddbedf3e64a40a2ade6e23f93139df760c3adb35e05ec0e9b579034c75d33107d538469e90b4b4dd776f40a866c9dd5adc6b43fcbef9a", - "914f155019c7735aa6ffde57b45e458ec753427043e16729e250e9162df341d8a3438edad0111268bd76f0c3ad5ca59c29be3a5aa0ab12b1bb9387cc456f8284de5b678f6163b98957282a8435c092f1", + "925b257838bbc46d0927538e1609867dd563550e9daade709ba0b1b4642df2a1da46c481de8c44184163bd164cade2c75911e31df92a04b8a825b10275109af76f6d28fed3e8c40a7d601edf870d7899", + "a6324bccce90bd0871d5a8f56bc32ab54fec4f58a7f36cad92d2fd8d9291b0ab621f9a636fbc835b1aa2fdb6ad7c9cc25d01fdec7e0307d844cf9d70daf0a2a326eec716660a96536bf44b6036a6204e", + "b58586b4ce4114cbe5b2de5bc49d85d4488744ba6968e95db902c7b4489a42b0217dc3b6eabb4846f1a7382bada4778f6f18f64ddf617916a41a84ef855061a6d730b0a3effff64c3cd05ceb166c6a4e", + "b97bca812bfe7e953fb59c3fe02cf9045d6c0e5c5ae411b83934a0f512fed68695db5bc5df8f48ef87cb13179fcca2ce239dee06d49fee691ef1aeba52992a02ed506ec0fcb404a3096d1a143e1df0b4", + "804317f0ff0ede4a80125973f6a6d43fdb8a90f3f1544c64be977ac2ba7ab11881198a9d281efca1ca6c7b3ec279873f6c27a34d4a9ddc35ba4d71274a6050948bfab65d967fca4f5406774a045b4088", + "af9a76d7cc2ccd9687ff7bcfd49e5147a81cab7b66ca62f6ac294af3dfab30eab610f98b1b3e62932940797ba520ce9c51517f7c75fc928a0a2c3be28b292a2f110c6baf80b025793669caa31667fac4", + "8df37099068494eaeadae4fd782cf4aa9cc3edc4481f984ee191c9f22e42670d1235f823e8dd84f13d06e88bc8290df24315e390ec9b13d686f149d798c67622083a3ef2c3aab4c84783a7fee591e47e", ]; const TEST_PRESENTATION_HEADER_1: &[u8; 26] = b"test_presentation-header-1"; @@ -133,7 +133,7 @@ fn get_expected_signature(expected_signature: &str) -> Signature { #[macro_export] macro_rules! from_vec_deserialization_invalid_vec_size { - ($type:ty, $expected_error_string:expr) => { + ($type:ty) => { // For debug message let type_string = stringify!($type); let type_size = <$type>::SIZE_BYTES; @@ -145,10 +145,15 @@ macro_rules! from_vec_deserialization_invalid_vec_size { ]; for (v, debug_error_message) in test_data { let result = <$type>::from_vec(&v); + let expected_error_string = format!( + "source vector size {}, expected destination byte array size \ + {type_size}", + v.len() + ); assert_eq!( result, Err(Error::Conversion { - cause: $expected_error_string(v.len()), + cause: expected_error_string, }), "`{type_string}::from_vec` should fail - {debug_error_message}" ); diff --git a/src/tests/bbs/proof.rs b/src/tests/bbs/proof.rs index c8c2c0f4..515c9a00 100644 --- a/src/tests/bbs/proof.rs +++ b/src/tests/bbs/proof.rs @@ -140,8 +140,8 @@ fn debug_display() { ..Default::default() }; - assert_eq!(format!("{:?}", proof), "Proof { A_bar: G1Projective { x: Fp(0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000), y: Fp(0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000), z: Fp(0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) }, B_bar: G1Projective { x: Fp(0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000), y: Fp(0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000), z: Fp(0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) }, D: G1Projective { x: Fp(0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000), y: Fp(0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000), z: Fp(0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) }, e_hat: FiatShamirProof(Scalar(0x0000000000000000000000000000000000000000000000000000000000000000)), r1_hat: FiatShamirProof(Scalar(0x0000000000000000000000000000000000000000000000000000000000000000)), r3_hat: FiatShamirProof(Scalar(0x0000000000000000000000000000000000000000000000000000000000000000)), m_hat_list: [FiatShamirProof(Scalar(0x0000000000000000000000000000000000000000000000000000000000000000)), FiatShamirProof(Scalar(0x0000000000000000000000000000000000000000000000000000000000000001))], c: Challenge(Scalar(0x0000000000000000000000000000000000000000000000000000000000000000)) }"); - assert_eq!(format!("{}", proof), "Proof(A_bar: 0xc00x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x00, B_bar: 0xc00x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x00, e^: Scalar(0x0000000000000000000000000000000000000000000000000000000000000000), r1^: Scalar(0x0000000000000000000000000000000000000000000000000000000000000000), r3^: Scalar(0x0000000000000000000000000000000000000000000000000000000000000000), m^_i: [m^_1: Scalar(0x0000000000000000000000000000000000000000000000000000000000000000), m^_2: Scalar(0x0000000000000000000000000000000000000000000000000000000000000001), ], c: Scalar(0x0000000000000000000000000000000000000000000000000000000000000000))"); + assert_eq!(format!("{:?}", proof), "Proof { A_bar: G1Projective { x: Fp(0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000), y: Fp(0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000), z: Fp(0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) }, B_bar: G1Projective { x: Fp(0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000), y: Fp(0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000), z: Fp(0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) }, r2_hat: FiatShamirProof(Scalar(0x0000000000000000000000000000000000000000000000000000000000000000)), z_hat: FiatShamirProof(Scalar(0x0000000000000000000000000000000000000000000000000000000000000000)), m_hat_list: [FiatShamirProof(Scalar(0x0000000000000000000000000000000000000000000000000000000000000000)), FiatShamirProof(Scalar(0x0000000000000000000000000000000000000000000000000000000000000001))], c: Challenge(Scalar(0x0000000000000000000000000000000000000000000000000000000000000000)) }"); + assert_eq!(format!("{}", proof), "Proof(A_bar: 0xc00x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x00, B_bar: 0xc00x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x00, r2^: Scalar(0x0000000000000000000000000000000000000000000000000000000000000000), z^: Scalar(0x0000000000000000000000000000000000000000000000000000000000000000), m^_i: [m^_1: Scalar(0x0000000000000000000000000000000000000000000000000000000000000000), m^_2: Scalar(0x0000000000000000000000000000000000000000000000000000000000000001), ], c: Scalar(0x0000000000000000000000000000000000000000000000000000000000000000))"); } #[test] @@ -198,7 +198,8 @@ fn gen_verify_serde_nominal() { header, ph, &mut generators, - &revealed_messages + &revealed_messages, + None ) .expect("proof verification failed")); @@ -216,17 +217,18 @@ fn gen_verify_serde_nominal() { header, ph, &mut generators, - &revealed_messages + &revealed_messages, + None ) .expect("roundtrip deserialized proof verification failed")); } #[test] fn proof_size() { - assert_eq!(272, get_proof_size(0)); - assert_eq!(304, get_proof_size(1)); - assert_eq!(336, get_proof_size(2)); - assert_eq!(368, get_proof_size(3)); + assert_eq!(192, get_proof_size(0)); + assert_eq!(224, get_proof_size(1)); + assert_eq!(256, get_proof_size(2)); + assert_eq!(288, get_proof_size(3)); } #[test] @@ -239,13 +241,13 @@ fn gen_verify_different_key_pairs() { let mut generators = create_generators_helper(messages.len()); let expected_proofs = [ - ["8cfc18ad4a0f9e9521e22f7aaa5f69695629e93a58198800a07cbd5559beb14330254734ea538c306353f55ac6060af38d1c05a24b224d40fca4d36509b7ec8fb33f81a8ddaddd1244b5c70d2474d0b5b3aa199fdcaf70467ae25477f64c09eba16be43a3d823f9118771da10fccc1ac42bd5da13e25b8f3092817316d04d50ab2f14c4980f553d172713e9833066c7e2cfe6e75d72b7d81879b188ef3f8191f8bb8561988712973ebb36461bf721ae104cc1e9a8752047b996cc9f6e3bf876015225e1746456615630b1b31d120f9cf68e7170987c39c1145cedc648fe3dc3b0f240df9032d3bb797f718e8d408930936a04525a0c8c4f99938064c407cebf686382ab2e2ddf3d0d07bbd5eb63138f56ecdf1689fe54cdaba1ae55fc1689c67aa42038078cf2b6d4cabc617a6fd55465377d75e20d8cf6d42fe72bdff99deb926b43b9dc699ee43f8f02c4dcc69c2974d93d2b6e10675bcd865663bd363906b93bb1e65c2e39e3b10800344e0414c0d4245d69572bf85ca172246bb56e5d5182a731d2417b8883e3ca018fe9a6e3424192937bc7a023dbd06fa0f350d39c23638de478de79055d942f97eeee939869260d677b30e452e863abd19d37d2d1f5a3602b9417288e63c22263e4adeba3b80", "8e7ef5c2a43c4ee07d8ae49651796ab99c74496c7d8f8d22a54e273a3c970414602b24a19d06b0ba98144d3526afc35f980ccf44a8ccd9b7cc7bf60e2f4fcd7972c934e3781611c38e8c55a1af0c0c5e937ac092264d12cfe109274a1686c3f6b10d87f124c05b2aa00caab7f6f22c3b1dd3da64f4524d1f1e6261eb94093b70bc21a2cb0f17601b707467c13270c8e4682c3d270891c8f289592b16af231cbd922afd0a022ce57da44a9a6505c02dd026c3d91cbcb9d5c5b34a54e37f8b2bd30fcdf6d57f8d8c85ef241bc08e1d1ead650b2019ac465680b2887b707d0d12ed05760040ac16fbd2decdf478f941abb5591dc9476a0eda48bc1498dcb14acb230d27504e3f3722b10d374d5ee03676ee491aab5a034eb7dcc47ab4588a8fadd64137c3715ee0972f13a20df5038efcfc21aea3fee12eb17029a92d473ea9dfe8e39e3de1654fa04345a03bcae335a65f4c14a1647d6612df0f90c69c998a599b4742ab197f6bd696a2da0c82c870c7166742489954bebeaf67f9aa8b93b21c33c5e782140cc4bc3898ba9f3ba37c797104e7a2890b2433f39d10235c5c5e3aeb34b1ff4082266ac603cf760bffef7fea", "83e15099a8a1056a88c164e3d284bab1749259ec425aa0c28083a2c06f0f9a38a2b6dc23780c21dda99e77e28b1b830d8539c9a8c67a785d59cf57bbbba3895bee305eb3098af12d2ba28f78732a6481b1417c63dc9cbe8a53af7c45d6c98deca44cfb08c706a4e080546b92e0ae49fddf15874ff1005f33eafbce4219430bf03bacc87ba41b46b724e93a1c249f9389101ae6f219a868f47da56cc633a0d83383607e5f7e953dfc13c1d0b670c81f3767fc19ac83298c2e7e7367659cb573cc9e86cd93e18543cd12ddba4b640a9fcc5983af42dee16eabd85efc86f080f99ff5db3edca8a1022154235899365c18300cd695385512399e31901cb6e0689f0ce8ee6fdd820df8fdf46ffb683ef6f8494c7b6f3e9cc7add992337ecfe81d368290d7b7fa5cc45f6fda5d1acad47f927f071ea05eaa6ac61aee9f978f0766a727a2998932526a7e7f20947165f05bbadf0f494894b88af93ba347442d95f3d0376d06952d32e9ae859a2e68b5d8f5e19f0d879e5d5068f8ba1a8fc4fc2b0d92581d46b23dcf801a9b6a23cedaa02cacb6", "89b74b7119c658d6108bb8a6adba92df752ce92edd31e4ef6cec5e8ec00c45a12c5f652a777d851d4403f227e0bb134fad593c4734b36f80008cc48dd1e9ac38ee0530cf7a4d0d8f664273f149db444f689bce16796046da3dd4c1b68b5325e78b3ae11eaa1c4066f007319200b31bce2166fdf44fdbea9aff1475a493796adb034d3c3ba250bfb037e5febb2671259f67c0459e12019349a8dddddc92b19b4a3f4728dbb680e026cd1b2ee9dd59a7e137aa260bdb3247154f8516fbf0959fa8c2b2495ad0433a8bd7753f1aeccc15332bd38d979067d47e37a12f2ee911cd5661256adf9e5533b1f26a0992715c9d7d1b997231c771f1810917be1f483959fd309041d9318b125d3a79c8131fd7967b6d1de8e4d1bc39db9f800d3550835a3d78f1e9b12b2aabff3e9a396784fa67921a6a67e9d8195db46901cd585d3082fead51c57e69039713946e5fd11246a0ad58339b286ae2797d431b93a815bd82ddc7a724554eb6033d77873c6193b5fb68", "9751cadc76621e7c1b9b74aec508404da306d099ffeb794b7e026466209494e9d0ac7195b05dcdeb9e43229f3a347a0996259377aef6f23c501a3565db82a99bc545190ecde4dd55ae87dbdd25b876ffe6c99e257e63c61a73360ac04cf17a66a0176176e5ec2ebe77666d877472251af44a2636e4cbce838f19651e3479d640036b55ba0035d8ef8b228a82070c709f5e4c673b72c7948899dd489fd08cc71d5f9f07d5406baf0b3ac3574962ab0fa436b32af2a2fb183dc7434e75c69a63ff20dad437a0a2f09d1fa8b9f7ca32612832db39e3063ace97ee9c05ee4ea1fbbc82731856ad5016693912f691569a3f0431adce851a3d5398d7b2642d84fa9e038e31832715d7f7a5ce7a493be6d81be0046566d026330231a1857019683a75dd23234def21ab1c431179d37c830891951dde04029680e863a216cc035516e76f3d477d07fbd923d63e9b728554966f8d", "b61680f923c52b154a077c633066f03774e2aa558598ad4cc62d0d64ff34414a1b34d6fe654512205beb56e6acf5f8e6afc8f0c0b0e616641c90e80e4da25990a99425339fbb829429fcb0b8bfb084e2e6817cea89902b4a3f150714756adb8a96641e63c966d46e5d210675a8058024077b100cbcfc8692fed6e08bfb30f4dbb73271a6caee3ed45f987e76b9a954693a1284198152ed327e27510b0c0a601ce072fbb4c5984410a37d8638f04a757505848f6d6926ec177058d404cfd7432c022429fb82077f70251c5fb2bcdc78e7623341505badfcfb38ed547001c5064b164dfcc594e53cc7b44285797c016d1131c0e07ed37fe221f841dc2c5a00cfd8437875df4f930665745e44ba472c77680fb69a340fc60a6e6f4a9d67152c7d8ccaa9b31fb649fb457fa56c3d3e91e8fc"], - ["872294d8fb28af82a0184e3266d8a61a498f036d45f9b73074cb124d7086ecdf95b5a87b499d99010e2a51c7008cd36493d9e18b3d9b1b15ca1e7f8611a768b140797bec604d64ec7c0dc9e8889349a8b9c06a12b721f79d0f11e627d8b27818a42ae97d4ec256744352495df97d5e63f136031e60fa627d728687bff004e22e237a152cd48ea5c91d2747b91adb37f3305a8a7ba0adfca0bfe04fd2c150248b490c848d973c9c7bc24e66c30f31346b2a5e0b84eebb7189efebff1d15711cd6cdb1d13d12bb7693918e322b9dae236269039b82d91b2081b69eff0923546a061eeb2b3c0be8f10acaacfa1a954297ee5b9a8a98679752b4014417004beb1405eeb0fb99a74fc7b93f182c919fad5c2461c755b58390d2bfb463555c8cec745c9738155083272f53d836f325f0a046b3503dcaec96d92252c851fcb9039fb50b2372d1933d66738dbe14dd38938814223c13de394467c16c3426370a133acf03688f1086bf68404fe39a89c363b4d79660a794d6021be7257fa34158cc81a3d1bac77894cb9783f4c7a77245f13d614b03baf5cf03fd3fdd1625dd0c4eb7f4cfb7b0719aa57fd9b56889e00d22d63dc168cca6e217056c1a35a806845d0dd7db22513913168e44c3cf1e6f87dc85c65a", "87176b319cda7812ac7f8f4d98845a1d7b76a2e841b1f4c2280d99ba1e3c47039471e693d575bc8cd3ac90192009aa4a84bbe70a36fe2f14ac3988a6656bbc7e1a3782808e10d29b9fab272cdec5499eecbd79e4b3e60a16ec343deaa5e9e904a3d85832b04a597948c81e656350bc533cbb6d9731ef74ce14ab58da015997693baecce20ea98ef930b9378e4ff9dcdb346c5e3f18e74be4f39decd89c72a639be5e629d5263a72d18748fd432f0cbcb344f3893764aa7fa23c5a2ff3f71860f0c55a7920f1f4bc3b42d4e98a1f86e3270b0b7332e107207ef76c4a5d4a69be47e33007c17784d3254f3aff8f861aa6f29364b6b79a55e073e544836eb81ced10bad2a61bb1fa53f91d841d7f55893dc730c2c8978b24ba864886edfd0b9e1f9047eebd0c50d4c718ba61a673b8115ba177105c062ca91d61312955f187ee135024df0532cc87d74c62482838dcdcf9529dcd7b91d087a8c3826f9792647dc29b2f4fffc2e5fbfd0dd223b12420e212e5973bb16616b33c7f9464f1eefee336d8c86e4ef680cdbaf16756350efe50d903c69eca71b9aa1b067393a6705e861228205ac9f891ce4384dc8d961ec4e89e0", "8238739eab550b4a5b83cb8804a0c6cb7ee9afd3f32184e06fbac344b38dadbdd9eef3c18c2a9cd4a63f42d64678fa76b551fd04cdf03bd1e1af8c444c3c8d18c63b6cc30bef28a0a11d9ab891952c339581c3c85355bc2f3408b4045ec8bc79a1f3052f73f12a771784183318a4254688b3021436a633dd5c24eb62d989e1de4bc52366b5ccea5b57156cf9fa31038d6e5985cd0ac2773302c6071f1f33ca2ee16241553820b2c669e6f15094a394225255a69958e55b8b4c98eaf637809408ba76af59be18781fc4a59e620807f0a627b8fd2e7b007ffd89d061aaa56af89136a46e971d078a3e49b291ab6b9dacf70682ba6b7b4b8d4017942dcc211a79ce782d57d216af9289d0f89488f42e690e712b4211777384fd24780e0ace117ccb58ccaf59c2a1fc77d6726f70312dc15b3f0055e666acd7b8e72cc4782dd7facbf98ebb9f10d452bd4172c433324ec33d002a36a3cf2b1bdff273b058734d6b678f9f676e62900e58c131d4200aa0edec54dd32cfe5f6f1e3da4cc4abd866df181fdc4650f47a62cbeffc3947a67f84f5", "91cdc043cabcaf1946a22280dd2ff362ca2016a85d122eef36f75adb4027b7ee979ecfdcbf9cbb8c2a347c59728cc0f38014c256f2bf8990df3c9f50eaa0d1e0c4b48db143647b19ebdc2498b68b0ed2c2947263436ad5d0985af22767a9afc6b1c5b39088aae2d80623179bbbec333da13690521f5b3061e3901f6b822584168f988dec855d2b23aa33c884e4b124bb296d2bb8e561436c722a4196eb024dfdddd7f31e24d5107457cf0aae9d1e5d710ad8b76499a9fd5f03cc69705edfad84785490600b2eb57ddadb040e859b8b7805e125295bbe05b7a9806ea1bf52596914c3daa560028dfafac16faef27e2470010913084e267c691dfe3515a7f38772369cf54624f2b1f70484324f19a87c542f8409d20753b9695f455504a9a7c11a2d43c5033525d1de149f6559f666d01c4610137f3feef97f76e4a131475efd5dca04df1cc5a8b090a9b166a8a5bcdf0b5fa007e7e1cdf2f1d715550503088a24c6a0cf7bf8bbd98ccc43a4b3cfb1dfa2", "a24829424ed75b5225949488399b5ff6272e7facf176ffd072d87f517fed78114a8c915782b6e75956bf66846dd272adaf78b61d3a275bfa842437fc838274c44fb6209ea45ce40039315d5ea2c15831014d4e9309884aa5bd345f2cc4dec6eba9f65cea62549523c011c2de75d7503c54d1660087b407362826ada36a51d8e67dc0ea5f9a65fca218fa3dc9e8c63c4436fc26f54a13d0b45d42a3901eda7c407e7bb4ad8724e79e6a47b442105cc0ab4fb96c3d99c32fea69b471ce0110f271380a57a4bb251910e6ae139d9ca4f08b05b6b3aba8436c643f78a96e2e02273bd1bf231ee093c48e45444253ff3bb43567e5f3722093099ed41b4b9dc8e099a141895e5e3eb6c404cfd0c8f6e52d356d3566131334d5b91b03a40c6508a206a2703fba4237884947d04f864747efcd035575489c71c7192030c9097c7bc9e64270f1e42fd78ba07124159b610702ba87", "8ccffa0925b8072b32cf848c16d24aee661e90ec7df970889f1233bc3d590df5d20082958377113a16b1dd1f1f039c7297466656fae6cfa77d27590237f652ae8a9573e7f036726613db2c2cb0d9eccb278db3b90981777fdf5c079114731955ade16420c6f46737009f0d680a0ddbf3b835d378329d1b4010b423fd7f2a6dd5c88585bf511b541da4b48c9856638e333a0e85e9e6cdfee247e664413e3d9aca0cfdc3cc1088be6a03f3810c9bfc30bc6fa041adb1a36b3bb3e7f7008a92fd13f571c75b0ecf46ed52759ac672a2a43e326b9675b73ba36518a488dbeef09a646028b3eced0ee08251f0be833726eac53098b6da26d6d9910eb8e9a2328a18fe9e7e0f7bf0fa747dd5f9b80fa898fd322d2acd025fc8af6227f199805ceb549688d20406cb85d6c3e3a33bd2ff054616"], - ["b05c09a97506aafbfae77bb8c00c057fa1bb7255cf18731e8bf8db2bb0944ea5ff7f30dabf7330a6a9000eab9482d47f95d39c3bb7867d7e25e3f7a33d13ad1c2bd9add88d87adc5de17d2addfdf7a37bcee61b580209997f92e207e9628f7bb9282e66965cde77dc9d22bcbb4585c76a911c447bbc3390d8f75bb112ddbe797ca745b37afc9d9bc0f255f62f57b8cc120e33d5340e285d759a5ddab68859ee880a64c77d83c3ad0a2a7fadfa91652f62a2406608b0e57d8ec17d3612fe7ca75ff7d48480a2b60d26b7a71f7cba98d9021ea2af6483e07171e1bd83716109dc4ace93d1a316039694b7c533a00ff9e735edd30d529a614bb1d7662ba8c1f55cd15a860dca5f150edc6e99170ec92bc634c0d8d2d33e8da3b4f5d0912e7bc734a4c9f1dac2de9aef558fc3c178160bdb95c4202cc80b1e4168836ce29116a46876e6fefeb4ca6c51ac9cce2d5b4829635454d704f3ca09cfdff0455b02cf52be05fde0f19ead197063b9cb23774c865ec44dbf7d9ec90ee13d297ac6b41edf8fb25680dc1705c8552e042b98a27669ceb47a47296be4e595083761f2a9dcadaa0f6c31bd2528971500bb55fa18bdbf9d255d4b4e218c382e461b78b2f6f712e9c7477d450d1e0ed05d19cc7c4f1bcb2f5", "a754545472543addcfdc8f880fd4792aff39bda3922591092e837a5b24a65d45b6f01b81024eafbbc049bc65f607630ca7d77efc8217d8d269fa3ca5ef2568db335d0a3cae75b9a7141cf4279b675e3b5f42c2fae0cf346df0f563443c22be6b8659e0454354c1dfe302b73938f480e27a299a64eea183173427e3513667b2e6d147b8b989067475638e4221a9340ec463b6f57431dfad7d8260ccd6dd32d330eb85873f2d12c6a8c59d7713804f39a7297e43c1d2410c5095895f3d84916b9c9fb8fb510b5a5e6269e556bbcdc496531259454623683762eabab8f0b38df9c558790dd3a28c2ba58a46de0228e2c4994eaa86e396914af2121586f2ef5b12d452efe4bc9052dba9b343d1011e8a86400e2d795bfc238084bea4ec6e450960f9cf4fc0c587d5926d676a7861366e83762f3b54cd64ad18d7c7747fa95daffab4da9724f58b461e0e69eab0018026c385004e585feb53356d0d194a0bed6b5fbafc0370ab90accbc2bf4809d19cdf37b423dfb80d4d976176c874bc983751f8026e0a6119970c3514848ca3f90cb5d113304a1bb5f190b9ec5160b6171811a6a1aa8778ecb65c3e7d3e442f777e56459f", "b11be8dad28844764178112054fcb57035c2496c78032a5840814eedcf335e434a1b55bf15ad7b8a311c460e2ce76dc082782b214f37adbe9f9983b11b76eb16d481fb1843671a8229bd1b50b089058b18b3161a340a22b2e1b4cfcbf0432571b08292d1eed6082612e269eb7bfbf9b8c2b3195bbae43828f84d03671fdde8844e6f58336eb1c6737d979b35a9875655337b215611397ce289c3acc46b4752150b3bf376f08b06a730373d2b5890e50a26298d2e5418f791d29a0cb3cb83b570a8aa59b88bb71b9f7a76709ba0a224220af2c8f09daa9a915112e11f3b059574264fec4e04d5e21f64b28a4f2f5e99ac49460e6014d220b929d81dd58caa02efc40300e0edd2c4b740bab0b98ae0917f4a3994df24839a7c09188478f30a39dcf995c8ad6204292517f83da197b6ef4b6dfec5efb98026e67cacdfb380345d77378a9d4efdc33f16cbc5533eb943a8c7284d12244d312f85540307ae3d628901101c897d1e55750ba8862d4ae9c0ec7a4c7e8e780a1f4616ddf3613692bb4225c7b41802b9eb78821b8d044e51c1ef41", "86043d206160748d8b3b38cb32b457726d7e46c2467e5038e857b739b3aa0d766b44ce5a82a30880bc59054992cb4ed5b4da751e6a7fdf68db51664ccbf53c0f6576ae3dfbf883f1e95e97488923aba127aa6636527980262984979224f03381b12e560707358c3aa8497c413b905b931ff1c888bd849f96c12211f47153352688451443c5045efef338de8092f1301e3e747041a056f0b395deba8ea63ad995c6bc4a83e93879a75707088c398771a245f587d728accf60d56e620f9aecc3758a6a377205a909514f82e422854828f7589b337578d8f0a2a3fd55b67339e95f8b7cd1ca9717b7f6033b52a3a1848c40383cfe3c3f2017e6720d17170d81ac78f26516efc70f92fbee3383e51e372fb96c590b38deefed3da31540fceb5cbb94f4e86ac9522f123d9fd09f9250e78cbe47cc6a9b8abd04edd39f6c0cc0b17326c164d222e3ae5c6c05ae4620f318c30273805cb55a55e2109ed905c9d2f1a0b7fea48e9c56fa9e122ffd656a585f8928", "aea72d54e6918b00159355b4575d8c6115904651dfa215b38e8a615b9d9fc940f99f8227a3b787e9da4ec22a8c8ad07db551363890fb68ea9f72fe83af5f071d05398ef481e585b4917e7903e0243fef9216258a9d309c08608ef268a51d7293839f0107e099e49a8cdca6b89862e371bc101c3d7edb7a5caf6dfc388cdf11dabf2c260a0118bcf9e10dcd24c83d442b4be7034c9d3f3b6c4c6201a4aea4e6a563ebeabd81e0a5cff41a43374569c4db5c980ade3d20c57b752aa972e73baf2e1f834ca308e286464818854e96ea8f3f3eaa1f594e8175d069c4a4a361d3e9d7a38965d55fcf5d0d8c69aca34351a194236c62ceeb48273c75364c20c1cc5aac26c5599aa7afc3f3d47ad7308b0188ae182232ec994774f39cda93c8634b31702614e05d400e74087aafde89562b23e659efd8c51dfc6c7f11507bacfbe5f409f8ce831e1374f9172771571add10de76", "8d5e4ac39d8924239d14a5e42e74e49c997902d92d341b15406e33cce406b8a64619610afd1798a1754a676a6b8c4bcca784b109a25bc605158db56f603ed723a32beda4c79adbd9e47392e17b569152b0caf16b3297eefb7ecd9cb39c300c8dafb7f4868c78cafc252316eb422bb6266e28a18325a092f1fa9caaae3c43a51f09cef92665226171dbf007baaf23f31a6ab0eb4eef379a452ed4e529450f712da2c31575f20ada788871bcb122559f2b1c108c24124f14d9c6b8dbe5f0c6bbadd19027ce6cfec73470db7ea1e276eb9f4ac98a74236e3960d91a64547353ed70b6399d47ee78d90439822c55fcbff4cc1d39c1ac478a3892cfd0a0ba4d00ee4fe0bd718ee410df2f15e7cb2fd9832a6c42696d328fb15ebc9dc7be08e6cbcde283de04e80be653e076dff732d54300d9"], - ["aec31bf2ad578bba894b9c410f5f4d93fdbe3c0967e8a4da3687791e9b1a3f909935a8d0c1545bc57c764fc98c411d61992c19bdce890f0ab66e531575f3e9648d5247b4e65f2cde08bae04381d0024d50151ddad85f152c88fcab7bf8c6f855a3a09adf7f2c81c5d93c078cf78fb177fae31d17d15085e2ea693f6e246d89ab5887442decc4e74c68aeb3ed04ef8050208748c840e5de949ff532b029d983ee8da915165675da08d43fcd15033e4efa20f39e3c62f224d3f85882c3b0276ff1e0582a61c9ff04bc19c49b832797b42f31e40e7bf8da3c33e5af9c24daa66cc0fdb3a891a7304dacfd42eb8b483548c36b51b185fecc97a0246f48336347fbc87c884e1f9b998b53d6fb0cc15bab10232480eb81e81902e80f0ad6d6387a3d95aa0ada38fad3623ba0a94c2ea9fbdc5a6f65d8e930a297b6a4b165fae34915fcbc3ed27600189b65e8c71f68915ff1de08e5b0bd2d6f4cdb750ae061db9cefcb22a1798962438446ed24eb1f0a89cb4a19fece4e7b4cdb553b07347affa55e1eaa46a1fd9016512ab7960c228392faf01363baa4593f0400250c59afcba43383622ac94e66db1c26e1d3dd0ad4e76f1f0b00631380b438257e3b238dd4513e7a6f48f5ceb8bd1c237055fefccb54ff35", "b6c303765edbc50104167338d5f2e382bbf2f904c93ea094066ae1a5ac27399824aaf0c14ba991361234d8d1f62e12038ae8051100f5ed11d78b89c9766ce4cdd3fd7517289ba11a01cff7b0e049814f0a809441f354c82ced973a3d08bba11b816a52b5577cc75e49b59013c722b7286e1bc2f929a1b9984841a88e824801ac81d18609f0fcde1217338d5681aa40b55ecac5e07e43f8de84e8b40bf763fce102b94e0d557da2e5545aa7e784480ec206bb36c8402dbed2316a3ce6f510eb46b66d005719e222b4e22119fd32716c4a37fa046dad3e29b7bf96f5a459ea35ad1d08d89725c2903ab3c6225092c7ac3c6e2583ee1f55b912f426ad8d87e667c79127698523bc2eac4e1ddf681198bd1e62f70da7c0447e7d1610f717a11737875e3dbf50dfb9a71c00469ca79d7e9249142e1b5ec08e83011d5c3140e956c44c82f45826bb30eb8f95debdfd495b120771499a872f0d9289218fcf8b5a03e8d5b15874fcecdc1ffced780de2acdb37fe26e77faa68cb50e35d82266461cb3236d3ec7464f2436c20d389febb7a6814212009402783776949893e7c7c4436faf9cd0380551a11e190fddd70a2c84d5af1", "8cc9cea5366748478b06ee1a6ada2759b05ed3d51bb154afffaa0626af4ab8d6d6b4606242f7c904232b4a62ffdc5e91b4c877599c12d1269566fb1baec38cf18d2309da50da0d57fae90b445a02669627cca1db651aaf3f10c038adbc4a479faec4ab28511959d297b1397210d894b5a8500080ee0c0d99899aa3f4db6a409d24bf443a66abbe4a185780cc60a285e053be694dbcdd596a6233b60e9e131e76a67e0302c8ead1e3a2a43d8237512f8c271d192a7e6e1178ca82ef83b8d534dc626e1301c53682ae921b16bd83e5e2600bdabd66cf39bc83d3f1a04a0994c9ca738726a84b86155290a2fb2a325cc4a80a69f59ed4788f4c32e6254b467427211fb5159a726abaa2b622ef9d7b7fae1a088c11bae83b04c3fd2bd4f899371fe8160146f1f41cc1d7d65f8cb0b1bd807d0cbccf004e9b0ace08ae617033c650c029790f05fe86beab69756454850be77a58f8c2e1ff9cc454757934e37162348b616eb0dfabc89e43fe6d621ec0a6b3e60c1dbc6a9bc281525eb40b69948b7fbf8d31fce1f250cb5f618802ec6f18148d", "95652fb268b8074bdb4e08e344774d6ddd5fc6bd26052254c04e2530139c7ca91ebd9c6490066be57d97201fce6f71018d7ae6678591303578bb8abfc1d6b2762d1eb902ab32460729a934a345b849ce5dc0a4ff8be01ee812f3a4b69a34df89a0fa2ad44c69c8c6033c57e635346a7fe39ba8941c6ee48cdc6ba8713bdd3b45573878a3909577b5227d54f5d9aa10731136eaf79091237145a64a91c0c313723503bbe20dc69b75acbd7d8b5ba378535bc6f3a34f17659d3734c324bbba5ba2bec17f0aef5dd760344b7a7004ffa44430d3820cbed7a00af6ec5beb01126133d5e124a79d8974512541da68b5b381c04d779074c6bd25166b4ad41b61d988b65c73863f86da41cd76f4923042445252415cadc680f181353c1451e00acde732bf9f1b2e753debe9715c5f8f8af5e1b82569d806723b12e0dae51dd71b291935e37335f150f28005f735720b94c89f912f5aaacdcbdaeed3b69bfb2dd275ebce8d33d0788655f8229557b7e99a17e3ac", "aeab516efcda79d2a03eea11ec25a7be3661853309a7fb1c42f85167bdec80c23ec6f93ecf4a01b9d2a1fc01233f6a52b348606761ca1c4898c9f51b81f68941c7a64620ce6bd912f2fd3ca5fd30e07ea4c35b50fc1bfd9e15fbcc15709bee8aa03d25ddfdaa90fdf92941965204fa25bc9faf45b98a2d897e1eb5a69979951d3b06fe1a97839653a94bfe53576ed30952627d6d01e2e1e5905726bfbf59d80dea83e058a64d55ddaea987e13c514241345b3f98e04ae30fb85e9e9d8bf37cd5ca240287b33f0dfbbc7c1aa367db8c365091d7c619a5dd40a9cdd3f8084c63911a10794973544f1881b8cc36de9c21a460c550bef549e6346a02f468996ebd2e2da57093a501f5dcbeb29a0cf312f6f5202664856d38821a640eab17bc157454f41a5df9899b435c23a032ea1eb05da864b1e0343206d18438d231195cc8891cf54cf48c9cba4a9fa525737c4694d0c3", "ab545ee731576b340160c860ff856719ab24066473e3508aeba508178c6f9a999a7dc98a6658044a51d0cb407acefcb8a6fd5869cac8bc5bf4e9a52f9c7c951cc27ab80952e7c5b4a997de1a92882c69ea84869f01448aa6b2dd97fb95c983fab3bf5423f03b53aed813f1a71ef3901a0b0a97b3c292eda239bb24e55232dfaf81bb1358c311e60dc887410b1617c95f12be8767c2d74d9c5bcd5b7d4a73f8cacdbb66c6c5db5592a6a5eacf2c7356155f219b141e8185fdf9591438f68d0c53a9da34d6bd82655aa8ecc70bf53abacc3c018e3fa4f86f284995d796036b4c1600b25f1f7f132270c8cabd659662dc3369f647efac111b011767a20b2beea19cddedf30fffdc7c087c29014758887eb8253712f2c14ab511c9d49dfcbb66922d82614fb3143623ef0b05f398ec461b0f"], - ["b23237ba5aeb33509b7dfb63feb27677d5cdcaaf039e26e2b42992f9bc7f2cfca911c06f800039eb7208da297b11e8edb736ea19a1bd607f28c37520344d718db76d5a0643c56bda5fe10eaeada79193693054eda7600b93f6870bb7f8d26d48b9728447c6d114a5f90b9695fffb366f55e0424c1d7a197a292b62ae73dbcf69c034dfc5f997caf86bb30d437d13d4b62adbef98f9ad20f14aed9a75b641b9a5b616a8d013a28aba4290289ed67ed34743bbdfe032dd952208963b614561589783c4225d1ec8a42452bc1ff1547fc127223b194ff659dee03b2f3bd6412e2e052451ade5662661e2ff3932de6331dbf616633e555fefa7862ef29a3763fbe3f66d4477101d77e7c071559857eaa891c55e85a16e8705d05fb3f3e69bbb8b72841e321867c8d731d0115fbbd3b7abb8e552117066d16e2f8d1b07b45a7e060c81f73194b664e9d604aae4a79bbca8e89213788f205c0e3e4ba4141c7bde3e22dadba08342a30e24bc405b0d932d48139e55f6b121ed1bfe8b76cfc255b6ddf55df694c6b71639a9e04a6a0b4c7b22def1247eaaae37a3f2e0c77cf99f0bc8cabbab97249f4833b9dfe8b8a3d44e715afa5e092001bab1931d47f1f5dd0d63c56d4519e15fb7028060ea373749c87ad68b", "a475ad288b96b6426869189066460fcfe4ffb498fbb1e0b9cab9750ebb49a4e506573347c8acf932e5a1f98078411ef7b0847d989d29af8cbb2b757c60efe5b232014d0efa55ec6d0f2d93d492a8c3a07d435059b6b7e4f5ba9b9e38d9579af38825672b22b47292fbccafc408427379d9284e0236aab085d6d04ca7d393d5a78b16f7ec4bc63b2445f3a614d540dded61076eb901d9bd11f000ccf53953a179fea31a545c9d14e72b3581c5894aecec270962f4151e26d6f27d875d226bfbd6ddfd028630ae38cf6461cac7a176b40a0aff6fa837071bdfdc58ebc209a3a2b6a7dd9754f5c3557343b622d34641cfe23a3563929cb9735ec8a7613fd307f6f43c1cf60f0e24b24b9f4aa1b1e1ba9a483fec02671f064ddef28cbca3e3d1a0ab4d0fe81f2b32a80abd7adc8a2d98fe314372673ab9055d396d411332ed22d346aa8389b685cf26cab807867d54f982971625361264418b6295679671792560c0069d461727143476be884e79e6c56f495bb2bd0ad58a17d2b2db03580d38a3568a939beb9ace87fd577dba2f4384c0c62b7f4ac102c079127b8d1cde088717b4704f53ed2c8e91b5d99ce5d76b3612b6", "b7bd941b17947834fe41f73c91f4b4554ab123a91194b5ba7306c326ea0e70976b5b65cbfb7de54411a8763a14d62fa6a53f490722cfe96d4a68a1e459ab15299149c26ad0adbd3bfb88583b9129cd10e9ac4a375c6173f79a49456801c2287a895124eadcffe9fcc592737975529ee436d11a2337c5cd9618fe009064e3fc7369219aa835598ac563d034bacc62ef36189ce0981cb5428ad1cb390c2bc6037fd8887579bf6ea1125627fd983deec50151e2d437137745a08d5e34301a76a657013d82873cbb2a8cd585dcbd6bee135f5f1f85b305e5e781f65462bc3b5251c416f31cdcf9b62f7f7c5ca1666acf53cb5d234a87b3e9c6088f99ce3400f812db5676c96262deb3fae17dabbc1e4ed9b215f4bbe5464b7c6900cbbfbf834690d7f067d7ed52a10933569567a6271a596e212319acb4478e3f4d967460e8172073b94001d5b32f3f875a3991b4288401001258c4d1e9cbb4626a56429de73d4a6f7337cd6a6fbb9345293e321268923cae636077fe31daf9f5be49c2e60a3d1c8c5ca09a47111e39436cc679b6c915b547", "b1c1b1dee8097825745a210bd4092bc2fa6d27a1ec811e8f2095c52bb8883ac10f6ceaa978c0e7e85498489de763ab398e2c8de9ffbe816e055e01547dbe264e263d3a961efc19cb604320c6df20290f0cd6cfafd6e9d8fcbd8adea2b7d6f749a06116d74b1d793a72b2ea298beaa20863be313015ac3db35d9abc558c15dbfa8a93c06bbcb6193742c5668681ffc1e559a5083fa175fcffcfda857d2701f5cbd8fa63554ba2e011b3f53272f980ccbb373ae00120dc2f4739608565377d56a7ce094ebfae41f339c3f6d5de1663f4a672fc552ea4c73f7d18d3b30622e4c9d39f253d57f44a29295afa75acc835b5c35412f7bac0bbfe8af171abaa2f55c444f26fd933128df1f853bdf0aa2115316353b12cec0a24d9edae7b84ace5cc0edfff42c97bb9303f5010b5954593472eab4f9bac47b5abd5f85a35d6bf61304565c4bcce5c022c0bfbc7fd6e9ebedc0c674db3452261adb9d60cc4c4454453684aa156fcc58f791a2bdcfdb335874d714a", "b028e4893ef662a56c7a938c1f315d216d0308cd316ddde460077f9f2d0e3a40d10bab08b5305456cc586ae2601c4a85a8163a6df5276727b95cd8e1cb9b5ad0ca92db3350a8d0064010ab4ba8029f019b36626d7145d013ef52f7d02fa773a7b9e38e9d3e735d5def7b92731ee405f6e6b0011ea8d7a8cd86a5c278f6598d437768a36eaa8c6471cc6454df3f16b124163bcad1c27e9a2c5289756f3574e382d2cccc64791762c52193dcdaed1fd22b50ddf9240c131fb0d7b66488d6ce8ee741f419848df6bf80c71e9bbc4ede38873f2e7e56c8d3696c8f694272d933280124a9c6034c26bb9acbb20f277c9d79bd58aa4335c38d75549484eb7b626bdc56229c9ee9ebc15ec2043de391db159d955ba698c68667fc37b02044532eb9a2a2c44516c645e35c7414a6a835bee64525118be51547702c7d41df23c37991da507706bf38954e3473e4f4fdbc21a5d759", "87eb6c7ced51a9990ceda2d41511457e2e1bb20677fdbaece9cb3e5ebc4995cc275df83e07738ea8c089dd7def39d1d7a8144aa0183ea7e0e6e5b75939a338d67322f48fec4c5e7266544f53dd4af4a4f81be273d1d28db33ff2abf0f17707b184aff82fbbca1acc2b0f22fcb4bb120b17c77b6d4e9d68c1801acfe8f302845d2f2627dab21e02a6f1e2a4642e04f5ba44bbd4d904606219b4fdff338c27c4fe78d2f314f72279c2ceacf7c07bdad8985e0a0fb8ff6fef3fe59e65a5ab7b550db6f8d9930118f077d853c1f3322aed2458780845abe973f975148e17c4555afcfb6bcd1492554f228ef453e2b04f762f2f6db909e3b50bfd226aff6c307a922b6d51847c16d10389ef26b6cca122912f39a888241d6243245b1c8285cf818575cb1ac55f47982e35d7ee66d99b53c84c"], - ["8708b6424b955cf5c3f1e68b6707b7a4892f35302f42f0a15760e5aa48149874ccf98896ec7f052f03ec390b96037777a393d8f8cd8a654ada7a1a0a24b074ba047c256e328e879c4e6deabf67df1a61be6e837dabb2a0125bf75e51945246808feffa9b7f0538b40d69c2bca334b90eb11fe7ce14170219e88142dcca86344deb3dd31069b0d69433b8deeae0ab2eab0563de902c93dbbc89bf94ed226b46b05a0fa514a6f54cbf27a9b2f9f46fc64e3d552ab2430f52c70c01c7982d26ece44210edbf46720c19ce44493881e705a7621c1aa95c7df7cddc2e29c1baaf2a83bc1522ebfe35bd321ce1d0e0d80c66513c04d9304ed95586e94151ade2538fe5814e6d7bc90931314f9fa0db5e3b7d9b2ec4f696ea68b7e63bf1d78da7bdff33040dc17911bcfe30bfc73eceb911290b05475ed0de6c52bb44259669a2518d6d74ca596a8ec1ed7a2442e9cb03709c304d8273a5a0547da040bf809ebfd328ece6665695581e83c597566a077ccabc424623bbbc6bb734cd4dec7a8d3d7100ffc23ca49699c515b09a9458df060987146a854cb751e360e6c57ad87ecf5bdbadb43e3134c87b56e62f3d11f5999f5ada31b560b27a280a6f0ed967dccaca268062b59703435cd766da432f64e09195be", "96afaecf82e49cf581fdd05522e9d31d1ebe9a0045a01413a77260eed54fec2757b167b6feba17da77693200ebd7e2d8a53821ac21de8e36c0f22605fb360deff3a57f3c9a13ddd2fdbd7e6c9e2c2c520e8ea53bf72122b6841f2877ce70e9ef84a41278d02812c03a74a5ae333f9583d52cd65aa514bd4d7a1796229d6154cf1ddd88f6607082059ccfed486b69d8fc35f6d95342c579f2c5437069a1fdcc7b4ac5b819b489f5e709d5d3177ae474461b0de46e3516518112db6ecc7804a8e0b4ede5a53a9fb0fdebca9ea85cf949441648b034c8ffd2116f889f3ce996f4fcb528db4e15e55638d1df1844358ebd591b37f2b116c7b47b6dcba8abf9ddf901addbc51c059b231646d6351d7265386717d3eac6ea9629e923cda28c9c8c65255a7aec2e3a26e25132a66389a1a91e466a0b3457cca8e4cf0d93e54eeb00c1c07da303dac4e714f4b31422e5fada2fc4151e0f5e68fc83d5e4c87af527787c43efcae6f2830e8f0ff227d56ddc695a02527b791829772066a2e098c5eee54382f4a4aac12fbcb31c4d0f5c6cc74b0e05097f428d3609cc25d7ed46c4eb788891a3420638ff36a1349618ad82f0368968", "a6714c547b16b45f2c35a7cd5f4e075fd918a782d78ce0b9dccb8e9575662ec310ba95397cbb51019e5383ae29b83f3da854b0abd11d3e0b2f9fae9bf9347cd3892c79f39c1db20e248b2fa3c6a3f38649e054892061ef465ed7784bf2a8ad7388450ab8a651d3133aa9036c4a681dd909c9f92e6ee2d8679ac6c95454986ac4a6f360bf225aebb1168f439c6ed2964c59192c98ee5cfbb79a11d27e731c72817e4435bfcb864657bf276fba7760e3c530ce612723a49b507002bab2ebdfca9a7ab29f0e36229d08b73e08c6c979d4bb011d3f2c2f3ce6a9170679901eae3577515ab72ad9c69d20aedf00640aac58a1569ea93be278da723ef25630b119cf0b07adcc2b6357f37566ec61c4a8b23e1b2e7293e14e849d1001fe9ece48dbbbc58718c733f48b66187e466449f3fbe04302277b710bc1a222a3f122ca2587759a437581a1bdd9a334c847ea3f03548df22be27f334470cf3e4d1b4722f7c92e230e59d3b11357531fca94952294f584e327979ae7491223a30eef14831d6a6f9b75245a54bafaff6c03e3d5da48f356e1", "a389f896f4a54ce0b4b79e24a915a393048292fbe3cd138a20512b428f36930a6849bc1756375b491ef42ea7908e9dcab9accbfe40d544a44af08581de413f7b66299010a5732a7c5c490dd963f0c342545bae1307f56e57ce99ee00a598fad9939487b3513770837c65a4fb912573ba0ed60d668b81cf771903d10b75ba3d88eacf012987c787d80eefc86aad1927354d3edd707c18174b1c0720d0630a0fa0c137b529cde9effa62a29f7f287ef779270a7d1ed8b29d14f3b7e5e3ebf44f8cc5be6410f5f1ba6e2087d177f6cd9e235409bc4ad2fa552ef37bebb21ece5d1d5e75afe049bf6272669c6b22f6706f67664965c65a97d95d4ded319530de482fb0b028d2b2dd15c0133f4f5254e522e85fcce15eadea7fc4c647164f1b0336da7264476d948b0e88c93442a21ad68dae0ec28996762450bdc7b58aa4e8a2dea2642084f5affbbf5a6b2685d23a2d13532f0ecfc38170f9defdfc991d0c9d56783718694ef1093a905cd13da8b914062d", "a4a40cb81c396a77f51b305810827e11793499b133704a92e11dc59bbbe13f9393ccc22b085488a761252c9c86b5119a9218cfbed58952195ace9bbb39a5ffaf81be27d6623704a2ed86059cf7534d80a6f3d60cecc50dcfe7a2d869f7a551278c791a56d483dd80669ba78a75429802bddaf7d69afe1a742944722cea514ae669e5a16e63360c976d5df546fc260c3b6582c53aaab83705c9890cd2a7b6c0ba4046245eba57c712d579ec0569e0342b3ffd491c12fbcd03504a91516d331f7e9a65f547deebc91c8a02f5829f5559a8336c406e63957fdc45fa6f2d23b5caaad2191b88c132a66f3b28670408a478c3519676ace58898fc0bff02c96d2b98c5993d9e732b348b528ad2a4fd2b84422011198ea891517981d1b8af57a7e691713bd237cf66d9f21455f197a41737532d59ba95c9db6ec6fc3fd6e9c5b6183295845a43de420415df92a6ff74084d6ad0", "89ee84aa227766f83e4bb022e541ab49c5a4cd6e232d52e0bed561502c35b868a719cda43ae1e4422bc20c4caa83729399bcab2541d9921a40de0f6a4b26c14edaa7639fcf55773898f43cd2a9ba61528e0c0d88622f95687f9b08d6cc5b92a4b6b89be090e8e9da2114de4d772b83366f393b451a39289192cb2be1b9c17ddd3420b17fb979865158f55b36ab701f8a40a25e5ddeb75f05598f493687dbb42c6882300c951c51249bda8f6e9a2247613dda120b8600a96371eeebf9dc601efc7d7fca47c558cff0154b7285b578bc3b3243adcb296d526c68ac4b3e68144642d56f073103b8fedc91a957d0c7b64c763e582b1d48d8890a062b6071a177a023561b6cac1c0f08f6e0dce82b8fc6784e1376156a3d7f2649b9a5a3217a667c9be28ac2ef68dfe1324866df6f06655ded"], - ["904529c8205a0ce1f7620051f809a1f809b7e9efe9711b6b79e8e8d0e1edf7e88541a44f3870c5eb70b147751b354c5fad6c6be504e755cfcd56e5bb396f5809ce21557866a12e8117c783381211806b6aa92a3fdbef49dec5417946130e2ac88da47da9a4f57c7175a3639bd9bd1d538511a4eae0a0650169d84e32b2d356ca0b0c7c441ec0c97cc8641c174ed341de57796781fe507be84c679664b3f61272dfac59dbd7e4c9bf4f683ff6dc097d815fa366459580071847d0431cebbf0ee4c091009ffdecd266b0d0d96f168853fa3c1e3f6feccc3ca1fd50766c66e69a68f2ba4198065e5de37ddbce1c735d09e94d5d6ca71ab79c14d07087a12e140929d899b328e62bbaa1e8612e38111652c92feb2c0bb7fffb0ae00462377f96cfb5f4a97390360bae685b439abc91757a6c3aef6f83b3b5c72e3e95fb70efe19791fa61fa1df1414e61fce803926ba43b5802203135f07d77f494b3b582ff8dffe380d29a1fd2b48af7a4c7c657210e123f61e2f4270fe99dfb463695a719a184250eb694dadbc3c3bc87483809750b2cd91b28511f95f147af0260a5f8af789a07f470815e3758b772019e7dd9fba5de890560cb114a564b8cc2c98f71dff1c0bbe53067ead53e3f119c9a9f7bf5e6de7f", "860bf89eacce01b273d679b3c5159e78659429fa1bc8e20d65aab8d93713c4bd6cb9be83cbf7f68a62e5b99fd6a44665a9baf15463174f3e7cf2cdb6332d22a34ffde63221ad5168a8379bdb3f4882894ec45e7442855553825d6a09bcac3d708fbcf6f5bae1f9a2650f302be29ab956873cf155e0250d54293efdf19212503fd274c9fcdad1dc0af655b8a92778cc034dcac7a7dc3b1d5a669f4c86d261973980584791fa504310d651fca5455700a447428542e3405eb7ff2ee72e3dce5c79c441488cc5c4534d149bc356d649e55b0576cc0ee2ff158d64f187e723726795e592d2a9893d42f663758b6630bee7f259231808ecfbbd3a102c63ee1833d6cc86a9f2ac883065bdcec4d5399a5aedd4523aa1b2b693cc54c29a281a93fbb70e358ea12c34478efb56bb4a59ae053f94198ea8546b1bb6f6f9efec0278721da8b9e3e3e31ba4467e711d4b869858b64e6a81c13bff812ddc55abdabe2c2f952e99c6fa9a551fc8822f6b2bccff459cef31ad59d6bbcb51598900b1604cc004afaef09295b38cfba06501d0a0384afa935dfa763f71d653fb22d99ccc918114bcac5f18e0aeb01d2cb908d6f901c9e22d", "b5f1d8aab4536750d9d56a67c9a776520d8c41fc8089d93ceb7b49eaaa0184216644800877510e7b41079d8b22ff1295a781a3badeec754af10e263e02a04e9ffca85d24815268c9254ac850b1b6aef40ddc2c30f87bee71e366faf9df35494fa51c79b87fe6fedf113c084d716e5ca1fc1ad4d2c030c1dc3f5699731fe531888fbecc2f53a012f08319ae7a6ec175084f957fe7e040adb3eee8b659fae5f4e4aaffeba5614424e3fd735443541f3af21493b9368ffcd99ea8f5b44de90123abe6208e36a1ebaa727bf4f1c93e513e515fad143866b0e6a83bb7e0b989d01c35fb318fb62fd967a5b1e1c14a26dd125a55eae282132f967cdf334905bb256e5c66c412b972217890a9f23348fddd054b5224b34eebbe4e0ad4b1a34f0cbe54608b30c819b95c9a945011635ee4ba9d19188f84d2c244394e1ee760e0cc331cb7c36930cef5a5666f7d9197145b9464161a2b043664471d6ebbcadc9e8d167d0923ebd97c346322d5e4e6ef19d82e614b7342fd437979e43995d1450472b0434aaa214fd1861c597919ad65c20af6be80", "b6b47a4bed808aca604f0586645eb79482a4b1832db4022c9e9c73b9480a6be41b6215caaec5a8f3d59cd18c8fd82db9a1db34e4a7e6cdbd65022425805eeebfd53b3ad83d855f72fbcff78f6e6d433438ec4409912be6d0a9ec368e40e40f1aa69295573e88bf7e86bc7693a3ce610bf43a7f1bcbb998341bfd05a458a4013cbd3f3623700c2164e56111772c0f08db1166454a85eeeb13ae7f5af50df4475ee36f069d10caebdd60c37bc1d457a6e0625b08b899c3e86c32102314f97bbb3373360b917eebe7773f796a4320e1f1c50d2d9ea9c52748219d8421a946d15b7ddad0a5511366c5d42c18c9aec20152855329d4f6795e22d0c8457bce4cf1bfdf8f6cf8dff6c39a2498296a6cfda2d0c018eb1126f5e05009f65ccfdd4493d542c1b67de46872791960df87cf727c0ca526cbd8f791abc383f5de74fb995f4f16aece0569fa3bbefbd66b68f482a932f639b52f48e1b91169e474fe83359f67078426ffbfca6bc72bb5ae480a99568d6c", "928aa067495c749f92794901bdc8877dab1056ec0f813561011d788345d301f11c9fdc910b9c0c3bcdca0d678cda21359977d6dee31e474e268425e69339b9b3319d8cefacea4645fcf56cfb79379e5120a66de2644c1543291869de941ca9eda7aa9432efe72418e3f5ee077b923113f0f7cce64303d04719272a5ac403b9aacec569de2f0556a8920f285b2879067564355ddba5d6eca4d9988c834d4d955dfa78fee4b557564b2c93cf26e51282f962faad78eb57296e7054087bfb4987275d9be0f3a5d270f8890019d87f8b750f138ad4bd5ec105e368d5650c54e201299a5c6d06455eb54fc71920b111f22aa152330f2fd5ee3d62e0879fa24dc87da600a05201c038901b9fcde83ff6e738fc261c924cd14c92a5cdc211401dd2263b7c79e4d7b312c6f146f0e680c6889a6b7056dab491cc6b9e6b5c721a2e79825eb7b10a27bf80358cadee0f3d833febce", "b068cd96d569363a98a23ab04aa0d55eeffacdb8bc8571cc692bfa0253f20e6d5cd1ab45dbb1e4f45d91b10488c373ca8634352ff59b2f80f11d5b32a8c88133bc8efd58801c9c64eaa6ca77c42d0a3939bca558e63f6fd73f77ff5f5d5c86158d9ccfae0fe6b92337059212d1d04c3de56ce0c15926357caa327a622c7530cef802f10370d5df6ca55edf1ba9fa29111feb3ee86956d22fe29e39ab8b3c98c6a56aaff92c43a071b706e6ca5ab4b1ef5f5ccabf071cc9d9b6b6644f1716746016d65e004b94b91602333189a39386685ebfae586dcbd25214a5f693868aab5007fd3728412e092bdde21c722b9974332db89e69adb8400b85a874c6dd8f443892a0390c017f2c150cdf43de8c1a8dce2835a7e78f4dd8a778e164b5d625d5b0836ca39c7fc6baa57497c6627167a797"], + ["9954ad83cb9cea6a67d0dfcfdbc13e355f9870fb84dbfefb406f962b252f0acddad2681093f76938529e6e54765b093f93641109086f58df704d62a160a21a09b9934ba4ffe7a38c148d211242a4670b0f642296bc04422e330519830412f0702328476dc3b1fbc58d4ae4abc4acd040506629bb02dfe8e2f96ba9a3d1b306612e930c744583377cdd8d218565cdee89ec102be9dd17ab5002bce9f95f948aa91abd37d14a13da0dbc6490060de98e38a4acd03a2795d78b097eb9e247421da1582ea8ac31d36b3da46f09d6716118712cd0fa38d88104e6e84242761a3a34f73abc4f84b648c068bf1e1fd387500220c1363975af4856b5b5d73a90e62e6b7c5bab61b2d9e749fddb6cc0a933bf54b2d1c001ff458a5443e199134ebd41cbe245bf37c3b12a586ee15693f9bea45e5e7d98656748df99e1b8ed2ced0d47bb276dab30c9f3b8913b34757baf600c5303dae4a7de4b0a1bec07da5fd3b577540213f317c0fb2b64e810a51f531b73fa8555c2d735fbd5c10a78ddf4464822918b", "ac9379e8cd2966c0fa65555c1c3c51f22c5b9e88fc279944ad392ade6e1142c56c57115e3e33ce63716874fe85ff27bc936f9b053244fa08e7bea34d127206e2f80d10ba4e24ed925bfd9de8a88d1e7d9bb895029247dbd785469027b3993259116d5c05083a0470c4541956cf494a1a9fdc12a389a3347a53bc05411c41413766f4614e6260e496039ae4766086be5ee04feec922acc11a64208f32914892234c86911562e8d2212777c28c55553be37cfe77e92bc2529db28e621e1f6a84b41afdef674b61954e0cce23a81aec36b2dce9f9c30029c5c84db8ca2dae64b310343d7fd14a456a1ddd8440d0fea07c73aea3d0bc8faf24a1b96581ece1fbd9342bd2d5098a79e43e2b8451b14d735c1ee3949f06f77caac4a0c8368f557d88214a75e2c7327cbf1b2bbcc40acf9bdb46dcaa8224923d5e3f85a252b41e9884646010a5949e3a9879da06e6270ea5e1d240b30316fca7f3d94d757477c7237a85", "843e3c0a488ba88e8553d218346d1efa7423d6dcd9d1216ef63f77a810a9938f694782f47712ccdc00136057bf25e78290e3b7988d247a20293946b3be28db49cb44c90ebfaffb7aeadef289dc7fdc390144b8e1d1d99474014375972d01a90f3f70b1d0347209ac9a50073b570bd383959a48126cb2c1cdcaab127d20fd88aa2345b73aba726219ceb68d211189165351728c6a07cad19af105847b9b88c80f4d7611ba5811ee716e2bc2e643c12990966f6107f5403f010826e24c218beea14f79a04d0df3d1137bda91f98700a14875525d9fb086c48e5528747dc183241c39051ea56ba34f5c6da98e07b60b2e8d2f00374236fb8c339f5f71a9cdf76bfc20bfb672cd8951b7642691bbfa51bc415c98e376e61056385ab43810e8dbfc9c21fac2c133179cf971891a1469e20a3b821e6e11d6225b753310e0949497d68a", "95693a822b0f3105f253c1278fee8d60322037bae9bce4598a8e1c318beda8bda7e6c46ddeeaa27d1e63490da2a065fa86bd555e78e1589379c4d5b8bb484d46caaa22ba0d3c1ffb756633e1be78022ac9516dbff9231a18b651fd4e536db1285cb50a8ab74a34d695519d4ba1040f95a03f2aa6ce00e31af7a7a7b72bc2f78963de3cdc43d050fb8a50f92c3d4fc816c8c3ef515beec8921bc554e03712c69902b63549885cd202de947b4d2d977479cfc5b2eea6b417f99c32f2bab83995681b52146361644626f131dbcf4362dffad3d4145737b7ad442f52022a9885c5e663c23689693018f0a0f5f399763b60db4f950be3fd9aabee08fd0c6ad34b57aa06b668aa21f52dc9dd01ad6b69038ee6fc59451395f40ae823ee5107a695fec6", "af0a61716fca78ae26d022b6e369b2fefaf9b4d92133687d27c52d3c58e00bd32d848556669dcd28140be4de27aa2b59b612636decbd549a17a3c8187a1e1ff8212769035a1fcd83a006196a50db6b8dfd278fb543802022f60413fde96044f52b4490b7c70759e4fc7e7a633881df2ed638d0500efcf29c57d36fd805362a392a46ad96963442a28a02cddcb7d993e4a2a8e9620ccffc52b8105a9f0da8e8e565e0244f97e7100fef68f2745e3e30010d26c162e1dab9a8743224fca31f412209e8cde39e295c52b34513096389ee0dca08fa1fda12381dd24061e6ae6f939d45a4bb224f31d183264ebab67cf50b7f9a2328008b64271b5313498803f7e93e", "b0ea6b5c83bd7da2de70968142e7df182d115b860513004aadb7b951bdc3417d26a43291f79159fd40cae9717d23eb54ac5252dbf59bbad98b5261ba55a00830d48212d4658c121659a2e0eb6bb2d6326a864c7f0215bf9b72a52508c59c6a7e4a96a74fc9b7860df562854ee9765b71e6bc8d7e17b74954a3edfea16ffd9f626465991e2ed2701b99e4e8d943dd105edf967bf83ab71cf5059de94d7b3db2d85d817fa98f30887a36c42a96af47299b107ede334807606c6e817591668293966748da48274e02c1f6d8e69915f3291cb9a68e8a7bbb773a374b6f28af5e81e9"], + ["b76529ad2701f095cef4ffcec6ab329a620dda7be04697f864214480151f3a0c36180a5c4dab695b67dd2e37ea09412782f6bd32d796199e27a3460ea3933603d9ae4465b4818b70272a5acce2696509caed073320ad35665f293affcc5ff9916f490cd51d14014d0b6ccd54dd81063b0c07cd10732fda16c970fd9b8c1a746412f94e4a5cd51b6dee46a4e1151c9f6caa617b41778d60c9f4952a299313ebc83b5a3f6b37e295e6800ce5080a36a5e6e98862b8f85b4d246c04c26928e1c7f5092ac64c30f703d63ddc950e5003ce9c0ff7eb3c2fa83ad3ee65b1cc800f3d9e143ac6fb8c4ef0272e80a2731810a731c425ac051b2c28040246fde72491a049724eef90ab39928db7d3aa965205be9f80b3d903c88d85da6420b4db8f74a7350cf26b9ec50abc8994ba209e99f5f8daa42d4ec83ced64d6c51716def38420973bdc38c404729daee0f2ca3e18261e59e63edae388e263b3da1294a2415fd09a1bc0aca501558dbe6b40077836fc9570eea9ad1e2dce42e3b718e1ffea6f1c75", "83b4e3d189c8824a952670429d2569b63c0ecd18e855fe3652139a21833ecf791b8e03f8e4f89abe99b8522a14179b03b2c9dfaf51567e591066b210b5cea65d53f5230ed4b8fba887f0c82315bcdfb5fe20e0d73984e8f22cc5cfe130909d5027ae20ec62bd438e25b06b4d4d34c7ac2a22b986a44da095cea9fdbf7f507ec159194a16640be9c0bcbf87c8c2dc163686558da002aec637c825222f035a82c324e2287a8142b8c39c189f4fa8527daa1d0029af10ef0aa6eaf598b61c53324d6b1a69373e7cf6adefc18a70c630f4685b1626e57d0ec8ebe41adafda8e9582d1357b5651242f5ee86c2787a83d06097cf93f399ea944f4993b73b07561dd15f70daea9103e4674ff51e348aea82547563fb79c183e8f68db8a80bc1a67c34cd486da15d16b17a5e2a4932b28a0318d1714d9f195b7e30d7af8834eb0d75f6c65c38d2806760aa8ba6c5f9a2ae01ed0f867262c195227545c66440cc55d7192a", "a0b03114b842809bc5c709ddf5ca76046b0d35bdfb3a9d4b4ef9e9b68f6af955f3477b68f25cf5c656ef522d1e39a99b9998da95e8b251ce9a9b8d013dce15c3c50c3cef4faf8688fae1ac581a7a151b1bf8d2438356e37cd75422ca8aefa3ca34f357148fe2743dae9526bf0ccfe1e23f14ab269f29beec7c7fb27a89faf48471e940d952978d92ac863caed5b6cec84bc3ce6c31a1538a65285d364b576da549abb90f161ca03252ee038ab5a48965f5f0a06cfc0c76479fbbdc887be62cb91a773dfcd3dfef7b099af709aed2d3209ef8eaf9ed409c23cab07cd64c70db17276b46483b782c3448a64c4799b45d0a659cdb43d8667b150fe657a6aabe7614000debac9911f55d317dc96173f0fd5f75b8c07d2671e782195ef8268a65aa3f0d0685384ab4d9f1018ddf61c108f8ffd2a34107ab4e88ec394e18e61a727ad0", "8ea2300bcf91315c34517829173883fb541323b4b9ce6db17f21852cf8af3b7168a199c2ddf6983eb94c782dc14bb06e9088cb18ca7f85c40f61f4cb9b91a6ed171e980330ea1599899281d4844d5f7087c8f6f1fa7258d8558c35a759efb4c010aecdfba0d2d321d5760225a6e6845fe77ab4cd630083a77cfa2e590c08f0f66cb69ae68b1ac2861c071bd57be786c256c710c6a1863ea11234e5ba9e2c231027ac7f85d91572b7192400f2c1c1f0d7d6a00cba84024b10815f7cd6904ac6b2178db5a260117defc8f23580119c61fd3f7e833eac1e31d964050c1424560901126ad12c82b2a2a15a2d27b21d09b4f4b5eb7e4a5d97e8bf594764902e162e4d258cba30f7e6751a8fa4510c3bfbccb7da3608474e30b8f3c5ce6ebed81fb609", "a6c0ac2da321ee74882a27ffd2d746569c8c542a62d76abe544c6b2378d5e07f53d0f22e5367cbaa00c35fbf3f74e98aaa7173d8e88b8aab311d0419cba82080e0778159742eab4877c2b83989575bd2d77205bfed68cb04849e3f7dcf57615124799a6e4baa067a9cb89e4452d39f8dc1632fa54b7baaf7aedc70bb41ee8f88661f37839631282df7182af4c28642cd43120feea6cb065828ed00c9a47149be3b72ef8cbfad3bf32ca5597121081101b0d93ae5f0d4396ac9917cd14bbf72191b47ad300802b6c79b4764fa885d2b77bf1b81d3253ca85bbdbc4b61737ebeaf45e7c65f043fc7e69c7fafc4616ca2949c518de694bfeea5a973c19b70d852e5", "87bd718d7fb590f137824829666e464c0797d3a79b55415760c07b65db5b9085b1af07a3768e2aea1bd09ed27395a6e6b678cb99389bb75267af1110248ff4bd713054e05bfdceded5116744c0f0019145797206271ffab11bc8ff520861ca250962a366e4dc21cb2a051ee5ea4150d70ee17140a656f149ec31d0e5ec5066cc5cb3aa7212c7779225c43cc62ca84294199d6021ff24a715d7ac0ff45f09f2bf582af2e2086b02b59da7b445dbdd0bdbd83548e051f7affdd908dcd21a59b82d0b52593d24539370a0e22aef5abf0010e71b8303e85dd217ee3ab0ff43c74137"], + ["b96c6833ef8d30fae5922d53e40447722967f62cf482701ff444f0e79a03beaf15b2013618c0e4505df2910a3e7bc44584caaa5980f811b1a746928c69d64da53be4d31cfcf0eb1dc3e04a9a06fab72e6678abb7dbe96ddf4a1dcfb32cb25d215b1c68039bdbc69044f9b82c68c377d80d190edb44aead3ac96d0a1b3fb8b6b16b96d4b8376adc57cb1b2c4c64116d034a66995836618a046fc10c4c50f416ea69fa4bb3249db777215fd6e8a02517c3b62f4b17ba3b83c85adff4d9344f8a4634ede26147b1bf6ac74735e57ce7f8579f90b7592093b36bb8e1d890b9bc00761ebef5561cfc625cadd915e075692ba3a2553f644f64ccc8eb11db0650d5f52b429afcd92ef86937844c785df456fd8dae9a2b6f278e461f00272b3764226d0f214a4103c9a24469a905776c7a1a230aba0ff5b4380c85a2bf03b7d03ac5fff912319f4a38f1b1c190ba6c82ddf3d1c36f2eede14167be16980bdc1971bd324e6803157824be273ec51e665375a37dc3460aa0ed332282c6bf0a1ee00eb8fdef", "99e5d6238e61318dda5ca1b422e5e4bd36f11a24af5bcbc1742647f2e898074a582b2a9eb61da608821af60b91222e35914fd4acca9a8b1587da2ef6d728531fcbd3518ce52ce0df90dfb109ae4b0806b515d21df650efe0886335ee605f4b5e221e2b79eea4f381045776cf5caf97cafe678d2d80c0cd3018223ccb5b0fe9a42232d2f0c3b35e036d2c8c0f32c86396a75075b83021858c42bd1c0eb64218186135c55fac3327adc5f8cf355cab5c6251b08b1406df32a97c3eaa4abca058d73ae52c6b9cc37611963944e90bf2225a01d253b4a379d450e353df8d83a1bc6038d99333fa0c8ee2c70a2033f5c72773fa3374eb47cf90f2b3919412f3a6aa8621c23206a4d053334ced6ccd61bac600d1c594bc3438c140bd62a379b17738df2e5243f3232ad96aac465e7dd8f259346c3a7bee0df3b173080a6701efc5a67316d4a0fb1ffc69469a1f2c6274bc912fa413cf02f18373ac42e35b3756b80122", "9896900a1b5b60a360089fbf4c8999d3901412083fdafbe3d80fb61c87409c70c8384b0587839d339bf5a8b52a3f1f46a10b49c74b45dd2dadca61444b478bdf65027ac22dcd0e670f79e4f6a8cc2ba24f72513dd914372dc9dada00798987b025e894734aa68cb942cce580fe9f091376fd6eeca70dd7fd987b575d529abe466abd1deeef65a6aeb92475772d139c3a4481f76a2e347f7471d842106057592651f27b89a8c186c323ff92f5b487f7bc061cacb93ca8be4cbb8aaa59c709996f66d55e583e59e015f994cd5ab90073766e23d9b3853aaabb84cde9f025333fff4f81723fe73290b9604c19f49947db0f0fc6f7358915e5392788b7e2bf7ab06330b1240869572b1cc99e3ba1c94f64ad0c08fe780b3c3a677f9c433d067b76073fe44e0752ae47ab5565c7012f6449e7bcabd120b0712ce4ea7230a43621b91a", "8389e70cde5d02a94848a701c4e54892d82eb704d46baac7953d77903182a132163120730e753476f7c7ee6da139528f99cf73abbfed0f50932286deae4858f229bfceadfd4ca2de8c08b52debd44304c4afd9d027f1fea0843708895951266f4f35bcdc7d9b2668663e2993a40fda010573134c0bfbbbf3310dffebb6aa26b5598c6211bd7cbe85359ff56fd66098f5f0e519aee07dc4cc6eab1d37add54dd051839e4898b54cf0ed2830a6b5d9a3c06b4f9170b2daa2781400b9bcbfcbb2e5580aa343a1784eb053962c9763cd91455609348087295ba300a5bc96ff8ca61315b00df18dfd85d4836a6ea3c88f162dfbf5240b0e738030b38d876f863f07823a8703964a24c32d94e7d239762946a9d889d7bb7dc0eee1e3378a1ff9c16fc5", "8148c3d1d32f167feba9c71a22cfed435f48c113456a852b62298b7557875047fee16bd75c6707e406522778af6a3f90a9601b03f639a66f6b8639be02a4c2832b358c1577849e1c31badcff2fae005f5efeb6e9bfdf5d84eab3a903ead2af0907633b35f5e84fed1a512a9befc30e0fa2ba9b983d616297d3c78d7f2a14a85a4eb96572adfae239361856ddf9e392545b59f60b44961cb9cba7b7b3977f1c596668acb22ac7f40ebcd2d2f7d52f2de451b23433d2b69dd3566535837ff784a005d1fa134d0171a10be43c348034e736518bd670969b29e17459883031ba70353864289d609553af653c41a58128a808d5bf5eb878cff04341deb36e1ad618a1", "906097ddd9d8dd8b0d8fdf6aeea7cf3b51d1e932524428fc801f5c7376db005116741a0668fabb249e6a2ccd4906345ab5c0d9d71334874e086108cd2e99be81967a8159094f8e9ca57100efe7786921f1d06b4b8b120298dd1a7d97b545fc7524fd5d58044c0344be01cc57e85a3e41feb0ed280301118cca1fac01c378652711ef40dcd622da4cc12b5cb37aba26a6d417b299d5d77fc55330327c375b2db86924863c69b0284b30c7f4ebce4ebf28436df7746993b3ff78f56984de775feb49c33e9eb06a0341da87b4d625bf659fd9470912fe8803cc6aa6ac7be534d539"], + ["8c729b13d4aa40ad6affbd46fb1c606556e3b27ddb91def0e2a4f955f7e434c3038a25aac4a3a7b9b605bfa92b9e2ff789cefa11e138190658b8d039d0659d0f57641808b081cd9b86adacaeb2c6ebbc55a9ed3519e02894925e18a6105d665c71c7a96deff3954e33c832c18416b28c5edabb2719b3c5108c3f530239ac72ca6edfd92b709c599d0a2b7f832dbeb3eb0c73413b29acaaa35852d10c319fdf2d1c08a495a0ce2ec0e5fb9367402121823ecdaf4eba41089663045d0cf637a94355e09fa4f831af9ef07d63fbf7043dfcba27e1d5a2f1fa12eeef750ef054a5ac26355f4cffafa6254ba2d57f58f13c8d51575e9a31da708b1455a93f3ca7ec0f23a3daddf80c4b8ac0434759707c19834a38e16fbd02ab352d86abddbcc58d852c3bafabe8126c57d3ac2045dd33a51cc9b1c8d2372792003c083a77500ae1f8056883f5f73dcb158d7f3a5521082bcf90acdaab687dbde42a513c262c13410f66a021cf2f800c74fd72f482386ae75ccbb669b9d4b69a2e74abe766c8a6f377", "b96600792bfbceb99e3aababa80ec5912a4e48021edcb4d91f4b7b4565ea584f9c4200f4adceab2e2a0ceda16321178b8374d30db26cc39cc39701b62971374cad219c7aabc59d9899d5839c589e0509917da77a4751de0fc3046750ccb2376005e7e3643fa4fc89dac7bd5d330a53e8b2c05fc4d8e842458c007213a464e27f418f3099788edf92f813a4303e540dd45b07f3c2c2015190b500b6bfcb496ea80dcf076680894987c34683593ab727b07f1ede0ab652ae14b4c35acff3002fbe518d3844d4aa7698d37bb5b9584550c293d754d1a878c5c5576999ba71aa01d0092f210a4b48e42c2693c48009e7cf2d861de7f3df5c38b1456e7c02afa96a474f70406842bf350c57f778526a1d36f7738d5fa4ee5b1c821f9b72e26e0c8c8e36e94cebd91a5a9259f68ab347195c3127c326b838d920e374373ebf559dfe1e1b54ec0cf699ce263902ba6a3bd085a71d8e377c66661e7b8911060f1c99f5f7", "8d418283de3c3384b881a829cc5229690f34556d6a3f261c622a3062e9e047dcd75cebf58102d42efc50917eb06b4d30a780c64d312c854fce69b958170f8f5ea5a46eae688b300bd0ae3169e310471cbacf38e7b408d0441b4dae4a448cb3721aa15f591bc036cd200464c6192e85a9441c14bd562ac4d48b018cfbf11f92a858e7aa4ba87d04c3856946c574221854641eafc66129d0c0a05bc2a544c063cd63911887cddefbbadf14b1e0147dd41dbc6a17a07231a32fc5d40ae12528cb8d596950b95727c6382821bd6fc70f7619764fd23bfabe9b6d5fddb9e5d5c997e90f31633248d6df4f543e620ff73c99986e677ecc2df9457a29cd8dc1defebf49469437b9160cc1149085872ae10f93b5e8a0293ede193e0359084e080b8c069e70cc4fd5f27c093595bef06555cd92e047591320ce3d6b73e7f34bf19c4ac3a0", "908664b8cca5b33dbdf5592dc3cfef659c01052d429c0db5b686949643c795d46c89e7b3b84cac6fb838ef26f288c3bdb4812a798f8e0225a7f5c5144d3643e811e05fa99414fdbbe811561de1b45e5cb1c474c36ad1f5df00d5aa9a7fcff0005e41737aff5e35e36b3d2759f40de3f9f317e0eba3ceb786782dc5d4947cbf322df65d221e88e8ade1a90d60614cb83954e5fe92316f9fdab22069945a92fe471aeb9e8e239eedf78a736654e6125a12a793ad3754eda5edc6a25456370159b81a549e54c96ce176ecec1b98cd5b6317164d831be8e05b14624910cebab321546a0cd28b49236670ae10a2b7a8620cb291570021394c1b15755e306c11be004603549c5b222d328ea1b62d9bc6973d4762b0336d0d64e27cb4232ac0840e4af2", "97425f979bb2fde77ba61e4636cbba2d4546a47fc778c2dc94d4906e3c7bfa10453fdc97b256f74c830dfc60bb64e499a4636876f91a67821c9c9a2032a5728ef6af1e1de7837c5d90d9af092ac3f444beb8af0533c4823030e1c3bfe8ae7ba120e9b5a9c52ae60eee57db1374a6c54095dcc442fdce549f439b1540999e5a704fe3d5e2354e0bfc19427c4e61d9b1b2bb282e5ed9198215a4a3bfd23d9bba79580b7e690179ff7dac18132f7cedd000bd489d88640962735efdb70d77158bb05e771ac52fdebeca0e59bc47a1667432ad16cce22d11d34663df6aa07618d4bf354648756b69d7f026cb237937defae89d948d45594611aec1fe2cae548745b1", "816a5e99bd933612e7fab01d94f0fdd3df9c76a1068aedd6e89be72ee16265f3ad3d84a9587f8b3d05c29c4372750d48a02c0fb801f5f5fac77760dc9461660024f5285f0026141d68b5bb2b24393dfce009ddaa751059f3310daffb7aef7a580c0f3b352095baa8c61523e80cf935431465407f972f6f1953a1be8fb66696d31c3b10c73b15b55cf8abff80e6b45405e93ca4773f9f90745d28541ffadffd8738d0a0beb2e6ae2bbc1ab3d21d9d58896458626b15617900b1b57e300ae62f2f1de289a108794f7914364f614ea31240dbfcbce1bb49d76850be0661c3c17b06"], + ["93b8205783bf9c5ae49375279f5097c9ce2d25fbc7cdb25fce469bc3026309f4581e67d2cf644788008c8403ebb9c3349204c8809b3de1d706b956411b25a5bd190e63c50f18811c13260d2f68c8dfa12d839d1510692feff976e75b50c560a00934441ec2cdab1edf6111bc44a05f165f43cf86707fa7b4deab1f35989f5ed364dbafca70716aad245a1a29d23bc5eaefcd2c5de3bf6189d4d037ddb5c7441452719aa2a6a925a1395589a8b1f9a3dd3b8915e1de9c754084927afc5c7807a30197dc3e55fad001fe343466f64e78042f13080872c22af442b0bd4fe8b899e31bffec450cbf6738d9e05d672f53548e288a817c44aa3a60e6258f6877afcb07552437156ff3679fdadcd868330f2df7f5f0318a43649501aa0be515a79a2c7d640d2b5145a9a998f9ee22b4018faee7720d664f7c5d4f84362c1405bbaa31ab204caf5a298f9543585dddd28bd7b6f6d80cf8eeb9d207351ef8eda3b255c1b84594252721b1d86624fde5be0ec4d18f703982ae8ef27db5c4eb02c92469364b", "a5ada51c5016103b62b4ab51c17af4deaa8e913e627814517a95a35ae2691b14693fe73e84b3c952572a306d7f0ab2b88598c7f613ff315cecae5136614df35016d1c95e753a191d3789497d2828c98fa5fe2b3955813295eff2e4f603a75a6d3a09d76d031e0eee5957f250eb72a4bb56d0509cf5a3200027d5391cc217f551240834fe5e06c1ec2aa09a78572e24ff4631bf566af4b44d1bc23bd151b8db1c37ee52219e3cdaa1706897cf05e41390b963dc7d6d50d7afd4dcbc82273db7b019854208f1bb0cbd81826162964640248b799c4f8778191e92b45ea78b9747570b116403813867237a027b07aea0e1fb0d84c09cb39c4b39a47caff8c74d5136504d7267eb1160777fb139d4fcd49d213308f5f280da8e04349bc3bfe90c8ac32a946f27a04cdbbcb53587bd03f9fb0e0f6e431e2cfff4f36becbe4556a366b5073ba2551c10d20eabd2f9da1dd5aa5d749db30484c5dd7a267f2a3eea9fa79a", "a9566d942c2d226c5b25456d949962b5e43bcc6c4d414b012aab167927554b807af690c8954651ebbad34d34f90ab4d38e155f0cdc08a362105b43bf69635b88bacb39ff48fc3db19cd2154968c0d52047896b32e3732fcc80fba89cf266a64a5d8aa7822734ae578f1ba7a44c97cf2a824944df5f3289a015fe64636e8fee985bddb36804b264a64cfb1e6eef4b0fa89a4838fabe5a16be17307aa3512acd5a64f91c46c9972b1059e4fae21254e7be8c8072224cdebdf781200d468a3988102813c3aa16525208137a9dfdb06fe96f9611da614bb1d79e0b24e1bb7c4a8b18177c979f8be64638a1a269f3a044b4438e8337f0c403acb7b0291658c1ebf724146ae3815401745d99d79e230ea9edb261c9e8ebcea1b24c7b4f90e37964a590207ed43a31868036ead586b32b99b9a26f33ef4c65ee8e6a7b6a2ab328106937", "b7a7fb3e133a68e223eee67b520f7071ef3abe9aada3fdba70e0c11ef6e70e535b93279c4ea246445204bdafd3bec81ea01b509c1fb26e785efae8b96358e2240cf74674169e740e8472fc372708a7f3ca0b7667f1cfd28345930e5d610a78b519d7f02ee0a77caf9dc6ec4167234dd0f1f1261481b315810f41074471e794ff05696affdb097a461dab9e77bffbd4f751b195d8e70005f357adfeedea6931856a5cb68f9210a534725d4c35470f777188b68301cbfbfd198066058ffb1223eb1903dbd94628edda9e8887783a139f064472120706477274efe4cb2d0c20dce92e4ed84f1a293d872a38266c0287b25d502d5cf370073a08eb9947c9781c572572aa70ca7ec0a02f4e3fdeb16fd2d7fba2f06ce77dfb2960fd50d63bc47b8924", "9225354605570efaf6cec325c736517ca07b254178510e431e81e69971b4c2ddb54aae413fd6835e9f820aea5f970e98957142a5b5ab655fcb47ee64e03f08fefb91d1ef577d4a728f0fec967e142a897ae34af26536dda139a34e607ff1b8761e6d80fe661c076f126054d9794dad636bd55143b088edd5cae3914b6ef6cbc00a46922264fd73fb59c7dacc6568376afeedb5370288d40afb08896dfb59bc8f35ec206a00a57845950da11e66be0b28fe9de6f96ca6c18b90eac71532510d8e1a50687409cadc4ffcc5202d5318339a3055c016ce022a7a64eb735767f5d1985120afba013d46c946425ce52befc2e330c7dea8122acb241ab565615bf0efa9", "90a3ea40c54dc5280a56008d7d4e41a9bd7eae5c4cb02fe58d699a6d684359a8bb37b63fdde6b9191b59a2d544c56203af1f954873caa4e4315451a84b89b55d6f2a7e3aadb064b85f0681731cb7505c732fd6ef35817193cfe3544d63ded6351f76aa0a53e355ba96d8a355ee0552faa5c3adb2acd29233d02ff8d6684e18a22462c7313a684f04dbba3fafa66c8a796d799b6ccbc54111a34011f4311c112158a59e94ef900678e4f2188c1ded91345693d0a44de8b79a1e70f50cfc069d4a08da707bd030c7d26ed51db10b3ef33489442505d5d7bac81dcd23e259308c5b"], + ["9537cd9de5c3881c2fe45832ed22998849bd1154d72a8d5ae8dc8315d00b3bb4153803edf73c08ef229c26fff36cd445937495419dc7891714580dec6d407e58ae0ef2959db50a6a4b3dc781c2ab31aeb2a628e1fd4de9ba964dab6ab93e2c5552b47263616f11c1bd4769688bd67f812834f6f2f34cc427f458cb2dcc89b7f75d7e1b1e0a01e6677f97b749eb547d2e9d6ed2f0e57e77417bcce8d0114c8e85368433e177274a70718cf4da7490c08ca343be58a5f3ff700531915bf9e1c2d13001a9a482afe9cb684e3aeb29975812033d8117e44838caac51f2d73beb796b4ae21df587936edc524f912785ce03e2336b883b65595b4c8c48264d0161c80d1386bb3c2a04d7e2bc089f289833770ae20b060956f3eeea72672d51e9f02a82244a81260e9623b00c01e9914f4db170265615815fdfdb34911018fa9db129a414e2d0f1cb6aa4c608cc075958c6d662119ccf90ca3b82d4c658875e442f30540f54eb64ee7170d28e5854b115033f47771613d582230fa9ed109fdde98a1158", "93cf1d7a8ee41208d7b0acfbac149a2978ae76475c1b82400f41331e3571c274f0f3ed05071921dc4451ce536c1794d8905088b5b683869ed1c4ef1cacb6c215d0e4a7c04c86a48b28432c3782174125e44978dfc7d7b0e57e4cf9be6f89da4471174944904a1113da3c9f4e28b23f861ae10ea8032d47dbde13b2de0f3b1f4c5e8feb1ad1ddb2b44de8c9163acd14947a14dfce1136588a031d340ede321ff846a2b40966169c7c11bce3a67b1dcb17e3f69ab4a0af95be60245de76eadf46c283acbefcd2fb8827185eb8434d78563946875d2a4bf34d07bd23add46a6c4c83875d3c8c9da0cb20a161ac1fbdfa742a883f281967767c0080448eeee1ae8402849c0a974a96d2162e1bcfd01f00cbeaaafc9d7bd446f9edd2a9d0bcf1e1ffb6f6cd974a47a9e9ef373ad3ff228a6ca7675389952c38abdc42e83e8a970efd10f8043a5b1827404162e973a3b5af466f11ed907931c5419419d9f1e355cbe2a", "aab0be085f13c9ef6e53250d0d958e55f1e5b0563864ba7c03796e36f85d87f7f363611fa08c927145353e323c8478f199c7d9a31571395c25fd62a38faba1302125f41e7cb9f527404f56913c92f3fa196086455733d14154b4624a10c5c4511faadfac72f54cddbd3435b7b245f477c781dee823b7d27550c4bd7ba316a08d2c84219eedcc46c3aa2d24d03f11ff17850314d708dc2ec2c7808d2be15d5c651d47147af93f03733a585a7edfbc5e432633430618b7a1fcc96382c0c0cfa6f14d05f9649b515e01546cfba7d6785eea9a6a7cc1878128885e1936448f6099742aa86509978c8761ff62aa600285026fe7ebd3e2f1fc6a9a355b483341a2ce42479d59c08cb3852a75140e6e9c2b1f497b53340b5ebe406b0e7855a912371ddd0b0e20eb29d1285bcb062cdfaa8e048200a088af349f01d8eeab6ae7b575045d", "8465fab388847fb59477bd71ebb0cdefbf7164743539e1d60ce886dde70649b18775fe17af14ac5ac156e6be65a1015ca5426701bb071b7ae533609d652262a46b5ec1ebc3b355c4fdf1a159a17bff358e1ff7af383c6797846a5a2339ad368213c73c861a66e4b1c060963e2044facebd96eae6d293d5cd7024dba1f195de111fddb54efda611e878ce1ba57172a1614cfb7140c7cd89cb7a3c22d3b8908b3e6430f9b21e33f1ffa85d2f304bbe02da1ab6b2c4423eb4f3c50907cd51490aa94a419bde3190cb474c31fcfe2eef584ccbaa9d6cefb5c72fd43187763c0cd6bd1c5f5bcba37b0ea39f94eb0c35b1becabdc3fe954e7d0efd153b32295ee4627c29aaa04eb64acda003d92cc3bee3663a0077d51db8e96d779c518bd0ef25ece7", "988532ca11dce408e0b124c8afbea2633e342add03f13de4908adb1928b0f9ce35efe92f968cf20643eca2472d180fc0a8c25118fa1589a0fb8649ce17ed978efab6f21929ade89947629e5fc4e1108eaf2aaadcab2febf6bb2501f38d60de113199576817a95d4908e799d934dedc2bf16d2a55f92aac1847f4ab2e540de213563c92f857173189c8a39c635576fc515b75a0e68873bed4db9e4be3ab47c69e34248731c6e420b39906c1132ee025773b700f01dca28fc22694cd84050166452f9da81fb08b8b9164b3dd8ccf4d8bf0e56c91af6733b9a0d9e349f2e539199d0ba180d11342f35a157b95afbd924d67a4482564b57d964c06572aae83dba039", "82c9b0428acfc8a3e4d33c1a7c5f8565334b6c573daadaf39bbe413bde06fa3d96367f9d344e2d021583d142b8a948eba83b886a640a15209a9ac8838ce6492f87fbe5d1fac69f26dadb139a71f5bfa0de399726bbbf3c001676e95663c19540401d016b84e2af62a27067fccdeaae5dd71b6cee5232033d1e17112d3e8b6cb363fc27bff3ed0f92c4232aaac522158d0e983a6e8e61ccac92abb2e15665b45b36410548808a4aab38a86a394a28328c2ab33c29c1f5295ca3f426182ae3c40f0378fc33b17443b4e8f28a6f1dde7a566d857a5f34cf85b2b76a543de9a05e18"], + ["8a45d3ee762de0816248b90a93f7b0071f8799d1203ffaac4137d9884de7141117881399ba00c836b2561ed0ab637590994ef8087a0ef71b8857d8699b8393a794e73ea9ab12fe2a7ff437cccf02b2a2e7124bd2c6f296ac855b57aa7d4f2ec3683d65f9d765d68481c13c25d276d7e08572220caa79113afb85366eaafa733b3e5fc27f9929d0c6655ac68b0c212c7a4cb3cc7e1c4cc0f4db1b8408fa5a700911ebcfe314361c8d0534e7ce6f3696fe04ab25069d664b45bcefb0e3e5703b2b0e12bdb25d2ddb525b0dd6a681fc3108f9918a85db35d6a2f05a3fb1881ee5946e92797910bd95530ff3d76105cff0a45953f4487a2fb3893e2fd6ac4a68fe5b16d0a10f9aa73cc4c1a3f95f18e66661b643097e4ee9ec1760075f4c7b9647956a6d830e24f1ab71cc43f492392fcb90d4e2d4f2df08e24f38e654fb5fae57693097fe8bdca371f07ed4ca36fb08feb61bdfeaa15600ff60030de39aed3562581f64d8cf9b57c482725ac25fb35b1986e1c534652fe9fa57ff92414bf23602e6", "862b601e38e8c788bc82c20224d761eb94c36c3de9ffd1b32ea22c63e70421c99d55c3aee66c4f220ff3500839339fcbb3f863220558dc9a15fbd535cb2c3c0dbb5ecc4499a6fc3b9143cc94517c856d4a191b35dcc28780cd968c652e99831027a17d8a46ebb362a5f3652706b6ca67eb1d7c05b9fd7756280a213d2bab38de25b46acab1ce9c2cf5da759266abf69805f5a94a3f43e63802d89cb61663e28d19fdca084b7ae69545b6791ebdc92c7d2ed92603598071d68c89c4e7b32b10e9444b93a6ba771c94c1a224e7e9a4573b55c96f204eb00c6570a340239210e76339c1fda44073e47409dabda275c8b0074902f121be2867ef2806be86eb25a8f120ecfe45035e1dd6a3d78b11c1c137ee0b5637cdf06aadeda4931febea51b04f493affb8b2fe709bde3d6079d219dd12e4a6486156d649010961c465d80148e9390e25c2bf5ccd4135f9b60b1e82cfd47886a8b9eeac93a636e7e80f80ec2775", "b37dee311df776093860891b5226c714bad521e2243a5b0fab09a66e20dd0ec292c1161ea6b9b13f2bb9acd3c6b16e5fab17ae0145b0ad001dca0d4ec66b23a0d8a8b3b78202fcf87a0059da34194521205e585f21f36a91c28e8c2c6e62de564c82403774e477dda74081bb8bc647a9a2cc03380c0b0ed8b357c163eb656686632ca3dbec0ead751a8dcb13ce16b427dc2195d6bb3e8c529bd76681b1e7689e6cd67a8849eeccf09544d9740a546deacc6977235906ebe03c0b60ea08076f092bdd73f6c1a6d24f0bbb7cbebcbaec92f3f465f21267540f2472d861336c7de2131af03473bdfae781fa0d89011987d76bc663474102831ff1f2867bb3f600d94d0155454d7960ec26b1db28ab6a6e4515d580c5d087ce6dc9e10cd45f0baa2b19b196baae6dca5470e5aa6c72a42ff85ab4e160e8c096c3de293674e2a6a590", "a9d2ff9cd1a5e0729a88d08ca6491d53831a3e332e4e0f1a229dc2de14807667fe0a9d4f9b1c974b46649c66034c879889da95e7e6e7f54e23001b998c7a3fd51e4cf0708661e47f3d09b4e885df60a9cde058bde9c8c0dfdc17c5c3541c924d512a5ed7b1b4c9ffbfebe6c7b529d23013b5fdbd27191b767a4398f59e1542b26b480a90e4bc494a40215a1fe19fe6f383621f94ea11499a8061a1d02887e2401bff3d1e2828be362b5973931bacfdb3ac9fcc52247c220110efc6ab0279edcb23cc2a339372fad21e99e9d05f671f8b49599a8aa85af5ff60895e76b03f5a683402882fdd895d5bbbafccab2338b3402fd8625ef06a886b3200d18c561ebbc8530b7a106f9b511428a47374c383bba3cb301995461f284749440f53ee9811f9", "b7b8d9ba73a09a7f3bad41157c11aadb94d25d84798cf1548446f7dd156b29718ca38d335396ca008b0d51c1b264570db395a9ff5a2ad01ae4c0e2e4660d16d14b45209ccf3a09825662cd9bde71c6e37777ff842b558c1e790d908e5c33b09a3561320954049d4d580d37932c4778183c548ca71fd9b9e9a4ede0fc2c938df42bc8116cc3d4c936b88dc5363c2fe18a57e5e0e9bfbe7d986dc52b0e8fd688d6071c161a9568264b0ee3224062b5fbce6cc902240ffdee73a372577290b11e9d286fa116acaee943223d0a9bcd45831781f6f15a1cffd98f1084ef6202dd89f3033b29695bc636ab86845f8a4f46eec20621c6d3830bacbee8982546ead9ac00", "a05dbbeb11a2178fc7e0e572500233ae6122fc49e62990d482d04fa9ef0d9109dfbd535851fa0d11fafba53953bfa18cabaf9f329390e9fe569f5d1ef9cce9c51cb251a4d6a7d691b5fbe6c27b7ed8ddfd41b3c33e4e977439eb821c748ff3f230c2b62a6008adad46a176b76a8facfe37ba637916d636130ef8183b918160a04571f8b58c5dea3d0c79ca6ff8dea640bcf89bdc2b73cdbceab2d6999f1f624f3a6bf98c8db3154756bf44c227014eabcbf1c5f7c9050cce6738f9e2b6f9e5a410a1ff13d6955aa54b8c8e777c1b106a9b91a14acf29d350567bf79d197b3fa5"], ]; for i in 0..TEST_KEY_INFOS.len() { @@ -305,7 +307,8 @@ fn gen_verify_different_key_pairs() { header, ph, &mut generators, - &revealed_msgs + &revealed_msgs, + None ) .expect("proof verification failed")); proof_msgs[j] = ProofMessage::Revealed(messages[j]); @@ -327,8 +330,8 @@ fn no_presentation_header_proof() { let messages = get_test_messages(); let mut generators = create_generators_helper(messages.len()); - let expected_proof_with_header = ["958d7d6a30bcf86ad0ec5015e07d88e247d9c1057c2309b6a5d7ac66d4e3400e4384350fd5b614fcdde901b7568af6aca49e645ab3d4e179fd31d498fdb8105e9c481c0b94efa59ff546b483dd220e748051272a350622f35833adcf5983cb2aaa792fd110eaf7aa63c9da1af9e030231c14816d2cbdee13dd4a887c221ae5fd4985b64fa9a3f2b1dfe7ecbb06e9edbc27e5f48e26cd1ffa74027ebdd5ccff9bff389410e81430a5bb36bacae532a66c5abcd627caa760fbc3299f32804c4926e9816c961c1d19db6cb1bb4b7718280b6474ed924ed105316ca19acb5115013ea4acaca391068b88e58307f9d7e7992118ebaad2ed0a94dfd222872bc7738595be9099f70c28dcbf4cf8424c88ba98d50fe00c2af69956485cc702f5c486b95468c327f92d3eaf39549a51db868e231d039d15e022e3ef2cee46c53a2770bdecf15ea3676b9e1d35c5551ebddc4637c442c50d4f4473f866822960a7daac5a42f2c6d1611d31fe121d87695fe103e6dc434efd4183bba8e8241a0a325f0cc9e1fdae5d34a3494add4a40ea816f2c706c1aed285d4f51e6a8121b5a3fb70290c89cfb90574187fbf8b0c795d76d94065f1e07c36e43ff49ed650be8d71f428c8f5a42ccdb7d89f197953c591cf5d84cbf", "819291df52e124eb43a9f11efeac933fd689806d3b23b18f11e63bacaf7f4668cf5a6c39af7495be4b76cdce95829aefa9254581d55a9d140837309a0ba96dd528c3a70ae3af50786a4ea9b381e6c25eaf1bcb8bc2b23a3e8318782b2aab3fc886b328d5d0aa6adf75921b914f1310ec8a5b1ae3e04b389973d54f969171a32efd7d64730d2d20b796b60e5ae08bb3a53a7ef400640b70c59f200f66d9edd0fcce1d0d0fd7c58fa447cbc3cd4a53de590001d22c121cef8747224e9f73ba20380df7667de74ffe480df260249307bba113590d0c89795c1deff40dc1def1f61ae02082667b88a21d414c50e22806f6bc48dd7d545d5465184b1a02a0f0185a29c77f636ef9a79c335dc76e68d271c8710f967eb48c02a1412b40949e920a9c52072b60c7beebe4a77111734848d2c9ea029089f3bc48d207402c4260c47192966030f8faf01dd23a598866e5dc0febf649331b6d03e575a104c82486696011ce01bd9489f450473d3a38f8ba627690d8122b19e1a336d3e926b275e5345f5a10f6dbce6ee77d0056cc06493704c214586374db4183abf33608caeaf412cafa0a2c4537fa74aec45ab71d4cd6915d7b74", "8335992a02626663c75a5957176e8ef356bf67b015f373ec933c4816de5bd34d4de3cd1a61f8de0e0fff686650198fd28f8ba59849f13b9a73dcd1407c785e3507c52e6ca585f300b40e660c5d03bd141e037aa2fa6879f9ad54d604531e0524a32603edeb780a700d41ee39a164784cb34108e0701e8b5cca88984fb695d0425161cf6bb6a0abca8ad9250b1b5866cb02e1c6194b9b7fe2812e06f380deb3226528f2ee0323cffeabc3e4b921e3135927f48886692b337f0a412547de13cd32458cd05983e2ac24b07a13cfc85f291141ff86f0db7ad97f1d27c3a2d4fae4a943b1236813d500d471f257d825498dc560f3d287428f8e31876f59d1ae660492981e8f0b04dabe983f2d3491a0a8dbbb4de2370c42463151a687d61a2789ac1795bff95f489e3f1bd37aea3dd8a4c0bc047962dcd04a47670176759d4da8fdc2ad3cd285ab2563d40b017dfba54de79471615e7a5c670fc1239d50fd080dc84d51ce3d143399b56c4249a47fcdad4a1915638c72d620c2f8fcec161743546f5f00cb163d5cf26f6a94606fba492b34f2", "b7e1a1c23a8f993c74378495a52ca7fe55e02af32d3a802b4a61cb6eed11e1cd7f14e03939104bed3f8a4d4398297886b39d90e8f6dd15af643a15091222ab9e8dcbcaee54dd77909f5053ba99cc941c2913966d9bd9c4d7a1878d2721e6e65b8dee762fea8d22088119135dc105e28a66aca7ed1866cde2530b81feb27a13a37f85e92095c1ab33aca0b9b325e106433f9f7581fd2fccefe9c830e910550e0a64b8f6a2a981c7115105c17bc52dffe160478f2f14ae99edb69d24059441c038e6ce598aa20833c9ec2042af453f3f21474b73a31d89bd911a46699557a1e9fe757ba1b602f85d000aa67c0d45a87d372f77d00a5fda3d7b127a459527fcb32fd06cb02e45f2b94fa0b8c72fc64d40770db7a38687530bbb2b81e9f35327db247db874c3ae6daeda57ba1750f80cfbdf14ce431e9d264c897ce330b6d60e224042bebc07b3f2e080c0ce27252d546a951a0e14789afb9192403d6f3b32ed878206d92a5fc74e5ecfef36f116930195d5", "b8170399bc49358e887fddb48930a825bc360c02e77603f35c0ca3ce4c103ab6fc28cfbbdf4a0d4a93716f8ad4e2cd54947a5edc6807dbb2eb76e83bc4b344aa409d5bdbda08a8256b2ac1c2a8678fff5b116b2532cfd37014a48220762939f6a4ef3a01e7af7eadc4826aed480a36bb7b4bf3e93982a4b151aca19981beacd89849060622aa8015a11316c5eb479cb005788ca559a5b0c2dfccfaf6290bd04b69c31c31db96a40e39cbe96947b7be983bc3936736c5f5e115c989ec268835ccfba1f30f9ae1bf5dc10152b528a43b5f3f6ebaf209b08bc44ce3e1438c7d3f66a2d965004f8c6d313eb5f7c589cc220c42e947b02aad0eab109be491db5ca2aff06621209e01a501e49e75e5b1a70a632d876566de036d07fb5f68d57353dcfa6551936f059e653afa16cf701524e2ea4653f79d75837d4f4c4b53e30d554077460e3bf8ed1d9e6c37d330a5978d4ad0", "853d8f8d7c5e3e6136344b6bd3341420f014f81d65f4b67b4b3e4767d4c23d6db29f4d31c83649860bd1385c3bb2ba92ab451da40b88110953a46ffa64fac9ceab74c51ea2ba879381f4de680ad5eb1d13193172b3f4cb1bb98d3bf81089d6d4a5d3fc35c726abf149acfaac74fa22e3a8627ffc459f50922df9775a984001370c0924ff827c3de1e615624979ccc88003be74b8659f096275bf9996ef1232274fd3e106b81907992cc39a073e3655a20fd2bc74764109e0de784d3593f7b6f6e26517790e415913192b1e4c1ab52d9903b0fb52c501a697c111ded0c77a717a0b7a73599b01eae2ad40e9f8a9495c456842dac3ddd7e1d6f6f3db68aad3c80e36f6ee5b9b5689b990fcb98d2b1f8c3b703ae0aa9d24ca9fdf5ab371a1278adb6b824d5010227b7d756120a9d1cbb73c"]; - let expected_proof_no_header = ["ae4971d4036964b9a17890ba33d247f26b6a63dbc90abab590b8f82e68c024a1c6f03eeec942dd3ba45ec1f583ae2e61b5231ee2bde7a5898aee581a7410626d83be6f92edad0503d01a759ee98d82434e82dbfc2423c45f3f971a0dc6eb659d86fb9ef9d6386e91bf7d993a1ce188deb70ba7744332d22a1681821f3a9c6d0507ce1b15f843fd893b146f0bd700a80b03925624cee8eb943ecc7f7e1edfb27dcb320ce033f1b3aa2e6eed56482f062950ca2ef9350a4381eb3932a5fe45238a477d77df3f4a9586188ea3251270a0f53b81682d53c08a06913d1d995cd0ab5adb3f616a6f9009b182aa0f85b01d5fa24bc5112af75e840405f1082c6073b1ac0601c3a4944c844140d247bf10dcba0372c5c0699e5813fd5adfa5a92a444f595074dc5e075c9e54f095d94fcde57726391834271f8d086b69705f7d096726b294f6b2f6025353eb824b0699c126ee9462573a08498d2dfb5aa0030090eae3d2f7b06913874b25a2b9f3e277a07584384e82d60f2bc65736af26390a5d242fe3f523779be38a1ab7d6b6d0b5b4d08dfb32c0eb52d7ac065edaca9248739b1b872a1432fc8ab3eece76b802b6fa00a1b10e56cf18aa4295e67592ae9d006b219ea4e4f17369fb0050236503955f2e5e2f", "99219290e1a6b529004342287e4ca31d200fd0271bfb9faaa026acc6ea79adfa548954f9a33fb834e38bd2e45681921b81e8c9fcd524e92d02f9a37953acaae586fdb768c717e499fbf3263cd0b9c0ec963b374925c65bfe272d3fc6ba570f94a6dfbcd806abecba0fda8f77d4c929412065912886f2332896056e295306e3d331ed272ed6eb55d42bdf5e3c9bb030a1325a10067cf95d952366f60304705849d99563d584bc6c025c91a8eac1622ef64dfa0ca5dfa518883c8f287b2d7d56c1d1272105384b021b76dd08f449a041fb1974f6dcddefc43ada6d764c5b255066fa25e72c7639b652f84fbc5930793bc552872bc3536d789b9c8e32e887e440cd799cea118c9c50ae20cad0400d154f164a4b089cf178d64b0c5891b47b8575fb5e3da7402afd977c5a98b1c705de39e002f296a16c0db9cb960682429455e6975d9d0b5058e573982a41188918893a7d239f94c4bb141c29e534b535719b5a624c95c330f64c9e6a3019780b45f7b8a73432a62cf00f676c2728e795c40fcdf89e66a95f030b4184cb17e48c8aa4807d197c863f06bfffa11c6b323f11a6e20cac5f6e72ad2e897e4b7a96418b7c0281", "879d71e620ff2557f2651365301d9262420e31691566d4223b8855664aaf1254289d14bfca7ebbf39b504f42d0376cd1aad563ed7ee8221f46422816976ce7502efc896d0599c17257c6d8f9f5ebcb95b508bb30a7eda4fe536062f77c960237843157ac0bc19ba7c6756bd2ea229a65b2153bac68b1382948519f3e7d22ef30329d8bc354746cd08a6628237b1952443ceea7a78091ae6257d7aad31f863d2f2d462013b2605d880aaf784c2d66e8313fe2b731c2c82ab8338af3d0fd08f6aa6d59412c4123cb9cfdb8bfb2dc17a5c55a4c678c43aed1dc95c1f7bdfb7f0f3c6097115aa298c4d075f6a6d3ef9340256c6877fafd5634180d2359a9db3801d7e61c701ce76a35f0bfdc3f1414e6bdf35db784af2c89c314aa28dd19b1800b7a2321a8e68991a37a2cc883fad41ee37a1eef917b762ecde3f5831f2247ccba0694202b4b9eb8af7cf021e2e80b30de205748670f68d0bf5d403e65500a5a4b2915d44d07c15d2474e6357998cd64da9433af7db07d229b08aa6794274fdfc8fdec178d6b5f003a00b259d8f030aa86ba", "888ec218dba1a7c3c4990ce45c7fa477357dd06a7a8be8fbbcf1943263d13aec16d4b6d00f7a0e108d8095be8eb0921fad1e9803ec676b03ad3c6a66dcae09a2d5082c720dca2621c8a782c5a8086a3b46b8aa2904fed6a15b44f00b91f207bb87f3e3524e0968cd2c4a6848895d6a2ee92a31efc2a1bdbda606f6cc50ac8b6426e74bc27e6673f24c2127e9eba70fde55a56f4f951a4331def1128f7509e0a8e70fbd3dbe7bca65487642a694b8499f50056245b037663aad0e23de7c4146902b7961d1180e336be4f2118044f6b796291dab7f6e1ab86a865b8c97b862167b2bd65e6eb24587fc1c510c65f616b6f6034948f59cfccc31ba9f75c4b2c408facb0eefff89360df17f85f1febaa5f57d40aaadfb78dc7607599b0b329aecb06a8274d3eeef8aa0613426598ae01c3855659ab5782e92ba232c91ea8e38f651551faa1e96cdcfb74cd24fcfbcf1d816715e8bf261ef46747591e3ec2fcb19888db8d904963c7244cb6207cc0c8dc54174", "97b13fea9cf67491b664b37c80a0907288ffdbb779ee2c8497465b733627cf009d0cd1278f48910677e26f61ca022c748e16d89b6f1d0a4febd6d6b69cbedbbccef50c2a31719bdc894525e5fd4cc34e87877cf09be61384443b3f4fe074630fb2ecce0d37cf65af627c956505be0be199693ddf36c3f2c3fecee108543f187885b42846130b0303df0d15ddc4dadab814ae3efe8717df67d2dc513e3dd636fcc243bf095891e00865bfc801280250f2504209c461ba37b33758867604ff2d27e37e6e8aad79387e4ee79f4632ee55bf5666b6e945df415f292b4d42c9ac33a03ae01a263fc5041234d1f4c1e8b5d4ac3fc2493d54f3abd2660699164346666a9662ba7c91a5a2f53a9ea35b716d434b30acd45ab70e69a01554751f4359edee2504ec44b14886ea736ee6c2b3a5a1c35e8d753f0db6fc4e626d43c9335a1dc175f91808d86d66749343704da1624f97", "97ec6738ce0ca121fbeb1df10f000ad876901ef26bbd6cb3b120cb23bfa4ef7a67a72c24e0762be9784dcba9c39ea134850a95b251890a5631fab53331480649ce09bbefcf037dcc941ec541965557b2654bead4d35335399a0d0d2789c240fa81784b424d6da41b4e6edfd69140236d29d8f294cd828f81c64c55b9c5a5680544853b15cc057df2ac27c2e976db4f7071eaaad7a1b9938b6c6d3f50d75e9d4964e29f2d23b92f729c01d42b1815a2aa717a0936724d6820e33fe17bb56b5b92e9ec9a31580d5ded9635f8aa6e06554c20d29e76803b1fadcce8a7237ad5823b3565598bba5707438b639acb31e459bc065e5ca55ef82ddd7fbeda6e590bb7c20e3bba3c582dee8b3d3e4f394c431cce3045441bc56e8e6b5a087591f403226ef383600b143984dfa57680163107f2d4"]; + let expected_proof_with_header = ["a3779ba1642e5f67170ceb5adea51fa8acfd027f3dcd2a7fc9e605b598decb88759d763b92d9c46a94d526f2225946f9aefdf4b998386ecfd4a8e28d05a505198d95b88e4826ba74d431ddfc78ea4dfae2abc54f2635e4839a948aef20119b4e583702ec71b8f03884098410e1e6da8d809952f249a33055be1d9cf1c8bbc5a4571f07889d3e71d1328d8f9f24132d17b92d2cf0c38256099e812808c9eea9933d2cc4739cea3db27e905b26526e9a5535d525a1e9231a5ca07909d37fdf52fe272eff368f7b499462d209f0e1b1fb2654e8dc0ff83ada2c7c941198c209d7196212dd9f63dd752930d651709b8a3088d5c65a06c7e0e5178b3e500b91f950901bc5ad99b55f1165ea236c78f62eb1eb5ab2a24f48532fca252355a85c22a47444cd7d4f4d1376769b83de1c379c54a53fe94494d70d3e25e1bb72aae46431d6333467819b2f4b0cf9589c38f18f1a82036bef0fe59c6a90e71ad41c46f2a35d40571f1aa0eea0620e1bd0356dbe000596cdb5ec9ddc7536c6fd7474de69ebe5", "99a4776dd73ccf50498de7cc7e695a256cc6c5fb21a20420c916456d307388a83e88bcb1b484a9f0ecf77023945a37f58bde543c9a7d0397638a4d4b1b17374758cfba86c3931fbfc64ff78182abd3fad0050e924871d8b2b4630023459b7fa10ad3762ef090df8219aee2274c20e736a09348309126ea3f42b8d08c708a948b304e21b478b84d8ffd656b535977ff97ecc01b5d903b2e4853d481c9b0469711021927be5aa54e00e76f080231d7964b4198363a78174a8b7cf6efd9a2c7587e569c46d5eca5326ee0c29e485a59f957eeeffe2141bb453f54cd877d427fe6835d28ffe58967b9294b8f4e8e95c7ff9649784543c774067f4d3cee9c47bb420e494eb27e7941833474421677e8b0e293547d2d36c4f063f3c2b25d0d93571c465ead3b48d45a8a7ba212a1e1232e34edb547de9177c11334177d41f417dda48921e8e49713a68bd23a81f1666db3e95a10acafad73496e7653c127dee122c53a", "ad8877e9fd7ea4be44fe35bdef4ed58041fd27fae587ef057d698f858e6988f1cac02c06307cfd217d5f27e48a15a8f0b0d8de97e7bc0496e50fd44ee8543dc21f3842cf95ed41faf8a6e20dcef3637cd12be9b38b90249000275aaf448ca3f507bbc9be3f3c2c99d2fb1158b71e8f0a33fe93ac1a426026c214b430a8ca9ef54faa84dd513a0bd4aca944edf60e6612d23188a32d2add17fa72d640648bb8473cdc839b5d7e160aa88bbf1f3ba90f506bd72aa8007ce89301f075c91d5025f86a65a559b6d3ce8c03b2a9c094f470af06a226f7ea9058fb6d3f4cd2d4bc93cd4f12dcda73f5b17535c2259f7198d8c1cebce38f37377d896bb8e56398c1a24915966b9c766950853bfa5ac479e55f1e602605667657a3407ac19c2e5a2eaded04bceaeefa8fdcb02813103a59aa8003959b5b4de59f106134dd6e1afc2b4b37", "8ed8da66c526a7938ebbbc67ec4daae9770fc8779caa898c94db8b77e64f15070585e3470007cd81cdf355b8bcf0f7daa1cd4b9bc13245dd0d1cf5de1636cb12b54cec2bc14c2208613fee2af71abb74c0a32a23f9834fe02e4dc178eb47dbcc1cb89a6ba3998b8b26f03227a87ed5c165b5f03b488fb05a289cbf1c809c27136d5408f152527211a551f0d08c72598ea0cf6c0e1d237a3252e9a5ebfb5b872c6a301f5db2c0807ce00809aa6fdddbd4d5af7f5f567172f4989430936627e0df6d06ef00779574ba608c2400726403b7d05fb697df3602e8ad13925b6f96637e102000b6189f17f8717863ebb8faf0346c097e817b717ee7af5c5883fe0d9a764a9dede5eb1c67f725363d8b037fc4ac12006a170f96a53bec46908c269d73ae", "b41f5ef4b36ff8eec817af2fc357ee0a5078950a5ce14f71c40ea59e296a61c47b1f46ee5dca68b46abf2c0598bca41f852742dd10bd2a089d7c896dd2664a1fd2e083d9707735bb32d7d9bcece666e429b3912e9ecfb0acab6ce8832457e2160749185cd638e47ba09d51e2082832abc8f96b17425a34f12a5617faf6d823034646c6eb95b8363fabfab01f8aac3d173c37bcb340d1ed304905a706051c3a9345ef56d4a0c26da9f9481c3e6a370663a510d1fb5610da43215bd3600755f50f378be17f9f3d46f1a8301547c61b1acd1dedd8f8359a5f920923bdb85cb266c82263e50730725d4ba654319de0addf7172c63fac526109a1d8683b520109ef83", "b26f7323843258e16b7d9aba34a0438b059fe384d83da5c8f0c41ad65080cffae1585abb87d6bbc4751f04fe89f78f9695c5ac69b0b3a7a9658a72d902a19668d5646eaede9552ffefbaf5f863df25ce90f885f8f586d583a7c64b8f35d6c6a16b099ed40bc53981670bfdae699f8c4f5e20908f1380e628c739ca78cb453403688596ea65fa7269a793867b06d370e8395e8ff127a96765a476ea436c426a3e4279948023764170b82c5ac8b325dddb31de89e3582a619f3b4c95d1e2576b3424555930d32f7e5454ce3be49544d953e96966d6148a1937311498fe4d9e82ee"]; + let expected_proof_no_header = ["a9ae12f3ab5270f49305e39cfc3d905cf0e78463c26369ba58699af8badda2c504f0e3778bc8d8b290cad6c0de8b94b081ac7b62ea07f9d970728686de639243f3d08abb6ddc12f1ce6e29b6d8888deac97b155d2a33deb7d3b3bbdf6cff85de247513c8d51cfba6f32c4033ffc1dc73383b1698a3044a205fbd8e45511578ca5591c973e1ebee0c9c914aab71f5911df9c94aa9f3b5d330d503c2bb6dbb2070681c56c1f7c96239c18b08606082a8cc33807a21e39558fd69036f49db9b089170b65b36d66a2d5aaef6a943416e90020d83c4a5226320e54b20bd574aca544c48e99ec5b2402dc147c37d27498e68bd5fd53a227e0ad8e0bd673ad02ad461df6a2fab31573270f0bbb896495f20c89bc5b4b4936772eb62f8d69c59cd35159013db6277bd9103bd1edd21faa379f0c3f7ce36f02ab1a6cdb1c4d2d277e3ce0e2238a077cbb7b463369cf244270210b5cd0e7c510abeedbfa0696adcdda613914a20f2c8962cfa2f70b6e1a8b9daea57c0f4917038bc767382225a316a1dcf37", "870248548f656859bc02f640b842b98d8ac4881f4914da6826fc9c131853dd27d96c1d3e419f62cd855146e2a472f0f1856c8d79293803dccde1dd29a28c27d0c3e72d50e9dcafb0931f421b00e72412e6dea7a6490e7779b931e4523b17c7af62e58db44af4e554759e19051c0d2034e9eca97ea14f9542111574813c32d0875eb18cf9258932844ba18c1ac49f06c663aa0b298e9908b1c88011bd80723ff41044372921c472e747dc6e8308d5f9d769de99895bf7c1b92419d1bf173542c92756bc267a63af2e9245de973a920bc9e74e3451f07070bad764490ae750ba9c033a3dd84a94f079f4d4746a6048c39e6106a1de8c5ec97c56dd52edcfe4152b59d84f4688c64242f1e749ddd67d677fcff952c92fb7fc267ce855a59d73d7b4464e4cd650277976addeb6563fd0cac4eabbe04d347de92c40d0679f8167924b4bbf4f9be124c36ad426daefe986d0168ee30ac3d8c6d5938907e5374cdccf76", "a1cc5aba2eb49302dbfc82a11c6ef56355eb0f156e9ebc96d7d03a4b84b65405df53e4f7da35edcefb706b57f9e151aea48433fa6a69d87e49742c4450beb7c9c0731a2793f99c698272bc9d3bf1ebe480fe35a930b34e42d88b8d41822b462e5046d7c632cb34b5760b2097a7c13f794355879fe153ad86b33d3b6d5576bd8e1c95728345f0d9ed7da21717e2ed64ba957b434801e50c309f78c93d8eb47e5763f9d3183aad67b13f3cc2d59a5c2aeb7e7466ecf17fa3791567f49ae0238b1b39163b4f9b261edaeec57d7b48facba3bd04ea8fd5bc66cc6b9eb6eef1025f29246e59fe0624b959c492a4d63f57612a52d22f8cf4956050a521f53e42782e8663eb2b034284f47f6d84c8b62faaf40f9ecb1c9506f72d23cc2f0358821954eb73c8d36cff71d44a1b798899428f5d44da996b75ebf5e12e2af8a56ddab5b808", "a1be14a70212c60e079e821eedfe3bd6b9c29c850fa5b9dc3b722defc458f42c32ff43a2d4f53724106ec2cc8083f86a94ebee35a678ab5ad1406edc4235e2c007ab9a96036c3055b7a0334b0b43eb079e487b0f3045bcb05ad53945cda0f3cd06764f07f3cadfd265956b2eeae6f02a9e733135ccad89941c586bbdc00a3b3041559de14907f1c04daeb3e95bf74f9941fd64e7555f55f59bb49965bfc3d63d3a1820afae36bf058094d3b5e449bbb0e10700072e096eab3ddcaa558c51edf27191d2c6eb2379f06694b5ba6925c2bce5f66919228ab9608e9f1aa87669250b6df2080b26a7e3ce5c700195a57e77ef896f8cb633976edbf42284df5e1fdf7f51d5369603f05bb1a33adad38194162e5a891419c8116bbcf28ae9713583b7a8", "a285d16dae4ccc80b1490146f724314fd3d82e4d29d033e77ad61276ec0f51e727d27ae95f862afdc5a9ae26c28b394391fd36d4b2844fd6a2d4bb198ea9ba4c7e37a94316505fab43d97d6a688025c18e654d3f1b5152dd92971b57235dc5071f512d67c56792d7fa7917f4a38c4c0cdbe39258d037b0679f1c60d43751d4d94f40fcc6df8c9831d03a8312a07aeffa9ff2f740cd7add7e3c07c90a9433bfdc2e3faf69e2de5a3405a3c7e51c03f42c611a9dcaad787e101e1df7b84e4007022071f9b43c1adfabf9e4a943b9a6e772cfe221298b217045500d79bdb36da7df6e34be5a4d720d20a2e9ef6d7faf8be29b58aa4c3b10998f7862dfd32bc26f2e", "8436f9e717626a0619f46d76167cc8adff8d2fe40b8e79a80a4a1cf2be0645b13ff055eec651bad2904fe52bf05dd5f1a0c79a3c3c826468e904ffdbced0618e14839a04dc98f4ca00a3d5a8460fe0ada8e193628dd2fc0761d3e5492b40284a314449492ff30244191bed4f2e526bb3258efa164d43cb683a27d10b6f2ae041035811a813d2a1962a7bf6c69f69eaebd184d0a74a057cb6f16795a731c220d92838461b79bbb18e527e94b163af25f8737208df7d3a9ed8477cbaae742d8bd5087ceb1c2aeb93d383401b736ef9606fa45dab3ba5aab9216c8e293afe707c6f"]; let mut proof_messages: Vec = messages.iter().map(|a| ProofMessage::Hidden(*a)).collect(); @@ -390,7 +393,8 @@ fn no_presentation_header_proof() { Some(TEST_HEADER), None, &mut generators, - &revealed_messages + &revealed_messages, + None ) .unwrap()); @@ -422,7 +426,8 @@ fn no_presentation_header_proof() { None::<&[u8]>, None, &mut generators, - &revealed_messages + &revealed_messages, + None ) .unwrap()); @@ -515,7 +520,8 @@ fn proof_gen_verify_valid_cases() { header, ph, &mut generators, - &revealed_messages + &revealed_messages, + None ) .unwrap_or_else(|_| panic!( "proof verification failed - {failure_debug_message}" @@ -544,7 +550,8 @@ fn proof_gen_verify_valid_cases() { header, ph, &mut generators, - &revealed_messages + &revealed_messages, + None ) .unwrap_or_else(|_| panic!( "proof verification failed - {failure_debug_message}, \ @@ -613,7 +620,8 @@ fn proof_gen_verify_all_revealed_shuffled_indices() { header, ph, &mut generators, - &revealed_messages_same_but_shuffled_indices + &revealed_messages_same_but_shuffled_indices, + None ) .expect("proof-verification should not fail")); } @@ -660,7 +668,8 @@ fn proof_gen_with_invalid_public_key() { header, ph, &mut generators, - &revealed_messages + &revealed_messages, + None ) .unwrap_or_else(|_| panic!("proof verification failed "))); @@ -672,7 +681,8 @@ fn proof_gen_with_invalid_public_key() { header, ph, &mut generators, - &revealed_messages + &revealed_messages, + None ), Err(Error::InvalidPublicKey) ); @@ -726,7 +736,8 @@ fn proof_verify_invalid_parameters() { header, ph, &mut generators, - &revealed_messages + &revealed_messages, + None ), Err(error), "proof-verification should return error - {}", @@ -760,7 +771,8 @@ fn verify_proof_helper( header, ph, &mut generators, - &revealed_messages + &revealed_messages, + None ) .unwrap_or_else(|_| panic!( "proof-verification should not return error - {}", @@ -792,20 +804,16 @@ fn verify_tampered_parameters() { fn to_octets() { let a_bar = G1Projective::random(&mut OsRng); let b_bar = G1Projective::random(&mut OsRng); - let d = G1Projective::random(&mut OsRng); let c = Challenge(Scalar::random(&mut OsRng)); - let e_hat = FiatShamirProof(Scalar::random(&mut OsRng)); - let r1_hat = FiatShamirProof(Scalar::random(&mut OsRng)); - let r3_hat = FiatShamirProof(Scalar::random(&mut OsRng)); + let r2_hat = FiatShamirProof(Scalar::random(&mut OsRng)); + let z_hat = FiatShamirProof(Scalar::random(&mut OsRng)); let m_hat_list = vec![FiatShamirProof(Scalar::random(&mut OsRng)); 2]; let proof = Proof { A_bar: a_bar, B_bar: b_bar, - D: d, - e_hat, - r1_hat, - r3_hat, + r2_hat, + z_hat, m_hat_list: m_hat_list.clone(), c, }; @@ -814,10 +822,8 @@ fn to_octets() { let expected_proof_octets = [ a_bar.to_affine().to_compressed().as_ref(), b_bar.to_affine().to_compressed().as_ref(), - d.to_affine().to_compressed().as_ref(), - e_hat.0.to_bytes_be().as_ref(), - r1_hat.0.to_bytes_be().as_ref(), - r3_hat.0.to_bytes_be().as_ref(), + r2_hat.0.to_bytes_be().as_ref(), + z_hat.0.to_bytes_be().as_ref(), m_hat_list[0].0.to_bytes_be().as_ref(), m_hat_list[1].0.to_bytes_be().as_ref(), c.0.to_bytes_be().as_ref(), @@ -845,19 +851,15 @@ fn from_octets_invalid_parameters() { fn to_from_octets() { let a_bar = G1Projective::random(&mut OsRng); let b_bar = G1Projective::random(&mut OsRng); - let d = G1Projective::random(&mut OsRng); let c = Challenge(Scalar::random(&mut OsRng)); - let e_hat = FiatShamirProof(Scalar::random(&mut OsRng)); - let r1_hat = FiatShamirProof(Scalar::random(&mut OsRng)); - let r3_hat = FiatShamirProof(Scalar::random(&mut OsRng)); + let r2_hat = FiatShamirProof(Scalar::random(&mut OsRng)); + let z_hat = FiatShamirProof(Scalar::random(&mut OsRng)); let m_hat_list = vec![FiatShamirProof(Scalar::random(&mut OsRng)); 2]; let proof = Proof { A_bar: a_bar, B_bar: b_bar, - D: d, - e_hat, - r1_hat, - r3_hat, + r2_hat, + z_hat, m_hat_list, c, }; diff --git a/src/tests/bbs/test_data/proof.rs b/src/tests/bbs/test_data/proof.rs index 866c6e2d..86d8b908 100644 --- a/src/tests/bbs/test_data/proof.rs +++ b/src/tests/bbs/test_data/proof.rs @@ -910,7 +910,7 @@ pub(crate) fn test_data_verify_tampered_proof() -> [( BTreeMap, ), &'static str, -); 10] { +); 8] { const NUM_MESSAGES: usize = 5; let key_pair = get_random_test_key_pair(); let header = Some(TEST_HEADER.as_ref()); @@ -950,7 +950,8 @@ pub(crate) fn test_data_verify_tampered_proof() -> [( header, ph, &mut generators, - &revealed_messages + &revealed_messages, + None ) .expect("proof verification failed"), true @@ -987,21 +988,6 @@ pub(crate) fn test_data_verify_tampered_proof() -> [( ), "B_bar is tampered", ), - ( - ( - Proof { - D: G1Projective::random(&mut OsRng), - m_hat_list: proof.m_hat_list.clone(), - ..proof - }, - key_pair.public_key, - header, - ph, - generators.clone(), - revealed_messages.clone(), - ), - "D is tampered", - ), ( ( Proof { @@ -1020,7 +1006,7 @@ pub(crate) fn test_data_verify_tampered_proof() -> [( ( ( Proof { - e_hat: FiatShamirProof(Scalar::random(&mut OsRng)), + r2_hat: FiatShamirProof(Scalar::random(&mut OsRng)), m_hat_list: proof.m_hat_list.clone(), ..proof }, @@ -1030,12 +1016,12 @@ pub(crate) fn test_data_verify_tampered_proof() -> [( generators.clone(), revealed_messages.clone(), ), - "e_hat is tampered", + "r2^ is tampered", ), ( ( Proof { - r1_hat: FiatShamirProof(Scalar::random(&mut OsRng)), + z_hat: FiatShamirProof(Scalar::random(&mut OsRng)), m_hat_list: proof.m_hat_list.clone(), ..proof }, @@ -1045,22 +1031,7 @@ pub(crate) fn test_data_verify_tampered_proof() -> [( generators.clone(), revealed_messages.clone(), ), - "r1^ is tampered", - ), - ( - ( - Proof { - r3_hat: FiatShamirProof(Scalar::random(&mut OsRng)), - m_hat_list: proof.m_hat_list.clone(), - ..proof - }, - key_pair.public_key, - header, - ph, - generators.clone(), - revealed_messages.clone(), - ), - "r3^ is tampered", + "z^ is tampered", ), ( ( @@ -1178,7 +1149,8 @@ pub(crate) fn test_data_verify_tampered_parameters() -> [( header, ph, &mut generators, - &no_revealed_messages + &no_revealed_messages, + None ) .expect("proof verification failed"), true @@ -1216,7 +1188,8 @@ pub(crate) fn test_data_verify_tampered_parameters() -> [( None, ph, &mut generators, - &revealed_messages + &revealed_messages, + None ) .expect("proof verification failed"), true @@ -1244,7 +1217,8 @@ pub(crate) fn test_data_verify_tampered_parameters() -> [( header, None, &mut generators, - &revealed_messages + &revealed_messages, + None ) .expect("proof verification failed"), true @@ -1273,7 +1247,8 @@ pub(crate) fn test_data_verify_tampered_parameters() -> [( None, None, &mut generators, - &revealed_messages + &revealed_messages, + None ) .expect("proof verification failed"), true @@ -1322,7 +1297,8 @@ pub(crate) fn test_data_verify_tampered_parameters() -> [( header, ph, &mut generators, - &all_revealed_messages + &all_revealed_messages, + None ) .expect("proof verification failed"), true @@ -1491,14 +1467,12 @@ pub(crate) fn test_data_verify_tampered_parameters() -> [( ] } pub(crate) fn test_data_from_octets_invalid_parameters( -) -> [(Vec, Error, &'static str); 24] { +) -> [(Vec, Error, &'static str); 20] { let a_bar = G1Projective::random(&mut OsRng).to_affine().to_compressed(); let b_bar = G1Projective::random(&mut OsRng).to_affine().to_compressed(); - let d = G1Projective::random(&mut OsRng).to_affine().to_compressed(); let c = Scalar::random(&mut OsRng).to_bytes_be(); - let e_hat = Scalar::random(&mut OsRng).to_bytes_be(); - let r1_hat = Scalar::random(&mut OsRng).to_bytes_be(); - let r3_hat = Scalar::random(&mut OsRng).to_bytes_be(); + let r2_hat = Scalar::random(&mut OsRng).to_bytes_be(); + let z_hat = Scalar::random(&mut OsRng).to_bytes_be(); let m_hat_list = vec![Scalar::random(&mut OsRng).to_bytes_be(); 2]; let g1_identity = G1Projective::identity().to_affine().to_compressed(); @@ -1506,7 +1480,7 @@ pub(crate) fn test_data_from_octets_invalid_parameters( let scalar_greater_than_modulus = [0xFF; OCTET_SCALAR_LENGTH]; const PROOF_LEN_FLOOR: usize = - OCTET_POINT_G1_LENGTH * 3 + OCTET_SCALAR_LENGTH * 4; + OCTET_POINT_G1_LENGTH * 2 + OCTET_SCALAR_LENGTH * 3; [ ( @@ -1575,10 +1549,8 @@ pub(crate) fn test_data_from_octets_invalid_parameters( [ [0x0; OCTET_POINT_G1_LENGTH].as_ref(), b_bar.as_ref(), - d.as_ref(), - e_hat.as_ref(), - r1_hat.as_ref(), - r3_hat.as_ref(), + r2_hat.as_ref(), + z_hat.as_ref(), m_hat_list[0].as_ref(), m_hat_list[1].as_ref(), c.as_ref(), @@ -1591,10 +1563,8 @@ pub(crate) fn test_data_from_octets_invalid_parameters( [ g1_identity.as_ref(), b_bar.as_ref(), - d.as_ref(), - e_hat.as_ref(), - r1_hat.as_ref(), - r3_hat.as_ref(), + r2_hat.as_ref(), + z_hat.as_ref(), m_hat_list[0].as_ref(), m_hat_list[1].as_ref(), c.as_ref(), @@ -1607,10 +1577,8 @@ pub(crate) fn test_data_from_octets_invalid_parameters( [ a_bar.as_ref(), [0x0; OCTET_POINT_G1_LENGTH].as_ref(), - d.as_ref(), - e_hat.as_ref(), - r1_hat.as_ref(), - r3_hat.as_ref(), + r2_hat.as_ref(), + z_hat.as_ref(), m_hat_list[0].as_ref(), m_hat_list[1].as_ref(), c.as_ref(), @@ -1623,10 +1591,8 @@ pub(crate) fn test_data_from_octets_invalid_parameters( [ a_bar.as_ref(), g1_identity.as_ref(), - d.as_ref(), - e_hat.as_ref(), - r1_hat.as_ref(), - r3_hat.as_ref(), + r2_hat.as_ref(), + z_hat.as_ref(), m_hat_list[0].as_ref(), m_hat_list[1].as_ref(), c.as_ref(), @@ -1639,10 +1605,8 @@ pub(crate) fn test_data_from_octets_invalid_parameters( [ a_bar.as_ref(), b_bar.as_ref(), - d.as_ref(), - e_hat.as_ref(), - r1_hat.as_ref(), - r3_hat.as_ref(), + r2_hat.as_ref(), + z_hat.as_ref(), m_hat_list[0].as_ref(), m_hat_list[1].as_ref(), &vec![0x0; OCTET_SCALAR_LENGTH], @@ -1655,10 +1619,8 @@ pub(crate) fn test_data_from_octets_invalid_parameters( [ a_bar.as_ref(), b_bar.as_ref(), - d.as_ref(), - e_hat.as_ref(), - r1_hat.as_ref(), - r3_hat.as_ref(), + r2_hat.as_ref(), + z_hat.as_ref(), m_hat_list[0].as_ref(), m_hat_list[1].as_ref(), scalar_greater_than_modulus.as_ref(), @@ -1673,93 +1635,22 @@ pub(crate) fn test_data_from_octets_invalid_parameters( [ a_bar.as_ref(), b_bar.as_ref(), - [0x0; OCTET_POINT_G1_LENGTH].as_ref(), - e_hat.as_ref(), - r1_hat.as_ref(), - r3_hat.as_ref(), - m_hat_list[0].as_ref(), - m_hat_list[1].as_ref(), - c.as_ref(), - ] - .concat(), - Error::BadEncoding, - "raw buffer for `D` is all zeroes", - ), - ( - [ - a_bar.as_ref(), - b_bar.as_ref(), - g1_identity.as_ref(), - e_hat.as_ref(), - r1_hat.as_ref(), - r3_hat.as_ref(), - m_hat_list[0].as_ref(), - m_hat_list[1].as_ref(), - c.as_ref(), - ] - .concat(), - Error::PointIsIdentity, - "raw buffer for `D` is identity", - ), - ( - [ - a_bar.as_ref(), - b_bar.as_ref(), - d.as_ref(), - &vec![0x0; OCTET_SCALAR_LENGTH], - r1_hat.as_ref(), - r3_hat.as_ref(), - m_hat_list[0].as_ref(), - m_hat_list[1].as_ref(), - c.as_ref(), - ] - .concat(), - Error::UnexpectedZeroValue, - "raw buffer for `e^` is all zeroes", - ), - ( - [ - a_bar.as_ref(), - b_bar.as_ref(), - d.as_ref(), - scalar_greater_than_modulus.as_ref(), - r1_hat.as_ref(), - r3_hat.as_ref(), - m_hat_list[0].as_ref(), - m_hat_list[1].as_ref(), - c.as_ref(), - ] - .concat(), - Error::MalformedProof { - cause: "failure while deserializing a `Scalar` value" - .to_owned(), - }, - "raw buffer value for `e^` is larger than modulus", - ), - ( - [ - a_bar.as_ref(), - b_bar.as_ref(), - d.as_ref(), - e_hat.as_ref(), &vec![0x0; OCTET_SCALAR_LENGTH], - r3_hat.as_ref(), + z_hat.as_ref(), m_hat_list[0].as_ref(), m_hat_list[1].as_ref(), c.as_ref(), ] .concat(), Error::UnexpectedZeroValue, - "raw buffer for `r1^` is all zeroes", + "raw buffer for `r2^` is all zeroes", ), ( [ a_bar.as_ref(), b_bar.as_ref(), - d.as_ref(), - e_hat.as_ref(), scalar_greater_than_modulus.as_ref(), - r3_hat.as_ref(), + z_hat.as_ref(), m_hat_list[0].as_ref(), m_hat_list[1].as_ref(), c.as_ref(), @@ -1769,15 +1660,13 @@ pub(crate) fn test_data_from_octets_invalid_parameters( cause: "failure while deserializing a `Scalar` value" .to_owned(), }, - "raw buffer value for `r1^` is larger than modulus", + "raw buffer value for `r2^` is larger than modulus", ), ( [ a_bar.as_ref(), b_bar.as_ref(), - d.as_ref(), - e_hat.as_ref(), - r1_hat.as_ref(), + r2_hat.as_ref(), &vec![0x0; OCTET_SCALAR_LENGTH], m_hat_list[0].as_ref(), m_hat_list[1].as_ref(), @@ -1785,15 +1674,13 @@ pub(crate) fn test_data_from_octets_invalid_parameters( ] .concat(), Error::UnexpectedZeroValue, - "raw buffer for `r3^` is all zeroes", + "raw buffer for `z^` is all zeroes", ), ( [ a_bar.as_ref(), b_bar.as_ref(), - d.as_ref(), - e_hat.as_ref(), - r1_hat.as_ref(), + r2_hat.as_ref(), scalar_greater_than_modulus.as_ref(), m_hat_list[0].as_ref(), m_hat_list[1].as_ref(), @@ -1804,16 +1691,14 @@ pub(crate) fn test_data_from_octets_invalid_parameters( cause: "failure while deserializing a `Scalar` value" .to_owned(), }, - "raw buffer value for `r3^` is larger than modulus", + "raw buffer value for `z^` is larger than modulus", ), ( [ a_bar.as_ref(), b_bar.as_ref(), - d.as_ref(), - e_hat.as_ref(), - r1_hat.as_ref(), - r3_hat.as_ref(), + r2_hat.as_ref(), + z_hat.as_ref(), &vec![0x0; OCTET_SCALAR_LENGTH], m_hat_list[1].as_ref(), c.as_ref(), @@ -1826,10 +1711,8 @@ pub(crate) fn test_data_from_octets_invalid_parameters( [ a_bar.as_ref(), b_bar.as_ref(), - d.as_ref(), - e_hat.as_ref(), - r1_hat.as_ref(), - r3_hat.as_ref(), + r2_hat.as_ref(), + z_hat.as_ref(), scalar_greater_than_modulus.as_ref(), m_hat_list[1].as_ref(), c.as_ref(), @@ -1845,10 +1728,8 @@ pub(crate) fn test_data_from_octets_invalid_parameters( [ a_bar.as_ref(), b_bar.as_ref(), - d.as_ref(), - e_hat.as_ref(), - r1_hat.as_ref(), - r3_hat.as_ref(), + r2_hat.as_ref(), + z_hat.as_ref(), m_hat_list[0].as_ref(), &vec![0x0; OCTET_SCALAR_LENGTH], c.as_ref(), @@ -1861,10 +1742,8 @@ pub(crate) fn test_data_from_octets_invalid_parameters( [ a_bar.as_ref(), b_bar.as_ref(), - d.as_ref(), - e_hat.as_ref(), - r1_hat.as_ref(), - r3_hat.as_ref(), + r2_hat.as_ref(), + z_hat.as_ref(), m_hat_list[0].as_ref(), scalar_greater_than_modulus.as_ref(), c.as_ref(), diff --git a/tests/bbs_api.rs b/tests/bbs_api.rs index de598059..e70d9216 100644 --- a/tests/bbs_api.rs +++ b/tests/bbs_api.rs @@ -3,20 +3,20 @@ use blstrs::hash_to_curve::{ExpandMsgXmd, ExpandMsgXof}; use pairing_crypto::{ bbs::{ ciphersuites::{ - bls12_381::{suite_constants::BBS_BLS12381G1_EXPAND_LEN, KeyPair}, + bls12_381::{KeyPair, BBS_BLS12381G1_EXPAND_LEN}, bls12_381_g1_sha_256::{ ciphersuite_id as bls12_381_g1_sha_256_ciphersuite_id, proof_gen as bls12_381_g1_sha_256_proof_gen, + proof_gen_with_rng as bls12_381_g1_sha_256_proof_gen_with_rng, proof_verify as bls12_381_g1_sha_256_proof_verify, - proof_with_rng_and_trace as bls12_381_g1_sha_256_proof_gen_with_rng, sign as bls12_381_g1_sha_256_sign, verify as bls12_381_g1_sha_256_verify, }, bls12_381_g1_shake_256::{ ciphersuite_id as bls12_381_g1_shake_256_ciphersuite_id, proof_gen as bls12_381_g1_shake_256_proof_gen, + proof_gen_with_rng as bls12_381_g1_shake_256_proof_gen_with_rng, proof_verify as bls12_381_g1_shake_256_proof_verify, - proof_with_rng_and_trace as bls12_381_g1_shake_256_proof_gen_with_rng, sign as bls12_381_g1_shake_256_sign, verify as bls12_381_g1_shake_256_verify, }, @@ -56,23 +56,23 @@ const TEST_CLAIMS: [&[u8]; 6] = [ const TEST_PRESENTATION_HEADER: &[u8; 24] = b"test-presentation-header"; const EXPECTED_SIGNATURES_SHAKE_256: [&str; 7] = [ - "b46f008c4f94f6476049f3c7723c5c806e20ae8ffa5eb2a39b614ac1d6224379db7ef8134d661462fba5568e392bc49c393e2d810f5542c2726328b198f200068636fe181c4fad8b0d356d68b13f58ed", - "96684adf52b173cd94128f1e813edce620c2a5ab4522a74834cdf69886482c45fd1802514961ee93d6692814bfbce02f7322ff0e8bc125261fdf88cafbeca26c41b91e8442c82ed5471043af825586ba", - "80e959398370ad309a32f9267c50bf66452627e7e28fac211863c85a09d20a4674eee215cf6535c7366fe124699dc39e661f909ddf0d3f6423fb42b580523cc00882708ef1f61ad7437c643351bab0e0", - "91929bc91a8fe66767a070e319fe5dc2ee3f09ea3cd65f7b60c78f77eaa689e8630147b2eeb0c534631265f064caed90618cd86061ddcd7432254fa786c733d042131cc36c845f9a2622f22af41e2893", - "b72d23538f6fe0a5512cb8a647b71fcb2fb50322cf046676955c3cab81ad9a435a5d1d80c64c0e96597957d5a9368d9c5ca42073a13a0401370fca42e0144721f1f5f11512b72826c905c2fa4d1a8273", - "8ec6f78bb5e67b5567025003bd307599b6bdb64fafbf48e17bcddbedf3e64a40a2ade6e23f93139df760c3adb35e05ec0e9b579034c75d33107d538469e90b4b4dd776f40a866c9dd5adc6b43fcbef9a", - "914f155019c7735aa6ffde57b45e458ec753427043e16729e250e9162df341d8a3438edad0111268bd76f0c3ad5ca59c29be3a5aa0ab12b1bb9387cc456f8284de5b678f6163b98957282a8435c092f1", + "925b257838bbc46d0927538e1609867dd563550e9daade709ba0b1b4642df2a1da46c481de8c44184163bd164cade2c75911e31df92a04b8a825b10275109af76f6d28fed3e8c40a7d601edf870d7899", + "a6324bccce90bd0871d5a8f56bc32ab54fec4f58a7f36cad92d2fd8d9291b0ab621f9a636fbc835b1aa2fdb6ad7c9cc25d01fdec7e0307d844cf9d70daf0a2a326eec716660a96536bf44b6036a6204e", + "b58586b4ce4114cbe5b2de5bc49d85d4488744ba6968e95db902c7b4489a42b0217dc3b6eabb4846f1a7382bada4778f6f18f64ddf617916a41a84ef855061a6d730b0a3effff64c3cd05ceb166c6a4e", + "b97bca812bfe7e953fb59c3fe02cf9045d6c0e5c5ae411b83934a0f512fed68695db5bc5df8f48ef87cb13179fcca2ce239dee06d49fee691ef1aeba52992a02ed506ec0fcb404a3096d1a143e1df0b4", + "804317f0ff0ede4a80125973f6a6d43fdb8a90f3f1544c64be977ac2ba7ab11881198a9d281efca1ca6c7b3ec279873f6c27a34d4a9ddc35ba4d71274a6050948bfab65d967fca4f5406774a045b4088", + "af9a76d7cc2ccd9687ff7bcfd49e5147a81cab7b66ca62f6ac294af3dfab30eab610f98b1b3e62932940797ba520ce9c51517f7c75fc928a0a2c3be28b292a2f110c6baf80b025793669caa31667fac4", + "8df37099068494eaeadae4fd782cf4aa9cc3edc4481f984ee191c9f22e42670d1235f823e8dd84f13d06e88bc8290df24315e390ec9b13d686f149d798c67622083a3ef2c3aab4c84783a7fee591e47e", ]; const EXPECTED_SIGNATURES_SHA_256: [&str; 7] = [ - "b5961c3b123774166f317d49b68e901d15f9029ae958708cb7c4e59cde706b07cda8f8283e0007ea1061c93579b93deb56a26a3c9757d1365d4648af08cbe2ec58c39e6439f3d810a7dfef56d80fe2e2", - "9122c6594ab3e673b1475bc03d4560bc021659dca908571a128eb2da612d2e7032d5169db4af9bc807bba3a3f3a23e474e27d10bf239aaa8c3c887787c462e926b048f5affe8e0c6c45c375fd6ce0f4a", - "9764ebea8428e3b4ac5c0b6bacdf1cf9e11117799db174b399b9c6d116a290935923fb736a20fa923c45d656789152fd56facc61a33cc0700370be1b3298b3b4fa7d9c9e8d525281d9dc6a426ba801f3", - "8b1ad7c292bef966259ae4a5250261f15c8b8b9801d125eac05980bc1625e43f6855673cf2484e7e8da7d7be0406ffee2842a68aadba2d5aaa62e9cc472eeab29ad88f25b3c3f4292131e63d71d85369", - "ac0f1414ad3a0e4785bd51f60f685bc5cd179b06dcc6bb9a79693ab055e53c39c5420f27f5375f80f8b13c3a3e929026422a2aaa982edfa79f23094ad02b4da62f7e88ded993ddb37bccb04dff985aaa", - "b2fd947fddac761e48019c78dd1feced1a1ac4dd96988cc667cdab17150eead1ee7ed46e8b847b460ecfebc9ab7fc16050f3d3141238bc3c88ae6ddadaebb1e026297b486d4d67009cab9ce582d2e8fc", - "967c5059742945a99258c27658c9d0ffbd57337e211cae6a114a908eb192af4eb973764f26b0b052e7f9db745ddf86cf16f80772aa37659a4d792fd14938215afd2ca7d5eaba1af1e47b679f6743bd64", + "b5947ca9b9130d615eff12404b003de2517030eff82367c0614cb158cfa21b810b88ad9601a48b502042600d3110fc04279cb622cf7992d294d416aa26b433f9e0978fb532537385fc3cc4c4e68e487a", + "8717c023ddbe6a6505608854da26fe5c84a679356dd054c92b20e2c5de892fc7e65aea1b6dcf2a1e056a4d2c16d1144204272a16601bb9e0b9a3c2d6c4c8a37ad6c9816115ee6b11e13941a834d53859", + "b11e5bd9eb8bdb7b79ccfe753de91245fd7b1eb8fbb84499de07d4a4a0de8d4e19cc768c6300a70f411d31d0b5b973c52c4ea1b05994f6c004ca80f5b8c71bf5a7e09093c9a0aeaaa7d2d5380b410e42", + "8e1c9c70c3e5abcb58ce169fd39114ea4e5d09db01fc874ef5e9a38c32aec70671157cc2e1bce8c54d6e1dde34fe50094170b4057104603bb1ca3bd443015d7d13e580e0ea3cf449f038ee87c35b5128", + "b5f960170b87065ae3080d8180ef203bcba1558cdc3b7158b0e692d1dc25ff9b18c38c92eea46d811eb5fc387333e80b20f2fe33f194a747fb63505f1a489f9eadd29bc65176c96b1436ae24184737d5", + "b957bd6369fbfb4833c736ef3ca067fcb1fe168cfe952766fa296486e8ecfc972b0b134c1790b040b91092ca94edfb380666b0829b92c80038f5e8506dd7014402618a534e85b0851a96eb0001cd8ea4", + "82a2c8b379e4e3e82a814f83066e52df3c724ae8ddd7fdba924e2bf24f25a0dd11c0f670171466ecb9241d1759c1244c4296f609f1774a6dec4623cb70c56e3870e8264aec6a846838bf18b40939c24a", ]; const TEST_HEADER: &[u8; 16] = b"some_app_context"; @@ -137,24 +137,24 @@ fn sign_verify_e2e_nominal() { // Expected shake256 proof fixtures using MockRng. const EXPECTED_PROOFS_SHAKE256: [[&str; 6]; 7] = [ - ["8cccf33b36658ec11e44ff5165a0c3424d9fa2de090e4856ac2c56e6d87b27d69da74838747361110138d3e0f56101b8b0837330e0da71a8d99452bd4edf072adcbb67e2bc8e7ab568f11a78a429cc8d78c26ad17c6d1acbccbd2d5a9cd5ad47b5f4b4baac6424b757826cf8d5fc107a254c4967cb421710fe91a3eb22aae455c3eb3f81444e48339863b55cee8e60ba39be38d486c7bc9503f04c3904ac2955e03c6ebc6930d3dd56290024b88b612d5e6c6014bfa6d514533e2b88e5dc4a9c113d52a7cbeb18073d5e34435214f7714c9ead8127195acf2e4c0b07873189605faaaafa663ec0d1eca3c06ff6d34e5a62823eea06cd77d1ea77f048f412e780745b745cd5cec6a12e17a37a5ef00eb9670d08d5903028b4784c363cc42ff4ba7c3252e935aa95047b8c0885df0016be7273a4ca13bb0147f79955c177ebd025a0a0c3145a2f47da1ede54c6da6aa453324d482ef2f1fddc12836b7f17e9e06621ada511501e5f655845c5405ba3e1da534a3240683a47038de579418cbd01b1c3aa388c4ab3a677395aacacf05c86f03dbc90d8de5f4b8efe69cdf2dce08b53ae7d59a27ffee1bdee1f8b3bf9c74734654bba894aac195f91138dd29b876fae557a83f539ce2c79d5c786f4e3d25c6b", "9602be0211f0df7dc8d9cc6b89fcfe1b8d1e277b1874375b7c999dd476b63e1ded816d146bc5e34ed43a9be9d29727aa88fc54dfaff4c0b19461923b0c01452637829d36496e141a55e67823b04ea9cbfd87c7e714f5802a5f37e6bd080e32e1972786b2d5bdbe41a7bfa9fe95e1240e5780cd30ef29ead1151c99f96520bce4a1fb14aa47cfedf45ec6f79f50da3cc7344c31bf9343969af46b42a6bf594fa841447bad69f2f565a31f64fffe69a019560fbf4beb29d65b6435ee3d335fe728e0460b7e980e3757316e90174689484634340ebaf7f139208608ab2666d52832c6fa712f73fedaf55bd3bf824ac1cf14105e75877e88bab909560378d66ab2ce1f89156266c3296c84b6f7ae4c275dc13647b9b7c82b53dc0acdb066f83320209820488052b74dfa0b89d87aca5fde8852fcf66f93b3a1963f8bf17766753b7ade0c6f77454424eaf37026f8aaa9c2cb15efca0f0a299b2ea8ef3b8a519ab20a6a15505df83ddf44ebada9643eeaf88152815f885e0979a4ee105fccfead33851471d8daa2159b48a7db068e5495fa6d6c73b8f0249f51cf3d1ab9fa6a36816be12216d6e9c2464211f0eccf0785537f", "968076bfd9912e2b9003e06b1a9bc7982313efa8c3347ecebee440a459fc8d6bda8acbd346dd75141670ecf85a9e652e830556f1842a1f908e40497b5568768eb2e156de400d5f99b8866bbd1e5824c627cc48c37981028fe009b44ab6e3b92194e92a09bbc2587269d8ea468199f9a3f5d466e689e543a444df28a84f154d2e371017f8e9aa7b2307868c3c725ed28b6107b0c6b8ef151b27583ec548b10ebd00b9ef21c59ca05a84ead025410d422d23a8233ead94bb76291c45a8410712b987a18f14022b66e50a0e4a714eab2a6f272ea290ad5342a78bd4c9a4aa6f0260675ec4b33e10f4ff19c4590c35ecbecb2d2aadf83d3ee3d5655c6eb524a05bd8bcaed31d0b76d90ada71c8335695a8870e4fb512619efc76be60e38ba0ba9e5aa2c0fa2c9dea9c923cb26383e3d535541f457d3042ea7a2f1b1f0bac8827c54f47732acc43b573d5d8c42d982f858fc632219e7114c14a7af207d40612df736d40d0ef58acf148b88fa5d1876513687135c02727cac11d91f80f2089bfc3c3e4119e6f886487cde0ceae4f5ff2915c22", "a0fd5332796403dfb3aef3e175913c68ecd235a06f8ed1174ab9b7e2e188b638f4db7673264a6b804f59883e6e23a709b611de8a5d8d3eb364e0e180baf80f986cf0a6dd44445036cdadc6e87c28ae45836116253b65c4581c667127ba99c4ebaa965b6f530d9e7e42ef98a31c11f92883d1a48b4c97b334ad8602f820837ecee4f978b472d2d0c0f7fcab0194376de71e3b67464bf7cd2b6a4fcc4e925e1b0590d26afc03cbeff2b05b5c11424ec2444622984111a3e2fb76a9205a2ad5ead60915d32084b663c5456b3585d33bce5319c1a8c9622567eb674d5487d2228f6b3df945b1ac086e8c81cd087366d0843814787467faad6ee8f59bceef802331cbeef77d205765b6020c9a0e0493c359624ca080778dd420c86cf2d2f6118fe71f5df04245bc92398e15b2ad2542b3aadd0df833c028d3eed5dc41e295cd7b146e613647d267119618e68ede2defa40c180ba3bd8c5b582577a2d1cd5fbd786976fb03fe80025325d56698f2005594c346", "b2f7e610d179d880d1c064fdb3ee99ce198cb3bdaee085cca520a2c6e376e7440d7853be8729764611edcb6a4ecfc5f998f1d406f535ebb79631a9c800db0812c5190f050e13e5e2a2075393c0849e9646a532cf7269258c9b01caac7fa69ca596a52ca7248d9ef728b7b065fada8eacaddf52c07447889caf1e544f1248b6ee81cf9aecc252ec621fb72ae127af5e5c0e8808c6dba956a15de4e829aba5f9904af25324eb513a5d8a464eb2fa87bb3d1f49f7b9f6b77fe57dd690d22caabdf172c6956a03851a6d2b4b385e673ec044360f94ade793c2bfe9b7090b63b77b1aafcce632448e5f3f6003ee952d046bcb0cd61ccb8c834b5bc8d435401b2c643675db81202f073fe18c32e51ce1d2855e2c785a0ce0132dc5a29ad8f3560b17b909a311c903a2501e142a0f03b0b219cc25e5bacaa6873d03cd593d9efceb04d254a876c88e211e6cc205fd68741e7c34", "822bb97facb51a53219c16e1c06c6679a8f64d6080a24873643f710666e8aff992b1bff8a2b67f41567efbc53d0f2ef9b76e55fabe0a40a55be1ed16f55db5e38f0e0cc23ce673b6302d55735ac936e4e8254ddd41c7e2bc785fa666782d88c48d4c14257de984ba1e5564a8a8598dd3b5c98725bbf803cf8cbc8701e8aee5f5c4a7ea9c29c9f071e2b0d131cb19009929d2d507723242d8e550b0b2b17236f026f235d24d6719783aaa43572f9143796fd415fec2e1766785128751a5edc206eeede7fc52cb51d91b88dba895933b7968c8d24ca5bf457e11e222b3d956368f1c38f245c9fbb2fd7f4f00cfea2238b306d56905705937cc652a3e12e09f4d9164487309b60224d135c2d8453082aa3123551cf681abb694d1ff47d10b52436389b5949d8d9fbfa46f58ad95c881695b"], - ["8ca0548a07b3729e1bd3c5d4ac3482f4351309542c291fae10dc732996c1bdb458733c46ccea69b12ba7f3a0fd4b33b192ce670011e45196379365ff61c9ff299940067172a7190cb5ee92e0a3d173d35bfd8657cbf0d9737f01e702bfae496895d31909feb5ebd4f1bcd23944b83455b047706c6a1d44cdcaef0db04420dd4a0041c3fc5dde0038edc63cee26f1e96700d74efa88bac083b54bee7b3568181ea6b380df010bf218dd4a054a3a4fbafd6f9f7e62c49774aa65aed3a533e550de22b8ac8e2250e1865893063b50c003f838b634a124c127f8a920aa121cf4dd5bec5566367b7423a7d12b5cea939a2d9e51dcedc07bc0039e955ac0e8415bc41e1bbab77c2a21332a830a6be65e294dbb0dcfcd903ee9d3c4714e7601e189c79a5d3e519680dff8c55d68a5ece996023557d8e8181c8293d913379fb53847aa3d84ad070bf5c9422f3e967ba3049fa0ad298ac8e5b481d6341df19dd1ac6e2bcc82762b0646d22d34f51485bf4085639b326bf44b4f15cc19f0bb37893729e3681a9428849c407e5747e67564e91c4a0607a78b635250f38fbf91502fdf7e53056344ca13ee898364c438ecba180fc66a65a6522a19450339683d3027be708c19f1a8f7817af50716817bc033344385cc", "8366e0109aa35aef713885ac133d8f57dd72ada41247a78ddf3050a356f0551941ad6579a86795877c8672398600292eb767916979fcf6695a1830eead92336b159cbd66f42883fc69f60fffc949a9070032e9b6b654ee050f250534d065ecf7b7fadeeb96d70839d0b6c4b3921d3e42d0b559005b71d8f563786fdff2280af12b220b766ad76b5d9198551f3b1f44f60219f6929c7f6dab2b9c6f1dce0034b4543c7b9e1ec5087175a3e9adeb270ffa0bfecd2611170aece3a5014f70e61b58187b242f5a5d8d8a45ddcf5414bd419603d3b34fe4e998cf85bee0c990005a42511547d4a605e07e650db80d3ddabd4924a46aefb459ef67771749f9c4740514b8bcb3c88a4f155653f1bfc7a359aa0272f6f506dbec9e6d9792d8739b081f9e414070d510bd8a1b30411a9f567863283aa9fcc4ccbd85dbb772cfa6511f2cbf299ef331c65bd66877b2c86568652be62e9da3365e4a52d75c77b7289cc28342d310b5c3fc0cf3cd1084d8774a376fd4409935d5510040229ffe139ce2bd72440111fb9da109604e32fbf7df0c57fd00251ba4ce6457008829f2a48fca6cdf3fe99f6c59679ef543322c0fe83ab8c18f", "b109c13cfb2bdcfc626f7d7b3bc14efcdf08f3ef4b7f089abe607a7708aa1f2280c2f2999ed092c192e058ed2da8805e896999dfc7a4542562db35e2159a491d6ddc447de2918b36b16308a51b8f2c086829fb6bc1bb45b6d51249dcbe7fec50aa5e9a1a00ff1d27763b9c4dfa6d5a41efc9d08de736a181c162eb866d893d31999041ef9f41cf2d3faeb9bec5a23b652cff456629034dca39735e0b324c8cf4cceea3e98daea6db4603e6de50476e9b191706f0b01ec36382c1a11c3c3d0a583de597a48078ae2b329ec6ed2c95d81139bda6b32080ebcdede8b307a7846bbc0b00b033c4454a7e77c03fba24d1bcaa4871dd7ab5b82dcf1e204f22881698a19e3b43f6c8739701d5be6299f8d4b856405301851f0c9f431b4559b734354dae2dd497d82f7ad3e2a5de5a6762fbed4314915c179aa7ad43dfc5f7cb4965979ac15de6012858fd9ee5181121197a1bdb500d58458cd2474bdf62b94d469c3e5944de57e5312d9d188389f77f403b5b2a1ff2f57fd6b0ad270912e8ff7f49c2d33ad66628e234ef9f1b7a508d66661386", "a8119af3efbdcf902686e5abe1b7decef34a426165c6c57338427ff7acf9b2da7e710b26f7f2ab7245b82462cbd1b7aca78f56ae0d3240f8dc43a18899f83a11ae433c41688166079de5b69554f004ca91ebfc4b01e3b39580fdc0753144a8178cce801715ecffaf662fefb2e337ea10424ee8754c17e1ee76d8ac2daeb73dc0f7ea8236fada613ffa55b4966b45941b0be1cadf57091fe97c1db50a6d4fb1a445b19825377c8a0bd8df2a2ea6bb238e014704e7a973e19588f03ee84607cf902e3267186ffbc24dad070a6667075c91451aa027d85bc36f709f65b9df4a7aa0e4072be2d3cddf41df6de5fd809f3bea627be514f488773c78afa00486cd5de82171c5c2923ec900fff3e02b45cdc78f3b35d51c86668e3f7ee265920e248ada29d6ba3be5a5fddc60b03b265654765130e4a43a474c94f03e66f7ef8a4e9b013cd929bfec30cd0a0247f6a679966c8b24740f71283983678e2a771f2360161414a1d536eaeb43f92f7220801f027955", "b35f86d0219bb80dca8bed27d321b3fb7f5777c8f360aa04f6d9ef95d33b85bfa2916ba97422ee57950ab04048899b95b01748cb4ba628342a82c44ecb4f24b2c25480f1628b31e438143fb9e5935f42f0a9169239feeafb59397a95fe41e5048ac7d818a9dae67c0ed39c1f2e8317b74ffa1570bbb989eaa1086b07aff2d58d1dadc270cf80e53620b1a7c5c919fbb9480abe71421e6f0e4118b8332be897d1fc4a72dfdfd81dbf73cf7a83db1a50163441bbf251a84da39a342a6b6c23a7deacb13c8ab95033a9f9eef86032dc65cd26206b4033383d288f5ecc187c5ff2372015f3804354323073c89300eaf832e04f1a6679d70a7a92062d49d4abafcd446e162940e56a311dffee08b679a316354568e6cbc4864d60aa642f2f36d0ae55e55b57a61298e338ff227c28524ec2f45423af19d5ddf85d4105e907b1118e8031c787dd59a604867b07f328a78c858c", "b25aaed0a3e9db7aa23dc8da3819ccfecda51a6439be8cf4b8172349083e11cef12598d84bb1ffd9e99c02b5c6f9153f8dc1896bbc58d4d8b0971193ea1a7d5841a0a7dde89eb49375c03689757f6576cb440fb9312b307319d1f55d290e204a90fc3c3f388889073ae6609838d678be61e42c4b8285786511ef3a37cceeebc093e733186f40a709acd84ca9eb1f093e52fbc5d00f2f0d91b158f92882a66db0a6330353a505b675d7409a3d30da56ed57635006a2adfc774fdc40d5a58d2728a56ffce9e62a0bf6269552040b904a61003abf203e3e125b2c121ce24ef4723fd621c09c95c2dea31a40ae69bc4cc7c528f21aad64ef176ac9d1eace8cf1e29bb14248eef194357c644d27db337ad45c4bc17f785697c909bb9ccdafc541e4541709971284df1c408e89222e688f315f"], - ["b016291ff0f4176361ea0b0e1368afe4a4db75fb76a79d25fe0958bc2fc4ba7f56078e90418cffa38ab93e6fc153e431b3f40dd941d7f270d040a46cf6432482f200637fae23c312c73bf2a35fa6711dbccdb906960982d32db97bb270ac685eafaedac15561f35cfa0c3465f787136cbe7af2327f3344a37ed6c0fd6edf354a38f86008fe14aece20f969a3323836dc2bd49110e382567d0e0a337f3069f2edf885d1f23285ef905c7b5d1331f8fb4f2c12afb5272afe4d74cfab1c9a692f0dde1dcdf5c4bb8e38da2cfdd887566fbd006512f330bd176084bfbac51d6de625e1472d313d6c9cb2eeaa5d839fd5e809698433065752f32a5442b3fc4f0d9fed70daaec808259172bd8d03875cbdce193de1922e62ad5657a816d66c64aef3f8ee7542beb0a9befc09704004bb832207640796eef923c8c31d4581cd72255b0784ce1b4fd23c04077e75db01b22f6d053ef31a73f54ce3bfaf68c8179c751b6ce7bc312ebc993211813aac993b88f2b75bc5fe71ee1b2c0205359b820a2d768155c906eee735b8ea1ae43736ff6009d3012e62a9c4afb947d065ad8614b6da81a516eb1dd0b533e9ec57a1a397be95f73cc41f7aa779e95be1e819bfad01c7e4fa35ea961a89c5fbc95e8acf0d8cd989", "859ab8db1445375b46d74d61cd64a57d360242648e76614a5ff3c866edd1972336fd7c7497f6a5126c2677db9ce069a68e57a0ccf66b1eac8c59f9cc15b792f33e9e902fd9b2c41c5701722b638a86558d63ad66706f000de4c30b6642c391898970abbf44016ce93bffb945bb216d22c06b908580178b448d7c31a5ef645e86ec526debb63674e52034e01ed240ec49414056080e8b20646e32fcf2edf086d0372e3f157b6343c5d505f4c54d641eff029df77941c10ea04a83602b0c56f7e88cf682e6d1552ccc6f1a89996b90afaf4a9677fd5904ad95ef88953900705b7bb30c782d0b819c45b490bf74cd52c9d722143f896869e80a163a9ef2b351cde3c27130463e2fb1eafabd8b02b2c5d5d669fbc295a698a3315c8075bd50a7f80b6f58838ad6e5ededbda97cff2f55553d05010beb484674fb827c571ff456336302fae6ca011ba7906db9fa954fdff8801a9863aa41c68b8c2ccca9d00967c894b08d8e488a739dec63a3f7558ebe475b12c910421c6c6c76492380f2ad8269cebfcc3aae5b25b514a5d7ef396e0e443726c2c5567d4afb0c03c346a49fc4627d0f27d88935a7ad748852b8c76179a8e1", "8c3bf45a32eeba5edb5afa528799d0923d56782402dbf278df17b7fcbcb788ae8c7d36fee7328301af21cc4a0220a35499bca1de787cbc01c7068b12f146d6e6c5cf0d8217bbeddd42dd863ed4f4ec498892729a2fe22b8941d4ae144c8e4a608610aaab6319bcae443c46c66dd07d7a49cc6f61b5799fbf3bfe553f4b279c0ee2047ac2902bf5d84a5f3c7deb7de4a659d70f74a836aef6109c0612744062eb9e9d95e52ede2be99a81bc26df092fc362dd79a3aaf0159e477e2deec9a92b3ba643835dff3686a352a74733344503f90d5607d96af68202579c333677c90800377dccca80b08a53d45670506eb388da47c1b6cb2d6b8c4e7fe449d27c3e952cbbf56f17a60454013539a0a1f678f8da5527bda1f340238c870beb39b41ce8a625ff608aadb4c87294e25ee409d6468a59cb3bf25f533e2fd826a011e9804ffeac4077f873ae44af9ec5ee097803920420680a8d2662105a3a2fe013c3653fd179da2878f05dbaf75d1433c8d4e708a1050c728067922c6d51c54e8a24a778bd15d4a9e4fb84092bcccdcf9dd4350336", "a6afbd806d8a5d4e29d253912a99b983f00ee7bf089536bcdc52b3c8553189b2c27c7ceb1a20f3b0a8a237eff6131ed6ac6690a72833ddfcfc12ae841de2a725f12742620e0cce8f7b21d73e269735bb8de9d0abc1dbbffd6877102fd72975c08128e8fa17198b017097fcc7e21c295698a4ac2cfc27817ba52e95d8b4d9b5f4cc9fbdda429c7ba5bb3c51ec7fa3c40051ec4131455c1ac030887a9d5a69ec9ea8d75cd6f35dc3b4aa569df088bad95a0a02bb4313c929f75f07e09e26fd52a47e6e16bc40aabce829892fce8a9ac8df548a8b8f3fc330cdfd249954bad982134ad3b21974582e4cb322e76cde65eab709dcda64b8ba8fc86c28668ff69375ee73a4627fc9c4feab68c42e64c88c92131dff9560168440cf61ba4445e30064b132343518965dd48b4408f1a4b52e31831f237688887eb2e25dfbad8b8d4d193e8ad3c596f3eab1558ab1b9cb00525310101e2dc2a53544cc3f90a11ff37910e38cb534315c02fd73a079709c74f15952", "b19e7f2cbe31431513b456baf27aee8beb8e1ed3b27e08f687f19f4130db45782db7670d9c4792a8ec24b842911cf2abb4321cefdf8aad749632a42e801647162617997e2536edf7e66d11f57d1353a32732d0dd1b8a3ee5b2239818a225ee9e960d8b0c35d5ade32bc6e8ee8edc64b2ce18a176fbac84093824cf4ed846cb4aa00e36f69dc969de0e81e26a5a4c66be0cd3345832f2e11af36909057b87fec89d8a234fb0aa51c5a5f3d3c63438d3b36dd3ec2eaaecaa11b033fa6b1d62c93fe44a4fabde3391de170134912f58f752081c043ba2f8c204d3c6df4c99d05355f5d29d6473a201fce1ab3bfb923b54636ae6c8d58b36c7f2afb94b543a1a20f68e3525adc675752e51ffda4be89e16f62a4a980e3f421d7f1a477ab1812b4c4c8f4749ef4248a9288bc60114805b406315443e8f01c839cfd5277815c7672f2c2da9a59998049a632bc76baf740cc58c", "9544c0fe151c7b7e5ca6d8fbd621945bf39193e916279fc92787a725f44b01e2a98981464812679dca38f5d8bdb2babca8a37c85db77db1154e23c715d6a4fc1c7e3f1bcc9a1a1d54aa69cf5bbf477ec25250b21149d9da4a8d91f5f367c6da3aa9b69dee1a570b5fc28c0df1961a09b3e5acc24c3a06dadeb6b58c2c13bc76d0833e8def8290a28308883980e57a2064aa8fa0e646fa8f49db6cfd2dc425f3fa57ec7459d926520f393d99a33580a820f810e3172fb31a9993adc97d6314b7e9a82342cf0d0fd207148b2a78423642a10b527d196d8ccad69d6eed87c267e0c5fb121760c853eae5bd5a63925948f7133feba7e45d6957031d1a2804ad9f55c4f76401278e137010f9a7997368ea7046490a926a9b1d5fb4f996ce29c05506c7ec9d257d37272049c1f58cf521120ad"], - ["8c80807a42379afdcff5ff2aa697a3c82fd7d9cf6ffde7343b6b5cc06a7288491c6e4f63494d040fa528bed8d923e54594e325c656881cb5f0f585432859923a86e7cd42a2c63bbc6069eff363437ce4be2e790ea9715b425047a4e18d555635a9e8fcd047be1f122271645efbb8eb34b12ffdad0c82ed45c2667691514725536fb589f56647171c4febc63ea7acd6db69df2a4bd72e506c4ffaf79897f3899327fe7374b8e469b0f7d091beeb829d472f4655946ef228af0a55c2b92fb242e57d1dc3a9d683cc1c38dbb5a117464ff4403b8c2a231bb3af98e87bf4ee4e22a25b8eadebe4d2285f6b5fe75fdccc67bf7100bd3ce888b9f8c67cd75e00c142360b39702c33016c8f21e90c9d6e678e0b4fa7043c050f865c93ef78684fe9f42ccd8c508cb2a715b5cae9639671edcd9a272f019debbff1c3cc36ba92d146acbb7206d059ce39f764656900e8df80afdc1c2e5ddf37bd55b925ef085584dd6681762db561fa4efb305544bd07f0a19ef36f38a0209f34bb00f49c5cd1f4d2309d59ee656bcfa985109809f8a1fe3834ef609d5d3a6d0768fa1782c46315c40fd98a9858c7e85146e84881941e1c55724e6dea4754922f57ee60231e9c14c66faf96ecbacd8618a57ed80b8d1603f557ad", "8e463a74f0fa830fd6f94e1f5df8e1df34b20b67cb254331db1031c68c5a9ec704bd655e1079acd76c2985f36759d4c5b9a4afb59b837aa13889e5c03251530b5f4e43ee1c8074aae8cb661009e2d6fd08ce01d90f806049c1123821e724f4ceb1dac672ef5e2b702cdfd7fb243a1d61a8e5ef076410a93b5456a5da72771aa5fbc3201b1d7b9e2c0eeb56deb98a84b708599b29cf5ea9249e167be13d4f470008e737678b679af72d057fcc4ac60afa1adaaf82031358878b70c77f5cec04f666687f0f4c43f8d943b5c375d8f1f7d053ceaed7fcbf8bc42d9a63d26a7cabd3052f0a9675d655172be7ae58aacf5fde69b190fb370875e4b9b7d3d385e722adc9157b2accb89ebb3c7616a568d881e522f9a6f83a6fa1da4f7dd679a7fce9464c2beb558847c9e21aa4830a8f384bdf327c758e21b24706499ea52cb6e0bb6e24d29fe637162ef10ab82a88e16661ef6a829d8dc095c51fbaa3c1b89ab7ab2cdda2df42d1436a7cb1a0b0a76ae8225e4e93694a49e423deb32ce68e075e71352c6455499466c9cc36caca5aa2e1e5c64bfdb5ef90a04ad032dc492988b736e2b8253bc16c5749a166ca78ea6f607ae2", "836aebeb345b2da47365bdb671a7c12ea6656b23976b3bfe239409957e13524b8d765d4a4a4433abe930711e2c478abab81161c3f4aa1366f05ffcdee9e247998e5617bc55d25e968d122de99817e8e9c0e80c8b7ef35930538d6137f9625fc48bd4ce1d70a8114f435ae513e78b693942d13e213ebbc66a69f01f1837de09f8f24bbe07bf8819598a92b51d771b6423165261ff6458a0dc6d12f2f3c2b85d7a97e4a10f02f349fae420c6558aebb5b348f095d6089e5b3c39308e4a4fe661913a78996304960f3dc4a9467781b68db24d0ce77d6620c6f9e8d0d00243b5822bdaa3e8fcb5bcc10ae42d21e5d0dd4445325810eb04a8b274f1dbb086d6fc085be58f8a095475a4e21647120af3154fbb21afe8505c566fd072ccd50c2b9bd79c62dabd4adf04d4a3ef87013de3a6d9594eee4dad6e4d5fd1befdc4cfdd23e0b557c3ce0b4ee8ddef66e09cc5178b992b14ee7c1b68331eddd05f95730bbfef04ae0461025ec8fdcd42cbedb39c8f56df6b8a49869e4b2689d3560343b343d7990d3cb70d05b31a228dbfd6f02e761472", "905c9bcfe7d3e5c7e3c8224563c0c4a7eb194ec55c7ba71a3bc4cf54f92cf13816255db94516cc91a23a2af8be0c10db9248578293d7dceb0788c8b930899446ee2af2083c8e7267fc5ee377fdc48f0d6bc495c5b99a0315da8da9f6f85ce1388643a84b61ee5e738680e7c9dde69c389a7713b0ede9926334e2b40f66d84822f8603820a7bedd3e6f3402836618bbbf73019256ca52581446436563a51c9414937809fb746e619f981fef613455464272ddfbb5cf6fb5ad91d7ca27b7786d4e5a39c07d9e302d57ecb5bfc141036a3c63324c7a3dade4dc4d1dcd3fbb7ab325e4b8f6307ab54ac37a30d4cbb0c00f2122fce4398e837bf8ee34d98477795ac49729532a008917942dc8063e9890b4a26835fae198f190907a0da8bf9f22649f5e7336b5beeda8483fb656f26e3a63876e4098c5bcfe0475dbb8d31af088465a3f32371c6aad9ec274f6800c413b4d89036a4ce6257b0e11004c79472212ca3e1b2d79927c60a3f985e731518f8ef4ad", "a1baf77a5756033b967aa1636cfaa0a97ef7a81ba4ebe951d4d0b50d178501f3932fb5aa3bba7354670de87692ac2c12b68e27caab60073653818467c1e2302aa30b810d3257ed0af1c5223939fee0c567380a46144f2363085d8d70f40a8c52b716b37e4b1771a0cf44578acff8401fc936457c03d400ecda823f9f3c0269638de0e9f8d52c60199546fac3ce05afcc542fe1c9142898b5dbeba302dbae2e1a04952cd5900ddafa9c1627cc4b2c674867abc8c6d8d2836cb56b6bb6b4ba763ef80ecb3369dfae4bb65ad97afaa51eb549dd79972b33d6217197034061b81638fb7c70614f7429dbd21388f7daa270c812ed385d2685be794ec745fdf47a41ad958b2482e1c6fa425b93b7e36822ca0640a80373fa3b9c032ff255ece182a692751db49873a1f247a85ce8a637456fa312fe579a481084eba8aeccb983f2b0b9b4742c66b6e14488584f02c208193d3a", "8b03997c3d1a1b9bd7a24b2692759c13119343197265a0690fa80c844009f75a3f440125a7f133eb664f7a733f190efcb5538afbf27f7bf13cf04e3bb18f79f386304a669bf53be9e73c2ba3774b149c84a279e4a4fc5b76ee619734570c7a7db42bb4513ec724f7ed1c13542e3ae9010f09cc967dcf06a2b250647b476d344db57d9de3495129fbac499807d81b18fc3df61d7ac911f0cff21260661d1f09adc48491757db933dc96215d9516623cf270d0a75531cb70ab9d23bc7bff63fd27ca8a6ef34748b7e531f8159f6fd3d11415bfb44a69c29a82b48952b2cb511f97e236d3ed9ebed75ce523c36e77b2afdb6e5703479a4372d9886841a0c0e0c01f095daa3ac967ac7bbb7896612a5f7a492774cf97f29e9b5cfb2968f44f661476878042718e6f70602f93eb9f3372e60e"], - ["a6354ce65957efe44f4039f986ecfe7a68290c1bf485e941ce7ef7873607ed270308344c7cddf0b1f16240b8a14696128f5fe791c98f368801cf3907ce99b220923bdba8846edb49e4c257befdd8ea3707ce7ea8b0ec9e8cceee04596003fe1c8870043bc4583d620e3eb69b34d39bebc217b6d5ff91d6fb9c71e49a7918ae7c4e5936eb12b13a81198ec1cff1b8347530ba3d3afc4c495b29c76bc1b93a72c4660fdd05f1f440c4bc5f3f6ff3e995e84bd3544765a04746cfc169a7b6e99662b454194eef8509787b35e3ebe650502a3792d4e36bd1c43380f4e88324fac616210ceb13dfe3cc7cd168c14b7492e7e63f235ea8d11e9725ad58bb1709d1475f750a3f3a79d73acd7a0d44cf25509f4218d40e12b1cba6b788e2f254efdc2a90b70bd146cee442e6c270f0f641bb5a8c64948060d4cea81b60413425dfef8b5958e5b01b4cf9e11ca563cff41185620358aeae514cfb4befb7b6fd2b654bf2b5517dc96807300d963ea9f7db9f2656026aea730046201dbb3932286bff579a3585ec6d7e5a3bb1b844e0e5dd6de7a551049385f5fb0bad175e05fda99b5bb796897fd71823aa39205a88ab0f0505c8af4eb0911f80526d70f52ea5275626e168aeff0144b0ada81fbde362d6e0d14a5f", "8686c30b604dd37ade1184b2c8b194a55cb936f1bfa2cecd916b6143f44484ba41c08ad8b40d830f2fbfc99c170ad7d692df346c0b70d61527937e353558e93f9f4d7dbbd60edc841e314f2f07598b6cd3c97039aac7de30b5a88c3697c31e95a2e2c0bed22b814b8d5994ed7681b16984a4da602f49af4fbcff3f09fd3d4c271b93f54043dba6773301ef457e72e9c91eb7a4123d05fac7d1e7b3ed216bfc0ccc457de123d83dcee42f7bf72d8ee3e76008d5cbcbf8aa7f4032fb6147edf9bb62c3ea296a3a2ab0e092ee9a586feddf46e1f89b44cd1aa6fba5d84b95d5bca2cf066b218bf0734e2520742d4ac76b1d45160a1e754332bae0debbe4d22863619d45a1c745f651d4ba2f49828f8800de588e6ff7fc8b78d8b1d581f3bd20df9555e4bd1c9f2d5f5b796e0e17816a9a066f26fbc7fb70b4cdc10773231e9abe1dfffefa3e3abc2324351810abf7a4da8e12bcc7e7b6f3bc102a27721626df0667fdeb8f03cff4f04a9d9c2a4843ed819c6af59bec9a8b6898ee06888e47a252f94a239f6c95537a6b233e436ac9a8636f0be1615c84556f79b2fe18e07983e34d4959ce07e6a415429c30b5c801d72ffa", "845939eb59ad3f5d0ff2639b2b7979d91c36e2825e002567572299463228ebeca918d595dffbb49aad1644f75c0426a9b7a9051ccc59d40f46d6feaac215a2124c57775fd35351de0a70bd4f364c960186e8e125c621574b09bb3cc15ed68c2eaadb3587eaa801aff851b747ab604a3a01ae171f5be0fed56be1850995181ea0895191c950a2d9bcf1c933a371781a470a5f759566996349d40affe497ff9a34e0d9586a52ba2ef48a9a937f9201791f3343570732fc901a20afd6f6dc504fd947b22b7e7c0d574ffa423896299302441cf1951c12d50287f98384f256d9747ade9381791e60dc52640005c79d1cbd754885779e8fd9ae7e3cb048d61a5269b43a2785d0a2784481662cb648e5f0e92143955f874eab2d490a987b8d2ac33c7c86c91cadff8a387c18393d165196bf073c4d0af8e1a78377848fcd223fe15fbdcb4b215c47e8d4bd6683b2a07cb8fe5b49e69b547d8a3405ca1aa07c4424f4204998d0b9b08f8a1c506c82dcdf32ff56402c11216ecd5607ea35af744f068456bf989cbd1edb357c6a59a95ce1f18d34", "b4185a561205d7335a6af7987b59b8966fad8c9b65cfdf9d11ecebae79fb8a0bb9777bdbc833861a6ace69fb736c0010a5537b151208d2f3090fbb537416c31b93cf8bff1ab51090ef405fd3f4d19b5254e7f3e5fb5a67027466c57f6cf7a2cdaad3ce59c44b38e3d8a94c867c273fe2607f79d06d31b5b8b96b78a74d87b77a4d01d74a56bc37d31eed29275a88710f51bed783c06c1849a7a1f806e8206df948f55039c24c3fb818020216baea2f3b1069fa8b9bc1ce89d8298182c673383135bf7db5beec03e052f535fe8a5135c801ae1edf03848b37eed548a806dda4d4dad3a02e22271d58b7b03f9ddff680fc3e0cf036c11c384d2c0d096e1b8eb2a3c2e9b4f98062eceedacb766ed4df49932b39f24b6f144be5b6efc5addabcd48202bc19e59bff05bbc08c6d1276585cf90f775e65fc0bcd0226cb76ce692d09e99be1fca43fcdd1700ba6d2375dad1e0c31aae6bb94f02c132de624620e570bf2610a43cf7fab67d9d8acb90ca815ba8c", "ae63f86d750f370c0fd65dbade0b7a9bb1107204f3a82b50684ccba59bda94b16ba06c80f753f17b75825a957ef1b58091999b26b8caaf94033e9229cbe1bea9cef212de431932725b9a371c74c06a7fc24b4f91dcae39cd0a62fac4c0598e38a560645b0145c60f58f772aab2a1a1afecb167c5f729d4bec5eda61454fc3c648b0e40ac99e8707ec327584508b3e0a43f2b0d84715f455006b4b29c59c999c833fcdf81cda0d2ab2ae01a641c68cf9b5360c8121d4a588352feb430c7a0263dfcbfa04c40107f0462fc89c3338544531b48e2e6e93a1c41d098529b800f3c423bfc0148c5a28428ac6cf354c9d17782286c56c1bc9138c47c6071f1d910dc9cb94ad8487aeacfb6556f628b83ee49d93934fde2fa98bd1a22b7eb3bea775ff6337b920b7ed7cd4badd3ede1f2e69c301c792a721976596b3a0fd752d6e9020a88ae99ddd8ada756835b60b8c437d8a8", "b7e0bf681b9c6340bcf5427187e484a68e26436b79fbbf677f02e1d60734079110285f9709009238a5acb92fde55d0aa803a5ce6c0f867f1f90d3489e819adf108e87e760056162ceb8b2dbf82ea8615d39a2d40371324eb95adc51134fbfab997ac3b05bca76fe6fbf064c49a344f106f319458df30f2381318b3318d80f95e65eb43bf0d5be4789d3170e0d18f86ab156bcafcdcbb54bf1e16c88058e2c7cc04e4275d7394c67a79714f7b7ddb90b33a5ee1117e011c5caf9b6dc0658e850bebaaa77c0666ce28300ba88bf44212d5008e3a655116ae75992ee5ddd58c24c9604a1695dfcf0b00baf5a777565cb7c8566586b99d831dd1a8c1c4187292c31d65e8a907d59fbd4c54ff5e228a40bf7f3292c3554526d415179ad81712be955119c3fc5cc43915514adcbb152c6b9197"], - ["8e4c0530c3323c018850dda79955d36f12d4822cb985119b03ced5d7faf8ed86362c81cbabac458b839277b1e19e51aca34a98ae7d588bf4d697688c64d20bbe354717618fef4de248f9e226cbac5690bac176069b6c85e3dbb2dd49ebcb4aaeb7b11c2d2bd23cccffcfedeb512cde194b26e7a347d3cd7b8fc5464b3a9430cc5d907fc9b09ca5a4f541dc72c935444e5ce5924bad37ad492e6e90b8bd60cede9f0c3f07fa5337a2c79c7d83af4abefd160560454e1649b478570e0c0507efd93ab2f4a69706b39dd2d0a58ef19600004a94e75d5916f95e3b570cb2339423357ea200763c6ca2c1f2b3ead661bf95d83339abce78bddab0c38b7ef7d732e09440703daffb38b1e26226b937ff274edb5cf4332745eea8784ccb545e662101da3cfb848c3215a62dcd32cd86c1f22ab6196f24a8adde75dcd2f04a2893f6091e34d011bfb9782adcc4b0f6f5fd1bcf835720cb281e682ffaa2abb8ca83f54e5d16bfc7cb2d378fba676ab1d71180bc652e2b35ae93f6e5f225bfa13c05f8006e8d66d10bc4676056258eea361f089de5186c04f15b0aab7d4c8d00ed15df0db315d28fc2412dbe3ec79ddf857658cdb25c30e1e663e5c37245b7c57ea8afaa67b6c54f15eae5961b58ad389d17672fbc", "97e481662d4e408e389209bc65a62e759c67acd496d45670a6f969e939540ee2955272c6cb64e41b27a4207438c0f34fb6eaa4f95c9d8ad0c8bee84020f412f953988fbeaafae520a39d7bc9680505b59be556c5cb7b9e3294e5474b26fc124080ba16b1aed28793efdff5d40a276a227bf818cb0d8485a5a0ea17c41085ab17fe0c987bda2c5f1f28d21242ab903cab73962e0313bd4660d6d7ca6d6bd8b2b33e2f77b32b6789cac5c5462acc0aa05c116de8983f31e011df7b419907269cd461aa25215deec742b4511225a7b8a47b0a237c314970c886cbed07fcd63f2dfd7835b72a2f1b1b510b680e9ccae1c10e5adf2e3e6229b9d3989cab150de9747a27d0ae5f2b7290d3d07342ead1aa83b9551758f60d2363f3cd2e3d75e3a615eb2ac1e651dd9b1ab86877d915fe523f6a0421e7b632e4300df92bc18988a078fc68a0ad5a3cff22ad5fad5ad12cf778a64998d470b8ca57c4ce23a13e670fe00562772c2c4be72d7e906ad9021c1ce8795463456cf9a0db19179c0f90374f5ff2b3e8085656d4c9283a8df1f96ca59d602016965098e53a821ecde5adbf88524a66e017e70ea2884101e62124b011bad4", "a2050185ca0fb98fe906529f90d32081d870b420a2dc8a357eda137e7b8009af212ff95f7518909aa5417796ba7027aaa24902986dd120e1934e68d05fa55d07dee517c478c7c60dde335a065924828a90be2723c75ead505e03d2dfff6656b784b32e26dd5024c0398d202d7446f2dbf1cd896a52de82ee2e39e13726541ace0acb1145de1becc998dc07fbca4415cf3f6ac25517cc6acc9afbd2b636a9eae4bc18870307434ab5bcc7a4e5f02f53ce4aa1dea09d0b0cc93fcf9010a6ba9b30ec0ed7abf63d63882fbc748096a7ba9708c6c99c50233319ae2c61ec4a425998505bb9d1128c579e93fa8e4fd41dd0d511b97d6d84d750b7bf16905255e9eaa903fc6bfe1f218d91ed7e77ad6393eb724c166b91b8e1d4317683438b62ad240aa1da51fd3e7e882e176705ec17f625ff1e3aaa92418764c91d89f29db315ee97d3d4244784586e74d57823c04febbe7b54e25ed6942e139790def6d367a949ca7f903e2865b3fb5d38ebbf9eb9604ce969927877bfa2063a77838519780269da5150178f8e0a705aa99fdf5c9a38cf78", "b40b6c1604f9357f16bf6866daa93982628ad4573aabf98dc0d41805f7d39cda1b0c07b6ab2f9351dea01ab04d16b17793296c5149e43f1390d511c4e1579898ebe53eec0ede3aa3757e7156216d985b7445657a8c4af70b96b9a406f4c4d1f282b80d96d01aa24d855483603b43649e69e89d12cf8091b2ab96c42bb5e751d7afe987d75a3039da2c7fb1e40ee7911f01a54884279eee5cd9b2cde3c5fe469c69ce0979e97ac83a66b777611888e7735b8e0dfdd5f2e108a6906db2d5acbeb283d6b04a466ad291acf3a2b3ad27b2545b63dc00f6eee94531edf45568be0b7fff5b4a8b32af3b4e5f709b933c0b3dd4255e18ff4cf9951e12f581b093475d7468602a0e953aca1c59d4508f8327ace511e7e600c358d867a52fc3bf9ba05302ee22b8b1d5124eb97a06861342cc995d1dc64b07e2d2612489291b549595383a6b010e28db218ab8036f690a418afa163296c583d81c2be2e4a26ed0117d389683e2575792a8c77bf360c316fca8e2aa", "8f5edeae0fdb6b1d86195d46b115b444a945110300a46af205a3bc2370e22fcb5f8244b9b6f06d21915dae6d4f6f71dfab76eac58635fe1aac3802bc1dab560ebcb349a7cc9826876ce7c9297d6af1462f08c49b4db3f32342413b1148ae44c193f48c86dc4758cc29343bfa5dc79bcd4480bd2b45d4dea8379cf881a2d72a57f47292f1cc12240a55cc05d2ca86c8af41e96e8e7183b06465b7c08975478cbee9be47af92f634300f2a525f0d686e3e212b1147d906b16b466521a0e712d2e49715f505ad599cd3a81764ad05f0507c35d9b670572071dbd216da28350facbdb0865dd647c1f13e6eec7b0a1d5f407e37492fd6a1e3d5a9bc1f3d91482ddd459e68b623d9b938d6ec91f1ce93eba526613b3a06f0c6c0b37174ebf15a6ae10b51486714efcbd6bd487af84f3ee3354f6911f359966b228615038fdc0e3d7048dda439063f87522a402cdef7ab704497", "a0cfd7b2376d65ab6d1aee0e5e4e0c74e22d577b14ad0c279a09b4b0184a73b71fdf70bfb942d0fbc6fd7015aad16d7c973cd5f9769c24c048bed04455e796d7313c3a342a3acddcb7f7d2f62d21abb70136fd7e77e518397a7ae07ffba49b8db6325fcee227bf31bbb9e1e2bacac46d7279f618c6376e470b3b09ddf3c9280ea219a0665ed6dda3ec41032f1aaf9e6c4328896ec93f9d42f6270b835319512a91c9279cea36d85d52ccf99bcae153503892df146f29388a65bf9cac2c1ebb888e2492f427a459d5fb56f85548c2b94d37f04ecd82b313f0703149889e560ca8af19094f77b936ce416d06f151ae7e0f46dd6f272302a0b68473ced711da1f6e0c4351c6b45dd11881b88c19855fbe7a3fb3bfeecc2621cc19455794d1d787de3975e50e4631a88a60b4632039224458"], - ["9577bfdfd0564406a9237ed971208c71d1328628b8dfda88de7487743d0933a2ce0b59cf49dd97d27af2a960611e7bbe965f503c1d5243cc7caee2638b73dd91fc4abad81430a1b9a463f660f33bedc91f220e3658f6cad84387edb15c20ebc394acd4fb123c84a7c7350336a5340680c60cf828fd868261c98631d26567533f04b7841a9ba9320fcc948f95f21adcd2552d525054eb2797c626d852e9fcf4b6a9f79ec697d82af75c5571dc004368801b0b1246103b473c1c6e934b951b17697e4b9ef6aba6e96ad7ea58fbc2cc5b8a3692b8a5ebcd0ad662da9eec67ea310cc7b2859c55fb68e53586207eb719f11b67d7f4c1a64ac455528e31c4c0283e5262369fcd0d07184e2216af81465173063edb99a4b8e02bbdc9638fb3aabeaedab0adbe7e8aa356a18d2807f54136211517206acac26ebdd00389f3956949d0a0a66570f7483fefbf769081b4a37eb0db26aa51f4bb71711a7ffb400420352b073871069e764b3c6a897ee20fdfda4fa273120f52bd62746f0d41a6f04e1961192b66acf3dcc9777cd37ef09825a47af10c311d1f6b11a3c51d33826f8101bf8b6961e014acc280e6d98f381899f31d62625b04cd95ad36868c31fc18fc641fb393e5efe73c665e37da86dc10dd63c846", "b8b01ffad0c984f2e03171480b1ef5f6bc539bc3d731617062b8dad6de6ed8cf99321db72446ab13a8829860f9d84188a7a76e704b3e00d358abec6d03ec7da07e04c681e2ddc4a20d78e5b4c4d795247c5fe9cb876955c31e2282edfb04f067a6b6281d92f9f3f16108c88edf33e829cfd1a0ab60fa92d21e0a7d5d197d1551f5fcae5e0493be242d527228a60f69fb2f8d4148bf5e4cf60821e6f49164f74c40b9240a0f4478c58e5064bd07364fd74f0b4672677b83076b365ee68a473d699204cf547ceb06f23a61ecdc755f54681fcd2c2b3bab7c1e058ebaa20919d001f5fa6f704a06dc4389786c0ae38f54f058856ee4aaaaf564ec308c8287b12febe00e1e395cace7ad8b85c4e3cef7a0922aca9c631dc20b0e1dab004a7d12218e33d3fd0d4e7dd4620f416aeff0387afa427cd6195fb2c3a26303567554a2679bd451b47497223df73f28daad78f76d005c04bacc5941c617184cbcca4a7ba4a0f73e79d251047adf83d315360a948a0f2ec17107a46de52855696edc970c241bf8c74f3c5efe95d06440b5796b1593bd49e63ff6c984026dfb96cc6e53ed02f7cfdddde456dbc185096dfab0ddcb16e4", "a46fdcd0a09c417cacb913e5a1b8dcf9d4144d2344a74cfe07037dbf88bd1dd47a05397a15da3183088e22636e94dd90863f5738fdead552604cd98c2ad9e6411c6b97030f74aaf0b0420d6d99218802432db3f605c52da6398380dd6a9b2f87b6391ad244c86c0b244e86768c42c53263db6d5573084d4ec19a6819e8aa12bb05400576a628c20549320d9fa2f9055362cd8c7ebd8c4d41628ba3aa75aae2fbc76c5a90027859a2246b78cae0789f1407a62c890c1b7c2e098cfeb729cdf486f4b69ff4af05ab5fc0c766251472d872650183e77835a46d4bd1c1d0eedf3a2e2bb5926ad79dd8da7db31c98d751f17d1355aa40cbd0ec2eab3874bbea7941d478620ed354122ada87acce4e131b27647058d4e50874a42161f6215796caca3ea3a9d5fb19d868b62c2f97ef4c28b44126881e027ae6beb2970f8a301cef0f9395f44de63a1b2341f5def3042f35e8f445313ba5fa7c170c63193a6fcb396e947a4b17e18448d4736e8698c48f6ed10753d9b2053d68ad19c73024d6234659d37846941b56b9a620f06da56ae52a36ed", "a5b4e87931d0a668670e6bbb1d9690e9f27e86e26b638bc12306fbd1fca4e846a25d0c7c3267f0faba2df63ccf98663fafd60dbff783175dba35f3d907a9fa1271294db7ab6d36792938ed99568a2a2666126a3508332de8a1c064d55ae74e35ba0007736c8c0d1ad4ccacf8b5c86b1de98942f2b9474a27b4979e31fa7c598ec0b186dc8cd4078fdd30693e32067a9a0a3a4097b64216633077f94a29bb1e56aab67d17a7d83a5aa035fe159702ed3462fd29010e4af8677fd904e952f7e6d9be70d51da4776859f0b6635f578e98a411f1776a6259d8f717c0698ae7d7af000e6a32246922ec7c8966902b643e97221b83ce549a4000c9891b71cdfa54bf8ab6857d6b3664c292f59ec55040688a3938bbed41e948fc3e9c509943f2e6a506ae2bbfe80e174dc4e5c22f1189cfd60c099b065b6ce2b1d4afd462813548678913afd3aac5b13ab65676863b4b3e25ff0746f281ee4d190a3ed67579d7121144f36a2620da860d64f919603f16ecd03c", "857b723b96e2bba107a981a3759d79df5f485f067c814f5658ca8fe1afc94043412e8253854eab3f6a6ce2ec95fd8226a051abda75768b917aad9a787bf0fe3a40ef094a5d9f82ec1809783cfb9e8f02cddb91120b5818f2246263a2a69e6fdab85f0c67d8dfad01c5303b87f22a8c80398a7c40ba29f5882b6b0fe827b9d8b9a3285fa124257e55edf4a64900ec7b1143083bd448115e4b8cd129b2e7a8e5bc8c9cce08075d1dcac021f879b46c0083240647f0da2fa2b1b4e8a9ed9d43b3e168843eed2bd2e629817541e02544531b09fcb29e11cee5d224dc76706962384ed7852d70010a73bc5ca98bdfa5ddff1442c9f8e8003de7d80deddf7e94f57249468511c0305713b25b068eb4230d99325db4a49aec68a9e9fe3fb455614ff38bc6774410610c583ba2d8883550ee9922070697aa3ba504ebc7d12d5d21e7682cc3874f17279ba2cf9092e57600af3407", "a92fe1c77eacad2e3cac29ac915edb3a0b6fad154684429c7df0cd7e19e6bbece01a7b20d2d6d58cc670642e607f1274a51e70cb402aa0120483520524d3533f7536746b97a523b6cdbeb163ca2c03deb840a70b07732f19dc3f543f5e27d859b81c691c5812dc8321d6ffe39047ee0ca11eee6fab17659dcb6d6302339234e84c155759f98a89ff9edd180b0941114d1a6c56b7f1c0dbb4fbd33dc72a15221d5cd9a3445777cc8df134b593f8c53384115d6a431ae7ca82d82d86de60515b13357b01207eb7102162c2c69ae3c88611666fae4885992ca47e8eed77dbc14e40e6e381f0dff606b9b5f8b2007ea5369e560ec7720313425d52e510abaeeb6da492df7f1ad3444cdb9f77292a05a1f5de4143f21e3b532ebb0462005d4cc5720f70e7f9b2519030ac0b643b4d621a1d70"], + ["83d7301474943bd266205ae40b3eceb41eac94c54cee21a008e3597681ce28a72e7380d3526be077a2ef03aef9b6f43688534b4d98f5ac313caa7fe869d395873d6e26de0e6ff59af604829581e4fac5fdf469fbf121c8c1d3da1b60a6fc6f42067868d08bb46eecbc89c43624b5810e1bd684b5ab45ed99e1fe750ec17d5d312528cc0582a1d5bad23cb6e30741cb1e95efee6064afc748a269f957761552f004a8770286495ba60b1b0f27bb1e3d1b201ec1408f0b8b506b30280528d85ecf2937c5dcc89f16e3a25c5108f8d66b56d18a0b1b00108a316f8cba9ef363a0000188117d80607fea0fea72231e47f0ccbf0c46cd2e534f72e8c3e3991f41e7b40706d67a05ec1a674d28edcadc6cddbe0768193123fec7846f773e34e5bfc0b4362d5b6136e7bf50013d68bad2f4e9160958f042dc21462ae48d8e4f33d484053de5abb9b7b2c5bfbc928de1fb8c19d513869fa356afd965d7910d538e3ca715415e4dec5f176d19098ef08ff762e28c3bc5792ab0b18046582c6c4945370293", "b37e9798fa5469b7df5c5ed01d970bedf438e257f6d701aac153858248e8960b5c8b65021bebd5358af4a88660aa6dc098170d4fe37afa0848bb08fa7747892217e04118b9a7bec14bac295e789fd0732309b062217e4c18bf1de527a2574ff5469456264d4baa5706247d9ecd0425190e6abfa9c4678332c30fa7bfd9a4b66148578d6b1a987c09712764042d53e97d43cc07a9e54aeccc03519fd2cebd3ee733a04b9c07eb199d3d0e08ba4d810e326220ca70ad1fc18adea7406d0cf30cb6346275030c35a7f7cffb45479b581dd8e44b050054ccf2f9caa7c6a1660280ad0e2173c33cc57ccf5b5aadbc5bf82f2ebe12b7069bb35211463fb298f1d429fd2e9d78af1ab7b98383a1b4fc125bf2fadc9ad3390912518afdfa0c2535e510bd18d303b8765838aaf5e4839884e5c20888fb948ee1279fc9d024a19d8bf708263130b6d72da24f6b56ba892048fc32ec2f6e375cc495ca700b3df8ba8a167f16", "868d0cd75a21f71fa4d3266fcabd53685e9d2e7738586d5f69befdb813be1013b7cb105edf65c2b6dbe3cc80b66948018c6a48629a27aa5002efbfce654d64bbeef7f12058fe85374538576570d201c5b17409e9cdf0a49bd38adac500e82d116d2ed9d563d095a8d08ceb88447728d8a0415ef38936b2c90edc2548b8d174f9468eb41e2c7ea1564eead0f77c1830c671e720da87a4af7572bad5f7294415ef2dd0160c45fcc7abf2ee5232a1ddcadc0a70e528bf37c16c3acb9202919660b7378d0502b41095848fa29eea1bb72ba3122eddf2bda3e0cc34bcfd093df79e7206c3dbbab80d477c519d434fe3a90cc5c1f466fcadb60bf20a78d9bada7cf547636c3f45e1f18150d2bc5a8b9f5eee8e4e9ddcc268babcc75d9ed011bd920ee364ceb7500a64f075deb23d13a2470697364dcd3f7722ac67850bb2940a072d48", "8d61c945782c36c2ebfa29d5b30253b826b153356ebff9f3dce8c4d0fca95844a294ae463eb8b7073bccc01beaec0406875e22fdad4b193ce0677ab1c2f2244a775d8ec57b26d1f47e9ef20c63408b8c59935d46779c25d42161b3a7ef1caa7020e63878338d42ef1b7739ac5aac6199cb9f70c2c7c181ba6a3307053ff9974214fb1c14dc7f7e47bfafecf1130639ab5900a486e25a941d75d2de10ccc6da472f93ff7b96d4f82085be71e8be789294eafa538920c30bdeb9cc4c7668d8ee9a6dc4b15a39a7c8407e846ca0f41f8257a1a4243b1217b3a0c784d4a51fdb2bdd0a8463b646225f4df831716b37baf33f87c93e4046d3b61fbd306ccf38d4dbcb255cba80dda46f5520e4afcd69ef376af21425fdf2f11f2986419192a96355a9", "a873f4ede35fc58d847e8632459ac273ba96881b8a9668c7b7762b76c2344108fea73d10bbf3903bca13877659b3818e8a29b3a31b09476907996bac907dcdab7f66fd341f82decf65c443bb28b0821574ee1593f97065ff3b5b0b083e206edc2810e9f773b596b7efb0414ea69bcab4127d480d7971088d75702db2230749b85c9e0ca9085b1de447852f3c87bd75f260f9a15814d37491c85f27a8e9ab332c66aade8adb9410a443c19b90ad271982b1ed813d194d3e058ac9df36863b5d6f0432a710168bc26ae50bc266831a59c2f7d496363be26ead5f4681c6f1c9bb0869691654b2827d62685ba36e3ffbdface0895a5e06d3b2e138127dbaed2fcb96", "b36140fc979a794f3cbe579caa6e6f4f07d2d22016c1367744634ee216f6af1e66b233125f486e0fd80e233eee19c443acdb156c7eec962a24fae709a1af3666e582457c5acb1ec4d8783e84dadecc1ba61d5549ef07c5cf7f2d3987c9f5fe466e4710581a820d54ec3e4957f44428ee0431bf40c872aff6e81c1724b63665cc3b3c76d3e5bb496ad3e89b48b86ef1ebceca8fa22b60e0dc7dc67dee94c187cc0f93592a6259a17fec3d5d0618f0a5cd3040194ebe71464d65b59a406d38fb7b18d49c7db0ee0f0bd1447d340b45ea80aa55d51d848a25a8331a600bc1cbe8d3"], + ["b72b2b5e8f182966874564dcb0eba4132b7e85e0e70b09c2941d3e839b70734c7aab26c1078fb8cf647003fcb3d56700a2abc9f6dd38ab782bca7f27c36f1560d57d45ac6caa7b4180f975e117eeab7b968b429d76f6cf2b049fd3d21593117241d97da2eac28658f7121ed5d8afb289f649fadd8ff2bde58ff65b9d1ae8ff33188a5fdf5a8ed6f5cb6f124b771a75826ee11fd7ecee2727702acff454c642f73675137e1351ace80314e2d05f23d30b0369112c680a14045fed8ead2541a59153496d74f9cb53a33fdbe1420d8cb374cc31c2c0689c949a8993eee986d7806a05f0831889fc8b0fc3d7932e0bb527c01548486f0529f444cfb1a07ce12735be40b15bb24463378b60a086889a7173d5420d7bdb7b8572b29e3439eccec8530f5be459649eff4ca55efeae620915db0115af0802232fb6e3175fcd8fdad5179f2d2b89f2338f20ed049c1f2e3014740cb513a691160693061ea5aab9a5e64eed41525e010598fbdc5385cd42b246adc91da8db8e642510242cf8f4554d8b40f0", "897df143a231f36838a97eab811132262657bf248a0db1ce85ea905a8bd1b0466c7da0953dda3501f43ba69954c31dae959bc3cdd575dd3ad81c79f19ea3a4e702ff59a08e47bef126b76754639da3b01ff329e47ae15c244a26f3fef049c33c6b147c46040cbcac79149e288c1f2958ce608f2f0a97b286c8e1a2dca3d33b230e69eefbad150ecaf820b3482322b95b0f20c4ebe3e2501ddf2693610d4b6d9360676b2aecc8a06ab6b1a632c4f987a2ce2867755f0497a49d7de09180b42b7e302032820a346f3b31d2f47e971009fb14203ffeddbf26a3b9c1d0ebcd6c8b22074f15647acb240728d0ebccae0753c846f8bf28a302acf02a56e2b596d5aa7132d41dbe58ec8ad67697204643e62bfe798660fc8aeba184cd8c9d90590c56483624ff82a3d44b7371f4dd27f5a774eb22a22fb8742e727a529affada391a9442b909509dafe25506c08a4ee5e7ea1a3a1971dbd2c04e6c9baad360c8a472e28", "8642e12904260f2ba9d2318f48d7319feb9d64f09bc8b976aefaea868b1d7aaf39fd8275d7fe603cf7b5e0a347192765a2bc1341b026b9a4c7a49a49a7a228c0198cbb2353a283f09350c2429d7e3872d53c2b331238d7f9e57afa8b76f85c281a2e7d52784545777235f11608f4a39976498c03d19bf659430bdd6c2743d72b43488551cbcea0e120b13cdb16e5162c2024ca7568640a10e45a0b44e012fa43627dcda64895e15084b53476507a8e957b2467e542f28d03238deb24a8a973e15d105918173d6d3571d1fa9ed04744d09f1f065dcb7c6458ba02d56b66adc2bc4e0b18f10c10c4d91f52e78d7afffc89f4d8bf10684278bff2e17bca395f77f6417dd321415f3c11c0201c8715e43f25778c8b68567b16fd3af9e9d7c938de102460d6328ddf18620d54965487d5e773e8783ac4c34e52e2829a8d2ac92b3e89", "81b848795c9e5cac022b4e868abaa233eeda6c73fd51d1c78e4117863a595f7c337b1f3f9ec66ebd1620a6d10d96d575b2a95ad86a569878490a7277d1c833ba2e2fcf09b9f8967fe6fd7a487484a820d6665b8eee46bff766b7a152f4e11f5336ddceab4690af1c0d76b177d3ac8b73b2644940f85792f6e7d1c216abea894618ab92a3767bc91b3743a404d603a7163e81fdb2dbc1a9fc9039eea70101fd0d05e568199be0609ebf52323b57db3f3b2737a2973c148799247af66248dc9ddd0c93992aa4f13972fb275654664a91a9082673f5fe801b4d5db68997d14fb6e012104417aea1640765d596037c467092d1ab1b3fd618344ee1e884a7b31feb91088b71b01b976a237def39cd2494314f190e809d13a6ee809e72158fb1e6b559", "b5ed538e599278022c5a68ed9522a1ab489cd3f7187efb5e60934a9f1b6b55373a4a62bcba53f382f5e5577f06a87c05970cfd1331939c3c9ab4799b761408cae372ff71a4d7f66a966439277a0120e596c95f560973a3b65c62fde87b053f6172deb09adcd39519cfae37c9c95f0287816d265d8a7f9775733abfcc32f3973f622b14c59e4b929aaf161b5c4138d50987c2b532f98867877d83da7c61916e916dbc2d95e98310ea14bd95cb1a94b47ee2cfa78604d5e7dd56fdda122f51153f46d645e794fb3e271d714e94d6fee3ec0b13534c384aa7314dbb18a96831f6c970df41d8baaaf57b859db29432eeefe547bb63a83eb18bf2fe3591dccf62b92a", "a7b56c8ffea37f6b8834047c5a63a83323efef063f10f03e532d0672af02fd9998c9536c92c53958b82da6369c2a6a578898efbfbff581866af1d1d408d0c05417f6c79f05eabdf2a1a68ca03c9b8a15c984368b3795ae5a51e771ebdc0d1a8c31dfeab89f6ae731f16ded7034b68e8a15278fbb345f960b0d1fe8fe5a22567647654846a20c94e8b33c955940fc38758ec0323d60cf5f503680af5f3ea734f059d7081c781237d893032c7b8b1acf2a4400749d350f6c45274b31b3acb035bd6b934c44afd0ad4319cbb596bcba9c4a78361eb0dc5b360b859116d1b01588bf"], + ["b3e6dbf4a404572b4df70532cf10a0460188df3bc8760f9ecd6e7a2cddabb02b7d585d84ec7021f1d4f0e3bd343a7d27a4c99f6eef3b908b543450c10289187e6f96cb8a7b1396e5dd15d1ba50de4c05366e67c4be2c899df725ac7371d05e691c8b20b4c21d92170bb18e03aa8842f4871024550a21c8102172cd26737070e060023aead42d44c4bada874510a21a6929440ccfe20f6ad86cb96139d55c354355781bdc57f820df41608fe519c080a438444f231923a3f2a0228e99a0e917c51d59422c3d68008bb9dad2228b1e4f4f91fed8ba6809dbcab9f8b18e9a7821c26d0afb6781bbf8d53f334b3283c7bc078f0b70bd38bde3fb892138eaca6907b61e5c3088e97c589be79298ed841fccafcf71a12292e7cfa804e17ae65bda9f2c00ba36e1fbd335245c2bafd69f5247db3825d4c1df12ea9c0bb0b289f08d41560b05f4e3212d1b2ae8f99dead88a7441ce8965e26cd360d949e5bc26ec750346667afc77d35467194a16f76334ac0391b888aab78cd311e5096cd2230f96eff5", "8e4f1a01e568ab2ed2ccd43101b82729c0faf4a4ceec32cd82d62b2a299b2c66fcb233591e8478f28f7f3b21d6dfcf0095f27731dd794bcd990def5c3cfc7c9ff853604bdcd35619abcbc9d539c3510a7b798c9f9777a63b803ecf1efd73739e53afdb2d28e2f2f1c29d686f117d192f41834881ba902ccbc527863b7a50ed0158b1ba303de97ebf13565e50d0de37af8ac13e9302dbe20abb92b6760840455b1fd0b3caba09163ed7b9ab5eeda4903aeb47e8ec6af73b4fb99b3fca310ec14a4e3ede78e8cc0ac56a7c7964b5dadcf427bf6617328413e49b23f802bffe4da41d55a11c06c135182cc9ccd9fea6cbbb4872796b45d268ff26885c1bf0dfdd583d8c8e79225b982934d13217a83912c6acea7cade2a6d57822ee5a8613232dd83878f116b49a514b3572cd1fedbfc25217ede7138cadfb6d375570957bcca36b3aa156c93f8ae36adfad861e78054b2262c03b1c4a839cc425e782c14631d520", "90746824513fbcdf0908f3e58726d310c421a552834b837a115bb10d96ce1cae34e92c2cc5e7dc2075af6d67bea482a9b10769f4c9408aaac90960dff184cc06894abe039e3f8b254951debbe000826d4d9549d3afa62a7d0abdaa6e150e3edc4bb103ac405da6de19a6cd222c9cc0e0540c58b5f8b4496d6c64aa18f5cc1b11456f68257800409c9146f6e5b81086c17d0802a680c4ee314cee5505072d8c3f02bccd22ae474c4e4620d66af68352d769425a82c8e2264df45b85f4869be2e762918cb07b44eab4e3a5aa0bd363c2b7ef6991d16521324caa54bf5e2bfd4f0162e0f6457f56896f8c2cf7489c2c723b4e9a283ebb00c628461eaef280307df5677095857541b1f7d2c408f048e7bcc37a60b87a3ef7d502572e19836ac0edb86534567fe890b35b374d70cb78c1b8c62c75e6d65f3379ac30d9198277d0f5aa", "97f7d6456259fa00ab7d0207c1fedb802557bce70e22ccab75abfe35b0ba25f9a6851e21d95e7c1b3fc7a0e96f6570dca6f0a032c2c80a3b93c7d25e9e7074b3c909218b1a5d98ff6cce2f0f5fbe271a39a942fb9d4311004e4b5ba960ef52da13d29d7a983948318bf92833437b9ee893b7d10e9d5d8989212b972ccf702c84278c0c4658da3a559260bb7f9c58471e8b26f340f3709d8cc9e1921953e887e06f012b90558c05abcfe0f25d97c346ff9f5701030de042b539664e3a040aa7b53ad02e2ea784873761e891a6dad76ecf9de34de36d61cc26562b887eb26f6cf90cf0539d93672fd6800cf4583bc300c8dd48dab9766cf54fd928a22970483187504bb3aa444604f4cd75aca57edd3a2b8893c3b682cbc9f12ff3c8849b2502d3", "b893d87c1b42eca33d3bfa435e09fb1bbdf3354a0bd35c839ef15dca7dd4089d9d760ea71837b61107d9c975c91fb43899860d3614b40091fa5abf1685869b28604a030382c3cb0df16d962af8e9cd49da920241aaf2fbbb689b132fca15f10d3b6e404a86c520dd52308bee194d36bd0cbf85f79df0f3f9191e6f06d6ba441b65315efdab740ca217ee7fa9583fc9085e90caeb0ccef88ac5eaa74022f79a814a0dd1de901f492fa715173c87dcc6a2137b41ac7f8fbd956eee69865cb0a95d715eb6477ae654ecee92601ad0afb19fafc70afc09cd307e330713cea6c0090c43bb001279e13be24da489db80daeef8fc1c19441bfd519a83dd40eedc6ff89a", "87cac3dcf2eb8532d5b9b54031df0e5f80c3b574af4aff5ffd5fe78b6c44da8379a7206c183c57468f264ec0871294bfaa3d1d6f96733dfbd45f4a4030947ff6c41dce11b1211b3409ea2ea6c4dbb04cfc01085168ce72c7d8bb853e1ebd4af35af65227f04441c2d2f33dcf76b48fc55b9a057b1110d9b8bdb58a088ca930da4e05ff37a412626bddf3bc25df972b7b00c15c0b8458732b8c3a84eaebf786d8022603b1246998cd1c2f749a9e8a21b781d6359f63b721f604a4a8bcddb3295f487ef6f7a89f1edfa7a2afba8f80e1008ebe16eccaa224afab5ccf67417d6dac"], + ["a1a1b00d9a814403e28c7e0711031fef0e9a297e9d25910e5933fb39ee4a3ee8b9a3d1a0692a03571084962255a1607186fb9243782ca13f4b8391a3c1824a783b2130b537c3bd74951380abd26c3da1c69b3bbe8eb58ba810cea6416d8ff2cd1ee643d7a884e85fcf0ffacd6c7311a9a9e0f110da8b7400efb5ebf5de427a1f59ca8fab2ec8e4dafe0e2a71bf14be49421798b462593ec57870aa010922153e116bb8bff4c1b5ed4836690f7c55d049948870d84b24091b6fe9b1d714d545b6352b9713e8c2e2c282561a25ff1081a9a472e8e51711eef9df0c378e59f43e8e46130b0b6ba423a3fdd6ec8c58ff9dfe287d6891c49971300895478db9e7c2336d27f6e7fdc3e10942607d3f8bec1704dcdb8e4d5eabc7fd61397143e3b5d55945499ca8953c21209dc8723d1828419dc0750d5a7ecabe109b84bac6935642635352a78343ad9fa75d21dc1d92105390ba4d2b61d274f6ac2062b2c5cfa3997315208e12eb73feb29a3e1f9966b92325802cf25995a71a02c67b302525646614", "a56d3d87e67c4313c4f4076be88f6b6da578204129281c1dbddb7617ba163c27a309d753f951baf32f918939caeee8d1a948f7a774716a78afae2667a1bbd64870adca4c9b8061455fda07ea284405a94e4334507245a19280058684afc4cc505d6cd681232a7e7f05698532261d11bfd287f5f38a4fc29ede22145a321d44c816800c068c1c81a6db568269fbcb8aeb66407b0e8124c8f9d2102cf8518d2c6f465f3b032ce7e0ea056b99c88aeb5bbdd78d559546b910efb612c22ca5865ad83430096edf3aee125a6c53c86ddcc3b16541fe23e6024a595ff515dbc4dee589418e7a8e39fda1060ebaaa9536bb24dd9ee21834f917443d6d3c8612c254f9dd6a2edd8ca63a5a74cf9e1f7babc52db52e626e10133c4129993dbd054af18c7e1b3b1eb9eac18677962d230bd628ea2d6c4612bcbaed5dc2cc50fd8802c80b113ee8dda7c519c87b61c3485e9cb691c5ea005407ce22fd0bd6c4fb4126c05d6f", "88c5410c387ff4e2237ed4214310faef4c7df13ae48367877e74a20216226d2199ba5ce68950cf96d3981e1e30573a26b303a92255fde3d76a24a619eef35d073e4846b0fcb5e530dcd819da48398e7924878ddaf5a051a3acc9566be7d9153d58e64ceb8c0f26822b25f33fa04df694f4c7927f49abfd452e659b0a7b8dab9708e1912af2a2370ca5690ccc7a8f2cc3736e1a6994e4f9ac36cd5b3a39d3cb955242c55d8f85b407b2fba16f5bef107d8ec5a6e4549de620a2f7fb58a235c0276891754d795fee28c4c4dab4e48f76b9cc793fab40f1ef72b10a6624a8d324292c139c528a307bf6e3d7f8cff7d4c5b95167fd1e8c26e79d534cf60384ee0fb06fd78dc4656982ea7d6585942a33ee3fac9902ab42bcba5a33f1d1e16c964d916d1c59b65603832d3b28f04c62c5e93017de406356f25030ddac697f38b902bd", "b9b9675352973abae3dbd12f7d8d20ec1440496cff63138d86019c7f497ce520bd64b640c8157a0206dc7cab1a810072a0c16d8b9575b3abc8f2145c19389cd10cabfe77303a88e3569431d664cf8514db46b978b9343471795f4779604f293d6e6fffcfb2835d897a743cfffbcff54b34b1adef8ddb7dc18ef8f20156ab84da61447964f639031ea003be63bb80bba95e8e8ee2f72b09b633a576015d0aa4704ec861600275e7f5968f68712baca654f72c1f2f812b899233e5c18a90356084123d6718181a8f021128209c511d389f346f848d855b9e4cf005da7a3ebb63401ebba4107c5aeafe3973bc8f54f049cd526fc0a0e0759b574eef2310852831a94fb7a22142b886e59fdf908dc15b4abce0655d52e4ffa4a6873e82b57f575065", "8d049100caa123cca449eec037d9556eb447d9450a4694aa15268e70e62bc957916b62ef187a6e32182fd3ad18dbb675a0095335d288d0637ef3eab23496a26816d68e1198b1f4e5801bff99bb6704a58521e42b7f88d3d93ba03e77a40e39b51c7ca3a73010102f0b9e42c02d4f91bce4d3ad302bdaa80c659f5fc1d0b6668c0be0387529c13c7a64340f9589accdd201a38ed433927a235cabd30366d66bd10916be87137fde1c5d9d40a319b237ed6dd129da702d9834379082390685ff7e5788ce9646cf721a6085f23cb4e306f48a99ca7d9a95840bbc05f4a340089193278a40e5ba80c49cfd5b5f1f10c431684a68a426a06035aa3de1e3315892a6df", "b13cea42220dbaea1d14cc7dbb61f43fdea368784d8766c83f391409811a2ba52aa9cc4cf9c57183102023f7f0ef05d2b0df2860de828cffb017f98d900786b93ca7da1cd1f04a1d6a665f1d0268b71510d7e94986d2d4af933f3e3c0c9f5cca1e35c461a7a9616737ce97d5204958d6597a8828a75235e2dabd78d2634b82593f18150a66edea07fd9d4d964a332824219c6a8064c7fdbea09a729c6510eb2437b4868360458b150ec1f92a7cb6318ada48a6e2198433b0c3153199dbb6009b4399f42a8e3faf47b31e495a455b931b2cac99d3ee58ab65a3e7974f21c31e2b"], + ["a9bc983dc3161d5afe323d6238df154c110531636f4ae534c0d1dc59531545530912bfb73feb871142e87151806a02afaf8bf58adc425f560c28126fbebb7aa9c3d36ac8398d43d2db2b042cbbf0ebf51a48d0815ef6a64fd36e3203ca1e863f1805d4ab867393fa290782ed07d5e4b16c2b49f783327e3458395961c47ec51e72e6ad466f71cac34f84b29310977c277a30817f16ff5c52c4b02987ee839c71030dff4f1e3631a549b161a06b2d474d4bf0bb1e697a354d95f1665adc2c5b6832304fac1c4672ea542f2ba897aadb9560cd89b6b8650b51ef8f54bed640a4ac51cceaa4b3ec25b3e76cd27d4a18bf81b31fa4d914ceb2b62a316aa09ba2981e194a764b7423c15a85642160f36a11d35a4647df7d856e0efa593833f267d57171012ad841fbe37f2f2686fcb879a88490cc79d2716d3780c2db51e370811a421fb364a2e21ec95cbddc1ff53024bccdf5e2690df629052a2acccb8f77cbd3c0688475e238a059a336b6579cc224b4bd3833e1d7310e32bba12c14faf34855db", "85727adeba27779aadc1ce4d79e96a338cc654e7b42a31184298a9198478dae755817a5373e159ad43e34854fbef7e219208ce7f431a94cb8d911ab6450faf8437f5dd7248656d8e4111215a863e68368d696bf8b601400f7ced954275290a5a557bf823e036cba09abfea74ca395289999787f4581816ed53c57cf73152bc8b21cd3866f3dbb7f0616b2403be371644bd10e10f0bb462b202a303462d5298d81984554c2733c24194787f41b69dd80a2c8e005388872f1c5360204d68f3befd564b03a6ac97e1d7d0f2265fd3c375a0807dbee5fc96cb64e0f4f64f8e6f9be331ef9e15b9291317c03abd2d4c35b0f3110d9af2ae0ed01f5d9b2c9b08ab26a733ef03ca38b43a3d5fc0ec72158a97e7932eaaceecd59eb9ef03de8bbac45a9c48ea893ad3151f1fcca0f834cfa89f1797db398b24370110887d6b2f9b002dd16cefd468b2f59cbfde33e37acca3f7975b46af81a427df1cc528331657dbdf64", "80d7fd0730f0115fc37fa5ee683fd9b0de87e4fd27653b26499bf27e386d80470459fb79b75a4056a4ef1346d050aa35975cb5c76028d087632c101bd191a43d599a6cb5d137045555e83ec9016ec447f272af8ec64e85943b6c2e9d281a19d312827dd3b840637c81420c172d1ec9951e3fdd82115fd268b77a30bd205a485c0dd2a40d7ecd2bca0dc51135a8bbf2eeee86b3b28875bc2101c6b6e4f63db9023b9b3a53a8b18c39258794b24e1465c9664107f3f24a3863717db6631aebcf9959c751ba77872795a863e7ca788e4287a91728b57bd69d253a373d95df711a7057501c981a73de5980ee3e4730a9130935687ff2fe7651d4c38e9fbf71e12c2c5e529766c57862148f042ac153490af9d6d45847af3193bd9c8f5f6d41248e3f6f019df448a4d726dccdeecf6d0045b199a5ab9e7776a522b1ddbb1a2acf31c0", "8053ff261bf9a7722529755c8ee658862d93498cfbae94b0e40a8f74aa5809030bc9373c44fe709cae2d6a4b827edc9499beb839329b65627094a4d72cb25494938aceccf9b1adf8a9719e1ca78b7716ff234e10d5deead5006e7b16cf8d8e1b68872d2905ddb3f8ed86e049e086ce694233039db153488d4aeac87b52f50b393afd4c995d700fa26f6063eff812c5b1d3924285223e57d2b8d1edf9af2a6bfe5958ef94ce72dae030a57fde68ece90541c82df2e53d6632df026f86fd3459830857d6a0bf59425f6cfc11704a250fd2d41016888a3f5458f18070cd1df588e45fa7641ccb1a16df855f958a4fe9b28bf8a1f39ca55bfaf046b94b57455adbaf469591d6fc15c41c323f9831399a8a9c278382da6117e5d0e655cd6cd49be9ba", "a3a82332fdaa0e25e0b304d4744de9d853b265845e9dfb38c764f9f679f37c8d4eba777b8c88c4f71526e5c1e3d235a3983c61fd5e7c0d591cccabce7094579e56a8a595d967c60fdceea0b9dbfa3f912233df625e3daf88f7131eae12cd9360234abec5dd4f50261b36e1b40a6e0913dada4952955ea2a0a94e1e49e2c6eee7297c64443909abea5eabdddcb521784c003ad1491df4663132e0ad0078e7328765f495131febd9b77aa3ec04d86a4e53ca376cddbb08be78de2d20d3cd16eebe4b28c00b98756a9131c3143dc8bea012820b13bbeebbf8ddadcabfa0645264a246cf0f1868a0c5c0e6387ec780f4b0e0d1fc831afbc6bd25b8dee2b939811e98", "99bd2e3ec1ac2d226544cff23f7f0fe138a23bbd11b0f28c9a786f823ea81ec5bf8096011a1ae704574f5d9d18b41b9fa80678b4d1bda2f7fc935e351258e5f4ca6708f30977f2f8316ff1b33e7cf783f65ea6fc08f760b918ef0615b98d35d3345a7ba337ecc2763790ec3185c0f593223060cf6c2f6d46effe44a58199320262feb185b331f4876d3bcc5dc13d8c4498b6207d0943dbcd43e2c9159d3aa1361b258093f510534bd06cd61eeadb757830363b4bdc78deb14b78cfee04bbd2e56bfb57d79c01c137b4717b0064ced8bab41500922cbac783691a908a9e0e3e9e"], + ["aea4213ea1aef7d13ca51de56bc5011367d13c64d48aefe9eeafd4e5fd03ab96ab3f59fcc257c984a01815e27622cad9a6021ecb0f2392c271347fe3b601c07cd7c83241e3d0ab31121373731d614e5c72666c9732ec457b61b32ebace5367c7504134274f9a337ed4144916ab8ac46329ed407990001bb3c877f19c2c4ab9fe08a68003df630fee2e233e97bc4fac7d8369737918db7ae8afd39b2348093c2864e3b036df707dcd183f6637e80e18472b0791b9acb57904135fc46a6d7350d101bda6da4045a1eb4bb3cab7a66b5dbd6c8ec44ccdcb90623f4dfb770912d6886d6fc387da9b0e7da9b2a1b3350f792d5ca6d69a429f7f7caf03fc02afa9bf364bcf80fa16ee33ae1dde80a09820254aefeb86043d03056d86c9f8a5b85d125a353098178814ce91fa6a7061752430ba83bd3d190b7ab47509aca5de6850d6bc2d90d1c4d5a19e81b7f2bdb716a7f50a8e459ec18281c7278e6950a255df8b0f3281d0a79abbdac3e884dcba72977109ea163fabc2d8ea417c4fb7213811d76a", "b4968a39bdddc43d92916bd76c5e9bac3ed049d40fa483e4b409f17218c24b1197ee8e3a3e5c4a52e34b6a4bcbf1b13badcc71cf5d7b47d82de850ad859e66db2c7416ad4a2e995078acc8c7321cc310c2d003b09e0f078f91ba0a8e15b4dc215f2db52c6d60ffd7016f9a2e949d750ed9bf385fdc42620e90ee421432ee8f7e5f9aa8925e959e265bae9478b815c601fa30e4eec8d05264a6f60b45f883a496551f0a8a514182a0ca26a48afad1354eebfb144983aba737ce2307bf827f30b91a1c2e0bd3607243639c0714a9b3c8e42b655f0eb63700ff9b537ab1f99f8f2f5a3284cb902e3ec2abcde5b1045927343d684e8acfca6272ac289d4b314d3e334ef19c6b6f3ed7624e2855e0b1a087a97b9abb102eebbde74d3b389b9d84d20c0b7bebc485c0750578332dc8dc9b523888432868229d29ad58733b0335b3df1c53b9865bfcbf5541e8dac0120e0dba6c03a9aa1f57a14ccdc40ff5150d03ecbc", "b209a2216e6e0eb15a034bb970e22b665eb936f6294c857cf3dca951d79e771115809ef39e1f8004e194e4e1c9aa27f396855b97cd8dcadf032254ccea098b89d8e675ef7ecf2ee7b111bad3cd4cadc856874be5992d97bd64e9d1a0d4d4a86262d3d22da13047918b7d8ef34e6afc34c7c85315f4a62b4f0801385af87c9a783e76d65866f5d622cee69e42efb68b4ee0050cc797861785bed03a0dc130dec71d79464189a9d19440573300d5da5f2340db6d14d373ff3e399b18c95cb40aa24f76f152c12d4f24e1cc629e62a710bf626aefaf5e07ac438a632266a56368de06b23c51f278af409e1e21c9944ee001b0ec66a8ce88b2bb50dd0b386e45debc470c3c878fc55dbb2386bd8e3de847a8af9e7f406c7cdc22acc53e500a3b9a0a3da81ca51783d8b64eeb4751e05f35e8f516502963e8d54c94a799d4d47fb690", "8e7c82076b7c76e14d1126d8dad12260641db0addfe8cb2c1185d7709101234a17a9afcf0e10317898e45d12aebb970086788e74715c3ad752b2847ebc5294b587be68cd0bdf8ac25c30a3e80bed7d229bbdecacb1fad89e063ce020d5af7cde5321c14dc7fe0fa6168e2291dea0ac49065fc95c7a717b6b66433222026b8f082e47d69505fbd4629b4ee778599c807e5a2f2d7cc9ffbb1b61a86aacc48c7912391ee78be6a5f9beba71cb891223db40584bdc6452a69ebd27f3fb25ebdc81ef25363215dd6a5bd37fede18c432916b16834a144db21a0b9215e7cdb392e983e05cddb4642e77c35dc8d30720adc8c442f9d5326b0dd03011f477573e769bbee0193e70464d4bb738d75e612f52d67ffd1c41753b83fb67d0c1ed046553685a2", "b238fca13f64ff69dd94eca60f2ed317b534f7f16bc15dcbdc873d15a98ce1c8d26ba5379c8ac6879569c999d17778acaa4d5c06a126aed4884b8a53a169197fdea9b973d82a5dbba08f0df9b9de8aa95f80766e4c1e9eddaef8126c3b33f0465af578d19d4e52ea83aebb940e250ef665943f09f71a25edc9ddbc19d85ff4015fcecb7ad48e4d9b4fea31c1c1b36092179d757bfb8d974616aa528f9771257c713c71c13c94297376a367582b6798df9bfcc960dd4e573bab16677aa945b503233a11f5984aec268d1bfa90a3813eae0b8fc9ad8a898b214f687b770b52677464aa84425c560431bf9d844f3d2b34da0a3e6daea84a3db00f7c189b1063179a", "a9de7a5f1c6b33a38b24dbacbccd429de08083399a826dff38590789e218e5b9f91d17064105effbdb1083d960511a3eb65209f2bca157c6fc3a9c4da3cddbf954826b2ae00f93f80a9b4f7b2a5492f9d1f5d93c601b9a48ed7d259401158e593b9d1d63fa646756ee94f8d82aa3f9b0e14f68dcc53a846e54d3eb4ae2dd7325219e462c843a2d23a98407f2be687a44fa6f26c7ecfece2906b7f5e783f9ca8d5db440ba4ba4a24bd8ff846dc71a6b2469a8ac215d6660354b98ca63250095105b86c5f14d3387b6783933a0b5981ac404973e0cf0f64a44f506c980ceca110f"], + ["8bf759427accf2bc1d588cecf92761308dd190b6c1ce0c30cf9090e02df220335676b03921d7141590a15d46e92effb2945f7d1fea83d862c39b3cfe5090bd552ca73211c4622b76382bc99c4407798bfa326108d12c7bfca8036f61d39a1073396f998790e97dfe25b92588544633b827a33c67d12448ad3e3150f37e52d3804c0bc7191052d98b61bc52caa57e22602ad25b815839d2a75c29f0ab14d2871106353bdd4131e4124fea3044740fff63ff762fabd703485b270ab4548356c3447247f7d3e4549ba01f0cebb9de8feda88e992d9ca3cfce39e2ea79e25560961165201ce41e156ec3cd8b8f1a535d179c399f890ea096c74167174762e13667a6396468d89e9646c1c0dd8935dfe524905f1a000d83aa3a90d840025c7a96097b21f34ae4dc0b3fac742b69b0dcb21a2580257633296d372865aeb2bafccf37e1344427365fe8e03e5d560e76365603c45f9ce2bce5ddf4e837dd2efabb5d470627713ef979d3a93fd2440c1b2b5c035fad7ee0c18b2233e9fbf64f6f991695b5", "8cdfc2170e7c96877452281b1b1bb2ae96cc5ec6b187fee3459c49b52baf76fa2035e9013fbc290ef32a3aeab5314ee790ddc44080c3f0de2d66320f168be07f0929be3b96cc9e6e17ece2ce4c96263a431025592b5953bfb5b989e25ebc49985df1fb5a31d9d1bb4ad798ef5b2a973d5fcf84bf345e9da7d8a89147119983d0298b9b08897473c9c8f1a16a098cf05bab37ccd669155267e7f0fb7fadf138086000f431c3221b5686195155e212fa44f82baee7bbe6001708ac4240e8b429b147850abf541555d430223eaa5c4cc3adeb7d803a47b51ccc79e418a19c0f58d801803c1a5235d9da6b7bd7b1c4ed1dc560973845b65067c219ae959305f5c4ee685282a99fb52a23eb9e0b55e4b1b67f1cc06c80663a66f28dd88c45dbec5690582a9a9e870f7a385b1bb5f6f47f3ea21bcb62ade4f0a288b13a2815ae3af4db27671d31d47f08a096db3bf9caecd9a594901c917ac90b1de65e729d70e1439f", "959191969b75b9bdf591042de66c6225e88a852de51c831ca9ed86df50808745ebfe33fb5ccffaa3ba82a0bbc0797294aafd0fc3cbad2cab96ebb9c2ae9d2a853556f4ec94f575713350d13f7d553b6cb28d5fd8dac63808cdb0e5753b4876bb5bb2d4b3d7b06a833f83d8ca70004082b9a76f608ec6e26231faf3a018a8335465c174ced705df991cc604db144482576371edd1d6b77c613a28e2b0704a883571ca7baa31454603b4f229f091d0e41d9139c49230fa5759d24d9109573f9b1058325a18f8755e41bf9ff7160900619a80163a26c35fce72d155a0e1cf741f68553fc8c2c3db4391976430832488e0aa81f0b8abe4141625c6073f5dcbb4a2d70d5fc17fe7497881ddda3a6ba9ac5ac5e01f94564584b241fd2bc49df8d6717b00fbfb97d055c33b949a39e44ae53928c3db724a9be1a76531149ec0207e1278", "b9ef6f5566bb29eec1620db35b8678f975fff505a7abf2594eeaf364ef161e142a9d4003331c8338bb23125395f162cbb5c94477bd7b135fd38e298a16ac432b9371e5e05ca801ade60051dfd60ce671c3a3a251e2644ad56e50c0b76bb2b7ba719addef9b2b086a1d6eb4df64146251d13c1111471655e02e7d2b1fadecc55a53780a086bcb18ec31fc1b08eb13f041bc6119b00d13b26cf656704eaae85323091f845759d8a63b800731766f30544a5a66b8dcfc322ffc47c73f311cc1fd572507ac8bc4fb95f35fb1c1f4665800d891407115329a57df5f8b39964dbd78542b54abafc6646c42247e23f89efa0dc017fcd02a604538d4e3136deea994ddb546c95a7b6694150dcce0f411a6d4afd7553fee9d38f555687eb29f3b6e083b2f", "8fce1f867f190525b16e5fa4aa594ab661bced66523d89c0f7649253b6d9fe356d853e6976b21fac5283452adad1cd5b91eef65f8c209e6f065031d224539280b173d1b6fb0ec163bd1ba593aa5dfaa1b543eb79411b2952e375c9ca6c8d495918edcd7813b0feea56ba4f7177f0d029654548e2054d3c5dfe516f14a886008e6168706c149b5aedb4da9f0dbac2ffe19fe83d8b9a431ae9829337aecf303eb813ff8b5f6dd227a77711f21363884b38fb21d9a8d15cfc6c0606fb74f679df9110ffa339dac2bab80f60fee3a31a95de3fbf1c742306d4bbce9c0267c053a25e4cbaac87f46d3c2c961a3056e253363f09a98eaeb7d83546c2f02dc16cf5dc44", "96a4b4252d21fad2a93f5313a58c4212a3a390f94b5e9511967af611426b7603d910c897d74e99fbba58f8a53012cef0b5ae088aecc90edf773a6c185d9dea6939996af191e41d40bc93fa0312177cd18362279425f61fa7af0ed1f41b5a73ad249255014653833af207a38b618c16dfd795a9cdf3ec9218804244cc948aeb3e24a4c7e39a77df12c5df8e7ee4dc4dbbb3132541c180f7e5b1688ec89f0f2b174eb4934877bfb901b31b927217adadf2eefe931f3cfde444b5a1cab508cc14874757d6184c00c55e04f60c49c41355137571e23cd7b7555f7a8bc82f78783240"], ]; // Expected sha256 proof fixtures using MockRng. const EXPECTED_PROOFS_SHA256: [[&str; 6]; 7] = [ - ["b5c2ad28db8ade7f17edaf65dec5bd8c2d6346097550c02e6a648cadfc51b2214f9f53df0c236d537efb425134252f8598af28de231adf9842743c2b67b31f02731b5c1a2da7422386672194342a3e88158e301f8db466e88698cb733a98773483bca1fe9ec2a5ed7f3010d23ad0cdc6e06283c0b1fe91b8d18e1c274352ebfd329e29a356c09c002b644a01e728ea746e3c1f7adc180a168794195e0dbfa2cc157c73264744a951025ca871b846744e23babd8198e0b0d1c12835fefe84f62c53b25810727279d95e996658d5c12978655ffc9efdeefc61aa00cbecdbd7bedc9e684b6f4f1a8c79a961781827a0d4b448720160ec0462e24f44801b98905bff1eaae1415568ab847f019784634de9443aab5d9df02ccba9f3db8b898fe8f78c7ce78955a57384295d8be867e50af61b54b1757a090751655c3da7ff538c9e8e27338d0fc12a5d3cf1202a0462238d594cc5c2bbfbd342d364aca925e2a5d461825c67b1789287e6d231c82719916d366bceda0f97357bc5650f8f4b8a2b2d129796ae08a3e92df062ea9463dff723da2db803ad3b63a258fabebd94580043c766d79562471390f1aadb4c4eb1ed1c3651b9481db45cd9388680fef049a1550cb4be4de0da07766cd20ef106b9fe759a", "88bc0f6a6e622aa7617dbca57871ce6c3cfe4dc79899683425d8a6a7c85b76156406ba0e594636033130aaf0a924e8f8a026be804f0f9bd3b35dfc6a5c05cf4ef183565bf05cf5c315a68164eb49135361ad03431c1005b5575ed9b9526f2be1b6afdde2506b8acbcb894ab46e24b88dc46b7a41a581c4b0d0f783fa577d898e766f4281f1e9e59b1d3f5f6bf2dccbe028371a8fe3d1044fd633070f84795c78b1df82a07deb0505862f19fb7dc949b94897065541189da38bf7d490cadb9b00de6f16ffbe79e5926df481c1523c26503ed458373a571e79bc5787b165528ed4340dcc10af2b60ba1ce4fb8dd40bee304af815a99ea0c36bb915f1142a794b28896b662d6e8c0aa0016924c93ac970734e1d013b261ba4b34cf994610453fa7e70341eaeaac136b8f7c10807b4d754816d9eb739bde8ad0211715a32709e925c1eeb45f9a58279d16dfad4779f1106e4603d215276e4554fe5b17c87b45ae994d0e95b4a9ca98ecbf5b44b716d9b2c7520bf650e6b5bd11c118b59405b134d763c7c6bf708ab3cb6048b8ec4cb2aa731406f87dbeb9f38c8b83a66343b866d979378e964e944e2bcb331b0bba4223d54", "8f411144ff7aab94eadb972c64ed25d78b6edc9940b861361767f1f19984d891594bb92c5b8706396342982913117d2bb58e6c2f248d21ae7711f56aa516b4a29727b3329135e8e459f6e1e50e0b53b8185407f2203fae827ca3c38b6e2579388d0976f83ece28ea08004334d7a5e37fbfaa55051c56634b2b537a91645badffb4c7923b4889d30974635851e58b2d3d2bf8c7e46fc9be5d00ccdedbd3dfef3ef95e3859c1af22e3ca67b6eddf7f6b783a1de0d751849d73678eab75470967b228036a74b33004b9db1f093e8645814540924247528f8cf9a2b362ba5a8a34860525ae8ec8dacd8785c41c2acc353dfb032c60eceb2c8d4749daef25bd49cd76fe6a7ff928639b13f56a00043607f9a8393ae54b3045e2fa132c3e69f8fd981ca1f507ea89b444b3313ed352952df4d4460b5c6eaedb74c7a354fc2191afcc1929fd5dc7a9716d0ac9ff5eddb2c845c7559780fca6cefa501f2a689e6f4de80b1578f0599b9d79fafe9f140139e8825558cc06490f213eb88adc11f94c5e564f4ab0f8069a3a39afbb24ed1a1942854e", "b12b3a42804d57cdc39a6b0fdd355b990408ba1a59f9fca9f400294545f7e328ce5394b426459b55037115de3df33500b87091b22e879035329df05d06b7a98ce53e846aeff5420c93b731388199068c8611c8582022811ac4901df9de6d6727b48b3142b75731565993d151af05118957e511bfdd4644501f1b30c61ffdc0abb1335e03ba45c5cdc2a9af5faab2bb6b036e64daf4becbf77c864141dfc94bc953366759f9540b44c0fb43f977141b3500e3cc3fd6f0387bb5eb8f96d74e18282d17503a9d453896274872e07e9f976b1497753f18a0f122b5f90a4e8a4d730b89385ea02e15d175a988f52b80c905fc2917af59e146d633a2be64736c1e2106ad2fa7a52de41ba35008561cb07f14293be29bf5a217eec80cf8c4ce9ba05c59704fa2a9527e80c752e28a2e4bfb62db41472719cf70b176bc623e668d8430252f277ad626cb6ecf6dac5253043116b472715e746e4144a1560569af4e9b9021dc57598bf53dac4ca051efb465c5f2e7", "8c02f1bba6254fc30d71f1f82beef10cf937e5bf46a6c3b99fcdaacbe662625f68372a9ce0a29601ea266c269f75467582d25dff75fe6f3bc0da3c4184db8a130eee3be61c1b419ee5dc2d1686739966c93ebb9cda053db974ac88822509f672b18f8e6d5a07ec6f4519959ed67ddafa4c9655beb798f87bb301f6e1835712608a7aef15b27a75613d7eaf97b95118f13d4a57162860d1a99e8306a54a5a7c353bc0af11d09ace8a9636efc3a2796c6d5f7946503262e91bdbf4aac1ca15664c15a7b91bc91789d68bca1cb07588ed0442b06b306997e79500a4d935129e2e8415150ec85eee05f57c153883c552680838875bc1dfac99c9eaf1eeeb85b50a3e082d7ac8f25001bb0bb209f1612163955fe6a5e5c82bcfa313db329e75fbbd9e2bbaa2599bd50b1866982aab0e58ec5c04f5d21cebdb6b0b08d9580774c0af2c549407ad27a4cbce50c2b4a6ba6ca5ca", "81acae44f9afd2cddff686d11983a3be88afcd8fb5046266d801bd9b293ab511b4f42d306f0653fdea9098d1e7702ce6a42cc1581101b703796f5d324937c1dff04090f66c0fa0bf484ddeb16e31261b6081ece430368370e539122a058cf6d9b1a955c1c510c927a9c9f397ee79ae5c8ac375743f15e79ac87d3eea33c60abdb230c3ddfda791f322bb319bc9976af61390d1c590889e7a628dbc11ef6727a9798b387f88a7c09fde9376379b7edf573db0ca0204ca938392afbeff412eec976d849ac9f7ee739cd4f491d3a216470e389e2e3aa704cf2c31d7b640f78fcdf6bd91bf5171f3fe22b662414de3df5eb64aa9947062fadf41ff70012b8a7c875a0be8349e7afe519bf842076cc7b8c82f0c508732896c599318fa05e0d045987bf22706039dd90a515c460ae6face41f8"], - ["86c27f0f219f1526dee9bc82936177171e7d28455807b556b1f8edbe115d3a13f85729f1e897b899608babbb3a6635468d81b13816e0a2365a7365d42bec6b7bdc9f0a324ba640dea33ab5bcebedeafa30e3c4cb90d27719739195884faf72198b83643122b313efe8936d270e4b7c0c0a9401755269f99ee12563208a23181d81660659efba743d399160faf48e1db95919538d275723833ca709c2bfaebbe0149f1c051f22a1465a84f590e9eac7203bd00e100695717b541f32e602524cb50d56f73c47bcef548f1121c17133541a485d25e372e3ce9ad7698d423047b1ba97b517dd93f7842a7a82c4761278625f05f4b1cc1810126ef7119b25f99983dfa39013655bafc428e071006cf7f2ab465b6b207ff8290cdb8ebf2d88fa7e9f21002e0b079d0591a068ff48120f6761ae670bfa4282de63a32e26120d57fefbdc6309ede080e725f9a3fee17f88f4b3ea56c8cf6235cefcf2c8c58ab6ecd629ebf0c1e7fb5195f8398e6bdfb0657cbbb666abb85b1ea3978d64a6f4c971e91c821de06567d2f7a450da32e2f8f4b2e490665cee54adef8d47531a7ae782f6690928cae6bc16591df0c69da0399a06da214bde89b11acbb1b68295f662b96b557ef32a66f027b03cae0d90e4569e2c1214", "86118c89593462c90f46f9ebdba17b5eab8a06556e99680c63807f8ecd9872fc225ba6fc7abf86fd3ed30daf7d8566658a0830b11b29538ea61b7a7dbfc6e0bed999937b237d3450c22dc3784b65e010b62f3f553f4b3b5db1e7d5699941927b868292da9aadb21f32ab127eea06b380f7e4b72ca83aa13f961098e33fe1fbf09ff52611d108b6eba87a54b1cd1ec0dc4a27c1868ed533c2b0ae59df7b52908a227889d24175c9f7b53a9aab04e51dc824ad5dfadd1bf34231104496cf83bca4a5dfdb9079d04c618fed78f0d15058d96e4cd3d6c70e6311bab39b78311e204fc2a70698a1bd6593d1c57889bc1812ee23167e3cefe164a4a1d24e493917307785981712073fa10a5bdeba2625271033233a064dc7077be6d4ae9b56c8315b87c9b35bccd91f1c0447d8f72dbf6d83e24029cb51c13005625644cd84cbd3fa7aee12f6c2aa89e4d35609e8c2c1edea0d2772ac19c53ad9615cdb13efedaa7da564b01a0aaf2f234256cbb30f0ce2623556113e39002b93a04ff89fec2bf11f16f7cc00d5b61f77def3016c0e524dc2783c0d4b3e89f6deed5f897784e3ae47fa646cdc745afd2aedeac034a300a2ead2", "8e105e35cfb8375218af99b32c5591eddc1e84ba9e7c43d39fcea27dd54faff0f71d8e981c03534fb277cca16f00d1008d1f65d7864ce849fea5017b21a43b9559c9a5ea5e8c8f63389d6006ed290324a142924f9ec6d39bd9487c310e5f019f941dcf72f145b6d0d5cfb2dffadc6bcf388702f7cdd3530fcddf06a48829f38dc729562e55c1b58abe2215f418aa67a86bb41b9bb92c5d84575309eb68baa02c5c266ad1d733f7ac6cd65b0d83d5d3801ae2601414f053bcb01140f5429487ac5cc90aef072cc9e0c3ccb33255c1728221112c50ad5e972289117b6c6ed692c7e90037313c5f295de657135bea6778da29b911723610c1ff332a64199fb35015fafef0905ecb7217acd9aa36f1ac01d3131779d8f98cc48725b824c6ed637b534606e8553683b831fae80db33a135f666652f19c41bcdf283c54a6e35a16ed5133c69c8eae4d976fa79ef949053ab3192da95454eb18aa32c8025adf9a86a081d93f44391d9e89d075f5a3d44a6701631884eb4888750f11b2d50ca714c77e677be7bfeaed332366ead4c288e6e4bf8b", "a11296b61dc05234d2e6d4b53899fc28a4df8281e9bc87683e962d777aec3f26a112837a46d285046a42966cac894f6186cf30b3b6f78805279155b5b9a3cbf83f0a6dc7e580276201050064bdf28cfe575904cc5cc338735720c9ec0bf35cd0b5fe683138bdc1f398026a4e2f77bd0fee350664b31fdf02d849262d37aa24d4a85af6d293c2220675ffea67e3a48d9c723b501a91dd9d35278d514798856a11cecb0eee4c065065754bf968c27d355a413ba07071f19859fd8c5bc00b5615d1ab187e97d21c54de6a04364ba22499da4de6b25751698020df48bb5fcbd4fd065d7ca32551708d03609fc6e1d935a3803e3e4b36fdb3263264ecb826505cea7e957af7b147b8812f4c1f77e635ef45af18882a1831d99c54dbf0aabbe5812e7ce0a9ebf3a464280774ff9fb88f12254d370eecddc7ba7d7f71b8616eb1a51a51a3fa5e3d83fef53e4dfbe3aaef62f8d61ae8c7c7f0a16200473ce66d9a16b6806f5f193bda38d845a5056abde2efb6d4", "86b57e290159e7d49505d7c7b4334e11edc4b4acc75e414b0793644d3b3eea36fb9c4061a8a82ee4e4054987237e82efab8dca44b8911e7519317fadce8396eed5b6e6a42a0659adeb2248f2886398270941c3b313797ece96c84b6feb532cd6b8b2ead294ca8bc83c3d04fce10e830bbe93e71f699eb2a0bc64cda362d7c8230d5e1576901b75393803925af1343fa40e75680bb2636ca4951f81041356f1167d16db6085fa0d161f49789856b79c6b13db2c38ed2cd2332301e692c06eef60a51fc2f6f48662ff7acb1a7590511d5b427d44c612d612c59f002ec17f23a31e0283e2cf883a3c44a50c7e720a2fd2b67182906d4211ce8c2cc8775a996454238b17a8421cd5984a5f7bea9649ed63aa1143112dcd795e3a21e27077dd096bed5899347bdfcc94d4e5542d7bacbfc2b712b78a14120bba62bd083905e2534e6fefd07b36858d97b33dcb9b7a6abeec52", "b2615b48f345dc264caca28c6c72c6d5ee53101641f06f6efd94d9d2e09626c53551dfa78b22394bdc2ee91dcfd217d98dcfa4061c074be3d6e08af444ef604f3a86d6955464d70d003819edc26adb7141f7fbe3ccb4419a83d7ed98d2bb57ec9196a7a59418ffa495015647a7a0917a0d2274047b1f31ead2d761a10ca5e9c0f60038999d6d1cc0930f4d4a79cc9a462f6403d258b312d32188a5612d92a7b2fa687a8234da033526318e44af5833966f8cb5d702024ca84038a2f6bfb5ea37ac3fe11fda08c59a43c6c599e3da8fd51d0c6938e760131c218a64b9fd39a96332fe6586dd92df9191389bae60dfbb3b72792349f1b3dc3c23e01bc5a80412ca4814197159718a1445919111ac916e390f5142cf2e63c0d85f7617f4edc0279d253a12d277ef052776edf5815386f808"], - ["8ff4f4cb2f4417518481b06cd2c77c70beabecf2bb70360facbafdfc4d52a0865cb5256f8c8620f80613ecc4fe0828d3b07c806eed5f4e0d1dbc0ba56bdad19caf2d49d43325d0c9062afa3cde6089adf3df7a3d93a39c9f4f0a116bf2d3c33a8775b46c52c78fbfc36cf7df7497eb685f12c015996fb484e60b19dd602f91db09b20fe6fbe85fe42f17792b807e606a5e272cbaccda7828f7e32ef87e8fc09eb43f9ed696544a7ce5c6d473cc9ddc2935491b6ac0038208868c4279c8054a630c74b0fafb6db2af7f928b728607230f0d1d13a2a32460d280ea7f45b33019f01e7e4b5e7131038404f417791dd2a8e0009f62f406a11d0d754ac125eb9e411d5e1abcf93086d981efb22bb9d0badf924a9305be636d143b85a9d15b7cf42dc4355953172743149c4f738a954b245cf162596566744df9db3c91c3955d236d4a45c7d0aac0a9f28d6713e5e659ec9e9823331569ac61c0aebb7ef920ca5f014f91d3c41757de66cf90659888be5f083b4ccf10e7125ecd4096e0976eebffdd22661e1a50ef9f4236142b1d6d4d4d70dc26fd438d3ce24316a6c76796ef265e092998dbc1c42c0f475b9e35b6ae337fbb3ad813d73f8accaae430bba421ac73bef568693c01864ac7f2df9f822ae92788", "8749ef14810045b35dae42b2e8892e8fd46b4c50017f7f2afd6834809c228bf35dc27c9f6a333eb954478dd7e09a746e830043e7f4344b8f8e1455fc6a3d6338cdf5d7312d83833244d95447cbccec0567670125b10f1080f57a7ca64a91d693b00c3b11eb7c92802e0497db9353347c94e52d6b199bfbc9b599d2feaf9dea20b389378c957ae50750cdd9a9e8888ea200968afbab037bbd7f8a30b34a4e33d1a077957624ad714d300afa820d7b14593df42b81ce6763ed07c5e47c8bb0154d58b1ae5a3d288b24927b778033e1b5d7083e125aef6c7022d32e344f91ce4b2dc2224cfe6b43446a695a79b494cb2a4a52fa69d2f9b5b5b0bd85cf177af74a814f32df11279a68cc3402123d95683bd21761cc6f6d9bc29071a4c6e5311b3020e1b1ac83320b416236c48c8820ae3ad401f527d71886bd5cdbd351a8ee813c16e9ae35f3eae650f6cb503aa5b4551ea86158a3ab80a1efb0786b589dd67a1766353d72d72a7e4cffa52423961f49593d0ecce327d372b166e1ba382082f6229fb1877d0757514396fa36884993ee8b135aa6ccdfa550ad13194dcbb07f738a66671ff3f3765e7bfec5edf70a78c54276", "b638b1471bc6ff4684525f17ece7728f9996c29ff3c53497cb55d9ddacc0e6a5d03899348a98d5024ef71d0fe618ec26817568e9402630daaf955816d9eeabbea38d7499b738499f37882f57e8ebd4b19ec0d15f5a3fbe987447f521c77f8e318bff0c0d730afaa66d18b889f3a41c3e43a36fa8f6126a564c3df220111533186b53ee3622d5552166ca6c7fe5d43acf62ac6826ab290b15a62bfbbe802abf937c68d48ab4d5a166912cccce38f8834729bd500a387c31b5bb184442bd769e11cbc5e41f96cb79d058a5806bc08ca4535c9bd3dec1c81dcbbd73cf061936d589df938855ba0aeda4b2e10b6bedfd133802a4780b9d7719cec4ed609083e963679b3d525157a7733410f83dc1bb657b09178c6cbeec5d3e8d093ea5317af391cdd60a0746d1a8afa1027e60315e22a7d5224505991a8f8c438ea4d7e8aa1d5ec68de531b6595a72e3b4c5ecc7c78547a43e06885b23d531d3a238cc1425810614bf9ca32481b11b254037714fd8069e642f2758a1b05b171b8a9b68832c91dd3942589e220d2bb7d45b6c8626cb0c3e76", "8beabd7b2af3c9b1aed5bb1ccc6fcba189136d4fccd7d58404d5227fbcc08d2bbd98e3379349e64fcd4fa9d84659e71eb063c3cdcaae6ba50422c790e693a2b5c03a730fa2990c1c9bd73198f9ccdf661c5e9e8bca9905478baf45aaf975b14aa1f30a4bee3f739fd88632f172333b7a158c65140dec9ec089443fc5fc8da93069e921abaa1778be68746ed8150ed6896725e014d14c41704ef30edb25fdd93fe6d77283d679a2870b8c1e3a7cac7c9e4802be0c62064a172debd007378df300ca28b573f4a7ef62028309aeb75f12740349b2c94bbf9c8bdbc0971c68184446c039398bdd7e24500609a388d925096603d303a9f3f586b3242e293620a338a1955bfa6ba371e4a00990e9c164dde5665bec7f3e784816f9515fbc85bd20af5f189ed9b68ebb0b408594664b690a0e07609efeb592edd689c3ebad1839314ab658d588327209d4323e2b5d2cc2676aa727e1cd56ee6712aad97b54ea7b05b1409fc68cd0cfdae0f518f89ccc270dbaac", "b66fa39e98602b0b92f7c2127888e3daf023098edfcccbf019b2a8fb1befbd518ab450d85678d52547d1bfb7d80c63cd8dc9b11709f0bc0c47e5e52a3f3a2f43cc914a5646760d275fe9405757c4e99d2fdb03a6f8e6d2f8371d67460d439a7dacccbe6bc3bf30ab3478e41cac7cb93c7a93d5ad380eb37a1b8c9eed5497c6f0fd48505ee625c8b0b4d028b06719b4e00d2229d04ad756f6c834e15da0a9bcfd260346bb8570ce7e44e741052821fbc851e43947dead8616ad991b4c18afae2a06323608b23daf50726ded6a59bcc49f30f6e2779187538782f1f4e1b73e3588bd6e45b030be6af1ac21033b176c39a640a4cb6062fb08dedfb530e7ae39412d54a93e804e79da05c85f25af37072e136b8728102ced278bc244347db9e888c1309764a91876b544763a948ae9a9250d1cfdff9c74ff600088ebcf46ad5741e0d679142432d832b34e61379d6ab14554", "b91bfdab6d021bd16d0de314f4e7e293d49105356440d11dc01bc41d230d4626b2bfdc2bf6616c980056195cef35473aa707339a2ad8afdd6c404bceebad31d8ecb249a6c283eefe1731effa12781b4b2b63d6705f2ceb9e28c7c0f4d16f91668db0b422bd15629d022463b1d438a9d68f1519672b8b5bf2fa5ec88e2445dbf24ff0ef42b023741675e0ce7ab0c6092603b3592d6c65e713c8ca34373cc4fbb7f9561588ed2ba91b2f45e0e18f072bb55cc8f21fa7a9485cd8749e6d4869f6a8bb043d79034d895f1f9dc8cdc37665ad314519b23bba7a845cbb2ae12a16c2aa51ff1f155770ce2556dad7e578db4627481460171399dc62a9f4ff7ff65a0fff0bdc182cd18ccf9207964994a101ca88638ae79813bbbd358c09c71445f1bb0830e40fcb4980640612dbd69c349115e1"], - ["ad36374b1dd06a308fb015e7177d6779d0cc382316867cdc419bde41f2e99147b08833e21480a51f535e87b4b0ede78783e02c0cf8bd75b14fa1ce0db45e87d6478ed615b254a2b2656f4cd972876517f68c249470d7a16eba0fd40caa0b8be1984b8097ec086f88cf904f35e496544efa4f95786182c83829049afc2e9aab58ab9e58af19324c69c70c2453002ae3f468f997081865a55e1881b26526252f54756855872989c8e53d904de2937d014b3a5f7ae82e4c60acfe9b24998952c053573b35ebc743e441a562a22b8430e2a6263efecae49ce56fae4d8088b59221710df2dc30b4c5bbbe65b5b4f3337afde941c6fa52a32196e61b36eed0a69e863af6fb9b2d574eaa25a4cb2cb9321508b755dece6fb7aa7b979e791ebaca81d9a9ed90066e2f0640b85262ac84022cf5084f74fc4a91b8b9da25fa073a2083c00a29a48eca248af8a62be20ce718c74e4d560a1067be1a31158d48949cf035f2e8a2e549a07588d79bd6602981ee3575621fd9d8a25f53b8a3bbb2032e17931ab95684efe76f86ac49ba2067c3f30eba7c65a813ed2100be7e337b2011910e53168b80293d16e401e5cdcf94bfef8ef53532747f8b717119a24876e65762d77a93d5b1fde5d9786cd5345ef865951850ee", "8635d1e45fdd880931c9a8e2f5cff9134e7bb6ca7f0b59d125e3930a82e79b34242b4f6d7ec315f33d0226854640a937a0dcac19414009c6fc65a7ea083374465fbf5668b53e5324b17ac5951228d32e0b45b4c518b6fea25d79aa3fe0cebe7bb2a1d0b8f681a0e3d77baac038fe59accd3f2752a7a7b6c1ee63bd41256a9899c5f9995213637f638c72955f2276843934cbf4438e0db23d92705cebdf138b74a0c3327150fc4bd72d386d3428022ab91165149e09c33f6be236152fb89b1f15c8b11c938a0ef54c2b433a5f096517b1294131f5ccbf6860df0428066be082768cce2e0f088e48a67f246cc33683d18c28581e275e7f61f97abfbbf8b7fbac2188e3f9c8a016ec2cac6a2e18d8c581af1872926eb8632a67f1703d21398d52843e73900ec59225dbfd90b2628b8cb08a12145567b35adbf54391201a4570fa74a5b284e00f8b951dd306877e62a4876b0a59e4e0aaa2c51a43501ae71cfa5f76192d59fc06959e8bb292c91d39551ab643bfb3ce0eabbf1757453b68390b6bead78010fc25dff66eac25f1d42b5e03e444b6b0cec2e986272038ed20cc8dc670b9d70264e5fd5a785c5fbcfe7637150b", "88011964df862ea29ecd41007295982b085915925ebb2614b036e955d1466c3ec6dce69dc811337319c9a090bd33dcbe88dedf6e22552d31008c0227b2c143ec46ee74883dd6d0d254388eef97cc2c3a26556d4c54e63079c71068f8cac669ba836ea9b685751cd3fa1c7014c35782ce8be1fc86f239015f9bfee41b710eb8609396d40b38b35a7cc856cef554bca3002596e62d7f1105088f458952daffc8ccf245ce341cd4e8714b2e4c14f88e71a8124b8ed8caeeb15971a16c38f63026be7ae198e9a3bf666a3a11c8172a764a080e83fd2cf5f9162d890e445e7828cd995b32e5a45ab28c095c6a19249906bdf31a211fd18f631aaf508806320afc4f23da7bc3c0b7e745f83506a1d1ea4f13277081a3589e36089a4ba63dcae6e7edb49867d7a75bb53adfc8e9ed827ad0a412007ee4ceac451762401d3263c382016b85a1b6286b7a3dd31504b3c924aa60ee06598e2fc90b3f1b78fb014c14abe1d84789b8793b8103e9d8897e05f650ce9919f0050bc0891d68d2d498802b8a15b78fa7235db23bb34891ae6bf6a973c07b", "81115a3d42054b7baddd8d0ec8f34de107fdeb5a18826a207f490f165b3829ffebfa42507be8764610f03464fc33588b89507c4d3a83855e5a4926b6a8460a35edd6c0be693ae29b875d0f6a3d161d38645f35b1ef2ec2a196a2f10d51db33578495892dc1a7d7e0daddca34e02ac9813f6c4d1d964ae8f60a8275197937c1aa602145f054a652086cfbf8211271323b3b04871239d28c11284b80aa869baec99d1fec7c0f294750e7ed7aace151b4b471625df36356b18667759f2866566cab0344df43a6fa64023751da19934b64103a51d5e813bc3da8118132e05eaf1fb62e862dbeed9574cc3455b9e0a504c4367294ba4aee97889425babf3885a90f84cc8ffce4eaf6c64665d5d55876a3f9d52da4ae633541fff35ab11f8db260418518cc33d303da450cda7a50a1115bebcc66b0be78d419fa793bbe453204f9a94445464bf55d16c7b3199665a2f819e42b658b7b2981cce0be74467a5b22d8b3d25e3f14a9d2ad2cf82caaff56f6dc4364", "928e682ce3d8aa8b9e54a8c8efc0274491ef08560f735ce3edf5ce87ba4406f1f161e5cb196a86ee44f9028f42cd4e2e87400b6f611b41e6ef9ea2576df0ebd5a9d540359dbf2be1d2476d8ae70bdf5f69aea4be0bad7e86c49e10fb4d559450abf16cd1015141e4c13c90ed4bd51bd464c4e6c4a5bc2c3476c74f2306ce30139f2d6f4a45197c489e0801ff77e4dff50fad6e7c7defdab785ec461a2a58bf8edbf3f3074b8687e9a376e274bc4577a31c4922cb5892035d78674f9c0200a0ad679ff9cb39cf1d54d050d3acbea4297140ca591ee8ceada7e15418dfe6d66f98b71e21c1ef4e8044ee0c7a36dd64b005633e2c39650aa77ddf916e27e18df99e98a25f67a61d116ce7b6b31fdd77c2f9673188c70c2574f3934ab439f45ebbb7e3802bbeae03870af21d6c5b60118da75e40916752b3344fad28733e4ed7d0eae575054715cf15dd5419005b3fa4e74b", "913069dd67a1820607098cf5ea88e441f973cc1d8d01ea78ad2422598d5fabee2e323729d92ce19c50ff7483cf7ed4f2b466f7845799fa1af6bd985e131beb6170cadddf01371cdf61852cd4cecc3bc10b4bd724337c1a55944ae3773e7f11d88040d8bc0e27e116ff4570c8c0306fcbb90e14b308d6891e9330a7934430bc250bdafd58baf00f96fcdf32255b51158416ee8e24d9353041bbf05e6d2aa0dd990fb62ec02f533c7c6e59583562e6606234636e3630bc68d89b73aded99c6b903c0044730c036050369363a69982ad1514c28bcffee7e1fcb57a77e16cf1dddd643a59712d4cbe9096bce373482fddfc001ca336a731bd2dabe540486cb257ac06bb721957133728e80036266faed517545c2b9b3b18dfb68b400705fe82a00076b594d8a8de96af1ebe935d9990d48a2"], - ["9597c69b568fb00ab66bcfc4941ad5528d3ad65c8b9b7dda04fecff1567951bddc422d48695dd413ac673e7b29150cc48700e048dfb06fe41f231b312f8ed0ac60fc9c9808e88a6f0d1987b586815daa0cc216e2a99f8153d7347a9d3b331313b81c00718dc4986651c8b471ff79527793f8ab736caeaae5259984aaeb9fdabe62e50041d12bc1b850023cacdc019395194dc581d2a9ebc9cdda695c9fb4a6f6e8b6eaa4c82b20cc7618ebff2860baa81ff2ed9de27ed3e1a66e140410f557033a56b0beb7e1aac9444586ca28ac720214aa87f15deab8d0d5eb49decb4eb3ff0fd79facdafd15e9def8aab21fe2136357dc94533be1ad07408af41a7f6fba98d8c078b1e1d2a0f91a7be108aefdcbac12f17ed3e63e14bdadca873d80ed31b509de6f0c23a41fde300fcaa04a8f9e7a4ca8e095b3ce092e37b91e28be8a6db331e1a400d220d80a238d79a5a87656f623df275b7837a5448088d991e552fb178c4e6f188753265c5f65d5803a357f0b697417a7d57727fdb1b63b7933946f8764bf7cad3769e7d7cedef08e1cc6af2e0cd773ca671b683b689040ed8febd8a5098b301db69fc783bf9ee8b0e1a023c8704178fa84830ce626a9f333324932fc0b4c8b4fca22042237ccb8ce4c35e0fe", "852056ab6cba7271f420bcac6306d8c8dd8985693074ab154e644973cd894e76770f44c7b52c93ea4ef06d4f1b730ce2acac7948ad6d45e5abea01d6752b5e17f9da30d297a2bc0b686f38f7a47e158e317addbcf8336bf098922e062ffa5350b49f58904ec5e4bd4d6a9a605ae842e2f2f54be42458061872191fb9554ab47410e6d5912115b8c0cad1e2cd96a3bb18184eb6137df3ae7922554a032894b3bae0dfa9251665fc5b771c433c85ee05564979b1e53eb638cdb677d40ea4ca42f4bb1a10ef94514a39713ea89c01c547ff2d7d789e751912c8df004d1139d04d2c6548afb882b05c5a4cc80ac003bd323e35da96f9750a4a3da82e103e54f1d61fe68c77b37d479c7a9ab2aded3d990ff3036532e1cf7b7b9c07d18f6ab2bda9ad77bcafc72fc94ccff46d9012c0478a606e986788fa8a85e1e743c4ee37c2298f1f26099a39683c7f98fed81acf54c71f1680950a948cd4c5d3e8dd6d662c132714e4f189d0c1c5ef84123074a997852a23eff78ff8484c1c18a6db1ad56156df6a62a1cfb936c465b40fc20194f4ea26281c7af01ddbd3853adc911bf28e9763739b12b7fe4dd1f1f84e8ab7f0c9fe31", "8b734c27995fc2d7237655e69b843bd7067b1a99249c7047b0e1ef590866cee90815cc1c3f6e64e02382158860524139a4999652d8fa06f80055277209a4af6cf82f8a4c9dab810f377b54521d19a610696b680f619c27e3d72d7b2dc91537b591a518b74d1c517c59d8e961383f4e534c5365d51c546b1fcec2ff8f41ac931b1d3211259d577291046ceb7ddf09d230207a1b4bd9d5f770c38ae92028efc741916c9178b1e4bd073e3894b205ba5cd936889ff98ff19b903c935d16dcd9c7f62dcc1f3ba70b47d13e56ffb49a3f2c0e4dda53487926b07877fd6150437e56ca3832e86c8d3f763de7b138371fb6f2711d167ca144f59339258c871dae42917bab6877864ed5030799e025ca59b7876536c679cccab025a95a913b744d4516b6f1e483a23dbd011ad61f7dc0f7dcdda31a4d5684026ccd0283494036d2e7c0ba94cf8283693804a1654f7fb206294e5b04ac7d503b65052bcf57a491b2064d7673e5fa931766b98e7e86eec1854f292125f474ff7f43646833272c3d1c19258e165d2b772ef8491729c1df7593622abf", "986465c10fbfff8e29062c9147cc7235e9754d3431e905b9762b84f01ee9a5f1ac784e0c876062b09118557f3a89432aa7d19f0e6adc5fced292200ba56fc181d5ac7202f351fc057fb30a05164a8858f7d202a1129152c015fb25dbe0420bff8c2477778dbc0180a20b090276cbaed56c43e4c2e7e62de65c090a33fe1ea0a1cb5438fb305de396c8552a57ab14a3a23825f5a5ab129b766aa2262e982b253ee9042f9ec632346ce5464ad6962a5fc265b2879add8df4727f7298c19bd6a6483f3f71078cd841e067344fbdd84731991bc40722e127636fd284cb388c12e70543f9af887b40275d9056ad53614ad2d82af823465c8e8cb9d9b807e0fdd46c3a5389afaae93775801f1f80917b1a6c820710e3353c43736bcd5b42838a8bd2b592cea8862a56a5f1549163076b082577466f86f02151c691ab3fb60d8473d36bcd68059c641304011b53f8f675b0fb9c1f7425bb12cbe2a9b47b76b29345ce0dbdaebf8bdc54972391a20344d264b5dd", "a50f7ea73f21b83297c122c41f036e4224785cc5bd8d5051d5d32daf8a5fac8084f2f4be0fc7d3dc4351e89c8d562221a3f5234dce10652ed467d440620b625f44a15831e49f57fc8ab7f24b85bfb74e0d705c68b771fee9b57a09c5be7ba9fba5d5fcacca756170d2636a4666c02dfd58d32009fb8d605142d23b3281cdd8442ed2868e80b9617455074c8ad07baa164e0a4edc59bd79fe58c96e3ba2656cec27d0b88a48bcc3e5f59835894393e4d8210c529bf176b43136db2a6c52b209ce78a8a3fc9b9b49371fb933f518719ba3352f4ddf2eb19d5b3b08d519f50a8fa88bffb8c0ef0ff44849ec15e3462f7da34736e1e940bfb154ece934c7d5e98c0b0f38f8c270beea6864f25c48e359dead04728a01e4c67d6ef295d3c4559967dba7c401bb250075273334b50a3084ee12667a0ef9efea1f0d7c07b61076813d8e29bf21b7d000b54e41bdd8ea980c78b8", "b25c77f4bafc4ff9daa0df704f8ab95e10a7a458ec3d17f3488fad551cba85c290ec5141103ffbf1d3b65d95f23bba87a9e6f16038acde98fd731a11029771d1130f746e44434e1a81613d5606940d57bea9a90753e54dd1248450a9ea1b7c46890380fd998faadf86da485131acfc09fc023f01d90a49fb365256815a383efef70f91f4a337234b805ef366c53f7376046ed731f2514d5b370dc645e91b160bcbe3aa22a1656d7ebd64673037ee4668518ca2bb042d01d5be35edd981ec4cec908a144407f67af66a8e2e9f9ee9d96f323c94ca97232ecaf919450a71f1b69827802a194c585aeb9f1ed9e6f5e970c25cd4b8b87f5f9ba3f4ef6c6c9d2b74f4db23ba8ddb97c86401a958191a4f33a52141fca6cdbacf5db67f4d7e97b0ca0641e82704717bbc165d188b4dbddf75de"], - ["b329b9f8f08df0dad6cd1baa44564c678bf09c822ca6dd08b2871240de00f91e1f6911da1a6ecb0bde40ab633f02819eb0159567351d382120ad35abc0176559941c8932fb86d977813a6e0c45a0d753f6e13d7f457948b83d69bb85d33f3896b2280ca38f590573ef219f1b2e609a32cf78e1293c9ea3d420bad75ac1dbca2dc1eff0646695bd560a8e1ecc950d7d734974b611be58e046daee0141f3ee2491f000d174072ff988602ea0a26e8e0bee512851fafc398e4f02902dbda6ca45c9012cc6a965b5fd7d2c87053967335b5f1ee15ed8fa8d919a8af5665a19ded637f8ed92694056e9fdcb3a6f88c363c0dd3b3c6dce577c92fa12de125ed03d24d4bd6839d42cacefd1c1e300d655c89bbd365c8744657bcb0847397c920dd83e148338b4d1901cd0c87776d79599c9ad1f4a7199f545c871ca912c84af86b556182ac2e2272cd7840a9a54e7fb7c93c51b287577db9acbf03dcec9e467d0f8d57fcf1576105de2feb7d829ec61b6b043f2001e579ac13e1858334d4f9619662ef41b3fff2a1b61cc3d33d8465d14752fa1116bf6d8ac1401091d7395fdef0c69935ffa257205e29f99d5fd4da139c3a6401dcf0f6f48d3331253ee60f3c0a5e8220acb5e94d6d846b0ee72c7a5d32f8020", "966218ec334d72326a78137c706a84d95c4336f072f1242dd413001e358bf8e19b13dee8c2d00b051b81dbd7f8014ee7aff3967fef2bfc7e4e0769ef6bbd3ddb5297c675a795a622882dc24c5f90e8b8a9bdf2844e352098cffaeb1284f43fb9802e6d12a6132b29215e7cff6b3ccbde231b70a49b45eff8254ab2a8382237a1e1140bc6a2406a8e0a37e59e47bf33ac54ddee8b71fb345ca4f03a8ccf4b087ece01b7dbb16daa8c32bf541323e6b3df03cb95f07823488f14d3a641a303c518bff33b8d2e721eadd046b0afa4ac6d8134c89daa1dcdcb427fc5e2501e58270d01516db35ed0f816042ba1668bf9107211ed1d6a908b671cd629be2557e82c114819b41bf581508d3ea361dc72bfff66253d5518268312f7576bb28ca203659b6b6f9bb8b5112a6ffbe4b5c2a0b2ad600c978c155199a08268f42a10f8f9545ae0ab90a33eff188576942ae2ed90d9e44a18853a01416b75aa260ccdcd166f6196dcd3d60b746ab046e6e2f6d824a08a1ff466b23af2c6a7481570c85d4b558c76aefabe96227f522639eb185a814c6c54d44f423284cf9d8d52a3cf94f704d994383d56a5e676179b0007b92bd0cc90", "818b6a4590fbe7c1b088085140548ec227660a6dc31555ddf3fd24058b2962b192251fc44da84c78dedce041b187b19d94a426800efbf1630437af2e31e1045ebe8bab50f8ce875001939ae0a566310aa4116b57d169020f201e11c66813771589116cbca9fb2afa62133cb68d6f72b3e1d7175825559cd511e806b60effea8d196db774bbac14ec43f136d39fbd144c1afdbc703c514d7588363cbf495f0c3b115988de835d55b475aea09553fad6116621ae51d8aeb888b0050eb93c0817ddb80fb0579e1e139a5c90b7bc49adf11015907bbc46ef7f1d91d49e60427bbaa72905cb43f46a9a7595b258aff5dfa783609878a8848db65a6647ff8b1ed8be0a541296b96c65f24b280c1637aa7c2815028854d4e30bd1aef5c3bdb66c1240b23677efaa3a4521930275e38379af6be418fb5e305dc522a88a2575863d1ef6ec430d77d2d7b4dc3e4e5c5935439a51de2839b362b97a401da7dac1d0166f3aee043c8b277b85317f91865ccf870823ec3f284dd244d52365f4eaa131e52342f80ffa1209e4808945667a759b4f7fd382", "a608261b7f95ed4a19ee249956bd996fef384ad4cf280593ff331cca8c08b9bf42e32aeb8a81910e88ee2ab9b1a5dacba0cb1b01ad524e529ca3f526bcc70e7ec7acfde35394d4dfce61053c81e175c1dff31ab21d35cda99b1816e2c215cce99298993356a57385c9009793a30bca356ea29660ea3e741477c8912cd6a80da4556a38d6e10ddcbd56f0b20472030836401213804a5038037f962c4061029cddf53f0cdd1de02e095fac1c1601df6c951e066f3a69dac840bea3961174fb8f56d065ffa225f3b187368ff22044caa38904bdcba060bb800649b55ade80d2840288355523103da1d3a32b6f0605cbc83c0dbe2442128f60ddb286342eca7ef724f7221b9692e8ed2e1cbe2a2c71e092353546b161494a8d3e4525346d6a4a498f11e7ffe41e1a8b872eb31abfe2344c32347ba2010c7588eae25ac201d0a43e8f8f081054fb153a35c9168fcc033c4fe94ff3aca23f0417563834f4bbadd67a1e85e27244321224b166e256a50d3f1e6f", "a36c13f45024f221142f3a27e11c4fb3a3a136da473a600a7122153e124bbd16ef39c360b3c144ca4053ce9cc0ede53498e52aebadee30b7b2cecf6e1be9f0b07cc4b2b7fedabadb0665ee2032f35cf58a494a2be913e2503284894ae56d5324b8466f4899c6daf2cf3c7fada7f61fd992bee3c98a2bdcd5f63ac52e79db05152d5d0462311bb4dc1841fe75cb70908a224df694edb24dfc77ae2608e10781d20140315266c0d33d27e8a5aa3d40cdcf12bf1e0f9553b50c307d1fa04a9efca82e32ad64acacd0b444e5ac4c9d562b2130f6286405ecf9f4b9bfde74521447e47e6bc725faa4bb1051d3495e4eb57d4f093d42ac4448f366ba35ac545508ddd8480b247f75f36ba092964796abc8378a5c9bbb7f9f427bc2c26c6ad8e2fd0adf573e4caf7e7525dece5903dc3a4a88e31036fa68eeb04c894ed1f4f866f198353afa05027b0b4b4cefee1a9ef17ba074", "8188f0381cecef5078232717398dae941920b93a872b3bb9d6b33f295f062c0b2dd452ea376982eef6bc2e7a58d290028585dfe99590d755df7776d2407f810f27515dff881eece9a6f7bc675d9ba9af939ddbbd6436f9f960ef1d5bcddd2d31b3283a7bb2ddf77f441bcc95ef4bdcb12e72dc73480a099cba9e197548e1620136bbc39247a562d50f930d974df86d1419dc28c6a90102c616c96ae440d04edfbbc26d072e2fcc70126831f9445288d46e967fed1cb4be3704acc064e18d1b6c362b5d1d150ad050dc14a6a75c3e80386808d050daff96cebda143d13bb8b8b451b2769b59c34e8db555217997ed6c1170b339445fc6edd94f0f406eef7268d16d4c4c81f4d3b867a192ebe760e00d8f014b3383bd5e3d0603cb9be75bd89c193676ba016d9bd46932333322694051cc"], - ["b568fef750c887497e75470d4e270674e4c793d37531a2ebc54dc2f3fa6859313af8227ef372c99a57dc6e90b7d9e2e8a1e3df71bfc3f5ef0262c091aa8fec59636c26ffef57859c3f828fed45f5ee8c661668b00352b988e8cc09bb3b5d373d99f28a9fc4d99d37dc455a11a473b810fa77cb02bd0e39236b37dd3c8d09c1ed4200de3d5c54228fa3e4566d9cb028793d6ef28454d23f9cae484451327e0e6ca6609d926220a9f8f9665fc48f9e7f3a6826042c7aee19850944ed3fadbdec7e8fd0b5b257c5b9ca82f53513f62b02f74e6aedbee35f6c66e05e3ebdab6c6392e4b542f5095e948165295e7db9d9f80527df56e5f6d86b6546dd011691754e3a21a42a2548b517d40b4bf2833b119acc587ed7f2c254ed7c1e547f1516e39bfc866c824e3422930b0fa83fa5d08df725701c874ab0e0279f962c120ff609db5ce445de8521aed8462e440caa86ed0f344531dee8a8b92cada5b28831368d4ff7f106ca42a9af43cb1020b9b1fa6d7c7d5fc852e171cdb77c74197f30871f1f6cb9fa410c9f997e139c82bd5797052a142535bda2adf3835c2b38300447281f3abeb3ee81ef59b8afa1c51a2234690012567393451a114f6043225404c9391a679140b95447127f127cb64cc5acb4739c", "98a7c9b99d99ad76f874a13d3bcb6c39ffa87c8a1205cda537dee8703b7d9c0ab58db537ea56dee916d46919d570e1b39230da263563cb8d4030f98314a5ea7bbe93178ba4c616859e647f5be563341874ca334dce1e460284f405c40ee815f8880e428e7eabab194dfd35fe067c34d59151be8956e3774eb0a6491418138f52f05a0a4149296b7b83d61f3e90ea6af371110c8fabd7678bcdf8d99e688993bb3530c959cf3b22eb74ec1a03bd767c2d555bbb254719adb666394086a0a513b0873a618dbe3e12d7530f9ff57b864c976a97271622f3fb42d9c9c5d844ef0e63a8973f089b981482c579ddda2a1ee1931c0b0e68fb3272ca3fe33dc5530fd7f2e9b76e5c5abac80cc4bb1cca2d470aed0a62eb5cf128ed51fac4646d0cba1bc319874e76efa6925361bd657d21a66be52c99817b6c10f854bc1f6955c3a6bf0ab9e943306c421f4b733a72515343fb3817dc3ed9f80f674c896148dc7f0fce6c2466f7f72d055cf520821d86b8e26d481cbe9a2ebd4082262f91235003e7558f6e6dff7d9873967535c499d28c6fdce5039dce8e971e22fa1c9e04a7bc4b7dd1c602f4b654a44d9c0b43650aac32bf1c", "a78c99f72a673228f047f553554cd61383ce3bebf7af9eaca779e9bf30515f4604fb0e3d3770c9d5119aeb0151ea842c8a70412c50532fda5567d38b94ea8aa7d924c3e5c90d39d29ff44c456b771cb705d27daaceeb6295b6ded31174c66f13b0afe68f0f640496f07a20ccec77430462f4a5ea5f1d4cd633189dbd175547a9371836432c1292feb7b1cbfd094cb0c643d2a152f181679a4c28965987b09bade301aaaa52fa2f1d183e5c082cd9896a218445e5b6bb11ce5801a414c36ba65abd7bbcad17bb2e09114438e0c603ecd31cc0000140982bbb6bdded6bd9f9bda49e182ea7acb2b07aed1aa541993c18e95bd4c0d7a9c5825f46fe2b3e2a4703a2da866a2331d6a64eb667dc09eb5499122f9f6da1c7a4aa00f6fcf96d0c09d2903063ba841d30481684eb70acd87095ac500cba9fdacd36f8bfe3570a4b01df799937ac693fa340847a838bf0c83fe48d4c2a6d3fa925d2e4f44f1b85945738ddc2ccdd085fdb0f98ba5ce9b586bf514c70f7d4daaab31053378b4b34713ec20d8fa95d73d5fbaee62429afc7aef710dd", "a64b267c0a73cfe45b9dae8d43904c2579db47ab96440a5c2bd4b23036ad54528cd9f77ae0c842c5ada9c157fba95377a5b8ebe15e061f61dbf67e5b2c1d0490bc776339fefd22117d6cbac4259139d660cb547a16147b87cc1d8abbc9134b36822f5e5d820405e1c7f8d0d1b38bd8fe052b3260b1d28e9ddbcb30cc6fc2b4587e1a31d1d81efd55acbdbe5d7df6e8705a0a2b1727852c7e5ad620adbdac8b186b262650c21ce197dfe2f1b0579733f70fa4308678591a78ae69a230019e932af9f2ceecd4dbad3f19fa07c7f359ce6f0d37d67b251f2a9a9f6ab43f1efed87aa26d7b9bd4b3217e95f74dc8dce763c90d56b92abe21f8e6d0594b482f0eaad78e67bf198b7b220481b00c725b73d95312131fd8b1f75338d6fe84260b32b547d4fbb34870cca89123af4bbf9db6797843fcca5d868469f48d6091c457655583f3afadabecdc3375333936e75759e27a3058819c2e0c76063a0d3f6768b1c954307fb69c133686f8e2f21c0a88865dc1", "880ada2a90ddfa441a1935ccbc6708751dab0280c47e90291853a06169af2cbc48bf3e733a4c938ded07e20651317ec58199582b9154e5d86f84887f64cade7d09ce7e8607a02abfe1988e88c1e8e955f995e5060656153327e6d2b662b2066e8ae3231a8e5250d0e2e49fd769e41f335cfadadf3ddf5b69912e577eb6d85af332bc7faab731e3bc160e3d12325aacd96507103a7877ff52bb8d0954965f509d495ef849a3bf2a8b79f0eb9b247356dd46f6d2313ce84c45f89560d5b85692411edaeb245ea88fa20a2d883a42b7d5633f6f15797ddb6dec63ce92852157fe7000967cdced9e9a647f53b7490b5185390227b82cff4b03a2587fcb4fca1f91d4b48a7b10ab7b106740998f415170cc6e533a68973cb065e4f66a8d02a5f2e62a9603b18f6fe65379f346e6d79c5e717a20f81442a74bbd4183632153ae1e9e2245da5e2563248dea417706320729c015", "878b49f7e7d39a69f4aa5f84ce18fb2862e9c385cd614617e6b3e1e0c43a5570d90ef32dee75179887b76bcaa29c14d192f6e1a24fd64628276c06e972559ca31f508e0e5a1aae205401a47e91a281e92fb436e18e5d29150dc0c199f1fc2fab896fb06443354bf96cb710182eab76f321c4cfcfabe1f8431edd9a7fbfafe2b33091a81fad368e6cdca485358b32ceff2139d2c2291caae2d114a4f54a2eb9a21ccbd4d03d8b60519daf1f638b2c97c96c9a598aea6742d7f08ab934b9ed4c8ce8f54b4cb26a5b5ed66ebb6d25400cd55797a097d621cdeb1d2ede126bd8426d9bb9f22a8f1768db3a85668d555014ea097348d46e4839a26742bac2d802edf0391eaa5bc203839a4b8cf4e10d68f10371f5164d0e948e11e6be138be20b203c5413aae2b0a67b3428f5eaaa9f264b96"] + ["a67738e20c24f27dff6227d666591b088f3d372ef463578b600051c5bfa3445dbc48551fc7a86627e2a57917d51de7388fb9661129728f2c1e7e8e1001738e70a6c75b8f6e6dac4353d80f1dac5e55e608eb39f10d04615337a75403435f4cf433c885cad11670459686260a3a0fb56661743c7bfc542fa42c7a64a4b525099866b4ae9b3eafd02eee61e3597d8e561a16de378bd791fef5debc38348bc2e66c5e6d4e43d5df56a19ed93069fe6b17688e1675719cf51b3f3752063f6102bcfc59692b554065b4c73983ca147cd6b3e0cbd7f826708788cc393420dc8ee7558107ba54f1d28839387b109e14db9a90800e89522630e353aa7b2ce6afc85c302d22ccdc6d361631da02c655b8ab5915b7e832230454e6983a0ca43f62396ca66141c071c2a4bcc6f421540b589fade212028396ac3fc3376bd1e73ad4098d5d6854f9b4e5ec849c49ee44cbeee5902994df94c583342a18a950c859d4269e65ce5c76f99f55772cf7b6e0124fd929434d0dcfa60c629e27f2063b8fc2443b5b82", "b23c3c9c5aa2bd43661731f6f6c9b9dd074b33fef862de44a1011c81dbb8f0faab8c994e76f40431953755ff077e0181a01408964b27d6ff089b6f45ea89574d487c301838622de1f2bd9fc1d5ff8d87fb84cef44c54efa38c18f4d84a8e18e7488e81b7cf41febcbc82586891de2b89209c6adc8c04964008352468f847487015dcba3eec4d4c4ef03464e8b646db513693a8d18b68d863b001fdff1098587947ac14554198d3327445e306479c11e6ea044d7d0b319e85a17a5ad69a626f8106c357dc212372ffca71d71051b7067aaf88ca3a7af20f9b3bc8338310a5ed68460deb29ae7d17f6a51f5c53cda8bfff94fc650a13208065e56db480a9fb8bd311855f6f136b94e9903cac54b64cd73172d6d59f18ae51689b47544d5ad6481421d3ecc851bff85b19bbcc06c5a1ec29fdf99b3864f152da74b98210c26f5fcc63f5c7b2f44630efa065356d6658e53eb5219ea21068dbbde3daf2c1179ab0a4", "ab7daaf8de72e9fde853d66ee3282198788c67afabbf8fa91d65b405481ebdb45d1871960ce05993a333dcbade2e187c979c79ad6311057bc640d52f2ad8eed495567eaf071e2c0d26646819567bfb2214e440522978b6faf5fde15b9e21cf915407b6bafbd1f927283f9d45670c967690c819c05b7da848ca646951b990ecba2d216dbb4a03658895aac7c5f1759a4d9dc4cfe8a2aa89195df11af95c716cbc7311418f36956f94731503fe171a5d43a185f0788158d862b36548f64da92962250ecf93d42b0ca8a03c8973a4cac258fc338977d037c713d6c1d351d083cc052bdbc1b14d2758d601edf385d5105ece1baffab39dc7cedc3f657e0b3863a0517289a33042fc2211f2071453c7d0467478049986564aac7d396a342221b115243f25641fa20e8c9d8f7d30b3271768c4e21783bec7be95a3ab0dd450eb583120", "988458de89993db536abaf800418023d3e2733b5c791dd7c40ac883f09464cbad4467a22d01037bf52437eb8e8fc7a6a81f84ea16bc62e06d92c25182174f5921ce474d16883e5aa431ec9d01fd90521af5dd7ec7d13bb6b1667b6b4dd010d5c06b644b678d52a183d9d26a2c678f041500ffa9f681eef8a1589434ae1b6e19e55b8a326f358430d01672bde56000573b0042222190381a28ff7f0e94427b2a81a2b5095c211f976e5c1574aabe072527aac93c5b594367f9c28f4680753c5a12251a7fb1c23944df789a99a8578b3fc47ae1d2a04acf5a6a52e5fe42c08783771eedb811c0b86cfa73d816edd6d497d088e64ecb513398c2ab4936edd3683af0f61c49c9cc7071501f46cb157fe4c251346fe4fc5f7d09b1682513ee8d8682a", "80a42653f5714563984b85d17012a22c4cc40f3b7e720442a80a1227ce14187fd3f33e5e3d744653bc6af42e8381ff5dab2d3bc696ab612562840aad5e078628dbebfbd65eafb690c756f31e270197fa46f8b65f1b01217e55476c7fbf9d48c50ec702dabf5139e36caf7480002e3225374d3bf6e544b308403d80edb1bc1e3724bdcccb4fb4373330f10916ac83ae3d290ad36cef02f022567fd1e3cb30df102f6cf8199a276ca9854fd634bf233ce34cc17b2825ade3694fbd9667ee82d5a50e63bcd0b50c704cdec74092a56b8004e237859a130e1871e6d81f3c992863aa04e92703ebb8cb852703cb3b1f51a8a957c9adf8e8b54aa99a789c5cb2afb058", "b7ab67227b9bfafe1190b856b47a613b3f1504d57c368182767147c5bb2ed2e3215a9b294f73c5245f562e2148dbfb7288006edec03271c7752dc56e5973bbafd620999eb2cdef740be63b2f3bb38339ca3c4d109928aa32a934c3e7c957084c59a0445b7e37fe2439d4f607d522b8802a5387bff862c48c405acfe43e2d6fef11bea69cd238278f6d68e99b4884e09dd1341299788b81d289a942bb9800d78e10c3df784519607339bda7bd5613c3422bf82ae0967924b2a40d3f0a7dce8b440df779f6cb53ba7cc4b0889a06d1acc27d7a0541721c64f10f4a78eb95615da7"], + ["9295d4949b36da9f708c7e7fbe7067e656fec707827a63e8fec4df950bb94c4d7f046138afc2ee251d1b460d11784ca0b18cc018914725b69b3ae2a37308990bbe888bbc405c85183a2ed3ad75d623d2c826a6d2afd642a99b5d7abc8aca8eaf19869554fc44756d83dc204314419a40ca22652e025a8a13890d9c58be18287b32dbde6307ca6586de78a0ebf10f65ffd8e9f76cf5a8d903bbecce6ee7806dda50951ba4cca17d0ef225134346e48db266866a05c8689d14a4b1cd97faa0f1092cf0d46631f7e76671504da120ce87f3b20cb1c552d41a68645febbe3d454ac33a593a81115f34f10e12d40caf9f08d6c0393ce93efb8b9585b3f16de958743c51eb7c7e789ed4a8a18ffd72d708a0ce6777c5d3173feae7707d85b830ca63576775487fd8a6e7f9ad836a2e51afcd22280b477bc9786dd11472134d0a8366c63a9f143a5cd1d211d059301488952b934be55f781894a1e91db321770ad5798f1c23b335dd0f7586b989ae9624e63ded96e84e98b02041d399088156e4a07177", "928c273a8630724c80a75681c7bce0b4b4a0e4a78c4a5aba2dff68f6336103726e3908ae285f63d93f94c9e9ae79cb91a3069b7c9c33e4c950c98bbacb5e2d46e4b08f462c945c3aa59f272a3e5e60682bf1293f45804909287ec402a8f9418f05ff1ca53da9f75fb531460d6ce9d61d02a02ec1edb74267bffd607e9de2df96644d799f7c87072f6eff21bc773f4b7093c397f85a5a4a31742f84e4fc08071d70006d81530360e15d8eec16dcfc547d2541a6ed7d2cad13025561129c9d16c4173f5f30aec13e8f35654f656c54333020f825915ad11cffc6094a3ffd9358116ab2168a044b61104ec762bcac137373b22ff53eb1af99d74cfd9f45e90f59c91aa1b76dae6d2c196763faf9df66d3caf1ea05a59776c4866954951e459204d132d51e790ccc9ed25e1603901cdbd26ce8be542adf3c3bc5902d6499c74215bd4c2c8cfba51866a93aaaf66eb53c894cfca2a707ff084005fd97459de9d971e8", "8c6b1e430f9f0f4a7a46ddec05799b6e657843d799d719aec146ceb64eb7b355efed54de4f5b2f70b29fcf2ee4a5b2c9a408ed40afc4e791a07008dc58bff8b8d5cf4f57801b4e63044085337855c5b4719b007d38f01a9112c3d333fc12b7b858bfecd22b0abe7b1885b1a4b68d6d6bf063475652f3670f1684a2119b82281229162ff43f8c0f60d4b5f9d028f573dde518fc1451246353125a53f6804220160bce7405e212cebfb3413675324c41a11a745f0667ed14fecdfedb76c8b776f735e1113036b9476f57b90027ef593ea2ac4def09998d1071e39be434ee402fc30b82dbb6c0b12f04dc1259821a2c4f98a6773fa858cd0437cbff8c7f509021561b21a7cb7536e9788493cdacf5988449427bef4b16b14773120287f333d7d69c274b3af2b3d306224622288563190f64367473687a4bb463a7785b856ae8a4e8", "846f0ffbee7e5c4fdaf34473aa4681db30962da15256096a07088c1d3997d35c49a3ac98d858103b5f460109afea6c04a814ac123e8954ca577246768ae509f5c435214318f5a0be94ff8fd9e4ffefa2441b51f282ba0d49d01753423d1dc3f71d08cfe140a856b5ed29f6297f5278415af66c93bf72ef9dc14ca475f5452ed020de5d1fe5a7d3d7ce84ef4de9ad339898a5413076a828b4d29c34d3d2b3b5ae4453fdf48f04288cc1ba515346a2c31d36f788d7254dd1b7294c7dcc6615845f02de29a71a97eeae7cd1e96ea309961fb87e9862f1201a786d33ce84613c989444cf99d8ad36a50332b2c68863fd4d30c349368784c786b73429f5c406da1c363280be1d3250aebde383818669b954fa1c622050f124379c6b4c78aed30862ba", "8a4f598b71d2bb47518e680d88c6ee85a4de2ccc344db04121dcf95497a00dc9c056ffa2b8ed0f8d9656224ec4d72d15a20d744676fd17525985c92428bdea33d7d5a45b5af0da65a197ee8703985b3d45983bfd499608410496467d05e47b83246351e17d99fa66bd56dd75398b42df55cc30a1f5dcd5c701788005934cd89807f026f40279ecb67095b9a200082a6ba66434c87af9c643f53c40b9b02dc5b7709a01def47da1796826042b42865859fe9d6522e6f8c20e3f25da924195935c44f70c1308427906a5590d105682e00cf3e7dadfaab2bbc658c49e4e4068e5504d8eb0bcedece8e78880c225ee7382496293f35f52dcd2b703b479c9b8604bd2", "8e30200cf9d95c9f49cb3e1823ed18f076b845d73c49204b73519ea90b84f9e90d7d51625c66dbf4d049d037407e1212a4250be04d1dd18caf62f8e5ec4d569e69908459db315eb25854faca00fe8bcd69ca16eda6007f31e8ca7ee240829cb96ce5a9c7d35b78e89db441c31a492ec47bd6f9790a6640d658149e55b030929b6b05ed39d196663f0bba2ca34f97dadd954e820d581cc971b47ee1973cd689a408f1b60d5bd4a74891684e4dbca520224746b48f1a30f6b6f86ee2b4c1c4f58f4f932d687cf60bc43c4af2b8469dac7658f0434f1aa742d5ed21950fe5faf997"], + ["8aee212952684b4c8f994f1d9faaa10d55987cc472cc1b848c58d1f34ee8985b5360be9e10994e8d4585b08fe733d2cfac236aaac977de63b71f8d8d661b8cba8847494eff45ac244abafd798e536c312e8accc3d66c76f3b64256e8104cb7e554a96c62dfe1cae321e8c6ad154d91f42644df51b69cd779609754c0b58eb883695500a1f73af4f9319a50e2128b0cdd808fda0f57002fa64bf2f0707200d4856e7d4386e3886ca9e47144729abff22470ed38792174c62a57029ef0949a629b2f7b51235a46c08b0149c2e614fe3b56221b8f91bb2659f80739683c185fe1076aedd9213ae3d0149fbd4a6045a619c709eb7494344b1098d077530c66e1a46d22aac1a59e03f97351898148ca837ec551d95670905d43aef8718b791b1f936b5e33d8d4604f055334ebf98ceec5d0f1ad6bbd1d3c8ff596d8621e0c18464bf26aa38b8d2d0b41c29f961e9d145c9c58ee2069ba6d0628470f2ac53a7dc5f2ef4c17a3ed0ab91b275d10a0574f9fed3604d72c431a21a2b547a0d01d1d61bee3", "8b899f0ea7528a61e4b933a888ad0c6c1f1f7dc5f5321bf4bd400f816ad2bd515cb74a4d9ca80df2b424ddaad372ad3db8677c5a1c24ce0f0ba3bb0afbd633072d6cff11cc919260b49ab17494a380f0f64fb05016cca5972ff83adc6cdb2e07006b1337f3ec9e28eff8963739fbb99312dab0b61bb3f465c5f12021e29b6df127d3f72171598deba040665039f9cdcdbbb556b4501640f8aee9fd45e52e322a135204b731b8dfff57369709b3155512d4da2c4097f62cc90761e95970737442005cb7dfc9a814348374e2b282c2b5b9bb951c9339e058ab16c73c4bbd274590152483c4685bcc9eedf65a39c59192fa521ef41314cef04fbd7e609c57219123347fc26e4498c20c5d6febe38bfcf3e7f003dc2612e85e457fa5cd3feeedb42161b331d54bad2aa4bfdc5e9069f00d921787fe235cb88ab3ce04e69482216fb55433aa7e9aa4c2f0d57c49d5e986bb2392a335e865696d2512740f0fe284a700", "b3ecdba4d0013ac91a5f880d3243e67dea6df773612adc6ee49152775a030dd82451e0fa288830e462dafbd5040f4d1e90606888cbf9076958a0da56fd4bbc0dd6b318930cf35bf5415ca95577604583786db26f93f41491640427071bbbbd5f366a4c6b86d92ade3d87ed7cada6f1bf500864ee0627bb80157e27efaa73027c152746e4bcb3cfe2c62b32abedac82c3896751bb75b289edc8ec43955091130031d67168094146aa0da1ab06f5bd0b6cc4bcc6f2f5dcf3dd70cc2e59d2740c4d28137d52278d10c7e2738891f8e70fda084a6bc2f894fb3f4989294ac3e73af15b20d10e3c4792b8abc3c1672aaee90c33a474600ad3b3f19651393e0654e7ad2a9014f05a93ebdfd4ed9aea268cc802a2a1887b7eab9cf5496291e938e0440516048f81f75cbfde76cdd9a7512233f946962ef1e937533ea02102b020d5cd05", "8a5a758abb95bc306a2f5a61e2402f1eb04b3562aff54609bb7233b455b25baa25c09abaa2888299791c4fb5fe5413b2a51871a6923d9aee28e9c389d27f6735f1945665e01907a367d0859f961c8772508baaa69a8eb1946fd7ac2a3ba650f06267c52d28c67d0a0738829b8498ab5e864fa7447ca23e4b91d8ce1ba2a07918221ca7a5cbb7b36c3dbc13f09f4dda846d4ee577fe39e6561b6648a0babecaa5251220cf0d6f07dd93c5a6e24daad1c4ce6913ced29a155cacf27c7fb2a08712172326515f4d88a963dcb96c5bb6b4a709bd65442463df34bed144181e540e5c03f6d2d385c0e0485d0a69863f7303e663ecfdc15015cadeca83006f2d0db42900b3f82c5a20684b87c06582766bafc9898f91228db5d9ab8597504b3e5eb72c", "b0edc8bf444f5262ebecfddd799008f48ddf8205af0793a8ce7255cfe21a0f330eb6d7e5b38a87f72befac7f9a232439a92911b368adbf7acbc3a7d61de7437d2fa88862593c67becb5baac0b67b4c2a04693100a6e8e0505d42cf359f2ce7a24f9660b44279573fa129fae7f98b8bf94be4b332dcb7cad0dbcb303e551635fc407036af73b1bc959ac5227e427f371320b10e63a739d7c9aea67b9d05e482750d85c88d8180b507f3bd3518b6f6b27b816831b75d2d52fa02d842ffd52ca648208b2333c9415728f7b4cb7c43ea5cd7c0f4782ec13819e7a20397048169dcad6f06af1a696216835f6d0abb2c51523131c2610dc01d43b8e03b15c0c2df2d22", "b769191fd65fdbb407bdcedd400b9faa11e4baf5087c71d968ebf602aa1be5c7b2280a4da4585ac5b914b914a2a0d9e6992f00dd51bf4062b54ee43b56af8476a9e4d16a135df9f54c269af4a7acdca251b9e5326e33e058c37c2c3240fbccb272d6e90b4b2d3f8ef446ec6f56d7a1ef0434152697a84ba8eb7d0b380d14f7d05a301fe2ca8832bcd62939a7523cb0f1507e4483613bec795e2eff864d22c38d454331d0cd26ce28a19a7f60eda75a7e5801597614d9eb1ae5990912340eb3d6465b584010e66cd4319f21e2f4025b7e138cfe6af94baae53819268a3d5209b7"], + ["a8fb111f54e2991a3825d8f086ad6c88a76cf556dd26435558fec7c78c41e8ae34fdb7be71490c9459eb3709cd13eb2181ca8287c2325245415b5b5155a5ef7938ee4d2942f1dad42d2007e6c87bfbd254982a356bac63961f1ded4f3c5dbeb26e9def3f269cb0ff217ad70b138b0d6a20274c22fb71d906539ba627f2e333ab338f59f357b009ee6b0f951bb6b6b0ff11d4ab674d4129ac04563c56e6af85e00dce5eee928b13d176eac2197616d020e1b87243abc85b200d592bc0719140f5474cd9163199ce4ead1f7e64b6793d1d3d6fa2523d46ce548c4d78e4ba308c1a515bc42ad672b16f02ef0113f32e07b80bcf087cea074ca1ef01c6732df1363470a3a9b39437019835fae56db553be95f13917df06711076cb19149146cbe85d53990a120c459e7b85612cacbb3272c93b998f682f6c087726fcb47e006690c236adbd5adbb4531dd43a2b01871ad068384b3e52a084b220a575012ea1727fae14c8efa6ffe861b3e4a7d6acec1c9f235d172816c2247ceb339e02e1235d6a13", "829655a210a16a5f9185704787f05ee3923e67ab8f0411ed26f336ea6fa7261e78d681abc34b85b2629455085f7f91f385f319e7c3d610d6170b71ebd0d3a17321c81cf51a9babd0e2c276c6707a83877da58aafce711b8a010f79b0c80c5325351b34595c8894906813d082b43daef006693e535db6f024c64b3a8433964c956b7797062c5d552e252392fdfe7b42735deeae74c78a5487072a0018995498f619f20ef165d624304476b32152ee4957a1b17b9d5040e76c2b9d313f1a85757823e122121f07a03c692cbc52ad56e6291f6b8427604bb8c32335fb18f1c4bd835b886aa8739b7a7c777b8918d97e30f798b63b1c7fa80d183e8648c33a2814903f067c94668439b214d631d7229731a220c71e1c0275a5d1c877edd024ee10e50027997e66f0d15e05676dce889acb36ea447b6b48bb28c19e9b3948cbb1375e054cd53295475cbf3a193c1dbe311cee5080e4ff57740097bb38480790709bc8", "b6aac5061e63900252a8eb132b9d627021c95020bfad435986ed252566ce84c692a35b091ae6963fbd201a50fac9cdbe827d17f59cb95ca842c1880a54b0afa14ff8f30bc988e2198cc43b88a730b86dbfa15c59f9233736ca3bf0454047304911c3a96ee54a56e52de1a96f5098d60eaedcfdc0f1c70851fcfd3a4fe572f99357490a88b2f89dabc62fec1877eeec4fcb82123e988e41eb1cd4eb876b8de683184e33eccac2ab08743bd964705ceef83d2413db183ee2c0a49637ba91a67cc8091a2ef2583e129736ca959cb1e68c43296f7ff573b36f8a4a26a9a73c3d47b76bfb06098bd59f9c55f7a2a6d5c96916bbe271860cfeb3b0bf290bfce4b7c0cc3fcbe95867f902056c412220ca968eb2faf513c65be510665d6a04c44ebae00b70d0b67d0219f56dfbfcdb429e650cf383b834a60849db82d746b506edca06b3", "87ef40dec19ccb5ae3ab09ee21d11157a1e7d7076f11454f30b4bbf38b9a20a55c5d6c82fd8f3ef0cb50723bc524aea5a0addabf6469a1ea22fdcf0e3aecac491b049a11b9e50028aa503aef46a2c9f2cf9a5134d3ef2fa31bea797909afe9eb2de51ce2e55b77ba0a3b56a8ec65fd4967e16a97da65fc4ac66e1128458410ca5ef161d8252307e52b6aa0a5acad3d74de193e7b3b39abce9778c26c25a286096388737de1937bea6e49812486a59482a493daf8b1a3f15fc5783b8aafc76f4d3b99b6993539c3b5f71d5d583f23272dd316abb056bc0888836149a56409004001b2a0fffac756ace8dff19d1655f77bb34d0aae0c905fda27601e2fd09e28fa3e108cb952abd5995aab6afd79712618b2dbd12e7f87228fc69c9abb890f9105", "82f34fb77acc868f8a592d2974cbde18c242984284c95b00a35df91a40ad18899ccc973fc70c4b5aeab9cf001a019f13a542bba389c14b9b58b5446778fc64f64af70e3349392372d3cf2bea9fe7c1e05aa474d09b234b03360aabe1acef989f0ab511c72951019f2031b1e943e8e6ece4dfd3e0d86dff4e9b0de1582797040d5bab35bc812ce70b32c7fc7229204a4aa21fbf3db853784765d6792b5c0229942e002f111d91344655118af2de0d0c4bcc7bb3a97e1af82d5623e181e27baf7b612b9c9772f0393dc7e0d2a1a8f1d192596751a99d7d88e5a3319cc14be45fdc0a629ab9ac61edd2fd32fcea69f3d7b5384525708f2b658d608b1cc1bd645fb3", "80889ffdbe8e94bec4fc0eb088f8ca9b808d12d83d6651a7ade515efa96f4049abd78b743ecff07ec2e7a6c93f17c42792ed75ef25c08e34af098ce1096eb9a6a9c9003614ffb9511a6ab8b8b8a9997330bb3586fc0323e3bd501733aaaf4e4c0e92acc081fc5fa1a23df99a9f6db41e28b0cf0c5960bf97a5a7f44989b07d8b295a69b6ff959fe542d110d199c77ad4b923a881ebccb5523593d8016536877b3fda5fda1e1c51690c636f9c899207814908414c05a0300c0ecd53892bd3d46c24599b4fddc8f4bf0b18491fa24ba097898b43de9d3f13a8d3794e3dc0443504"], + ["a5a21cfca36f76c5ff57ae60fff0beaa167c0e16034f9afcd94eb731799384807287825a879d1bebb62dd794c94e617ba6cc11ca98a1211ee42900bfd6fbe5e91a1cf2e2bd6408087d3085688c066e3177952b99e8560ce7d1cf55e74999c56c4d38d0ddd1de48de7dae9e74ab816d34179275256aaaa157833769b2e47bbb29141711bbf52d0861a28d6e613d31a7a32348d1f105f149f99b4aa0d6b80c3c841c709880d3f006451bc2c17d7287ba831d7957aa73156d47310850fea2375ee908f9f87d79f8cc1587470a7fc99b6a43fb347988eeaec635797a32e519a3e1c52905e1e2fe21ef88fa7a2bd492f20ec2506c9e61b3a778419d41cfdc47b618855362b86a3721c01472b58745b471be8da80abecc44dfe18716db758b27895c361ff4df256c2cc75d2dc3d6951f3d3987fd2dc257b6fd89c2fe5659ce821ad3b1256b3fdc6ecf35c008c1e4abea41b12a74df8238ad331c9dfa8f6a1bd429ee1e10837375ea0e22a7c438ae6e61a9e291c15b2b202d0a85ed44dd971664b3207e", "96f62e684c35548cac92a71371fafe88401f117503bbe05d14ce3b7f05df82eee75947ab68ded9c1e8c0fafa87811920aeda16a274e13a77b6c39ba75265d50a2dbe201bcd43f6b0ec2ff1ce618eed4eea0548c416d42fe2a2b1de9a584987155874cabc351c47ade365f74eeb02e2fb09be1eb91a4f7ef1d9d61b4f0eebed6b197a15e0c8d240477474092775a78c775c172ac8b7339af03d4b2f173e3f577a37b90093d981407606e46064ecc6d065fc88cece770fc5ed91b34486942c3b3d668826d348f4e86523a713823b6a8feef02e59a88ba3598f6455f3ec4a2775bf4e3c5ba10c7dfcc0ea236756ad38929877646a6f32fe9d98523a75e4c64873df15b4f52532d3be15ed04d6d1bcd0c4cb8df7bb56d6cbc2a076a993ac7b2a5a890d879267f2c4678ff06f4d91fd6a8a0dc6c3064800584a549d3dd7abcfaebc031da90db4b92f2bac9477c078446351d4396f41bee02af61a8644afa952d60a80", "8c6f0f73f3e68a3a6e00f32bc8b24aa9541f3ce0600a6351ee25fa4a83d013f4837857de04f286e2fd040e7c4318d16ca6a7e823bd5da8fc5115ee2dc2f9b94643b4f8d83655ff4175bb074dfab9b391b4f34cc16fbe05dad9921b343f05daef00dc644c481c289720608ed774662511ef91c2aa3f6989d3b72e44a1785faba130dfdd30ae1a99b736aad3a94f4d0e77c42a79ffcdee6766ca85e56fef6f9229720cda98ead4def8cbec58afa88134a321234b7b30fb3fd7b1f3a597e316e54d2b217ea81faa65c77ee9948c754ebb1db6f48ee7b9da24ee0185f4d4e9b9d692349af582a7bf93beffc075a404d41038161ee9d3b386e3dc4877ca5babd2d7f615b5ac62e1188fecf89ec7bd92f6a67c86e6d2ec280073d47ac625971b7ec0ab5fc2ad581060f93adca3cd402ff6e6aae6f3e478997aff53e2cde4ef57aa0dfe", "b71435c13f6a77e4c149fcb45be0fe6c6611d99cc5b746e7f0bea11e08cc827c29e7a9a23a2c6b28159d916ab59634fcb6f00034f7fb0cb1c78d9a51e1750fc01f76d262dd1c03de70455438463713b881904d9a5aeb6a9111ca25a2d541c73273085c24d260bd3c513ef2397b9b16b75fb0293f40315d727fcf0947112bdb2235123fd42944f89388932466ad8c2597c33e6d375e13b8bee256ba1fcdc1b0eb029def69f2805db00452686bdca8279220ad66424b787d92efc3dbc5a077b63364c6f6aa58059d6d7ebfbcf5c9dba1ca305a05f97de11891bbec472e42a63cad593e96b7c465bda75816e8f82a78b176b5bd9abeecd5af442c1c32a6980fa0ef40de0efbb2738526447331ba1b7927023a2d4078657ff7ac134fb0863c30d1db", "a312ea9491a6d60cefb6209d918e393dcbde47fe5a21a169f50457d56b2fe0dd92acb630f1ca9dfff1ce78107d339b768927d9636d6f47f9f12fd9fc8a5bc74de9b25c2f2e42eb8ab8d5c44ec4b6a2512411792ed965ce266763afc5047f59b74569eed1789b805937ef167d6ef9ab1ceb2848dae98779f212a9010ee6586a3370e97d95fb1693649bfa79cff884cdf4fe3f12bf7c3eebfc472a0298b772557f4312883092475f80cfc422a250935aab3a68cc2c569e179da5a496ee9749014e01f0804d43fa75ba04cdf61d1b2e362197a738178b6a99b8a1eaf8beed859bff190482e86ad326db341748a68af11188fd0cce495ecc9ff15073ccc12531ca3e", "874de94d9d1333f89ac414b035d6a3add23d23a6af52e3422801eff6aafc354842714915f1d5c9791e66f7af71a30054acdf7e35f1bf3efe92eb2916de0b7afd7fc64cdcf87051ac482579c88886e824040d31137501fdbfc277a3215162d72b307f8479310e7bd048261a5a4544ecd89de1495b945eb5b30f56e658b38f9e8614ec91921c87fd0e70e25ec589838fb7aedfee12e46380981467b85a73eb64c56a659a1efff76a90a713e4986547dfa0ad60d07a65c78b65b5b1e611ef01f5da6e52e77dade5b412e584b1c05461c7481ec2ee9d291b0878c096493459e5b176"], + ["acb9f5a5dc13e43b2119fb2e1fad4bc87dc7d5492d3e185020fa9292f7aec12f92f4ab9f6bf6d9e6469982ef98e4acf4a5eadbde817e45c1f5ca42262f5fcd616a1ca7cefaaa909b19eb20b79989bb8aeae930b5e29e1761a005cc285fc32c2019925bdca63e023c6c99756f8052079e937c95c91e5bc09dc5c1efc1db52e6022e97fb6e5e87a17f56408a642c09e50a269189c1a33e9ebe3158a238114b10be120b5c69ff89d46ae5ae5bce394e149b8cb6bd79ebcc049e995aae4c4eefd8df00b431b89831eaa9a640f9ac51b9c723faa5ad4af26926963e21619064656c5a5ad53a9f3a412a60d6f6b7b92cc591083a493304a3fd0342e44579e1f57d3623416796d58104f61458a08afebc7d8b41b49c2032c40d9eaee8394138643c2b1c68ce2709363d5c288fbee7901416a1346404544f3d8cc5f325ba0dca4d7ca7313bda1f0ddb28328d1a2d68748f816e38675ba35a42bb5137b73bb2e78d5e94e1702f13215f2e4236d2ad16fad217a4532db8106131db51bb72f92dfb37642f35", "a27d87a3fdb325a4c7b390d3914ca555752eab12dee6c32a526bb6801481eca572bf229b404c0b19a5f4456593e940b7956641fff3e94ab382c53096b46e41e7c896ba73cefc61440943db732902f8c2d5afda472166604813da187a90bbe2602d160645cf77fedabbe5df2377761a7e45026ef1636b609485ef555e7926b6cc4b0609f16e65d100f700793539c0212a65ab6b0388de1bdca3b99c38e08e190d6a17aa7219e19d0ff0a3bcaad745863681699418cfc44731e6aaadf3210613b5294135f7912a3086a1bf5e98054cf3b5f9ac9dd9e85947bd7118460b62768a9f64a58f732d268cbb859d537c6316fd1c11db00d437f3e2008ce686d5bc1546d959a16ec8c612069b66dd27306dd6882979eb78d7b0d68aa382c245dd79bcce1637680255f27376fb6cee30e9c12cc9909a4efa89d5cc389d0858e89160c67d3b5786331851f96d9e68d9011011e176e3ab2f21bd1495c49583e48b3083912bcb", "99d476f31f55fc591d4fd4564a9b0da4b9bf64c7051fe91e9dfdfdd88eefbdd8edceaeb1af54884953c0d6d864266aaaa144c7e2ffcb4d31c467e3a4cbb20697529f987431604ad7d37aae4c07d9779ba121537b3660f6c6f2440d2565e25568060029e0ea696e8ed9d4f1a4e7eb3c3d74b9ccab4f6adc04636e5706cdf129ab0c9a48c1a65489b722b39f9c4d159be5637a7db8900e6a1827b4a985cb06f62f2ef0691339908a84212d4b827b2993f20fdf03494dc12d7e889f98892d1b5cd82ff811042f60b7aa6dde5ebe616ad5097227b19a3a016a1a29787e89f9d8770406b61537b7a57a65cff395522a34c09032b8f223f354cbf05c579df4fa9b8c8261a88c018e10d05d5fc3b6aafa6446cabb8cf6b91c9bb7b326b9d26203934bab58e0cdbf0a4d2b7bda6f974b58a805915ee0619111ddb5305fc2725d0944e76b", "b32259b13ede7d89f3c887321b0a228f215a1bbd345e3ef6a054ef4ccb7674be63d4c5ccd8a01f892d7e44a80424637c80689d18e5468a5fd4330f1ca7bdb6f28d0100a9e2ca4c4ffd78edc71659a6d32cdba4656eef14bff275b6093328625b60057b193180656f095e68f83fa73981677d8ba61cd4dc022449b336bee4288e5fb81ff27513f45d45c5b3f1e363dd0ab5c7ac011104addb9ef11906e617ce4f1da3deb22978502504c4d8f19e319e485b053a5c25826aa63d31ecbbb2274c2b6feb8602631f6b848f65c7325738829ce0a5f9932caf9099c0eb37e8c02926756fd7898520adc568cb4d69918cf6b611bb875a6619f2808a4d3c489f01b909066879c5db547c22918b3acbe6a69228fbe13f57befdfd7f05ed8ffb8329cc5f9d", "ab78209c37893e0a5ce02561f701041806a7fa3e486e878fcc17c2dc97fa51111883962b124f6df4cfdf5e0493c303fb8ddc04e3ca4638aa1adc07b2f3f20618f6c2801bc14d2a4b1d226e6d4c063e58e2da63079169e27c636cc1f77ecf8b26465514ad91aff80215096a7ac7eeae95ac20be58791524adff6d1437f9db119506dd33c7da3e3f8c487e4a1b468521ca181daf1cb0fd034a61aaabbdd9350f2a47b403bf2ba0667b8ded6cc7e9792d1ae1340295ccf39fc453cc0d4aac5ff659522fc3cea72276cb7e3b473c61a5e49e8476d787ae00ba8dc2c769ce8a85fe7235af473ccf25830e910f21c33a15f728f5753bb8e1b8c229110406a3935f1d11", "a92e3e230d019a045c072e0e8f0614b967cca0bc81f589113617651a3bc9456ac454e0b0dc0f51561fde3b7ae653d15ea874b04e1d3914bc844c6cf2ff90c3f2c5edd5493ed9ad3711b0854c00e17f734b2c9d5ecdffc5e415b2b4fdf8102e8b53c88b14a6aa1dca28e9b6aae6b656776eb49d855f578fb623729287b3faebd32318008334a1c266656d6968cb61fbb62c54524b6a051ade4b7cd23410bc80ac000ed5332f6014a5f2c6b31fe2cef1d7b9192e1d8826689b62ea29725b6e462928d7f61e847d0e8a774e96390538558a1790af233d92e2b4cfe40473c18bbe88"], + ["aac5ab25e0996f32271275ba54ab6cc1fbd2806883992e05f25659f510428dccde9c4c98963daf7817ffbcc9a8f725b2aef13f60f38dd8a55f70e78894fd59e38ccfc45c66d06a147d4bfcdd693f5210f07f13b4faf5137c79994ee5824abf9232edc61a6b4dd13a2b641c9244be750bc184fe297e12a94626a2f9d2890234200ad73ffe8a515d619e64903e7df8be9b58fe50e2e11bd9af768a219f4a60e7f117abbe1425a5ea348be7be5ac2f0942c59189fcb5c7ed5d79bab235aa99c0d4b4a75ccba46ec706316c77e561bc32bfcc108a362d593ffadfbc0e21659abdd1c58e0f702fcefa51b7f0d27917b60a36bd7c2b4c7873b18de05bbc682b6bf57203816f4bfa93e2a0eae69c228c7d756417944541c877a0ab1c4f905e82ff579380158ea3e10ed232a182188a8940f7a20d260756c4edf4f482316d622e5ad31d60f170cb2ba1b47bee9e10015cb5f0c1221888953c8055b17a4f9681f795924033967ff0ef26b0a96591e974322d5f70523e88d46405e272f26e957e4d680a22e", "a98be12cfb44a6239f5a862317aecf42af98887ad7a9a780994084f02b951479f6112e9f98c4026fea81f1fd3d5a18c5b0547eec01fb3cef66bbb8e89387cbd6336ec72258e0de4edb8304c0af5f09d47987fb5bc52b519cab326d1e52400b3a694f40703f25583a0fb3ded96697be4f864deb6d0f336ef7f431990b3a52ac4d29e4a457e0bac733b0f6590e7defb2a541ae804a233580801b565b417ed5db991c00d70db9622fbc0eee6ecbe5bbb4d00f3262b56d32f2e8cf61da5e7184057049d55711610a34e46b3767971c5d226010d3e914286fb1b077fae9e599d6c64d2f26b85247dff6e83f5bd017ca15a10c72e79c9d3b96523ba9266b115564c26e4ddb1e2e09c7f235d56724a77b4f352e6e36fcb9ccd6f0a821a45fd920b546f81d4116a1043dc159e430ad1eb78dc3e5a5f001fb3f313d49d4fdc1daba91030420490421079aa23e2715634e059e97b7698f44a3bee2083df71c6341bcabf905", "aa5c682a198728424af59b36c9c4aae9ccdac86e7e6b542f775df28d315f40fe7dc1a206a6fd73854a265cd63d8d6411a6e1932d3fac4902ecdce31c1246b0cd318609e44513288f64270096f66e5e492e92ed1864d4343e9694581133ea74fa3e107234eb1189cfe12a16eabcad338f6b320be501a529e6b9b824105e63e29c28c86c62680f082e158e1f7ad551cfbec03bac4bb1e7d72e32ec4f12788efc1c21ba0aa11f100b398bc8817a3e256ae276358a355e8afe9d0140c8db1faa7c5748e2f239f9910e9cc38d6deddc5a434fed179d25e5cac854bfd870383dbfa2181f0fa9dd4dc261d3c3ca6777b067ef99811c91f148757044b1d956afd8e20969055d03fb310a27f22efade0cd677313b8758b918b18c38e96cb4079d4c64bf37228a410d089837bbce082624e55cf04600ace787c1991e32715ca11db6502662", "8ca05dc485720fc45bcfaba886f420d90f76fc54251a2f90f7684bd2e3459cfac7b7ece10cd6c4b109253ae75fa226b7950bd15773fbd6678fc5b8524b35fc98d2b212c7192d2a69553f009941b6e861669221a976ad7f73fd71350446b25e3b6495dcd982317fda2d5ce4138ef2323dc76f0d8bf638fa941455606abc8a841b2c02e51a4340a7fa8d580339ed2550fa5d84aa48efc9b60cedd84af964bb21eb0d2db4e9a57f1c21329d1c32668a0f39da4b00c4b85fd98ce4845f9ec4cd4cd414a62de723e22862d6200f9a78833758a85174e82deedd1634f7d8497535cac535ed5f68b0c2cf96bb9f54ee146560547ecc2400e4f2d11cf145c1c182f5ea0c3f142b687bc9d8e616b7d4221cd7842c7372c7a7be567ce889928b3e1b59233c", "845b3868c151edc09ee546602c4ddbc14457b8f6b0248002a1beee2cdadcb0c2a6bed381929aa52fb17aef8b8372b074a09fc965f759639e1cc66829a4ef9c5115c5258afacc02c05081e1bc862b6b45bbf09b99cd87d645a55d7e0e04f0cca7277da42027effc3141081a6e27048fb002e73617ab24c41e3d3f509ae771fd765de7d61b1ed9caaaed253c60bd37bd11aeded072c78e5ca2bd54edba37c14f0c3e5906de559c559f9f509a94b5534eca08898d9e1eb9f665a5e81e2af836fd2856698bd19887d9d927320e7b755bc986593fc7f0b39c1e4bd46c3439da22708b462c41aac0f2955e9eb4b5fb727d3d1b7993edeb9e90333de4ebd274819bf7a6", "b93738ead0f1afeb9101a777d8ec07b9c82a0711fa83bb93040c1b8427e8283ba3bc7601fc5581cd7403a6e82531df24a8a96be9c74f13b6ab4a85548921444570784e997a2f553a3767a0f4aa29d362cec74a95c9216bcf28889e79c94f97c4680e71cb5fa0601c553767ba17c63c911ba8c9b190806b7eb1f38d972619c7d45a18e293f3461ea0d6344585881620cc5aebecd9bdfbf3fd5d6bb8a860a979ab2e0e30bcbb75e0d29ee44aa5a5f721dd8c640b49920630d64745e4e426266ff629d5edf2c032a9d43a0935f1446f3372ee4f01649738c0962e74843c8eb10c42"], ]; // dst and seed for the mocked rng used for proof generation. @@ -224,7 +224,7 @@ macro_rules! proof_gen_verify_e2e_nominal { // number of random scalars to return from the mockRng. Note // that, this value will affect the value of the // mocked random scalars - let rand_scalars_no = proof_messages.len() - j + 6; + let rand_scalars_no = proof_messages.len() - j + 3; // mocked rng computation let mocked_rng = MockRng::<'_, $expander>::new( MOCKED_RNG_SEED.as_bytes(), @@ -243,7 +243,6 @@ macro_rules! proof_gen_verify_e2e_nominal { verify_signature: None, }, mocked_rng, - None, ) .expect("proof generation failed"); proof_values.push(hex::encode(proof)); diff --git a/tests/bbs_api_fixtures.rs b/tests/bbs_api_fixtures.rs index bf95fb88..edf98583 100644 --- a/tests/bbs_api_fixtures.rs +++ b/tests/bbs_api_fixtures.rs @@ -37,7 +37,6 @@ macro_rules! sign_verify_fixtures { std::fs::read_dir($signature_fixtures_dir).unwrap(); for fixture_path in fixtures_paths { - println!("Fixture path = {:?}", fixture_path); let fixture = { let text = std::fs::read_to_string(fixture_path.unwrap().path()) @@ -45,8 +44,6 @@ macro_rules! sign_verify_fixtures { serde_json::from_str::(&text).unwrap() }; - println!("fixture = {:?}", fixture); - validate_signature_fixture!($verify_fn, &fixture); } }; diff --git a/tests/fixtures/bbs/bls12_381_sha_256/generators.json b/tests/fixtures/bbs/bls12_381_sha_256/generators.json index 967b6f25..664da9bd 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/generators.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/generators.json @@ -1,16 +1,16 @@ { - "P1": "a8ce256102840821a3e94ea9025e4662b205762f9776b3a766c872b948f1fd225e7c59698588e70d11406d161b4e28c9", + "BP": "a8ce256102840821a3e94ea9025e4662b205762f9776b3a766c872b948f1fd225e7c59698588e70d11406d161b4e28c9", "Q1": "a9ec65b70a7fbe40c874c9eb041c2cb0a7af36ccec1bea48fa2ba4c2eb67ef7f9ecb17ed27d38d27cdeddff44c8137be", "MsgGenerators": [ - "98cd5313283aaf5db1b3ba8611fe6070d19e605de4078c38df36019fbaad0bd28dd090fd24ed27f7f4d22d5ff5dea7d4", - "a31fbe20c5c135bcaa8d9fc4e4ac665cc6db0226f35e737507e803044093f37697a9d452490a970eea6f9ad6c3dcaa3a", - "b479263445f4d2108965a9086f9d1fdc8cde77d14a91c856769521ad3344754cc5ce90d9bc4c696dffbc9ef1d6ad1b62", - "ac0401766d2128d4791d922557c7b4d1ae9a9b508ce266575244a8d6f32110d7b0b7557b77604869633bb49afbe20035", - "b95d2898370ebc542857746a316ce32fa5151c31f9b57915e308ee9d1de7db69127d919e984ea0747f5223821b596335", - "8f19359ae6ee508157492c06765b7df09e2e5ad591115742f2de9c08572bb2845cbf03fd7e23b7f031ed9c7564e52f39", - "abc914abe2926324b2c848e8a411a2b6df18cbe7758db8644145fefb0bf0a2d558a8c9946bd35e00c69d167aadf304c1", - "80755b3eb0dd4249cbefd20f177cee88e0761c066b71794825c9997b551f24051c352567ba6c01e57ac75dff763eaa17", - "82701eb98070728e1769525e73abff1783cedc364adb20c05c897a62f2ab2927f86f118dcb7819a7b218d8f3fee4bd7f", - "a1f229540474f4d6f1134761b92b788128c7ac8dc9b0c52d59493132679673032ac7db3fb3d79b46b13c1c41ee495bca" + "98cd5313283aaf5db1b3ba8611fe6070d19e605de4078c38df36019fbaad0bd28dd090fd24ed27f7f4d22d5ff5dea7d4", + "a31fbe20c5c135bcaa8d9fc4e4ac665cc6db0226f35e737507e803044093f37697a9d452490a970eea6f9ad6c3dcaa3a", + "b479263445f4d2108965a9086f9d1fdc8cde77d14a91c856769521ad3344754cc5ce90d9bc4c696dffbc9ef1d6ad1b62", + "ac0401766d2128d4791d922557c7b4d1ae9a9b508ce266575244a8d6f32110d7b0b7557b77604869633bb49afbe20035", + "b95d2898370ebc542857746a316ce32fa5151c31f9b57915e308ee9d1de7db69127d919e984ea0747f5223821b596335", + "8f19359ae6ee508157492c06765b7df09e2e5ad591115742f2de9c08572bb2845cbf03fd7e23b7f031ed9c7564e52f39", + "abc914abe2926324b2c848e8a411a2b6df18cbe7758db8644145fefb0bf0a2d558a8c9946bd35e00c69d167aadf304c1", + "80755b3eb0dd4249cbefd20f177cee88e0761c066b71794825c9997b551f24051c352567ba6c01e57ac75dff763eaa17", + "82701eb98070728e1769525e73abff1783cedc364adb20c05c897a62f2ab2927f86f118dcb7819a7b218d8f3fee4bd7f", + "a1f229540474f4d6f1134761b92b788128c7ac8dc9b0c52d59493132679673032ac7db3fb3d79b46b13c1c41ee495bca" ] } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/keypair.json b/tests/fixtures/bbs/bls12_381_sha_256/keypair.json index 4b203c75..4e4daab6 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/keypair.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/keypair.json @@ -2,7 +2,6 @@ "caseName": "key pair fixture", "keyMaterial": "746869732d49532d6a7573742d616e2d546573742d494b4d2d746f2d67656e65726174652d246528724074232d6b6579", "keyInfo": "746869732d49532d736f6d652d6b65792d6d657461646174612d746f2d62652d757365642d696e2d746573742d6b65792d67656e", - "keyDst": "4242535f424c53313233383147315f584d443a5348412d3235365f535357555f524f5f4832475f484d32535f4b455947454e5f4453545f", "keyPair": { "secretKey": "60e55110f76883a13d030b2f6bd11883422d5abde717569fc0731f51237169fc", "publicKey": "a820f230f6ae38503b86c70dc50b61c58a77e45c39ab25c0652bbaa8fa136f2851bd4781c9dcde39fc9d1d52c9e60268061e7d7632171d91aa8d460acee0e96f1e7c4cfb12d3ff9ab5d5dc91c277db75c845d649ef3c4f63aebc364cd55ded0c" diff --git a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof001.json b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof001.json index a5816bbd..9657b2eb 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof001.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof001.json @@ -1,34 +1,13 @@ { "caseName": "valid single message signature, single-message revealed proof", "signerPublicKey": "a820f230f6ae38503b86c70dc50b61c58a77e45c39ab25c0652bbaa8fa136f2851bd4781c9dcde39fc9d1d52c9e60268061e7d7632171d91aa8d460acee0e96f1e7c4cfb12d3ff9ab5d5dc91c277db75c845d649ef3c4f63aebc364cd55ded0c", - "signature": "84773160b824e194073a57493dac1a20b667af70cd2352d8af241c77658da5253aa8458317cca0eae615690d55b1f27164657dcafee1d5c1973947aa70e2cfbb4c892340be5969920d0916067b4565a0", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02" - ], - "disclosedIndexes": [ - 0 - ], - "proof": "94916292a7a6bade28456c601d3af33fcf39278d6594b467e128a3f83686a104ef2b2fcf72df0215eeaf69262ffe8194a19fab31a82ddbe06908985abc4c9825788b8a1610942d12b7f5debbea8985296361206dbace7af0cc834c80f33e0aadaeea5597befbb651827b5eed5a66f1a959bb46cfd5ca1a817a14475960f69b32c54db7587b5ee3ab665fbd37b506830a49f21d592f5e634f47cee05a025a2f8f94e73a6c15f02301d1178a92873b6e8634bafe4983c3e15a663d64080678dbf29417519b78af042be2b3e1c4d08b8d520ffab008cbaaca5671a15b22c239b38e940cfeaa5e72104576a9ec4a6fad78c532381aeaa6fb56409cef56ee5c140d455feeb04426193c57086c9b6d397d9418", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02" + }, + "proof": "8e9bc91d68151e4b105ec0d46ca95fe1526672bed27b26541a648ec990b3b11b8905e671fb981f1b9cd1ed64167a7ba18b7697d9bd6f3cac02f75551f2db95bf2707e3790c10d815346a96198327cc7048f220bdc7d6fc5ec41c6d9f89d607ff6ef2eef19447b3e34a14660eedb8b4f6189f202a4fef22e60dd23041e2761a9f18701019b520ed3ccf07a298e349222ab059e7ebd84c65e3a2127ec42f5f357c27d5601b2193b697a576fd9bd896c25a75004f6604a98707741916769c49175f", "result": { "valid": true - }, - "trace": { - "random_scalars": { - "r1": "60ca409f6b0563f687fc471c63d2819f446f39c23bb540925d9d4254ac58f337", - "r2": "2ceff4982de0c913090f75f081df5ec594c310bb48c17cfdaab5332a682ef811", - "e_tilde": "6101c4404895f3dff87ab39c34cb995af07e7139e6b3847180ffdd1bc8c313cd", - "r1_tilde": "0dfcffd97a6ecdebef3c9c114b99d7a030c998d938905f357df62822dee072e8", - "r3_tilde": "639e3417007d38e5d34ba8c511e836768ddc2669fdd3faff5c14ad27ac2b2da1", - "m_tilde_scalars": [] - }, - "A_bar": "94916292a7a6bade28456c601d3af33fcf39278d6594b467e128a3f83686a104ef2b2fcf72df0215eeaf69262ffe8194", - "B_bar": "a19fab31a82ddbe06908985abc4c9825788b8a1610942d12b7f5debbea8985296361206dbace7af0cc834c80f33e0aad", - "D": "aeea5597befbb651827b5eed5a66f1a959bb46cfd5ca1a817a14475960f69b32c54db7587b5ee3ab665fbd37b506830a", - "T1": "a862fa5d3ab4c264c22b8a02636fd4030e8b14ac20dee14e08fdb6cfc445432c08abb49ec111c1eb9d90abef50134a60", - "T2": "ab9543a6b04303e997621d3d5cbd85924e7e69da498a2a9e9d3a8b01f39259c9c5920bd530de1d3b0afb99eb0c549d5a", - "domain": "25d57fab92a8274c68fde5c3f16d4b275e4a156f211ae34b3ab32fbaf506ed5c", - "challenge": "32381aeaa6fb56409cef56ee5c140d455feeb04426193c57086c9b6d397d9418" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof002.json b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof002.json index d0b868be..1e80785c 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof002.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof002.json @@ -1,52 +1,22 @@ { "caseName": "valid multi-message signature, all messages revealed proof", "signerPublicKey": "a820f230f6ae38503b86c70dc50b61c58a77e45c39ab25c0652bbaa8fa136f2851bd4781c9dcde39fc9d1d52c9e60268061e7d7632171d91aa8d460acee0e96f1e7c4cfb12d3ff9ab5d5dc91c277db75c845d649ef3c4f63aebc364cd55ded0c", - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9 - ], - "proof": "b1f468aec2001c4f54cb56f707c6222a43e5803a25b2253e67b2210ab2ef9eab52db2d4b379935c4823281eaf767fd37b08ce80dc65de8f9769d27099ae649ad4c9b4bd2cc23edcba52073a298087d2495e6d57aaae051ef741adf1cbce65c64a73c8c97264177a76c4a03341956d2ae45ed3438ce598d5cda4f1bf9507fecef47855480b7b30b5e4052c92a4360110c67327365763f5aa9fb85ddcbc2975449b8c03db1216ca66b310f07d0ccf12ab460cdc6003b677fed36d0a23d0818a9d4d098d44f749e91008cf50e8567ef936704c8277b7710f41ab7e6e16408ab520edc290f9801349aee7b7b4e318e6a76e028e1dea911e2e7baec6a6a174da1a22362717fbae1cd961d7bf4adce1d31c2ab", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "1": "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "3": "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "5": "515ae153e22aae04ad16f759e07237b4", + "6": "d183ddc6e2665aa4e2f088af", + "7": "ac55fb33a75909ed", + "8": "96012096", + "9": "" + }, + "proof": "89910f223320044fe6342b8dabfeac786f35cc98bb64c95ecb39348281d5a8c84e975581b5f37ec45c8bc4cda486d5e2a20e007d0dd0fba77f846dfe3458fc01ff94a49c058550684638e1b88b61e8d69a1453652477af005d42cdb2d57e86b03a2cf88bc0bac5a3d12a1c0717b9ea8d42ecdb746f522edfc15910574b289faa0438d6516504a7a66ce180b2271101d87519cad823f03f266f66649b388e680a58a6e7ae4982ae797890d5d0b574fa73a7ae7023d4dd9f8a9b3a11f208256d7c", "result": { "valid": true - }, - "trace": { - "random_scalars": { - "r1": "60ca409f6b0563f687fc471c63d2819f446f39c23bb540925d9d4254ac58f337", - "r2": "2ceff4982de0c913090f75f081df5ec594c310bb48c17cfdaab5332a682ef811", - "e_tilde": "6101c4404895f3dff87ab39c34cb995af07e7139e6b3847180ffdd1bc8c313cd", - "r1_tilde": "0dfcffd97a6ecdebef3c9c114b99d7a030c998d938905f357df62822dee072e8", - "r3_tilde": "639e3417007d38e5d34ba8c511e836768ddc2669fdd3faff5c14ad27ac2b2da1", - "m_tilde_scalars": [] - }, - "A_bar": "b1f468aec2001c4f54cb56f707c6222a43e5803a25b2253e67b2210ab2ef9eab52db2d4b379935c4823281eaf767fd37", - "B_bar": "b08ce80dc65de8f9769d27099ae649ad4c9b4bd2cc23edcba52073a298087d2495e6d57aaae051ef741adf1cbce65c64", - "D": "a73c8c97264177a76c4a03341956d2ae45ed3438ce598d5cda4f1bf9507fecef47855480b7b30b5e4052c92a4360110c", - "T1": "9881efa96b2411626d490e399eb1c06badf23c2c0760bd403f50f45a6b470c5a9dbeef53a27916f2f165085a3878f1f4", - "T2": "b9f8cf9271d10a04ae7116ad021f4b69c435d20a5af10ddd8f5b1ec6b9b8b91605aca76a140241784b7f161e21dfc3e7", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47", - "challenge": "28e1dea911e2e7baec6a6a174da1a22362717fbae1cd961d7bf4adce1d31c2ab" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof003.json b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof003.json index 9e66110c..0eb1aa2c 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof003.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof003.json @@ -1,53 +1,16 @@ { "caseName": "valid multi-message signature, multiple messages revealed proof", "signerPublicKey": "a820f230f6ae38503b86c70dc50b61c58a77e45c39ab25c0652bbaa8fa136f2851bd4781c9dcde39fc9d1d52c9e60268061e7d7632171d91aa8d460acee0e96f1e7c4cfb12d3ff9ab5d5dc91c277db75c845d649ef3c4f63aebc364cd55ded0c", - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6 - ], - "proof": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc415199462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac481356918cd38025d86b28650e909defe9604a7259f44386b861608be742af7775a2e71a6070e5836f5f54dc43c60096834a5b6da295bf8f081f72b7cdf7f3b4347fb3ff19edaa9e74055c8ba46dbcb7594fb2b06633bb5324192eb9be91be0d33e453b4d3127459de59a5e2193c900816f049a02cb9127dac894418105fa1641d5a206ec9c42177af9316f433417441478276ca0303da8f941bf2e0222a43251cf5c2bf6eac1961890aa740534e519c1767e1223392a3a286b0f4d91f7f25217a7862b8fcc1810cdcfddde2a01c80fcc90b632585fec12dc4ae8fea1918e9ddeb9414623a457e88f53f545841f9d5dcb1f8e160d1560770aa79d65e2eca8edeaecb73fb7e995608b820c4a64de6313a370ba05dc25ed7c1d185192084963652f2870341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af" + }, + "proof": "812a204f66c9084feed7383894d910f2c17399b3c4b4bed05660921de8539f5042318c356609496a6ca0a26626661be78ca723b7182ccd314924b93a3997654fcd77e29e3847dc881f422a751017705173ec094d2997221e134710d4fff1bd33111a4b4fc79a2201d18b5cc63fab1252def0d4f020129c7e022f56f505aa977a7240da430bc60a2d4d17897b42228054a2fb4f780fb710268ebea24c9fb0e15e2ac415b99a232b13bfd215af3fb35f5518953eaccc200555eaa69ae434eb623f0a83bb57a8a8e70ba37761ffaeb756d9115c1177ce929f04be23b5636120c7ac0a73546f177a3c3be2d233b3253f31c3468260723c1afa2d0febd38161e16ed0147369bda8b05ec3f6183239c6ecb9fb54b0989160e8cdf8b9f0cf4a46a2150232d96c466fad2d60ff067492c52cc6af1d16e62364ed6d3dc19feaf1fcf9c12750301c2de6541c0edce5ede7425f75e01fd94a7e6137ebf23460bf3f1afec9f21767c467fdd882eb038492a390ee5d0c0f72f50f2ac5cedb705fc465f7bc093b", "result": { "valid": true - }, - "trace": { - "random_scalars": { - "r1": "44679831fe60eca50938ef0e812e2a9284ad7971b6932a38c7303538b712e457", - "r2": "6481692f89086cce11779e847ff884db8eebb85a13e81b2d0c79d6c1062069d8", - "e_tilde": "721ce4c4c148a1d5826f326af6fd6ac2844f29533ba4127c3a43d222d51b7081", - "r1_tilde": "1ecfaf5a079b0504b00a1f0d6fe8857291dd798291d7ad7454b398114393f37f", - "r3_tilde": "0a4b3d59b34707bb9999bc6e2a6d382a2d2e214bff36ecd88639a14124b1622e", - "m_tilde_scalars": [ - "7217411a9e329c7a5705e8db552274646e2949d62c288d7537dd62bc284715e4", - "67d4d43660746759f598caac106a2b5f58ccd1c3eefaec31841a4f77d2548870", - "715d965b1c3912d20505b381470ff1a528700b673e50ba89fd287e13171cc137", - "4d3281a149674e58c9040fc7a10dd92cb9c7f76f6f0815a1afc3b09d74b92fe4", - "438feebaa5894ca0da49992df2c97d872bf153eab07e08ff73b28131c46ff415", - "602b723c8bbaec1b057d70f18269ae5e6de6197a5884967b03b933fa80006121" - ] - }, - "A_bar": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc4151", - "B_bar": "99462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f", - "D": "897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac48135", - "T1": "84719c2b5bb275ee74913dbf95fb9054f690c8e4035f1259e184e9024544bc4bbea9c244e7897f9db7c82b7b14b27d28", - "T2": "8f5f191c956aefd5c960e57d2dfbab6761eb0ebc5efdba1aca1403dcc19e05296b16c9feb7636cb4ef2a360c5a148483", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47", - "challenge": "341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof004.json b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof004.json index 5e8514bb..a2b41890 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof004.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof004.json @@ -1,54 +1,17 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (different presentation header)", "signerPublicKey": "a820f230f6ae38503b86c70dc50b61c58a77e45c39ab25c0652bbaa8fa136f2851bd4781c9dcde39fc9d1d52c9e60268061e7d7632171d91aa8d460acee0e96f1e7c4cfb12d3ff9ab5d5dc91c277db75c845d649ef3c4f63aebc364cd55ded0c", - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "011594ba7f95b3b470ea4102dd5899de3a042e5104d3ea01d15e6780d831d2be", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6 - ], - "proof": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc415199462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac481356918cd38025d86b28650e909defe9604a7259f44386b861608be742af7775a2e71a6070e5836f5f54dc43c60096834a5b6da295bf8f081f72b7cdf7f3b4347fb3ff19edaa9e74055c8ba46dbcb7594fb2b06633bb5324192eb9be91be0d33e453b4d3127459de59a5e2193c900816f049a02cb9127dac894418105fa1641d5a206ec9c42177af9316f433417441478276ca0303da8f941bf2e0222a43251cf5c2bf6eac1961890aa740534e519c1767e1223392a3a286b0f4d91f7f25217a7862b8fcc1810cdcfddde2a01c80fcc90b632585fec12dc4ae8fea1918e9ddeb9414623a457e88f53f545841f9d5dcb1f8e160d1560770aa79d65e2eca8edeaecb73fb7e995608b820c4a64de6313a370ba05dc25ed7c1d185192084963652f2870341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af" + }, + "proof": "812a204f66c9084feed7383894d910f2c17399b3c4b4bed05660921de8539f5042318c356609496a6ca0a26626661be78ca723b7182ccd314924b93a3997654fcd77e29e3847dc881f422a751017705173ec094d2997221e134710d4fff1bd33111a4b4fc79a2201d18b5cc63fab1252def0d4f020129c7e022f56f505aa977a7240da430bc60a2d4d17897b42228054a2fb4f780fb710268ebea24c9fb0e15e2ac415b99a232b13bfd215af3fb35f5518953eaccc200555eaa69ae434eb623f0a83bb57a8a8e70ba37761ffaeb756d9115c1177ce929f04be23b5636120c7ac0a73546f177a3c3be2d233b3253f31c3468260723c1afa2d0febd38161e16ed0147369bda8b05ec3f6183239c6ecb9fb54b0989160e8cdf8b9f0cf4a46a2150232d96c466fad2d60ff067492c52cc6af1d16e62364ed6d3dc19feaf1fcf9c12750301c2de6541c0edce5ede7425f75e01fd94a7e6137ebf23460bf3f1afec9f21767c467fdd882eb038492a390ee5d0c0f72f50f2ac5cedb705fc465f7bc093b", "result": { "valid": false, "reason": "different presentation header" - }, - "trace": { - "random_scalars": { - "r1": "44679831fe60eca50938ef0e812e2a9284ad7971b6932a38c7303538b712e457", - "r2": "6481692f89086cce11779e847ff884db8eebb85a13e81b2d0c79d6c1062069d8", - "e_tilde": "721ce4c4c148a1d5826f326af6fd6ac2844f29533ba4127c3a43d222d51b7081", - "r1_tilde": "1ecfaf5a079b0504b00a1f0d6fe8857291dd798291d7ad7454b398114393f37f", - "r3_tilde": "0a4b3d59b34707bb9999bc6e2a6d382a2d2e214bff36ecd88639a14124b1622e", - "m_tilde_scalars": [ - "7217411a9e329c7a5705e8db552274646e2949d62c288d7537dd62bc284715e4", - "67d4d43660746759f598caac106a2b5f58ccd1c3eefaec31841a4f77d2548870", - "715d965b1c3912d20505b381470ff1a528700b673e50ba89fd287e13171cc137", - "4d3281a149674e58c9040fc7a10dd92cb9c7f76f6f0815a1afc3b09d74b92fe4", - "438feebaa5894ca0da49992df2c97d872bf153eab07e08ff73b28131c46ff415", - "602b723c8bbaec1b057d70f18269ae5e6de6197a5884967b03b933fa80006121" - ] - }, - "A_bar": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc4151", - "B_bar": "99462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f", - "D": "897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac48135", - "T1": "84719c2b5bb275ee74913dbf95fb9054f690c8e4035f1259e184e9024544bc4bbea9c244e7897f9db7c82b7b14b27d28", - "T2": "8f5f191c956aefd5c960e57d2dfbab6761eb0ebc5efdba1aca1403dcc19e05296b16c9feb7636cb4ef2a360c5a148483", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47", - "challenge": "341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof005.json b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof005.json index ec3f77d4..ed88fe57 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof005.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof005.json @@ -1,54 +1,17 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (wrong public key)", "signerPublicKey": "b064bd8d1ba99503cbb7f9d7ea00bce877206a85b1750e5583dd9399828a4d20610cb937ea928d90404c239b2835ffb104220a9c66a4c9ed3b54c0cac9ea465d0429556b438ceefb59650ddf67e7a8f103677561b7ef7fe3c3357ec6b94d41c6", - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6 - ], - "proof": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc415199462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac481356918cd38025d86b28650e909defe9604a7259f44386b861608be742af7775a2e71a6070e5836f5f54dc43c60096834a5b6da295bf8f081f72b7cdf7f3b4347fb3ff19edaa9e74055c8ba46dbcb7594fb2b06633bb5324192eb9be91be0d33e453b4d3127459de59a5e2193c900816f049a02cb9127dac894418105fa1641d5a206ec9c42177af9316f433417441478276ca0303da8f941bf2e0222a43251cf5c2bf6eac1961890aa740534e519c1767e1223392a3a286b0f4d91f7f25217a7862b8fcc1810cdcfddde2a01c80fcc90b632585fec12dc4ae8fea1918e9ddeb9414623a457e88f53f545841f9d5dcb1f8e160d1560770aa79d65e2eca8edeaecb73fb7e995608b820c4a64de6313a370ba05dc25ed7c1d185192084963652f2870341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af" + }, + "proof": "812a204f66c9084feed7383894d910f2c17399b3c4b4bed05660921de8539f5042318c356609496a6ca0a26626661be78ca723b7182ccd314924b93a3997654fcd77e29e3847dc881f422a751017705173ec094d2997221e134710d4fff1bd33111a4b4fc79a2201d18b5cc63fab1252def0d4f020129c7e022f56f505aa977a7240da430bc60a2d4d17897b42228054a2fb4f780fb710268ebea24c9fb0e15e2ac415b99a232b13bfd215af3fb35f5518953eaccc200555eaa69ae434eb623f0a83bb57a8a8e70ba37761ffaeb756d9115c1177ce929f04be23b5636120c7ac0a73546f177a3c3be2d233b3253f31c3468260723c1afa2d0febd38161e16ed0147369bda8b05ec3f6183239c6ecb9fb54b0989160e8cdf8b9f0cf4a46a2150232d96c466fad2d60ff067492c52cc6af1d16e62364ed6d3dc19feaf1fcf9c12750301c2de6541c0edce5ede7425f75e01fd94a7e6137ebf23460bf3f1afec9f21767c467fdd882eb038492a390ee5d0c0f72f50f2ac5cedb705fc465f7bc093b", "result": { "valid": false, "reason": "wrong public key" - }, - "trace": { - "random_scalars": { - "r1": "44679831fe60eca50938ef0e812e2a9284ad7971b6932a38c7303538b712e457", - "r2": "6481692f89086cce11779e847ff884db8eebb85a13e81b2d0c79d6c1062069d8", - "e_tilde": "721ce4c4c148a1d5826f326af6fd6ac2844f29533ba4127c3a43d222d51b7081", - "r1_tilde": "1ecfaf5a079b0504b00a1f0d6fe8857291dd798291d7ad7454b398114393f37f", - "r3_tilde": "0a4b3d59b34707bb9999bc6e2a6d382a2d2e214bff36ecd88639a14124b1622e", - "m_tilde_scalars": [ - "7217411a9e329c7a5705e8db552274646e2949d62c288d7537dd62bc284715e4", - "67d4d43660746759f598caac106a2b5f58ccd1c3eefaec31841a4f77d2548870", - "715d965b1c3912d20505b381470ff1a528700b673e50ba89fd287e13171cc137", - "4d3281a149674e58c9040fc7a10dd92cb9c7f76f6f0815a1afc3b09d74b92fe4", - "438feebaa5894ca0da49992df2c97d872bf153eab07e08ff73b28131c46ff415", - "602b723c8bbaec1b057d70f18269ae5e6de6197a5884967b03b933fa80006121" - ] - }, - "A_bar": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc4151", - "B_bar": "99462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f", - "D": "897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac48135", - "T1": "84719c2b5bb275ee74913dbf95fb9054f690c8e4035f1259e184e9024544bc4bbea9c244e7897f9db7c82b7b14b27d28", - "T2": "8f5f191c956aefd5c960e57d2dfbab6761eb0ebc5efdba1aca1403dcc19e05296b16c9feb7636cb4ef2a360c5a148483", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47", - "challenge": "341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof006.json b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof006.json index 4926a6af..258773c8 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof006.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof006.json @@ -1,54 +1,17 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (modified messages)", "signerPublicKey": "a820f230f6ae38503b86c70dc50b61c58a77e45c39ab25c0652bbaa8fa136f2851bd4781c9dcde39fc9d1d52c9e60268061e7d7632171d91aa8d460acee0e96f1e7c4cfb12d3ff9ab5d5dc91c277db75c845d649ef3c4f63aebc364cd55ded0c", - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "b189d55951c40179fc00f98e828a4ffdd433cc6e9b70c62ab2df36da1c45a8d6216dd641ebd01e3eadcae3175dec4b84e91974819dbe9b6ad0672c272887b6e1bd157b1ab9b1c620ca2664f40090478b3f4af1d3d6bd513af7af22dd3bc4db1f29618f23", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6 - ], - "proof": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc415199462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac481356918cd38025d86b28650e909defe9604a7259f44386b861608be742af7775a2e71a6070e5836f5f54dc43c60096834a5b6da295bf8f081f72b7cdf7f3b4347fb3ff19edaa9e74055c8ba46dbcb7594fb2b06633bb5324192eb9be91be0d33e453b4d3127459de59a5e2193c900816f049a02cb9127dac894418105fa1641d5a206ec9c42177af9316f433417441478276ca0303da8f941bf2e0222a43251cf5c2bf6eac1961890aa740534e519c1767e1223392a3a286b0f4d91f7f25217a7862b8fcc1810cdcfddde2a01c80fcc90b632585fec12dc4ae8fea1918e9ddeb9414623a457e88f53f545841f9d5dcb1f8e160d1560770aa79d65e2eca8edeaecb73fb7e995608b820c4a64de6313a370ba05dc25ed7c1d185192084963652f2870341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a", + "revealedMessages": { + "0": "d9439ddf3f244f1101045f78ae32d2b36cdfb5942db911233dbc808a86a72f2895081382672266ccae89b1808bbdb35e92cc8ae33a554cf6ee743d714fa844ba34eec2029bd2bf9c04f5c01328ebe138b8cb926bf49f999a1ef484b91604e7575dc4a76d", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af" + }, + "proof": "812a204f66c9084feed7383894d910f2c17399b3c4b4bed05660921de8539f5042318c356609496a6ca0a26626661be78ca723b7182ccd314924b93a3997654fcd77e29e3847dc881f422a751017705173ec094d2997221e134710d4fff1bd33111a4b4fc79a2201d18b5cc63fab1252def0d4f020129c7e022f56f505aa977a7240da430bc60a2d4d17897b42228054a2fb4f780fb710268ebea24c9fb0e15e2ac415b99a232b13bfd215af3fb35f5518953eaccc200555eaa69ae434eb623f0a83bb57a8a8e70ba37761ffaeb756d9115c1177ce929f04be23b5636120c7ac0a73546f177a3c3be2d233b3253f31c3468260723c1afa2d0febd38161e16ed0147369bda8b05ec3f6183239c6ecb9fb54b0989160e8cdf8b9f0cf4a46a2150232d96c466fad2d60ff067492c52cc6af1d16e62364ed6d3dc19feaf1fcf9c12750301c2de6541c0edce5ede7425f75e01fd94a7e6137ebf23460bf3f1afec9f21767c467fdd882eb038492a390ee5d0c0f72f50f2ac5cedb705fc465f7bc093b", "result": { "valid": false, "reason": "modified messages" - }, - "trace": { - "random_scalars": { - "r1": "44679831fe60eca50938ef0e812e2a9284ad7971b6932a38c7303538b712e457", - "r2": "6481692f89086cce11779e847ff884db8eebb85a13e81b2d0c79d6c1062069d8", - "e_tilde": "721ce4c4c148a1d5826f326af6fd6ac2844f29533ba4127c3a43d222d51b7081", - "r1_tilde": "1ecfaf5a079b0504b00a1f0d6fe8857291dd798291d7ad7454b398114393f37f", - "r3_tilde": "0a4b3d59b34707bb9999bc6e2a6d382a2d2e214bff36ecd88639a14124b1622e", - "m_tilde_scalars": [ - "7217411a9e329c7a5705e8db552274646e2949d62c288d7537dd62bc284715e4", - "67d4d43660746759f598caac106a2b5f58ccd1c3eefaec31841a4f77d2548870", - "715d965b1c3912d20505b381470ff1a528700b673e50ba89fd287e13171cc137", - "4d3281a149674e58c9040fc7a10dd92cb9c7f76f6f0815a1afc3b09d74b92fe4", - "438feebaa5894ca0da49992df2c97d872bf153eab07e08ff73b28131c46ff415", - "602b723c8bbaec1b057d70f18269ae5e6de6197a5884967b03b933fa80006121" - ] - }, - "A_bar": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc4151", - "B_bar": "99462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f", - "D": "897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac48135", - "T1": "84719c2b5bb275ee74913dbf95fb9054f690c8e4035f1259e184e9024544bc4bbea9c244e7897f9db7c82b7b14b27d28", - "T2": "8f5f191c956aefd5c960e57d2dfbab6761eb0ebc5efdba1aca1403dcc19e05296b16c9feb7636cb4ef2a360c5a148483", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47", - "challenge": "341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof007.json b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof007.json index 943dae16..60bd236e 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof007.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof007.json @@ -1,56 +1,18 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (extra message un-revealed in proof)", "signerPublicKey": "a820f230f6ae38503b86c70dc50b61c58a77e45c39ab25c0652bbaa8fa136f2851bd4781c9dcde39fc9d1d52c9e60268061e7d7632171d91aa8d460acee0e96f1e7c4cfb12d3ff9ab5d5dc91c277db75c845d649ef3c4f63aebc364cd55ded0c", - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6, - 9 - ], - "proof": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc415199462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac481356918cd38025d86b28650e909defe9604a7259f44386b861608be742af7775a2e71a6070e5836f5f54dc43c60096834a5b6da295bf8f081f72b7cdf7f3b4347fb3ff19edaa9e74055c8ba46dbcb7594fb2b06633bb5324192eb9be91be0d33e453b4d3127459de59a5e2193c900816f049a02cb9127dac894418105fa1641d5a206ec9c42177af9316f433417441478276ca0303da8f941bf2e0222a43251cf5c2bf6eac1961890aa740534e519c1767e1223392a3a286b0f4d91f7f25217a7862b8fcc1810cdcfddde2a01c80fcc90b632585fec12dc4ae8fea1918e9ddeb9414623a457e88f53f545841f9d5dcb1f8e160d1560770aa79d65e2eca8edeaecb73fb7e995608b820c4a64de6313a370ba05dc25ed7c1d185192084963652f2870341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af", + "9": "" + }, + "proof": "812a204f66c9084feed7383894d910f2c17399b3c4b4bed05660921de8539f5042318c356609496a6ca0a26626661be78ca723b7182ccd314924b93a3997654fcd77e29e3847dc881f422a751017705173ec094d2997221e134710d4fff1bd33111a4b4fc79a2201d18b5cc63fab1252def0d4f020129c7e022f56f505aa977a7240da430bc60a2d4d17897b42228054a2fb4f780fb710268ebea24c9fb0e15e2ac415b99a232b13bfd215af3fb35f5518953eaccc200555eaa69ae434eb623f0a83bb57a8a8e70ba37761ffaeb756d9115c1177ce929f04be23b5636120c7ac0a73546f177a3c3be2d233b3253f31c3468260723c1afa2d0febd38161e16ed0147369bda8b05ec3f6183239c6ecb9fb54b0989160e8cdf8b9f0cf4a46a2150232d96c466fad2d60ff067492c52cc6af1d16e62364ed6d3dc19feaf1fcf9c12750301c2de6541c0edce5ede7425f75e01fd94a7e6137ebf23460bf3f1afec9f21767c467fdd882eb038492a390ee5d0c0f72f50f2ac5cedb705fc465f7bc093b", "result": { "valid": false, "reason": "extra message un-revealed in proof" - }, - "trace": { - "random_scalars": { - "r1": "44679831fe60eca50938ef0e812e2a9284ad7971b6932a38c7303538b712e457", - "r2": "6481692f89086cce11779e847ff884db8eebb85a13e81b2d0c79d6c1062069d8", - "e_tilde": "721ce4c4c148a1d5826f326af6fd6ac2844f29533ba4127c3a43d222d51b7081", - "r1_tilde": "1ecfaf5a079b0504b00a1f0d6fe8857291dd798291d7ad7454b398114393f37f", - "r3_tilde": "0a4b3d59b34707bb9999bc6e2a6d382a2d2e214bff36ecd88639a14124b1622e", - "m_tilde_scalars": [ - "7217411a9e329c7a5705e8db552274646e2949d62c288d7537dd62bc284715e4", - "67d4d43660746759f598caac106a2b5f58ccd1c3eefaec31841a4f77d2548870", - "715d965b1c3912d20505b381470ff1a528700b673e50ba89fd287e13171cc137", - "4d3281a149674e58c9040fc7a10dd92cb9c7f76f6f0815a1afc3b09d74b92fe4", - "438feebaa5894ca0da49992df2c97d872bf153eab07e08ff73b28131c46ff415", - "602b723c8bbaec1b057d70f18269ae5e6de6197a5884967b03b933fa80006121" - ] - }, - "A_bar": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc4151", - "B_bar": "99462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f", - "D": "897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac48135", - "T1": "84719c2b5bb275ee74913dbf95fb9054f690c8e4035f1259e184e9024544bc4bbea9c244e7897f9db7c82b7b14b27d28", - "T2": "8f5f191c956aefd5c960e57d2dfbab6761eb0ebc5efdba1aca1403dcc19e05296b16c9feb7636cb4ef2a360c5a148483", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47", - "challenge": "341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof008.json b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof008.json index 242d3c16..c85a91ac 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof008.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof008.json @@ -1,56 +1,18 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (extra message invalid message un-revealed in proof)", "signerPublicKey": "a820f230f6ae38503b86c70dc50b61c58a77e45c39ab25c0652bbaa8fa136f2851bd4781c9dcde39fc9d1d52c9e60268061e7d7632171d91aa8d460acee0e96f1e7c4cfb12d3ff9ab5d5dc91c277db75c845d649ef3c4f63aebc364cd55ded0c", - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "", - "96012096" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6, - 9 - ], - "proof": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc415199462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac481356918cd38025d86b28650e909defe9604a7259f44386b861608be742af7775a2e71a6070e5836f5f54dc43c60096834a5b6da295bf8f081f72b7cdf7f3b4347fb3ff19edaa9e74055c8ba46dbcb7594fb2b06633bb5324192eb9be91be0d33e453b4d3127459de59a5e2193c900816f049a02cb9127dac894418105fa1641d5a206ec9c42177af9316f433417441478276ca0303da8f941bf2e0222a43251cf5c2bf6eac1961890aa740534e519c1767e1223392a3a286b0f4d91f7f25217a7862b8fcc1810cdcfddde2a01c80fcc90b632585fec12dc4ae8fea1918e9ddeb9414623a457e88f53f545841f9d5dcb1f8e160d1560770aa79d65e2eca8edeaecb73fb7e995608b820c4a64de6313a370ba05dc25ed7c1d185192084963652f2870341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af", + "9": "96012096" + }, + "proof": "812a204f66c9084feed7383894d910f2c17399b3c4b4bed05660921de8539f5042318c356609496a6ca0a26626661be78ca723b7182ccd314924b93a3997654fcd77e29e3847dc881f422a751017705173ec094d2997221e134710d4fff1bd33111a4b4fc79a2201d18b5cc63fab1252def0d4f020129c7e022f56f505aa977a7240da430bc60a2d4d17897b42228054a2fb4f780fb710268ebea24c9fb0e15e2ac415b99a232b13bfd215af3fb35f5518953eaccc200555eaa69ae434eb623f0a83bb57a8a8e70ba37761ffaeb756d9115c1177ce929f04be23b5636120c7ac0a73546f177a3c3be2d233b3253f31c3468260723c1afa2d0febd38161e16ed0147369bda8b05ec3f6183239c6ecb9fb54b0989160e8cdf8b9f0cf4a46a2150232d96c466fad2d60ff067492c52cc6af1d16e62364ed6d3dc19feaf1fcf9c12750301c2de6541c0edce5ede7425f75e01fd94a7e6137ebf23460bf3f1afec9f21767c467fdd882eb038492a390ee5d0c0f72f50f2ac5cedb705fc465f7bc093b", "result": { "valid": false, "reason": "extra message invalid message un-revealed in proof" - }, - "trace": { - "random_scalars": { - "r1": "44679831fe60eca50938ef0e812e2a9284ad7971b6932a38c7303538b712e457", - "r2": "6481692f89086cce11779e847ff884db8eebb85a13e81b2d0c79d6c1062069d8", - "e_tilde": "721ce4c4c148a1d5826f326af6fd6ac2844f29533ba4127c3a43d222d51b7081", - "r1_tilde": "1ecfaf5a079b0504b00a1f0d6fe8857291dd798291d7ad7454b398114393f37f", - "r3_tilde": "0a4b3d59b34707bb9999bc6e2a6d382a2d2e214bff36ecd88639a14124b1622e", - "m_tilde_scalars": [ - "7217411a9e329c7a5705e8db552274646e2949d62c288d7537dd62bc284715e4", - "67d4d43660746759f598caac106a2b5f58ccd1c3eefaec31841a4f77d2548870", - "715d965b1c3912d20505b381470ff1a528700b673e50ba89fd287e13171cc137", - "4d3281a149674e58c9040fc7a10dd92cb9c7f76f6f0815a1afc3b09d74b92fe4", - "438feebaa5894ca0da49992df2c97d872bf153eab07e08ff73b28131c46ff415", - "602b723c8bbaec1b057d70f18269ae5e6de6197a5884967b03b933fa80006121" - ] - }, - "A_bar": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc4151", - "B_bar": "99462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f", - "D": "897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac48135", - "T1": "84719c2b5bb275ee74913dbf95fb9054f690c8e4035f1259e184e9024544bc4bbea9c244e7897f9db7c82b7b14b27d28", - "T2": "8f5f191c956aefd5c960e57d2dfbab6761eb0ebc5efdba1aca1403dcc19e05296b16c9feb7636cb4ef2a360c5a148483", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47", - "challenge": "341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof009.json b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof009.json index 94915905..18260739 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof009.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof009.json @@ -1,52 +1,16 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (missing message revealed in proof)", "signerPublicKey": "a820f230f6ae38503b86c70dc50b61c58a77e45c39ab25c0652bbaa8fa136f2851bd4781c9dcde39fc9d1d52c9e60268061e7d7632171d91aa8d460acee0e96f1e7c4cfb12d3ff9ab5d5dc91c277db75c845d649ef3c4f63aebc364cd55ded0c", - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 6 - ], - "proof": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc415199462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac481356918cd38025d86b28650e909defe9604a7259f44386b861608be742af7775a2e71a6070e5836f5f54dc43c60096834a5b6da295bf8f081f72b7cdf7f3b4347fb3ff19edaa9e74055c8ba46dbcb7594fb2b06633bb5324192eb9be91be0d33e453b4d3127459de59a5e2193c900816f049a02cb9127dac894418105fa1641d5a206ec9c42177af9316f433417441478276ca0303da8f941bf2e0222a43251cf5c2bf6eac1961890aa740534e519c1767e1223392a3a286b0f4d91f7f25217a7862b8fcc1810cdcfddde2a01c80fcc90b632585fec12dc4ae8fea1918e9ddeb9414623a457e88f53f545841f9d5dcb1f8e160d1560770aa79d65e2eca8edeaecb73fb7e995608b820c4a64de6313a370ba05dc25ed7c1d185192084963652f2870341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "6": "d183ddc6e2665aa4e2f088af" + }, + "proof": "812a204f66c9084feed7383894d910f2c17399b3c4b4bed05660921de8539f5042318c356609496a6ca0a26626661be78ca723b7182ccd314924b93a3997654fcd77e29e3847dc881f422a751017705173ec094d2997221e134710d4fff1bd33111a4b4fc79a2201d18b5cc63fab1252def0d4f020129c7e022f56f505aa977a7240da430bc60a2d4d17897b42228054a2fb4f780fb710268ebea24c9fb0e15e2ac415b99a232b13bfd215af3fb35f5518953eaccc200555eaa69ae434eb623f0a83bb57a8a8e70ba37761ffaeb756d9115c1177ce929f04be23b5636120c7ac0a73546f177a3c3be2d233b3253f31c3468260723c1afa2d0febd38161e16ed0147369bda8b05ec3f6183239c6ecb9fb54b0989160e8cdf8b9f0cf4a46a2150232d96c466fad2d60ff067492c52cc6af1d16e62364ed6d3dc19feaf1fcf9c12750301c2de6541c0edce5ede7425f75e01fd94a7e6137ebf23460bf3f1afec9f21767c467fdd882eb038492a390ee5d0c0f72f50f2ac5cedb705fc465f7bc093b", "result": { "valid": false, "reason": "missing message revealed in proof" - }, - "trace": { - "random_scalars": { - "r1": "44679831fe60eca50938ef0e812e2a9284ad7971b6932a38c7303538b712e457", - "r2": "6481692f89086cce11779e847ff884db8eebb85a13e81b2d0c79d6c1062069d8", - "e_tilde": "721ce4c4c148a1d5826f326af6fd6ac2844f29533ba4127c3a43d222d51b7081", - "r1_tilde": "1ecfaf5a079b0504b00a1f0d6fe8857291dd798291d7ad7454b398114393f37f", - "r3_tilde": "0a4b3d59b34707bb9999bc6e2a6d382a2d2e214bff36ecd88639a14124b1622e", - "m_tilde_scalars": [ - "7217411a9e329c7a5705e8db552274646e2949d62c288d7537dd62bc284715e4", - "67d4d43660746759f598caac106a2b5f58ccd1c3eefaec31841a4f77d2548870", - "715d965b1c3912d20505b381470ff1a528700b673e50ba89fd287e13171cc137", - "4d3281a149674e58c9040fc7a10dd92cb9c7f76f6f0815a1afc3b09d74b92fe4", - "438feebaa5894ca0da49992df2c97d872bf153eab07e08ff73b28131c46ff415", - "602b723c8bbaec1b057d70f18269ae5e6de6197a5884967b03b933fa80006121" - ] - }, - "A_bar": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc4151", - "B_bar": "99462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f", - "D": "897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac48135", - "T1": "84719c2b5bb275ee74913dbf95fb9054f690c8e4035f1259e184e9024544bc4bbea9c244e7897f9db7c82b7b14b27d28", - "T2": "8f5f191c956aefd5c960e57d2dfbab6761eb0ebc5efdba1aca1403dcc19e05296b16c9feb7636cb4ef2a360c5a148483", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47", - "challenge": "341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof010.json b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof010.json index 3574f13e..4f974829 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof010.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof010.json @@ -1,54 +1,17 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (re-ordered messages)", "signerPublicKey": "a820f230f6ae38503b86c70dc50b61c58a77e45c39ab25c0652bbaa8fa136f2851bd4781c9dcde39fc9d1d52c9e60268061e7d7632171d91aa8d460acee0e96f1e7c4cfb12d3ff9ab5d5dc91c277db75c845d649ef3c4f63aebc364cd55ded0c", - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 4, - 2, - 4, - 6 - ], - "proof": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc415199462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac481356918cd38025d86b28650e909defe9604a7259f44386b861608be742af7775a2e71a6070e5836f5f54dc43c60096834a5b6da295bf8f081f72b7cdf7f3b4347fb3ff19edaa9e74055c8ba46dbcb7594fb2b06633bb5324192eb9be91be0d33e453b4d3127459de59a5e2193c900816f049a02cb9127dac894418105fa1641d5a206ec9c42177af9316f433417441478276ca0303da8f941bf2e0222a43251cf5c2bf6eac1961890aa740534e519c1767e1223392a3a286b0f4d91f7f25217a7862b8fcc1810cdcfddde2a01c80fcc90b632585fec12dc4ae8fea1918e9ddeb9414623a457e88f53f545841f9d5dcb1f8e160d1560770aa79d65e2eca8edeaecb73fb7e995608b820c4a64de6313a370ba05dc25ed7c1d185192084963652f2870341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "d183ddc6e2665aa4e2f088af", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73" + }, + "proof": "812a204f66c9084feed7383894d910f2c17399b3c4b4bed05660921de8539f5042318c356609496a6ca0a26626661be78ca723b7182ccd314924b93a3997654fcd77e29e3847dc881f422a751017705173ec094d2997221e134710d4fff1bd33111a4b4fc79a2201d18b5cc63fab1252def0d4f020129c7e022f56f505aa977a7240da430bc60a2d4d17897b42228054a2fb4f780fb710268ebea24c9fb0e15e2ac415b99a232b13bfd215af3fb35f5518953eaccc200555eaa69ae434eb623f0a83bb57a8a8e70ba37761ffaeb756d9115c1177ce929f04be23b5636120c7ac0a73546f177a3c3be2d233b3253f31c3468260723c1afa2d0febd38161e16ed0147369bda8b05ec3f6183239c6ecb9fb54b0989160e8cdf8b9f0cf4a46a2150232d96c466fad2d60ff067492c52cc6af1d16e62364ed6d3dc19feaf1fcf9c12750301c2de6541c0edce5ede7425f75e01fd94a7e6137ebf23460bf3f1afec9f21767c467fdd882eb038492a390ee5d0c0f72f50f2ac5cedb705fc465f7bc093b", "result": { "valid": false, "reason": "re-ordered messages" - }, - "trace": { - "random_scalars": { - "r1": "44679831fe60eca50938ef0e812e2a9284ad7971b6932a38c7303538b712e457", - "r2": "6481692f89086cce11779e847ff884db8eebb85a13e81b2d0c79d6c1062069d8", - "e_tilde": "721ce4c4c148a1d5826f326af6fd6ac2844f29533ba4127c3a43d222d51b7081", - "r1_tilde": "1ecfaf5a079b0504b00a1f0d6fe8857291dd798291d7ad7454b398114393f37f", - "r3_tilde": "0a4b3d59b34707bb9999bc6e2a6d382a2d2e214bff36ecd88639a14124b1622e", - "m_tilde_scalars": [ - "7217411a9e329c7a5705e8db552274646e2949d62c288d7537dd62bc284715e4", - "67d4d43660746759f598caac106a2b5f58ccd1c3eefaec31841a4f77d2548870", - "715d965b1c3912d20505b381470ff1a528700b673e50ba89fd287e13171cc137", - "4d3281a149674e58c9040fc7a10dd92cb9c7f76f6f0815a1afc3b09d74b92fe4", - "438feebaa5894ca0da49992df2c97d872bf153eab07e08ff73b28131c46ff415", - "602b723c8bbaec1b057d70f18269ae5e6de6197a5884967b03b933fa80006121" - ] - }, - "A_bar": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc4151", - "B_bar": "99462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f", - "D": "897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac48135", - "T1": "84719c2b5bb275ee74913dbf95fb9054f690c8e4035f1259e184e9024544bc4bbea9c244e7897f9db7c82b7b14b27d28", - "T2": "8f5f191c956aefd5c960e57d2dfbab6761eb0ebc5efdba1aca1403dcc19e05296b16c9feb7636cb4ef2a360c5a148483", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47", - "challenge": "341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof011.json b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof011.json index 786efb28..8d582b3a 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof011.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof011.json @@ -1,56 +1,18 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (extra valid message, modified total message count)", "signerPublicKey": "a820f230f6ae38503b86c70dc50b61c58a77e45c39ab25c0652bbaa8fa136f2851bd4781c9dcde39fc9d1d52c9e60268061e7d7632171d91aa8d460acee0e96f1e7c4cfb12d3ff9ab5d5dc91c277db75c845d649ef3c4f63aebc364cd55ded0c", - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6, - 9 - ], - "proof": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc415199462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac481356918cd38025d86b28650e909defe9604a7259f44386b861608be742af7775a2e71a6070e5836f5f54dc43c60096834a5b6da295bf8f081f72b7cdf7f3b4347fb3ff19edaa9e74055c8ba46dbcb7594fb2b06633bb5324192eb9be91be0d33e453b4d3127459de59a5e2193c900816f049a02cb9127dac894418105fa1641d5a206ec9c42177af9316f433417441478276ca0303da8f941bf2e0222a43251cf5c2bf6eac1961890aa740534e519c1767e1223392a3a286b0f4d91f7f25217a7862b8fcc1810cdcfddde2a01c80fcc90b632585fec12dc4ae8fea1918e9ddeb9414623a457e88f53f545841f9d5dcb1f8e160d1560770aa79d65e2eca8edeaecb73fb7e995608b820c4a64de6313a370ba05dc25ed7c1d185192084963652f2870341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af", + "9": "" + }, + "proof": "812a204f66c9084feed7383894d910f2c17399b3c4b4bed05660921de8539f5042318c356609496a6ca0a26626661be78ca723b7182ccd314924b93a3997654fcd77e29e3847dc881f422a751017705173ec094d2997221e134710d4fff1bd33111a4b4fc79a2201d18b5cc63fab1252def0d4f020129c7e022f56f505aa977a7240da430bc60a2d4d17897b42228054a2fb4f780fb710268ebea24c9fb0e15e2ac415b99a232b13bfd215af3fb35f5518953eaccc200555eaa69ae434eb623f0a83bb57a8a8e70ba37761ffaeb756d9115c1177ce929f04be23b5636120c7ac0a73546f177a3c3be2d233b3253f31c3468260723c1afa2d0febd38161e16ed0147369bda8b05ec3f6183239c6ecb9fb54b0989160e8cdf8b9f0cf4a46a2150232d96c466fad2d60ff067492c52cc6af1d16e62364ed6d3dc19feaf1fcf9c12750301c2de6541c0edce5ede7425f75e01fd94a7e6137ebf23460bf3f1afec9f21767c467fdd882eb038492a390ee5d0c0f72f50f2ac5cedb705fc465f7bc093b", "result": { "valid": false, "reason": "extra valid message, modified total message count" - }, - "trace": { - "random_scalars": { - "r1": "44679831fe60eca50938ef0e812e2a9284ad7971b6932a38c7303538b712e457", - "r2": "6481692f89086cce11779e847ff884db8eebb85a13e81b2d0c79d6c1062069d8", - "e_tilde": "721ce4c4c148a1d5826f326af6fd6ac2844f29533ba4127c3a43d222d51b7081", - "r1_tilde": "1ecfaf5a079b0504b00a1f0d6fe8857291dd798291d7ad7454b398114393f37f", - "r3_tilde": "0a4b3d59b34707bb9999bc6e2a6d382a2d2e214bff36ecd88639a14124b1622e", - "m_tilde_scalars": [ - "7217411a9e329c7a5705e8db552274646e2949d62c288d7537dd62bc284715e4", - "67d4d43660746759f598caac106a2b5f58ccd1c3eefaec31841a4f77d2548870", - "715d965b1c3912d20505b381470ff1a528700b673e50ba89fd287e13171cc137", - "4d3281a149674e58c9040fc7a10dd92cb9c7f76f6f0815a1afc3b09d74b92fe4", - "438feebaa5894ca0da49992df2c97d872bf153eab07e08ff73b28131c46ff415", - "602b723c8bbaec1b057d70f18269ae5e6de6197a5884967b03b933fa80006121" - ] - }, - "A_bar": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc4151", - "B_bar": "99462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f", - "D": "897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac48135", - "T1": "84719c2b5bb275ee74913dbf95fb9054f690c8e4035f1259e184e9024544bc4bbea9c244e7897f9db7c82b7b14b27d28", - "T2": "8f5f191c956aefd5c960e57d2dfbab6761eb0ebc5efdba1aca1403dcc19e05296b16c9feb7636cb4ef2a360c5a148483", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47", - "challenge": "341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof012.json b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof012.json index 6d325279..c7c3b056 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof012.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof012.json @@ -1,54 +1,17 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (truncated proof, one less undisclosed message)", "signerPublicKey": "a820f230f6ae38503b86c70dc50b61c58a77e45c39ab25c0652bbaa8fa136f2851bd4781c9dcde39fc9d1d52c9e60268061e7d7632171d91aa8d460acee0e96f1e7c4cfb12d3ff9ab5d5dc91c277db75c845d649ef3c4f63aebc364cd55ded0c", - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6 - ], - "proof": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc415199462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac481356918cd38025d86b28650e909defe9604a7259f44386b861608be742af7775a2e71a6070e5836f5f54dc43c60096834a5b6da295bf8f081f72b7cdf7f3b4347fb3ff19edaa9e74055c8ba46dbcb7594fb2b06633bb5324192eb9be91be0d33e453b4d3127459de59a5e2193c900816f049a02cb9127dac894418105fa1641d5a206ec9c42177af9316f433417441478276ca0303da8f941bf2e0222a43251cf5c2bf6eac1961890aa740534e519c1767e1223392a3a286b0f4d91f7f25217a7862b8fcc1810cdcfddde2a01c80fcc90b632585fec12dc4ae8fea1918e9ddeb9414623a457e88f53f545841f9d5dcb1f8e160d1560770aa79d65e2eca8edeaecb73fb7e995608b820c4a64de6313a370ba05dc25ed7c1d185192084963652f2870", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af" + }, + "proof": "812a204f66c9084feed7383894d910f2c17399b3c4b4bed05660921de8539f5042318c356609496a6ca0a26626661be78ca723b7182ccd314924b93a3997654fcd77e29e3847dc881f422a751017705173ec094d2997221e134710d4fff1bd33111a4b4fc79a2201d18b5cc63fab1252def0d4f020129c7e022f56f505aa977a7240da430bc60a2d4d17897b42228054a2fb4f780fb710268ebea24c9fb0e15e2ac415b99a232b13bfd215af3fb35f5518953eaccc200555eaa69ae434eb623f0a83bb57a8a8e70ba37761ffaeb756d9115c1177ce929f04be23b5636120c7ac0a73546f177a3c3be2d233b3253f31c3468260723c1afa2d0febd38161e16ed0147369bda8b05ec3f6183239c6ecb9fb54b0989160e8cdf8b9f0cf4a46a2150232d96c466fad2d60ff067492c52cc6af1d16e62364ed6d3dc19feaf1fcf9c12750301c2de6541c0edce5ede7425f75e01fd94a7e6137ebf23460bf3f1afec9f2", "result": { "valid": false, "reason": "truncated proof, one less undisclosed message" - }, - "trace": { - "random_scalars": { - "r1": "44679831fe60eca50938ef0e812e2a9284ad7971b6932a38c7303538b712e457", - "r2": "6481692f89086cce11779e847ff884db8eebb85a13e81b2d0c79d6c1062069d8", - "e_tilde": "721ce4c4c148a1d5826f326af6fd6ac2844f29533ba4127c3a43d222d51b7081", - "r1_tilde": "1ecfaf5a079b0504b00a1f0d6fe8857291dd798291d7ad7454b398114393f37f", - "r3_tilde": "0a4b3d59b34707bb9999bc6e2a6d382a2d2e214bff36ecd88639a14124b1622e", - "m_tilde_scalars": [ - "7217411a9e329c7a5705e8db552274646e2949d62c288d7537dd62bc284715e4", - "67d4d43660746759f598caac106a2b5f58ccd1c3eefaec31841a4f77d2548870", - "715d965b1c3912d20505b381470ff1a528700b673e50ba89fd287e13171cc137", - "4d3281a149674e58c9040fc7a10dd92cb9c7f76f6f0815a1afc3b09d74b92fe4", - "438feebaa5894ca0da49992df2c97d872bf153eab07e08ff73b28131c46ff415", - "602b723c8bbaec1b057d70f18269ae5e6de6197a5884967b03b933fa80006121" - ] - }, - "A_bar": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc4151", - "B_bar": "99462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f", - "D": "897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac48135", - "T1": "84719c2b5bb275ee74913dbf95fb9054f690c8e4035f1259e184e9024544bc4bbea9c244e7897f9db7c82b7b14b27d28", - "T2": "8f5f191c956aefd5c960e57d2dfbab6761eb0ebc5efdba1aca1403dcc19e05296b16c9feb7636cb4ef2a360c5a148483", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47", - "challenge": "341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof013.json b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof013.json index 53b0ba2f..1de54107 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof013.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof013.json @@ -1,54 +1,17 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (different header)", "signerPublicKey": "a820f230f6ae38503b86c70dc50b61c58a77e45c39ab25c0652bbaa8fa136f2851bd4781c9dcde39fc9d1d52c9e60268061e7d7632171d91aa8d460acee0e96f1e7c4cfb12d3ff9ab5d5dc91c277db75c845d649ef3c4f63aebc364cd55ded0c", - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", "header": "ffeeddccbbaa00998877665544332211", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6 - ], - "proof": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc415199462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac481356918cd38025d86b28650e909defe9604a7259f44386b861608be742af7775a2e71a6070e5836f5f54dc43c60096834a5b6da295bf8f081f72b7cdf7f3b4347fb3ff19edaa9e74055c8ba46dbcb7594fb2b06633bb5324192eb9be91be0d33e453b4d3127459de59a5e2193c900816f049a02cb9127dac894418105fa1641d5a206ec9c42177af9316f433417441478276ca0303da8f941bf2e0222a43251cf5c2bf6eac1961890aa740534e519c1767e1223392a3a286b0f4d91f7f25217a7862b8fcc1810cdcfddde2a01c80fcc90b632585fec12dc4ae8fea1918e9ddeb9414623a457e88f53f545841f9d5dcb1f8e160d1560770aa79d65e2eca8edeaecb73fb7e995608b820c4a64de6313a370ba05dc25ed7c1d185192084963652f2870341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af" + }, + "proof": "812a204f66c9084feed7383894d910f2c17399b3c4b4bed05660921de8539f5042318c356609496a6ca0a26626661be78ca723b7182ccd314924b93a3997654fcd77e29e3847dc881f422a751017705173ec094d2997221e134710d4fff1bd33111a4b4fc79a2201d18b5cc63fab1252def0d4f020129c7e022f56f505aa977a7240da430bc60a2d4d17897b42228054a2fb4f780fb710268ebea24c9fb0e15e2ac415b99a232b13bfd215af3fb35f5518953eaccc200555eaa69ae434eb623f0a83bb57a8a8e70ba37761ffaeb756d9115c1177ce929f04be23b5636120c7ac0a73546f177a3c3be2d233b3253f31c3468260723c1afa2d0febd38161e16ed0147369bda8b05ec3f6183239c6ecb9fb54b0989160e8cdf8b9f0cf4a46a2150232d96c466fad2d60ff067492c52cc6af1d16e62364ed6d3dc19feaf1fcf9c12750301c2de6541c0edce5ede7425f75e01fd94a7e6137ebf23460bf3f1afec9f21767c467fdd882eb038492a390ee5d0c0f72f50f2ac5cedb705fc465f7bc093b", "result": { "valid": false, "reason": "different header" - }, - "trace": { - "random_scalars": { - "r1": "44679831fe60eca50938ef0e812e2a9284ad7971b6932a38c7303538b712e457", - "r2": "6481692f89086cce11779e847ff884db8eebb85a13e81b2d0c79d6c1062069d8", - "e_tilde": "721ce4c4c148a1d5826f326af6fd6ac2844f29533ba4127c3a43d222d51b7081", - "r1_tilde": "1ecfaf5a079b0504b00a1f0d6fe8857291dd798291d7ad7454b398114393f37f", - "r3_tilde": "0a4b3d59b34707bb9999bc6e2a6d382a2d2e214bff36ecd88639a14124b1622e", - "m_tilde_scalars": [ - "7217411a9e329c7a5705e8db552274646e2949d62c288d7537dd62bc284715e4", - "67d4d43660746759f598caac106a2b5f58ccd1c3eefaec31841a4f77d2548870", - "715d965b1c3912d20505b381470ff1a528700b673e50ba89fd287e13171cc137", - "4d3281a149674e58c9040fc7a10dd92cb9c7f76f6f0815a1afc3b09d74b92fe4", - "438feebaa5894ca0da49992df2c97d872bf153eab07e08ff73b28131c46ff415", - "602b723c8bbaec1b057d70f18269ae5e6de6197a5884967b03b933fa80006121" - ] - }, - "A_bar": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc4151", - "B_bar": "99462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f", - "D": "897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac48135", - "T1": "84719c2b5bb275ee74913dbf95fb9054f690c8e4035f1259e184e9024544bc4bbea9c244e7897f9db7c82b7b14b27d28", - "T2": "8f5f191c956aefd5c960e57d2dfbab6761eb0ebc5efdba1aca1403dcc19e05296b16c9feb7636cb4ef2a360c5a148483", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47", - "challenge": "341bdaa4b1a37f8c06348f38a4f80c5a2650a21d59f09e8305dcd3fc3ac30e2a" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof014.json b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof014.json index a23c728b..5a5618cd 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof014.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof014.json @@ -1,53 +1,16 @@ { "caseName": "valid multi-message signature, multiple messages revealed proof, no header", "signerPublicKey": "a820f230f6ae38503b86c70dc50b61c58a77e45c39ab25c0652bbaa8fa136f2851bd4781c9dcde39fc9d1d52c9e60268061e7d7632171d91aa8d460acee0e96f1e7c4cfb12d3ff9ab5d5dc91c277db75c845d649ef3c4f63aebc364cd55ded0c", - "signature": "8c87e2080859a97299c148427cd2fcf390d24bea850103a9748879039262ecf4f42206f6ef767f298b6a96b424c1e86c26f8fba62212d0e05b95261c2cc0e5fdc63a32731347e810fd12e9c58355aa0d", "header": "", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6 - ], - "proof": "81925c2e525d9fbb0ba95b438b5a13fff5874c7c0515c193628d7d143ddc3bb487771ad73658895997a88dd5b254ed29abc019bfca62c09b8dafb37e5f09b1d380e084ec3623d071ec38d6b8602af93aa0ddbada307c9309cca86be16db53dc7ac310574f509c712bb1a181d64ea3c1ee075c018a2bc773e2480b5c033ccb9bfea5af347a88ab83746c9342ba76db3675ff70ce9006d166fd813a81b448a632216521c864594f3f92965974914992f8d1845230915b11680cf44b25886c5670904ac2d88255c8c31aea7b072e9c4eb7e4c3fdd38836ae9d2e9fa271c8d9fd42f669a9938aeeba9d8ae613bf11f489ce947616f5cbaee95511dfaa5c73d85e4ddd2f29340f821dc2fb40db3eae5f5bc08467eb195e38d7d436b63e556ea653168282a23b53d5792a107f85b1203f82aab46f6940650760e5b320261ffc0ca5f15917b51e7d2ad4bcbec94de792e229db663abff23af392a5e73ce115c27e8492ec24a0815091c69874dbd9dae2d2eed000810c748a798a78a804a39034c6e745cee455812cc982eea7105948b2cb55b82278a77237fcbec4748e2d2255af0994dd09dba8ac60515a39b24632a2c1c840c4a70506add5b2eb0be9ff66e3ea8deae666f198edfbb1391c6834e6df4f1026d", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af" + }, + "proof": "89cefce40c3dc7adcc8bcd07d92767d0f0397d0e120511b58b8403b531fa573987003fd235bdfe6fb5e9da937774c7799397bc951cd4030a78f8dae7820bfa150a243d74c3aa34daf6299dc0baaf7796705e952e2c8ac7d37c69e91db85012d61f3387f096a022361972d6afd2c095eeb4adc95f72cfb739539f27f1917c7cc80fba233fd9eef52196cc31183d7c4168e6b87a66b249225398c31e2950e3e24420d3af3eeee3308933a343310cf822287dc95b86eb5716e8ff23cc52c980d41218bdaeff521a242e5330daee27a1a499ac1a20b0c39477cebf4936d0ec2b95e0384b80bba24febc527b0b640481df2125b58f85708590838ee32789ce1c755a6150ce6bf0650bff3dfff61eae16e88916f9869d75c7884554ea517f8dec320c011d211b1ec05073238d7949fe6d9ff6f729c475bbfc5a21c6fa6d35df92f79d43c3f78bcd3cb4c6e6de2ac27108316bd8d751fb445c5f6b4e6e104b227362efe3f5f2904b6100e01b6cf94d9d6c5501fbbfd2e5e57c2dcb1cf117c41eedcda57", "result": { "valid": true - }, - "trace": { - "random_scalars": { - "r1": "44679831fe60eca50938ef0e812e2a9284ad7971b6932a38c7303538b712e457", - "r2": "6481692f89086cce11779e847ff884db8eebb85a13e81b2d0c79d6c1062069d8", - "e_tilde": "721ce4c4c148a1d5826f326af6fd6ac2844f29533ba4127c3a43d222d51b7081", - "r1_tilde": "1ecfaf5a079b0504b00a1f0d6fe8857291dd798291d7ad7454b398114393f37f", - "r3_tilde": "0a4b3d59b34707bb9999bc6e2a6d382a2d2e214bff36ecd88639a14124b1622e", - "m_tilde_scalars": [ - "7217411a9e329c7a5705e8db552274646e2949d62c288d7537dd62bc284715e4", - "67d4d43660746759f598caac106a2b5f58ccd1c3eefaec31841a4f77d2548870", - "715d965b1c3912d20505b381470ff1a528700b673e50ba89fd287e13171cc137", - "4d3281a149674e58c9040fc7a10dd92cb9c7f76f6f0815a1afc3b09d74b92fe4", - "438feebaa5894ca0da49992df2c97d872bf153eab07e08ff73b28131c46ff415", - "602b723c8bbaec1b057d70f18269ae5e6de6197a5884967b03b933fa80006121" - ] - }, - "A_bar": "81925c2e525d9fbb0ba95b438b5a13fff5874c7c0515c193628d7d143ddc3bb487771ad73658895997a88dd5b254ed29", - "B_bar": "abc019bfca62c09b8dafb37e5f09b1d380e084ec3623d071ec38d6b8602af93aa0ddbada307c9309cca86be16db53dc7", - "D": "ac310574f509c712bb1a181d64ea3c1ee075c018a2bc773e2480b5c033ccb9bfea5af347a88ab83746c9342ba76db367", - "T1": "ada552bd7ee0d6914b89eaa0e9426b3bdbdfa7ecac26b3c118aefefc577095e894c1b4a828c184e091a563e09763f3a9", - "T2": "818dd907bf0321cf982648f91d7201b357358d3b2f6f7678afa722d89bbe5eba4415e4a65567a03292d9c7859da20cad", - "domain": "41c5fe0290d0da734ce9bba57bfe0dfc14f3f9cfef18a0d7438cf2075fd71cc7", - "challenge": "4a70506add5b2eb0be9ff66e3ea8deae666f198edfbb1391c6834e6df4f1026d" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof015.json b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof015.json index f61fbe6e..12ca326f 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/proof/proof015.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/proof/proof015.json @@ -1,53 +1,16 @@ { "caseName": "valid multi-message signature, multiple messages revealed proof, no presentation header", "signerPublicKey": "a820f230f6ae38503b86c70dc50b61c58a77e45c39ab25c0652bbaa8fa136f2851bd4781c9dcde39fc9d1d52c9e60268061e7d7632171d91aa8d460acee0e96f1e7c4cfb12d3ff9ab5d5dc91c277db75c845d649ef3c4f63aebc364cd55ded0c", - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6 - ], - "proof": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc415199462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac48135672556358e78b5398f1a547a2a98dfe16230f244ba742dea737e4f810b4d94e03ac068ef840aaadf12b2ed51d3fb774c2a0a620019fd1f39c52c6f89a0e6067e3039413a91129791b2af215a82ad2356b6bc305c1d7a828fe519619dd026eaaf07ea81cee52b21aab3e8320519bf37c2bb228a8b580f899d84327bdc5e84a66000e8bac17d2fa039bb2246c8eacc623ccd9eb26e184a96a9e3a6702e1dbafe194772394b05251f72bcd2d20f542b15b2406f899791f6f285c7b469e7c7b9624147f305c38c903273a949f6e85b9774aeeccfafa432e2cdd7c8f97d1687741ed30d725444428dd87d9884711d9a46baaf0c04b03a2a228b7033be0841880134b03b15f698756eca5f37503a0411a9586d3027a8b8b9118e95a9949b2719e85e4a669d9e4b7bb6d4544c8cc558c30d79f9c85a87e1a95611400b7c7dac5673d800", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af" + }, + "proof": "812a204f66c9084feed7383894d910f2c17399b3c4b4bed05660921de8539f5042318c356609496a6ca0a26626661be78ca723b7182ccd314924b93a3997654fcd77e29e3847dc881f422a751017705173ec094d2997221e134710d4fff1bd332fd2f270e96b6b8de89b2fff1294dcd5bd0e1eb314b199f7fb7f5702839f409e167c6a78eb3a57a08a7996330f83ac167d51c57f4ebabea87ad8e08b4b3875926d9d2427df59abd2e2befe32774b03668a5080c54412f81c4cbf47571b15a35c4f93bd38805c3224ca6c4d2f387c28288e8fffb0ab0c43cdb860f31c739b3091192268789d3da05b97d277ab91699a209c97e9057a6cf66c9d4d311ea09c680d4aa2485bfdbaa7ee954a2e0b4f6ea542eda44a1adf2b19f63332b9de00f46c533f1c696bc8b4aea5cc56b0cf12ecdba434b36324d754eabf1734e6c3301f300435797edcb007eae6ef75bc5d5500a1ce74ba8f4e0c5c8836f42371c2c469265909585f44695f088ea39bda2317224f47208c7f77570deae84efea007c14f18ef", "result": { "valid": true - }, - "trace": { - "random_scalars": { - "r1": "44679831fe60eca50938ef0e812e2a9284ad7971b6932a38c7303538b712e457", - "r2": "6481692f89086cce11779e847ff884db8eebb85a13e81b2d0c79d6c1062069d8", - "e_tilde": "721ce4c4c148a1d5826f326af6fd6ac2844f29533ba4127c3a43d222d51b7081", - "r1_tilde": "1ecfaf5a079b0504b00a1f0d6fe8857291dd798291d7ad7454b398114393f37f", - "r3_tilde": "0a4b3d59b34707bb9999bc6e2a6d382a2d2e214bff36ecd88639a14124b1622e", - "m_tilde_scalars": [ - "7217411a9e329c7a5705e8db552274646e2949d62c288d7537dd62bc284715e4", - "67d4d43660746759f598caac106a2b5f58ccd1c3eefaec31841a4f77d2548870", - "715d965b1c3912d20505b381470ff1a528700b673e50ba89fd287e13171cc137", - "4d3281a149674e58c9040fc7a10dd92cb9c7f76f6f0815a1afc3b09d74b92fe4", - "438feebaa5894ca0da49992df2c97d872bf153eab07e08ff73b28131c46ff415", - "602b723c8bbaec1b057d70f18269ae5e6de6197a5884967b03b933fa80006121" - ] - }, - "A_bar": "a2ed608e8e12ed21abc2bf154e462d744a367c7f1f969bdbf784a2a134c7db2d340394223a5397a3011b1c340ebc4151", - "B_bar": "99462ba6f31106d8a6da8b513b37a47afe93c9b3474d0d7a354b2edc1b88818b063332df774c141f7a07c48fe50d452f", - "D": "897739228c88afc797916dca01e8f03bd9c5375c7a7c59996e514bb952a436afd24457658acbaba5ddac2e693ac48135", - "T1": "84719c2b5bb275ee74913dbf95fb9054f690c8e4035f1259e184e9024544bc4bbea9c244e7897f9db7c82b7b14b27d28", - "T2": "8f5f191c956aefd5c960e57d2dfbab6761eb0ebc5efdba1aca1403dcc19e05296b16c9feb7636cb4ef2a360c5a148483", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47", - "challenge": "669d9e4b7bb6d4544c8cc558c30d79f9c85a87e1a95611400b7c7dac5673d800" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature001.json b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature001.json index 5c2254df..b0612a16 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature001.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature001.json @@ -8,12 +8,8 @@ "messages": [ "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02" ], - "signature": "84773160b824e194073a57493dac1a20b667af70cd2352d8af241c77658da5253aa8458317cca0eae615690d55b1f27164657dcafee1d5c1973947aa70e2cfbb4c892340be5969920d0916067b4565a0", + "signature": "88c0eb3bc1d97610c3a66d8a3a73f260f95a3028bccf7fff7d9851e2acd9f3f32fdf58a5b34d12df8177adf37aa318a20f72be7d37a8e8d8441d1bc0bc75543c681bf061ce7e7f6091fe78c1cb8af103", "result": { "valid": true - }, - "trace": { - "B": "92d264aed02bf23de022ebe778c4f929fddf829f504e451d011ed89a313b8167ac947332e1648157ceffc6e6e41ab255", - "domain": "25d57fab92a8274c68fde5c3f16d4b275e4a156f211ae34b3ab32fbaf506ed5c" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature002.json b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature002.json index ca9ce3b7..172b1e5c 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature002.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature002.json @@ -8,13 +8,9 @@ "messages": [ "" ], - "signature": "84773160b824e194073a57493dac1a20b667af70cd2352d8af241c77658da5253aa8458317cca0eae615690d55b1f27164657dcafee1d5c1973947aa70e2cfbb4c892340be5969920d0916067b4565a0", + "signature": "88c0eb3bc1d97610c3a66d8a3a73f260f95a3028bccf7fff7d9851e2acd9f3f32fdf58a5b34d12df8177adf37aa318a20f72be7d37a8e8d8441d1bc0bc75543c681bf061ce7e7f6091fe78c1cb8af103", "result": { "valid": false, "reason": "modified message" - }, - "trace": { - "B": "92d264aed02bf23de022ebe778c4f929fddf829f504e451d011ed89a313b8167ac947332e1648157ceffc6e6e41ab255", - "domain": "25d57fab92a8274c68fde5c3f16d4b275e4a156f211ae34b3ab32fbaf506ed5c" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature003.json b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature003.json index 4642e8cc..d08532c8 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature003.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature003.json @@ -9,13 +9,9 @@ "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80" ], - "signature": "84773160b824e194073a57493dac1a20b667af70cd2352d8af241c77658da5253aa8458317cca0eae615690d55b1f27164657dcafee1d5c1973947aa70e2cfbb4c892340be5969920d0916067b4565a0", + "signature": "88c0eb3bc1d97610c3a66d8a3a73f260f95a3028bccf7fff7d9851e2acd9f3f32fdf58a5b34d12df8177adf37aa318a20f72be7d37a8e8d8441d1bc0bc75543c681bf061ce7e7f6091fe78c1cb8af103", "result": { "valid": false, "reason": "extra unsigned message" - }, - "trace": { - "B": "92d264aed02bf23de022ebe778c4f929fddf829f504e451d011ed89a313b8167ac947332e1648157ceffc6e6e41ab255", - "domain": "25d57fab92a8274c68fde5c3f16d4b275e4a156f211ae34b3ab32fbaf506ed5c" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature004.json b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature004.json index d603b003..d0d9ce35 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature004.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature004.json @@ -17,12 +17,8 @@ "96012096", "" ], - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", + "signature": "895cd9c0ccb9aca4de913218655346d718711472f2bf1f3e68916de106a0d93cf2f47200819b45920bbda541db2d91480665df253fedab2843055bdc02535d83baddbbb2803ec3808e074f71f199751e", "result": { "valid": true - }, - "trace": { - "B": "84f48376f7df6af40bc329cf484cdbfd0b19d0b326fccab4e9d8f00d1dbcf48139d498b19667f203cf8a1d1f8340c522", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature005.json b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature005.json index 17adc787..a4ae3777 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature005.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature005.json @@ -9,13 +9,9 @@ "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80" ], - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", + "signature": "895cd9c0ccb9aca4de913218655346d718711472f2bf1f3e68916de106a0d93cf2f47200819b45920bbda541db2d91480665df253fedab2843055bdc02535d83baddbbb2803ec3808e074f71f199751e", "result": { "valid": false, "reason": "missing messages" - }, - "trace": { - "B": "84f48376f7df6af40bc329cf484cdbfd0b19d0b326fccab4e9d8f00d1dbcf48139d498b19667f203cf8a1d1f8340c522", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature006.json b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature006.json index 236b35a6..aa763170 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature006.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature006.json @@ -17,13 +17,9 @@ "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02" ], - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", + "signature": "895cd9c0ccb9aca4de913218655346d718711472f2bf1f3e68916de106a0d93cf2f47200819b45920bbda541db2d91480665df253fedab2843055bdc02535d83baddbbb2803ec3808e074f71f199751e", "result": { "valid": false, "reason": "re-ordered messages" - }, - "trace": { - "B": "84f48376f7df6af40bc329cf484cdbfd0b19d0b326fccab4e9d8f00d1dbcf48139d498b19667f203cf8a1d1f8340c522", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature007.json b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature007.json index abeee40f..986f7a57 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature007.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature007.json @@ -17,13 +17,9 @@ "96012096", "" ], - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", + "signature": "895cd9c0ccb9aca4de913218655346d718711472f2bf1f3e68916de106a0d93cf2f47200819b45920bbda541db2d91480665df253fedab2843055bdc02535d83baddbbb2803ec3808e074f71f199751e", "result": { "valid": false, "reason": "wrong public key" - }, - "trace": { - "B": "84f48376f7df6af40bc329cf484cdbfd0b19d0b326fccab4e9d8f00d1dbcf48139d498b19667f203cf8a1d1f8340c522", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature008.json b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature008.json index a8e7c082..add39b66 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature008.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature008.json @@ -17,13 +17,9 @@ "96012096", "" ], - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", + "signature": "895cd9c0ccb9aca4de913218655346d718711472f2bf1f3e68916de106a0d93cf2f47200819b45920bbda541db2d91480665df253fedab2843055bdc02535d83baddbbb2803ec3808e074f71f199751e", "result": { "valid": false, "reason": "different header" - }, - "trace": { - "B": "84f48376f7df6af40bc329cf484cdbfd0b19d0b326fccab4e9d8f00d1dbcf48139d498b19667f203cf8a1d1f8340c522", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature009.json b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature009.json index a2300d40..8bff6e84 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature009.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature009.json @@ -6,24 +6,20 @@ }, "header": "11223344556677889900aabbccddeeff", "messages": [ - "496694774c5604ab1b2544eababcf0f53278ff50", - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", "96012096", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "ac55fb33a75909ed", + "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "d183ddc6e2665aa4e2f088af", "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", "", + "ac55fb33a75909ed", "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af" + "496694774c5604ab1b2544eababcf0f53278ff50", + "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73" ], - "signature": "8339b285a4acd89dec7777c09543a43e3cc60684b0a6f8ab335da4825c96e1463e28f8c5f4fd0641d19cec5920d3a8ff4bedb6c9691454597bbd298288abed3632078557b2ace7d44caed846e1a0a1e8", + "signature": "895cd9c0ccb9aca4de913218655346d718711472f2bf1f3e68916de106a0d93cf2f47200819b45920bbda541db2d91480665df253fedab2843055bdc02535d83baddbbb2803ec3808e074f71f199751e", "result": { "valid": false, "reason": "re-ordered(randomly shuffled) messages" - }, - "trace": { - "B": "84f48376f7df6af40bc329cf484cdbfd0b19d0b326fccab4e9d8f00d1dbcf48139d498b19667f203cf8a1d1f8340c522", - "domain": "6272832582a0ac96e6fe53e879422f24c51680b25fbf17bad22a35ea93ce5b47" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature010.json b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature010.json index 49b5124d..e96307e2 100644 --- a/tests/fixtures/bbs/bls12_381_sha_256/signature/signature010.json +++ b/tests/fixtures/bbs/bls12_381_sha_256/signature/signature010.json @@ -17,12 +17,8 @@ "96012096", "" ], - "signature": "8c87e2080859a97299c148427cd2fcf390d24bea850103a9748879039262ecf4f42206f6ef767f298b6a96b424c1e86c26f8fba62212d0e05b95261c2cc0e5fdc63a32731347e810fd12e9c58355aa0d", + "signature": "ae0b1807865598b3884e3e9b110e8faec662050dc9b4d95309d957fd30f6fc24161f6f8b5680f1f5d1b547be221547915ca665c7b3087a336d5e0c5fcfea62576afd13e563b730ef6d6d81f9944ab95b", "result": { "valid": true - }, - "trace": { - "B": "98e38eadb6a2232cf91f41861089cda14d7e3ddef0c6eaba4d11a2732f66408f394d58301ffcc8fcfb3c89bb75136f61", - "domain": "41c5fe0290d0da734ce9bba57bfe0dfc14f3f9cfef18a0d7438cf2075fd71cc7" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/generators.json b/tests/fixtures/bbs/bls12_381_shake_256/generators.json index 06559620..d24c90d4 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/generators.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/generators.json @@ -1,16 +1,16 @@ { - "P1": "8929dfbc7e6642c4ed9cba0856e493f8b9d7d5fcb0c31ef8fdcd34d50648a56c795e106e9eada6e0bda386b414150755", + "BP": "8929dfbc7e6642c4ed9cba0856e493f8b9d7d5fcb0c31ef8fdcd34d50648a56c795e106e9eada6e0bda386b414150755", "Q1": "a9d40131066399fd41af51d883f4473b0dcd7d028d3d34ef17f3241d204e28507d7ecae032afa1d5490849b7678ec1f8", "MsgGenerators": [ - "903c7ca0b7e78a2017d0baf74103bd00ca8ff9bf429f834f071c75ffe6bfdec6d6dca15417e4ac08ca4ae1e78b7adc0e", - "84321f5855bfb6b001f0dfcb47ac9b5cc68f1a4edd20f0ec850e0563b27d2accee6edff1a26b357762fb24e8ddbb6fcb", - "b3060dff0d12a32819e08da00e61810676cc9185fdd750e5ef82b1a9798c7d76d63de3b6225d6c9a479d6c21a7c8bf93", - "8f1093d1e553cdead3c70ce55b6d664e5d1912cc9edfdd37bf1dad11ca396a0a8bb062092d391ebf8790ea5722413f68", - "990824e00b48a68c3d9a308e8c52a57b1bc84d1cf5d3c0f8c6fb6b1230e4e5b8eb752fb374da0b1ef687040024868140", - "b86d1c6ab8ce22bc53f625d1ce9796657f18060fcb1893ce8931156ef992fe56856199f8fa6c998e5d855a354a26b0dd", - "b4cdd98c5c1e64cb324e0c57954f719d5c5f9e8d991fd8e159b31c8d079c76a67321a30311975c706578d3a0ddc313b7", - "8311492d43ec9182a5fc44a75419b09547e311251fe38b6864dc1e706e29446cb3ea4d501634eb13327245fd8a574f77", - "ac00b493f92d17837a28d1f5b07991ca5ab9f370ae40d4f9b9f2711749ca200110ce6517dc28400d4ea25dddc146cacc", - "965a6c62451d4be6cb175dec39727dc665762673ee42bf0ac13a37a74784fbd61e84e0915277a6f59863b2bb4f5f6005" + "903c7ca0b7e78a2017d0baf74103bd00ca8ff9bf429f834f071c75ffe6bfdec6d6dca15417e4ac08ca4ae1e78b7adc0e", + "84321f5855bfb6b001f0dfcb47ac9b5cc68f1a4edd20f0ec850e0563b27d2accee6edff1a26b357762fb24e8ddbb6fcb", + "b3060dff0d12a32819e08da00e61810676cc9185fdd750e5ef82b1a9798c7d76d63de3b6225d6c9a479d6c21a7c8bf93", + "8f1093d1e553cdead3c70ce55b6d664e5d1912cc9edfdd37bf1dad11ca396a0a8bb062092d391ebf8790ea5722413f68", + "990824e00b48a68c3d9a308e8c52a57b1bc84d1cf5d3c0f8c6fb6b1230e4e5b8eb752fb374da0b1ef687040024868140", + "b86d1c6ab8ce22bc53f625d1ce9796657f18060fcb1893ce8931156ef992fe56856199f8fa6c998e5d855a354a26b0dd", + "b4cdd98c5c1e64cb324e0c57954f719d5c5f9e8d991fd8e159b31c8d079c76a67321a30311975c706578d3a0ddc313b7", + "8311492d43ec9182a5fc44a75419b09547e311251fe38b6864dc1e706e29446cb3ea4d501634eb13327245fd8a574f77", + "ac00b493f92d17837a28d1f5b07991ca5ab9f370ae40d4f9b9f2711749ca200110ce6517dc28400d4ea25dddc146cacc", + "965a6c62451d4be6cb175dec39727dc665762673ee42bf0ac13a37a74784fbd61e84e0915277a6f59863b2bb4f5f6005" ] } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/keypair.json b/tests/fixtures/bbs/bls12_381_shake_256/keypair.json index 50165247..190c010f 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/keypair.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/keypair.json @@ -2,7 +2,6 @@ "caseName": "key pair fixture", "keyMaterial": "746869732d49532d6a7573742d616e2d546573742d494b4d2d746f2d67656e65726174652d246528724074232d6b6579", "keyInfo": "746869732d49532d736f6d652d6b65792d6d657461646174612d746f2d62652d757365642d696e2d746573742d6b65792d67656e", - "keyDst": "4242535f424c53313233383147315f584f463a5348414b452d3235365f535357555f524f5f4832475f484d32535f4b455947454e5f4453545f", "keyPair": { "secretKey": "2eee0f60a8a3a8bec0ee942bfd46cbdae9a0738ee68f5a64e7238311cf09a079", "publicKey": "92d37d1d6cd38fea3a873953333eab23a4c0377e3e049974eb62bd45949cdeb18fb0490edcd4429adff56e65cbce42cf188b31bddbd619e419b99c2c41b38179eb001963bc3decaae0d9f702c7a8c004f207f46c734a5eae2e8e82833f3e7ea5" diff --git a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof001.json b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof001.json index 66366322..6c516ed4 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof001.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof001.json @@ -1,34 +1,13 @@ { "caseName": "valid single message signature, single-message revealed proof", "signerPublicKey": "92d37d1d6cd38fea3a873953333eab23a4c0377e3e049974eb62bd45949cdeb18fb0490edcd4429adff56e65cbce42cf188b31bddbd619e419b99c2c41b38179eb001963bc3decaae0d9f702c7a8c004f207f46c734a5eae2e8e82833f3e7ea5", - "signature": "b9a622a4b404e6ca4c85c15739d2124a1deb16df750be202e2430e169bc27fb71c44d98e6d40792033e1c452145ada95030832c5dc778334f2f1b528eced21b0b97a12025a283d78b7136bb9825d04ef", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02" - ], - "disclosedIndexes": [ - 0 - ], - "proof": "89e4ab0c160880e0c2f12a754b9c051ed7f5fccfee3d5cbbb62e1239709196c737fff4303054660f8fcd08267a5de668a2e395ebe8866bdcb0dff9786d7014fa5e3c8cf7b41f8d7510e27d307f18032f6b788e200b9d6509f40ce1d2f962ceedb023d58ee44d660434e6ba60ed0da1a5d2cde031b483684cd7c5b13295a82f57e209b584e8fe894bcc964117bf3521b43d8e2eb59ce31f34d68b39f05bb2c625e4de5e61e95ff38bfd62ab07105d016414b45b01625c69965ad3c8a933e7b25d93daeb777302b966079827a99178240e6c3f13b7db2fb1f14790940e239d775ab32f539bdf9f9b582b250b05882996832652f7f5d3b6e04744c73ada1702d6791940ccbd75e719537f7ace6ee817298d", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02" + }, + "proof": "85c250f9a52faeb883ad9598aed05d31fe5861478d9f33b8de2deed1d92de5c0b0ef34458e6cf8bad8caa0724fd3d3ca854abee98db3384e81a406d976643e239df0a924576eaf8f4eec2885e9c688af7a52e4a752bef2c6f07d0a45611db3795d83d9cd71dfe8a62e3ad992e6327413baaea14c1de798c8929f9c6b1524bab54d0494dd5354d5a0770b79d2911bb6591ce293e03a0d083bb81fc5bed8a44ff67386c0c33ddaaebf7d046849428fc6cf4d08815fa39c94144c79ac50e86a0f5d", "result": { "valid": true - }, - "trace": { - "random_scalars": { - "r1": "1308e6f945f663b96de1c76461cf7d7f88b92eb99a9034685150db443d733881", - "r2": "25f81cb69a8fac6fb55d44a084557258575d1003be2bd94f1922dad2c3e447fd", - "e_tilde": "5e8041a7ab02976ee50226c4b062b47d38829bbf42ee7eb899b29720377a584c", - "r1_tilde": "3bbf1d5dc2904dbb7b2ba75c5dce8a5ad2d56a359c13ff0fa5fcb1339cd2fe58", - "r3_tilde": "016b1460eee7707c524a86a4aedeb826ce9597b42906dccaa96c6b49a8ea7da2", - "m_tilde_scalars": [] - }, - "A_bar": "89e4ab0c160880e0c2f12a754b9c051ed7f5fccfee3d5cbbb62e1239709196c737fff4303054660f8fcd08267a5de668", - "B_bar": "a2e395ebe8866bdcb0dff9786d7014fa5e3c8cf7b41f8d7510e27d307f18032f6b788e200b9d6509f40ce1d2f962ceed", - "D": "b023d58ee44d660434e6ba60ed0da1a5d2cde031b483684cd7c5b13295a82f57e209b584e8fe894bcc964117bf3521b4", - "T1": "91a10e73cf4090812e8ea25f31aaa61be53fcb42ce86e9f0e5df6f6dac4c3eee62ac846b0b83a5cfcbe78315175a4961", - "T2": "988f3d473186634e41478dc4527cf240e64de23a763037454d39a876862ebc617738ba6c458142e3746b01eab58ca8d7", - "domain": "2f18dd269c11c512256a9d1d57e61a7d2de6ebcf41cac3053f37afedc4e650a9", - "challenge": "2652f7f5d3b6e04744c73ada1702d6791940ccbd75e719537f7ace6ee817298d" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof002.json b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof002.json index 30270cd8..226a4cfc 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof002.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof002.json @@ -1,52 +1,22 @@ { "caseName": "valid multi-message signature, all messages revealed proof", "signerPublicKey": "92d37d1d6cd38fea3a873953333eab23a4c0377e3e049974eb62bd45949cdeb18fb0490edcd4429adff56e65cbce42cf188b31bddbd619e419b99c2c41b38179eb001963bc3decaae0d9f702c7a8c004f207f46c734a5eae2e8e82833f3e7ea5", - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9 - ], - "proof": "91b0f598268c57b67bc9e55327c3c2b9b1654be89a0cf963ab392fa9e1637c565241d71fd6d7bbd7dfe243de85a9bac8b7461575c1e13b5055fed0b51fd0ec1433096607755b2f2f9ba6dc614dfa456916ca0d7fc6482b39c679cfb747a50ea1b3dd7ed57aaadc348361e2501a17317352e555a333e014e8e7d71eef808ae4f8fbdf45cd19fde45038bb310d5135f5205fc550b077e381fb3a3543dca31a0d8bba97bc0b660a5aa239eb74921e184aa3035fa01eaba32f52029319ec3df4fa4a4f716edb31a6ce19a19dbb971380099345070bd0fdeecf7c4774a33e0a116e069d5e215992fb637984802066dee6919146ae50b70ea52332dfe57f6e05c66e99f1764d8b890d121d65bfcc2984886ee0", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "1": "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "3": "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "5": "515ae153e22aae04ad16f759e07237b4", + "6": "d183ddc6e2665aa4e2f088af", + "7": "ac55fb33a75909ed", + "8": "96012096", + "9": "" + }, + "proof": "94dfa4e26276f0ccf319b0ade65317e0bac41867aaebc73c7edc38673776cc6321dadd721920f5bd33f14be6dd101ec0b48f82f7ce8a8eb1d7cba2b93b66206bb7c3b5340e358be39380c7a9f17083fa1bcdf9c4e5ba5927edfd01519189b7b33fa2b5bbb5baf963598694e9f9c0c12e7aee29395e61a16129b43edaef245d5732bbc6e2e626ce241b8fdc60aea5532f829ace9ed443a679b3e6ffd712ce67681537982406ba09ff6a1c6dee258fd22b3f9aa1f28e19a83bbd1141f24171f380", "result": { "valid": true - }, - "trace": { - "random_scalars": { - "r1": "1308e6f945f663b96de1c76461cf7d7f88b92eb99a9034685150db443d733881", - "r2": "25f81cb69a8fac6fb55d44a084557258575d1003be2bd94f1922dad2c3e447fd", - "e_tilde": "5e8041a7ab02976ee50226c4b062b47d38829bbf42ee7eb899b29720377a584c", - "r1_tilde": "3bbf1d5dc2904dbb7b2ba75c5dce8a5ad2d56a359c13ff0fa5fcb1339cd2fe58", - "r3_tilde": "016b1460eee7707c524a86a4aedeb826ce9597b42906dccaa96c6b49a8ea7da2", - "m_tilde_scalars": [] - }, - "A_bar": "91b0f598268c57b67bc9e55327c3c2b9b1654be89a0cf963ab392fa9e1637c565241d71fd6d7bbd7dfe243de85a9bac8", - "B_bar": "b7461575c1e13b5055fed0b51fd0ec1433096607755b2f2f9ba6dc614dfa456916ca0d7fc6482b39c679cfb747a50ea1", - "D": "b3dd7ed57aaadc348361e2501a17317352e555a333e014e8e7d71eef808ae4f8fbdf45cd19fde45038bb310d5135f520", - "T1": "8890adfc78da24768d59dbfdb3f380e2793e9018b20c23e9ba05baa60f1b21456bc047a5d27049dab5dc6a94696ce711", - "T2": "a49f953636d3651a3ae6fe45a99a2e4fec079eef3be8b8a6a4ba70885d7e028642f7224e9f451529915c88a7edc59fbe", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b", - "challenge": "46ae50b70ea52332dfe57f6e05c66e99f1764d8b890d121d65bfcc2984886ee0" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof003.json b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof003.json index 99384c39..ad287fa7 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof003.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof003.json @@ -1,53 +1,16 @@ { "caseName": "valid multi-message signature, multiple messages revealed proof", "signerPublicKey": "92d37d1d6cd38fea3a873953333eab23a4c0377e3e049974eb62bd45949cdeb18fb0490edcd4429adff56e65cbce42cf188b31bddbd619e419b99c2c41b38179eb001963bc3decaae0d9f702c7a8c004f207f46c734a5eae2e8e82833f3e7ea5", - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6 - ], - "proof": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af356dd39bf8bcbfd41bf95d913f4c9b2979e1ed2ca10ac7e881bb6a271722549681e398d29e9ba4eac8848b168eddd5e4acec7df4103e2ed165e6e32edc80f0a3b28c36fb39ca19b4b8acee570deadba2da9ec20d1f236b571e0d4c2ea3b826fe924175ed4dfffbf18a9cfa98546c241efb9164c444d970e8c89849bc8601e96cf228fdefe38ab3b7e289cac859e68d9cbb0e648faf692b27df5ff6539c30da17e5444a65143de02ca64cee7b0823be65865cdc310be038ec6b594b99280072ae067bad1117b0ff3201a5506a8533b925c7ffae9cdb64558857db0ac5f5e0f18e750ae77ec9cf35263474fef3f78138c7a1ef5cfbc878975458239824fad3ce05326ba3969b1f5451bd82bd1f8075f3d32ece2d61d89a064ab4804c3c892d651d11bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af" + }, + "proof": "ac0424b2a984c55d0061aa61df105f2c882d393494f3f4205d1e73f93c9c76b30664baeb3dc87f23fbf4035fb0a8e76b851dd39cecce8843e747ccf540f0850a30e1317f8897a56c2d85bfc1e0b4dba1b0e0322d89aad4feb8b21c414a384a0128d65da028243bdab954c1d6b4f3874ccafe69bb0900c0b8528d56dd9bd1d78b0c328022210ff9fe95276f79d23278956a0898d974932bd90e6c79f7e970de6b637c7e6326540699080d39bd076a50095e031e980e68068e3e34a982ff4678c656db3c3b49df591ade6db848d7c2ddadf7e7d1db858848a948f858f7fd59068c6b816607e5abd4f039bf2d1904fd7f89a1917023a1fc4862dbe8848041da2e36271d76ad8b5e357ea3fd71ebc3617427a064256febf122773528023e4df1d25900dc1ab19a563587c74a82495c59115263c51dcea106baa5f7f82c0b50e7756370f0470cb4630d2a188309f28e1e0582c47a9ec76f864363835812984432a5253f079b3ede1b244a809807ae2088deff841b93d0bca442e346b33d6b8aff8961", "result": { "valid": true - }, - "trace": { - "random_scalars": { - "r1": "5ee9426ae206e3a127eb53c79044bc9ed1b71354f8354b01bf410a02220be7d0", - "r2": "280d4fcc38376193ffc777b68459ed7ba897e2857f938581acf95ae5a68988f3", - "e_tilde": "39966b00042fc43906297d692ebb41de08e36aada8d9504d4e0ae02ad59e9230", - "r1_tilde": "61f5c273999b0b50be8f84d2380eb9220fc5a88afe144efc4007545f0ab9c089", - "r3_tilde": "63af117e0c8b7d2f1f3e375fcf5d9430e136ff0f7e879423e49dadc401a50089", - "m_tilde_scalars": [ - "020b83ca2ab319cba0744d6d58da75ac3dfb6ba682bfce2587c5a6d86a4e4e7b", - "5bf565343611c08f83e4420e8b1577ace8cc4df5d5303aeb3c4e425f1080f836", - "049d77949af1192534da28975f76d4f211315dce1e36f93ffcf2a555de516b28", - "407e5a952f145de7da53533de8366bbd2e0c854721a204f03906dc82fde10f48", - "1c925d9052849edddcf04d5f1f0d4ff183a66b66eb820f59b675aee121cfc63c", - "07d7c41b02158a9c5eac212ed6d7c2cddeb8e38baea6e93e1a00b2e83e2a0995" - ] - }, - "A_bar": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7", - "B_bar": "b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0", - "D": "b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af3", - "T1": "8b497dd4dcdcf7eb58c9b43e57e06bcea3468a223ae2fc015d7a86506a952d68055e73f5a5847e58f133ea154256d0da", - "T2": "8655584d3da1313f881f48c239384a5623d2d292f08dae7ac1d8129c19a02a89b82fa45de3f6c2c439510fce5919656f", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b", - "challenge": "1bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof004.json b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof004.json index d664696b..5b2c0335 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof004.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof004.json @@ -1,54 +1,17 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (different presentation header)", "signerPublicKey": "92d37d1d6cd38fea3a873953333eab23a4c0377e3e049974eb62bd45949cdeb18fb0490edcd4429adff56e65cbce42cf188b31bddbd619e419b99c2c41b38179eb001963bc3decaae0d9f702c7a8c004f207f46c734a5eae2e8e82833f3e7ea5", - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "011594ba7f95b3b470ea4102dd5899de3a042e5104d3ea01d15e6780d831d2be", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6 - ], - "proof": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af356dd39bf8bcbfd41bf95d913f4c9b2979e1ed2ca10ac7e881bb6a271722549681e398d29e9ba4eac8848b168eddd5e4acec7df4103e2ed165e6e32edc80f0a3b28c36fb39ca19b4b8acee570deadba2da9ec20d1f236b571e0d4c2ea3b826fe924175ed4dfffbf18a9cfa98546c241efb9164c444d970e8c89849bc8601e96cf228fdefe38ab3b7e289cac859e68d9cbb0e648faf692b27df5ff6539c30da17e5444a65143de02ca64cee7b0823be65865cdc310be038ec6b594b99280072ae067bad1117b0ff3201a5506a8533b925c7ffae9cdb64558857db0ac5f5e0f18e750ae77ec9cf35263474fef3f78138c7a1ef5cfbc878975458239824fad3ce05326ba3969b1f5451bd82bd1f8075f3d32ece2d61d89a064ab4804c3c892d651d11bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af" + }, + "proof": "ac0424b2a984c55d0061aa61df105f2c882d393494f3f4205d1e73f93c9c76b30664baeb3dc87f23fbf4035fb0a8e76b851dd39cecce8843e747ccf540f0850a30e1317f8897a56c2d85bfc1e0b4dba1b0e0322d89aad4feb8b21c414a384a0128d65da028243bdab954c1d6b4f3874ccafe69bb0900c0b8528d56dd9bd1d78b0c328022210ff9fe95276f79d23278956a0898d974932bd90e6c79f7e970de6b637c7e6326540699080d39bd076a50095e031e980e68068e3e34a982ff4678c656db3c3b49df591ade6db848d7c2ddadf7e7d1db858848a948f858f7fd59068c6b816607e5abd4f039bf2d1904fd7f89a1917023a1fc4862dbe8848041da2e36271d76ad8b5e357ea3fd71ebc3617427a064256febf122773528023e4df1d25900dc1ab19a563587c74a82495c59115263c51dcea106baa5f7f82c0b50e7756370f0470cb4630d2a188309f28e1e0582c47a9ec76f864363835812984432a5253f079b3ede1b244a809807ae2088deff841b93d0bca442e346b33d6b8aff8961", "result": { "valid": false, "reason": "different presentation header" - }, - "trace": { - "random_scalars": { - "r1": "5ee9426ae206e3a127eb53c79044bc9ed1b71354f8354b01bf410a02220be7d0", - "r2": "280d4fcc38376193ffc777b68459ed7ba897e2857f938581acf95ae5a68988f3", - "e_tilde": "39966b00042fc43906297d692ebb41de08e36aada8d9504d4e0ae02ad59e9230", - "r1_tilde": "61f5c273999b0b50be8f84d2380eb9220fc5a88afe144efc4007545f0ab9c089", - "r3_tilde": "63af117e0c8b7d2f1f3e375fcf5d9430e136ff0f7e879423e49dadc401a50089", - "m_tilde_scalars": [ - "020b83ca2ab319cba0744d6d58da75ac3dfb6ba682bfce2587c5a6d86a4e4e7b", - "5bf565343611c08f83e4420e8b1577ace8cc4df5d5303aeb3c4e425f1080f836", - "049d77949af1192534da28975f76d4f211315dce1e36f93ffcf2a555de516b28", - "407e5a952f145de7da53533de8366bbd2e0c854721a204f03906dc82fde10f48", - "1c925d9052849edddcf04d5f1f0d4ff183a66b66eb820f59b675aee121cfc63c", - "07d7c41b02158a9c5eac212ed6d7c2cddeb8e38baea6e93e1a00b2e83e2a0995" - ] - }, - "A_bar": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7", - "B_bar": "b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0", - "D": "b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af3", - "T1": "8b497dd4dcdcf7eb58c9b43e57e06bcea3468a223ae2fc015d7a86506a952d68055e73f5a5847e58f133ea154256d0da", - "T2": "8655584d3da1313f881f48c239384a5623d2d292f08dae7ac1d8129c19a02a89b82fa45de3f6c2c439510fce5919656f", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b", - "challenge": "1bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof005.json b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof005.json index 43ddedba..cfed6692 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof005.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof005.json @@ -1,54 +1,17 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (wrong public key)", "signerPublicKey": "b24c723803f84e210f7a95f6265c5cbfa4ecc51488bf7acf24b921807801c0798b725b9a2dcfa29953efcdfef03328720196c78b2e613727fd6e085302a0cc2d8d7e1d820cf1d36b20e79eee78c13a1a5da51a298f1aef86f07bc33388f089d8", - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6 - ], - "proof": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af356dd39bf8bcbfd41bf95d913f4c9b2979e1ed2ca10ac7e881bb6a271722549681e398d29e9ba4eac8848b168eddd5e4acec7df4103e2ed165e6e32edc80f0a3b28c36fb39ca19b4b8acee570deadba2da9ec20d1f236b571e0d4c2ea3b826fe924175ed4dfffbf18a9cfa98546c241efb9164c444d970e8c89849bc8601e96cf228fdefe38ab3b7e289cac859e68d9cbb0e648faf692b27df5ff6539c30da17e5444a65143de02ca64cee7b0823be65865cdc310be038ec6b594b99280072ae067bad1117b0ff3201a5506a8533b925c7ffae9cdb64558857db0ac5f5e0f18e750ae77ec9cf35263474fef3f78138c7a1ef5cfbc878975458239824fad3ce05326ba3969b1f5451bd82bd1f8075f3d32ece2d61d89a064ab4804c3c892d651d11bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af" + }, + "proof": "ac0424b2a984c55d0061aa61df105f2c882d393494f3f4205d1e73f93c9c76b30664baeb3dc87f23fbf4035fb0a8e76b851dd39cecce8843e747ccf540f0850a30e1317f8897a56c2d85bfc1e0b4dba1b0e0322d89aad4feb8b21c414a384a0128d65da028243bdab954c1d6b4f3874ccafe69bb0900c0b8528d56dd9bd1d78b0c328022210ff9fe95276f79d23278956a0898d974932bd90e6c79f7e970de6b637c7e6326540699080d39bd076a50095e031e980e68068e3e34a982ff4678c656db3c3b49df591ade6db848d7c2ddadf7e7d1db858848a948f858f7fd59068c6b816607e5abd4f039bf2d1904fd7f89a1917023a1fc4862dbe8848041da2e36271d76ad8b5e357ea3fd71ebc3617427a064256febf122773528023e4df1d25900dc1ab19a563587c74a82495c59115263c51dcea106baa5f7f82c0b50e7756370f0470cb4630d2a188309f28e1e0582c47a9ec76f864363835812984432a5253f079b3ede1b244a809807ae2088deff841b93d0bca442e346b33d6b8aff8961", "result": { "valid": false, "reason": "wrong public key" - }, - "trace": { - "random_scalars": { - "r1": "5ee9426ae206e3a127eb53c79044bc9ed1b71354f8354b01bf410a02220be7d0", - "r2": "280d4fcc38376193ffc777b68459ed7ba897e2857f938581acf95ae5a68988f3", - "e_tilde": "39966b00042fc43906297d692ebb41de08e36aada8d9504d4e0ae02ad59e9230", - "r1_tilde": "61f5c273999b0b50be8f84d2380eb9220fc5a88afe144efc4007545f0ab9c089", - "r3_tilde": "63af117e0c8b7d2f1f3e375fcf5d9430e136ff0f7e879423e49dadc401a50089", - "m_tilde_scalars": [ - "020b83ca2ab319cba0744d6d58da75ac3dfb6ba682bfce2587c5a6d86a4e4e7b", - "5bf565343611c08f83e4420e8b1577ace8cc4df5d5303aeb3c4e425f1080f836", - "049d77949af1192534da28975f76d4f211315dce1e36f93ffcf2a555de516b28", - "407e5a952f145de7da53533de8366bbd2e0c854721a204f03906dc82fde10f48", - "1c925d9052849edddcf04d5f1f0d4ff183a66b66eb820f59b675aee121cfc63c", - "07d7c41b02158a9c5eac212ed6d7c2cddeb8e38baea6e93e1a00b2e83e2a0995" - ] - }, - "A_bar": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7", - "B_bar": "b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0", - "D": "b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af3", - "T1": "8b497dd4dcdcf7eb58c9b43e57e06bcea3468a223ae2fc015d7a86506a952d68055e73f5a5847e58f133ea154256d0da", - "T2": "8655584d3da1313f881f48c239384a5623d2d292f08dae7ac1d8129c19a02a89b82fa45de3f6c2c439510fce5919656f", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b", - "challenge": "1bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof006.json b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof006.json index cd4ff574..b4459fa6 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof006.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof006.json @@ -1,54 +1,17 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (modified messages)", "signerPublicKey": "92d37d1d6cd38fea3a873953333eab23a4c0377e3e049974eb62bd45949cdeb18fb0490edcd4429adff56e65cbce42cf188b31bddbd619e419b99c2c41b38179eb001963bc3decaae0d9f702c7a8c004f207f46c734a5eae2e8e82833f3e7ea5", - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "a0842889a4ca08f3d296e2a5d3b85280b16328d4af68fb21fff310e84bd47e1fea451c70361fbf73f119fc0d4c5a6ec7034a2c0eeece187ec6d0d63d398b793f509b60e646b4ee6359110f1e9185d36c093802be5d990e91e3a2ee0ae907611d7d423f88", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6 - ], - "proof": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af356dd39bf8bcbfd41bf95d913f4c9b2979e1ed2ca10ac7e881bb6a271722549681e398d29e9ba4eac8848b168eddd5e4acec7df4103e2ed165e6e32edc80f0a3b28c36fb39ca19b4b8acee570deadba2da9ec20d1f236b571e0d4c2ea3b826fe924175ed4dfffbf18a9cfa98546c241efb9164c444d970e8c89849bc8601e96cf228fdefe38ab3b7e289cac859e68d9cbb0e648faf692b27df5ff6539c30da17e5444a65143de02ca64cee7b0823be65865cdc310be038ec6b594b99280072ae067bad1117b0ff3201a5506a8533b925c7ffae9cdb64558857db0ac5f5e0f18e750ae77ec9cf35263474fef3f78138c7a1ef5cfbc878975458239824fad3ce05326ba3969b1f5451bd82bd1f8075f3d32ece2d61d89a064ab4804c3c892d651d11bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558", + "revealedMessages": { + "0": "7588c9a4c25a806a46e6c2861fdae21b0b64c48f8ee1c6a6c08a7d645f05b16fd7216026b13e5623c00914c3acbeec2037305e69deb07fe8fa15820f6d4ea7f5df8d97a542529e86e05ce11690d228c1399d0f090cd3a675c75a270f8ef1362db5766d51", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af" + }, + "proof": "ac0424b2a984c55d0061aa61df105f2c882d393494f3f4205d1e73f93c9c76b30664baeb3dc87f23fbf4035fb0a8e76b851dd39cecce8843e747ccf540f0850a30e1317f8897a56c2d85bfc1e0b4dba1b0e0322d89aad4feb8b21c414a384a0128d65da028243bdab954c1d6b4f3874ccafe69bb0900c0b8528d56dd9bd1d78b0c328022210ff9fe95276f79d23278956a0898d974932bd90e6c79f7e970de6b637c7e6326540699080d39bd076a50095e031e980e68068e3e34a982ff4678c656db3c3b49df591ade6db848d7c2ddadf7e7d1db858848a948f858f7fd59068c6b816607e5abd4f039bf2d1904fd7f89a1917023a1fc4862dbe8848041da2e36271d76ad8b5e357ea3fd71ebc3617427a064256febf122773528023e4df1d25900dc1ab19a563587c74a82495c59115263c51dcea106baa5f7f82c0b50e7756370f0470cb4630d2a188309f28e1e0582c47a9ec76f864363835812984432a5253f079b3ede1b244a809807ae2088deff841b93d0bca442e346b33d6b8aff8961", "result": { "valid": false, "reason": "modified messages" - }, - "trace": { - "random_scalars": { - "r1": "5ee9426ae206e3a127eb53c79044bc9ed1b71354f8354b01bf410a02220be7d0", - "r2": "280d4fcc38376193ffc777b68459ed7ba897e2857f938581acf95ae5a68988f3", - "e_tilde": "39966b00042fc43906297d692ebb41de08e36aada8d9504d4e0ae02ad59e9230", - "r1_tilde": "61f5c273999b0b50be8f84d2380eb9220fc5a88afe144efc4007545f0ab9c089", - "r3_tilde": "63af117e0c8b7d2f1f3e375fcf5d9430e136ff0f7e879423e49dadc401a50089", - "m_tilde_scalars": [ - "020b83ca2ab319cba0744d6d58da75ac3dfb6ba682bfce2587c5a6d86a4e4e7b", - "5bf565343611c08f83e4420e8b1577ace8cc4df5d5303aeb3c4e425f1080f836", - "049d77949af1192534da28975f76d4f211315dce1e36f93ffcf2a555de516b28", - "407e5a952f145de7da53533de8366bbd2e0c854721a204f03906dc82fde10f48", - "1c925d9052849edddcf04d5f1f0d4ff183a66b66eb820f59b675aee121cfc63c", - "07d7c41b02158a9c5eac212ed6d7c2cddeb8e38baea6e93e1a00b2e83e2a0995" - ] - }, - "A_bar": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7", - "B_bar": "b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0", - "D": "b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af3", - "T1": "8b497dd4dcdcf7eb58c9b43e57e06bcea3468a223ae2fc015d7a86506a952d68055e73f5a5847e58f133ea154256d0da", - "T2": "8655584d3da1313f881f48c239384a5623d2d292f08dae7ac1d8129c19a02a89b82fa45de3f6c2c439510fce5919656f", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b", - "challenge": "1bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof007.json b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof007.json index 60ed2e08..9e7cc4ae 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof007.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof007.json @@ -1,56 +1,18 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (extra message un-revealed in proof)", "signerPublicKey": "92d37d1d6cd38fea3a873953333eab23a4c0377e3e049974eb62bd45949cdeb18fb0490edcd4429adff56e65cbce42cf188b31bddbd619e419b99c2c41b38179eb001963bc3decaae0d9f702c7a8c004f207f46c734a5eae2e8e82833f3e7ea5", - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6, - 9 - ], - "proof": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af356dd39bf8bcbfd41bf95d913f4c9b2979e1ed2ca10ac7e881bb6a271722549681e398d29e9ba4eac8848b168eddd5e4acec7df4103e2ed165e6e32edc80f0a3b28c36fb39ca19b4b8acee570deadba2da9ec20d1f236b571e0d4c2ea3b826fe924175ed4dfffbf18a9cfa98546c241efb9164c444d970e8c89849bc8601e96cf228fdefe38ab3b7e289cac859e68d9cbb0e648faf692b27df5ff6539c30da17e5444a65143de02ca64cee7b0823be65865cdc310be038ec6b594b99280072ae067bad1117b0ff3201a5506a8533b925c7ffae9cdb64558857db0ac5f5e0f18e750ae77ec9cf35263474fef3f78138c7a1ef5cfbc878975458239824fad3ce05326ba3969b1f5451bd82bd1f8075f3d32ece2d61d89a064ab4804c3c892d651d11bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af", + "9": "" + }, + "proof": "ac0424b2a984c55d0061aa61df105f2c882d393494f3f4205d1e73f93c9c76b30664baeb3dc87f23fbf4035fb0a8e76b851dd39cecce8843e747ccf540f0850a30e1317f8897a56c2d85bfc1e0b4dba1b0e0322d89aad4feb8b21c414a384a0128d65da028243bdab954c1d6b4f3874ccafe69bb0900c0b8528d56dd9bd1d78b0c328022210ff9fe95276f79d23278956a0898d974932bd90e6c79f7e970de6b637c7e6326540699080d39bd076a50095e031e980e68068e3e34a982ff4678c656db3c3b49df591ade6db848d7c2ddadf7e7d1db858848a948f858f7fd59068c6b816607e5abd4f039bf2d1904fd7f89a1917023a1fc4862dbe8848041da2e36271d76ad8b5e357ea3fd71ebc3617427a064256febf122773528023e4df1d25900dc1ab19a563587c74a82495c59115263c51dcea106baa5f7f82c0b50e7756370f0470cb4630d2a188309f28e1e0582c47a9ec76f864363835812984432a5253f079b3ede1b244a809807ae2088deff841b93d0bca442e346b33d6b8aff8961", "result": { "valid": false, "reason": "extra message un-revealed in proof" - }, - "trace": { - "random_scalars": { - "r1": "5ee9426ae206e3a127eb53c79044bc9ed1b71354f8354b01bf410a02220be7d0", - "r2": "280d4fcc38376193ffc777b68459ed7ba897e2857f938581acf95ae5a68988f3", - "e_tilde": "39966b00042fc43906297d692ebb41de08e36aada8d9504d4e0ae02ad59e9230", - "r1_tilde": "61f5c273999b0b50be8f84d2380eb9220fc5a88afe144efc4007545f0ab9c089", - "r3_tilde": "63af117e0c8b7d2f1f3e375fcf5d9430e136ff0f7e879423e49dadc401a50089", - "m_tilde_scalars": [ - "020b83ca2ab319cba0744d6d58da75ac3dfb6ba682bfce2587c5a6d86a4e4e7b", - "5bf565343611c08f83e4420e8b1577ace8cc4df5d5303aeb3c4e425f1080f836", - "049d77949af1192534da28975f76d4f211315dce1e36f93ffcf2a555de516b28", - "407e5a952f145de7da53533de8366bbd2e0c854721a204f03906dc82fde10f48", - "1c925d9052849edddcf04d5f1f0d4ff183a66b66eb820f59b675aee121cfc63c", - "07d7c41b02158a9c5eac212ed6d7c2cddeb8e38baea6e93e1a00b2e83e2a0995" - ] - }, - "A_bar": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7", - "B_bar": "b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0", - "D": "b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af3", - "T1": "8b497dd4dcdcf7eb58c9b43e57e06bcea3468a223ae2fc015d7a86506a952d68055e73f5a5847e58f133ea154256d0da", - "T2": "8655584d3da1313f881f48c239384a5623d2d292f08dae7ac1d8129c19a02a89b82fa45de3f6c2c439510fce5919656f", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b", - "challenge": "1bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof008.json b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof008.json index af4916af..9fc6872e 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof008.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof008.json @@ -1,56 +1,18 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (extra message invalid message un-revealed in proof)", "signerPublicKey": "92d37d1d6cd38fea3a873953333eab23a4c0377e3e049974eb62bd45949cdeb18fb0490edcd4429adff56e65cbce42cf188b31bddbd619e419b99c2c41b38179eb001963bc3decaae0d9f702c7a8c004f207f46c734a5eae2e8e82833f3e7ea5", - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "", - "96012096" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6, - 9 - ], - "proof": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af356dd39bf8bcbfd41bf95d913f4c9b2979e1ed2ca10ac7e881bb6a271722549681e398d29e9ba4eac8848b168eddd5e4acec7df4103e2ed165e6e32edc80f0a3b28c36fb39ca19b4b8acee570deadba2da9ec20d1f236b571e0d4c2ea3b826fe924175ed4dfffbf18a9cfa98546c241efb9164c444d970e8c89849bc8601e96cf228fdefe38ab3b7e289cac859e68d9cbb0e648faf692b27df5ff6539c30da17e5444a65143de02ca64cee7b0823be65865cdc310be038ec6b594b99280072ae067bad1117b0ff3201a5506a8533b925c7ffae9cdb64558857db0ac5f5e0f18e750ae77ec9cf35263474fef3f78138c7a1ef5cfbc878975458239824fad3ce05326ba3969b1f5451bd82bd1f8075f3d32ece2d61d89a064ab4804c3c892d651d11bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af", + "9": "96012096" + }, + "proof": "ac0424b2a984c55d0061aa61df105f2c882d393494f3f4205d1e73f93c9c76b30664baeb3dc87f23fbf4035fb0a8e76b851dd39cecce8843e747ccf540f0850a30e1317f8897a56c2d85bfc1e0b4dba1b0e0322d89aad4feb8b21c414a384a0128d65da028243bdab954c1d6b4f3874ccafe69bb0900c0b8528d56dd9bd1d78b0c328022210ff9fe95276f79d23278956a0898d974932bd90e6c79f7e970de6b637c7e6326540699080d39bd076a50095e031e980e68068e3e34a982ff4678c656db3c3b49df591ade6db848d7c2ddadf7e7d1db858848a948f858f7fd59068c6b816607e5abd4f039bf2d1904fd7f89a1917023a1fc4862dbe8848041da2e36271d76ad8b5e357ea3fd71ebc3617427a064256febf122773528023e4df1d25900dc1ab19a563587c74a82495c59115263c51dcea106baa5f7f82c0b50e7756370f0470cb4630d2a188309f28e1e0582c47a9ec76f864363835812984432a5253f079b3ede1b244a809807ae2088deff841b93d0bca442e346b33d6b8aff8961", "result": { "valid": false, "reason": "extra message invalid message un-revealed in proof" - }, - "trace": { - "random_scalars": { - "r1": "5ee9426ae206e3a127eb53c79044bc9ed1b71354f8354b01bf410a02220be7d0", - "r2": "280d4fcc38376193ffc777b68459ed7ba897e2857f938581acf95ae5a68988f3", - "e_tilde": "39966b00042fc43906297d692ebb41de08e36aada8d9504d4e0ae02ad59e9230", - "r1_tilde": "61f5c273999b0b50be8f84d2380eb9220fc5a88afe144efc4007545f0ab9c089", - "r3_tilde": "63af117e0c8b7d2f1f3e375fcf5d9430e136ff0f7e879423e49dadc401a50089", - "m_tilde_scalars": [ - "020b83ca2ab319cba0744d6d58da75ac3dfb6ba682bfce2587c5a6d86a4e4e7b", - "5bf565343611c08f83e4420e8b1577ace8cc4df5d5303aeb3c4e425f1080f836", - "049d77949af1192534da28975f76d4f211315dce1e36f93ffcf2a555de516b28", - "407e5a952f145de7da53533de8366bbd2e0c854721a204f03906dc82fde10f48", - "1c925d9052849edddcf04d5f1f0d4ff183a66b66eb820f59b675aee121cfc63c", - "07d7c41b02158a9c5eac212ed6d7c2cddeb8e38baea6e93e1a00b2e83e2a0995" - ] - }, - "A_bar": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7", - "B_bar": "b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0", - "D": "b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af3", - "T1": "8b497dd4dcdcf7eb58c9b43e57e06bcea3468a223ae2fc015d7a86506a952d68055e73f5a5847e58f133ea154256d0da", - "T2": "8655584d3da1313f881f48c239384a5623d2d292f08dae7ac1d8129c19a02a89b82fa45de3f6c2c439510fce5919656f", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b", - "challenge": "1bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof009.json b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof009.json index 3e33a959..801cd41b 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof009.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof009.json @@ -1,52 +1,16 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (missing message revealed in proof)", "signerPublicKey": "92d37d1d6cd38fea3a873953333eab23a4c0377e3e049974eb62bd45949cdeb18fb0490edcd4429adff56e65cbce42cf188b31bddbd619e419b99c2c41b38179eb001963bc3decaae0d9f702c7a8c004f207f46c734a5eae2e8e82833f3e7ea5", - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 6 - ], - "proof": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af356dd39bf8bcbfd41bf95d913f4c9b2979e1ed2ca10ac7e881bb6a271722549681e398d29e9ba4eac8848b168eddd5e4acec7df4103e2ed165e6e32edc80f0a3b28c36fb39ca19b4b8acee570deadba2da9ec20d1f236b571e0d4c2ea3b826fe924175ed4dfffbf18a9cfa98546c241efb9164c444d970e8c89849bc8601e96cf228fdefe38ab3b7e289cac859e68d9cbb0e648faf692b27df5ff6539c30da17e5444a65143de02ca64cee7b0823be65865cdc310be038ec6b594b99280072ae067bad1117b0ff3201a5506a8533b925c7ffae9cdb64558857db0ac5f5e0f18e750ae77ec9cf35263474fef3f78138c7a1ef5cfbc878975458239824fad3ce05326ba3969b1f5451bd82bd1f8075f3d32ece2d61d89a064ab4804c3c892d651d11bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "6": "d183ddc6e2665aa4e2f088af" + }, + "proof": "ac0424b2a984c55d0061aa61df105f2c882d393494f3f4205d1e73f93c9c76b30664baeb3dc87f23fbf4035fb0a8e76b851dd39cecce8843e747ccf540f0850a30e1317f8897a56c2d85bfc1e0b4dba1b0e0322d89aad4feb8b21c414a384a0128d65da028243bdab954c1d6b4f3874ccafe69bb0900c0b8528d56dd9bd1d78b0c328022210ff9fe95276f79d23278956a0898d974932bd90e6c79f7e970de6b637c7e6326540699080d39bd076a50095e031e980e68068e3e34a982ff4678c656db3c3b49df591ade6db848d7c2ddadf7e7d1db858848a948f858f7fd59068c6b816607e5abd4f039bf2d1904fd7f89a1917023a1fc4862dbe8848041da2e36271d76ad8b5e357ea3fd71ebc3617427a064256febf122773528023e4df1d25900dc1ab19a563587c74a82495c59115263c51dcea106baa5f7f82c0b50e7756370f0470cb4630d2a188309f28e1e0582c47a9ec76f864363835812984432a5253f079b3ede1b244a809807ae2088deff841b93d0bca442e346b33d6b8aff8961", "result": { "valid": false, "reason": "missing message revealed in proof" - }, - "trace": { - "random_scalars": { - "r1": "5ee9426ae206e3a127eb53c79044bc9ed1b71354f8354b01bf410a02220be7d0", - "r2": "280d4fcc38376193ffc777b68459ed7ba897e2857f938581acf95ae5a68988f3", - "e_tilde": "39966b00042fc43906297d692ebb41de08e36aada8d9504d4e0ae02ad59e9230", - "r1_tilde": "61f5c273999b0b50be8f84d2380eb9220fc5a88afe144efc4007545f0ab9c089", - "r3_tilde": "63af117e0c8b7d2f1f3e375fcf5d9430e136ff0f7e879423e49dadc401a50089", - "m_tilde_scalars": [ - "020b83ca2ab319cba0744d6d58da75ac3dfb6ba682bfce2587c5a6d86a4e4e7b", - "5bf565343611c08f83e4420e8b1577ace8cc4df5d5303aeb3c4e425f1080f836", - "049d77949af1192534da28975f76d4f211315dce1e36f93ffcf2a555de516b28", - "407e5a952f145de7da53533de8366bbd2e0c854721a204f03906dc82fde10f48", - "1c925d9052849edddcf04d5f1f0d4ff183a66b66eb820f59b675aee121cfc63c", - "07d7c41b02158a9c5eac212ed6d7c2cddeb8e38baea6e93e1a00b2e83e2a0995" - ] - }, - "A_bar": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7", - "B_bar": "b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0", - "D": "b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af3", - "T1": "8b497dd4dcdcf7eb58c9b43e57e06bcea3468a223ae2fc015d7a86506a952d68055e73f5a5847e58f133ea154256d0da", - "T2": "8655584d3da1313f881f48c239384a5623d2d292f08dae7ac1d8129c19a02a89b82fa45de3f6c2c439510fce5919656f", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b", - "challenge": "1bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof010.json b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof010.json index 96499aba..e95f5209 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof010.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof010.json @@ -1,54 +1,17 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (re-ordered messages)", "signerPublicKey": "92d37d1d6cd38fea3a873953333eab23a4c0377e3e049974eb62bd45949cdeb18fb0490edcd4429adff56e65cbce42cf188b31bddbd619e419b99c2c41b38179eb001963bc3decaae0d9f702c7a8c004f207f46c734a5eae2e8e82833f3e7ea5", - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 4, - 2, - 4, - 6 - ], - "proof": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af356dd39bf8bcbfd41bf95d913f4c9b2979e1ed2ca10ac7e881bb6a271722549681e398d29e9ba4eac8848b168eddd5e4acec7df4103e2ed165e6e32edc80f0a3b28c36fb39ca19b4b8acee570deadba2da9ec20d1f236b571e0d4c2ea3b826fe924175ed4dfffbf18a9cfa98546c241efb9164c444d970e8c89849bc8601e96cf228fdefe38ab3b7e289cac859e68d9cbb0e648faf692b27df5ff6539c30da17e5444a65143de02ca64cee7b0823be65865cdc310be038ec6b594b99280072ae067bad1117b0ff3201a5506a8533b925c7ffae9cdb64558857db0ac5f5e0f18e750ae77ec9cf35263474fef3f78138c7a1ef5cfbc878975458239824fad3ce05326ba3969b1f5451bd82bd1f8075f3d32ece2d61d89a064ab4804c3c892d651d11bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "d183ddc6e2665aa4e2f088af", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73" + }, + "proof": "ac0424b2a984c55d0061aa61df105f2c882d393494f3f4205d1e73f93c9c76b30664baeb3dc87f23fbf4035fb0a8e76b851dd39cecce8843e747ccf540f0850a30e1317f8897a56c2d85bfc1e0b4dba1b0e0322d89aad4feb8b21c414a384a0128d65da028243bdab954c1d6b4f3874ccafe69bb0900c0b8528d56dd9bd1d78b0c328022210ff9fe95276f79d23278956a0898d974932bd90e6c79f7e970de6b637c7e6326540699080d39bd076a50095e031e980e68068e3e34a982ff4678c656db3c3b49df591ade6db848d7c2ddadf7e7d1db858848a948f858f7fd59068c6b816607e5abd4f039bf2d1904fd7f89a1917023a1fc4862dbe8848041da2e36271d76ad8b5e357ea3fd71ebc3617427a064256febf122773528023e4df1d25900dc1ab19a563587c74a82495c59115263c51dcea106baa5f7f82c0b50e7756370f0470cb4630d2a188309f28e1e0582c47a9ec76f864363835812984432a5253f079b3ede1b244a809807ae2088deff841b93d0bca442e346b33d6b8aff8961", "result": { "valid": false, "reason": "re-ordered messages" - }, - "trace": { - "random_scalars": { - "r1": "5ee9426ae206e3a127eb53c79044bc9ed1b71354f8354b01bf410a02220be7d0", - "r2": "280d4fcc38376193ffc777b68459ed7ba897e2857f938581acf95ae5a68988f3", - "e_tilde": "39966b00042fc43906297d692ebb41de08e36aada8d9504d4e0ae02ad59e9230", - "r1_tilde": "61f5c273999b0b50be8f84d2380eb9220fc5a88afe144efc4007545f0ab9c089", - "r3_tilde": "63af117e0c8b7d2f1f3e375fcf5d9430e136ff0f7e879423e49dadc401a50089", - "m_tilde_scalars": [ - "020b83ca2ab319cba0744d6d58da75ac3dfb6ba682bfce2587c5a6d86a4e4e7b", - "5bf565343611c08f83e4420e8b1577ace8cc4df5d5303aeb3c4e425f1080f836", - "049d77949af1192534da28975f76d4f211315dce1e36f93ffcf2a555de516b28", - "407e5a952f145de7da53533de8366bbd2e0c854721a204f03906dc82fde10f48", - "1c925d9052849edddcf04d5f1f0d4ff183a66b66eb820f59b675aee121cfc63c", - "07d7c41b02158a9c5eac212ed6d7c2cddeb8e38baea6e93e1a00b2e83e2a0995" - ] - }, - "A_bar": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7", - "B_bar": "b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0", - "D": "b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af3", - "T1": "8b497dd4dcdcf7eb58c9b43e57e06bcea3468a223ae2fc015d7a86506a952d68055e73f5a5847e58f133ea154256d0da", - "T2": "8655584d3da1313f881f48c239384a5623d2d292f08dae7ac1d8129c19a02a89b82fa45de3f6c2c439510fce5919656f", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b", - "challenge": "1bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof011.json b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof011.json index dc3623ee..e472d4d2 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof011.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof011.json @@ -1,56 +1,18 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (extra valid message, modified total message count)", "signerPublicKey": "92d37d1d6cd38fea3a873953333eab23a4c0377e3e049974eb62bd45949cdeb18fb0490edcd4429adff56e65cbce42cf188b31bddbd619e419b99c2c41b38179eb001963bc3decaae0d9f702c7a8c004f207f46c734a5eae2e8e82833f3e7ea5", - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6, - 9 - ], - "proof": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af356dd39bf8bcbfd41bf95d913f4c9b2979e1ed2ca10ac7e881bb6a271722549681e398d29e9ba4eac8848b168eddd5e4acec7df4103e2ed165e6e32edc80f0a3b28c36fb39ca19b4b8acee570deadba2da9ec20d1f236b571e0d4c2ea3b826fe924175ed4dfffbf18a9cfa98546c241efb9164c444d970e8c89849bc8601e96cf228fdefe38ab3b7e289cac859e68d9cbb0e648faf692b27df5ff6539c30da17e5444a65143de02ca64cee7b0823be65865cdc310be038ec6b594b99280072ae067bad1117b0ff3201a5506a8533b925c7ffae9cdb64558857db0ac5f5e0f18e750ae77ec9cf35263474fef3f78138c7a1ef5cfbc878975458239824fad3ce05326ba3969b1f5451bd82bd1f8075f3d32ece2d61d89a064ab4804c3c892d651d11bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af", + "9": "" + }, + "proof": "ac0424b2a984c55d0061aa61df105f2c882d393494f3f4205d1e73f93c9c76b30664baeb3dc87f23fbf4035fb0a8e76b851dd39cecce8843e747ccf540f0850a30e1317f8897a56c2d85bfc1e0b4dba1b0e0322d89aad4feb8b21c414a384a0128d65da028243bdab954c1d6b4f3874ccafe69bb0900c0b8528d56dd9bd1d78b0c328022210ff9fe95276f79d23278956a0898d974932bd90e6c79f7e970de6b637c7e6326540699080d39bd076a50095e031e980e68068e3e34a982ff4678c656db3c3b49df591ade6db848d7c2ddadf7e7d1db858848a948f858f7fd59068c6b816607e5abd4f039bf2d1904fd7f89a1917023a1fc4862dbe8848041da2e36271d76ad8b5e357ea3fd71ebc3617427a064256febf122773528023e4df1d25900dc1ab19a563587c74a82495c59115263c51dcea106baa5f7f82c0b50e7756370f0470cb4630d2a188309f28e1e0582c47a9ec76f864363835812984432a5253f079b3ede1b244a809807ae2088deff841b93d0bca442e346b33d6b8aff8961", "result": { "valid": false, "reason": "extra valid message, modified total message count" - }, - "trace": { - "random_scalars": { - "r1": "5ee9426ae206e3a127eb53c79044bc9ed1b71354f8354b01bf410a02220be7d0", - "r2": "280d4fcc38376193ffc777b68459ed7ba897e2857f938581acf95ae5a68988f3", - "e_tilde": "39966b00042fc43906297d692ebb41de08e36aada8d9504d4e0ae02ad59e9230", - "r1_tilde": "61f5c273999b0b50be8f84d2380eb9220fc5a88afe144efc4007545f0ab9c089", - "r3_tilde": "63af117e0c8b7d2f1f3e375fcf5d9430e136ff0f7e879423e49dadc401a50089", - "m_tilde_scalars": [ - "020b83ca2ab319cba0744d6d58da75ac3dfb6ba682bfce2587c5a6d86a4e4e7b", - "5bf565343611c08f83e4420e8b1577ace8cc4df5d5303aeb3c4e425f1080f836", - "049d77949af1192534da28975f76d4f211315dce1e36f93ffcf2a555de516b28", - "407e5a952f145de7da53533de8366bbd2e0c854721a204f03906dc82fde10f48", - "1c925d9052849edddcf04d5f1f0d4ff183a66b66eb820f59b675aee121cfc63c", - "07d7c41b02158a9c5eac212ed6d7c2cddeb8e38baea6e93e1a00b2e83e2a0995" - ] - }, - "A_bar": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7", - "B_bar": "b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0", - "D": "b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af3", - "T1": "8b497dd4dcdcf7eb58c9b43e57e06bcea3468a223ae2fc015d7a86506a952d68055e73f5a5847e58f133ea154256d0da", - "T2": "8655584d3da1313f881f48c239384a5623d2d292f08dae7ac1d8129c19a02a89b82fa45de3f6c2c439510fce5919656f", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b", - "challenge": "1bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof012.json b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof012.json index 996f597d..d6338a8a 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof012.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof012.json @@ -1,54 +1,17 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (truncated proof, one less undisclosed message)", "signerPublicKey": "92d37d1d6cd38fea3a873953333eab23a4c0377e3e049974eb62bd45949cdeb18fb0490edcd4429adff56e65cbce42cf188b31bddbd619e419b99c2c41b38179eb001963bc3decaae0d9f702c7a8c004f207f46c734a5eae2e8e82833f3e7ea5", - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6 - ], - "proof": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af356dd39bf8bcbfd41bf95d913f4c9b2979e1ed2ca10ac7e881bb6a271722549681e398d29e9ba4eac8848b168eddd5e4acec7df4103e2ed165e6e32edc80f0a3b28c36fb39ca19b4b8acee570deadba2da9ec20d1f236b571e0d4c2ea3b826fe924175ed4dfffbf18a9cfa98546c241efb9164c444d970e8c89849bc8601e96cf228fdefe38ab3b7e289cac859e68d9cbb0e648faf692b27df5ff6539c30da17e5444a65143de02ca64cee7b0823be65865cdc310be038ec6b594b99280072ae067bad1117b0ff3201a5506a8533b925c7ffae9cdb64558857db0ac5f5e0f18e750ae77ec9cf35263474fef3f78138c7a1ef5cfbc878975458239824fad3ce05326ba3969b1f5451bd82bd1f8075f3d32ece2d61d89a064ab4804c3c892d651d1", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af" + }, + "proof": "ac0424b2a984c55d0061aa61df105f2c882d393494f3f4205d1e73f93c9c76b30664baeb3dc87f23fbf4035fb0a8e76b851dd39cecce8843e747ccf540f0850a30e1317f8897a56c2d85bfc1e0b4dba1b0e0322d89aad4feb8b21c414a384a0128d65da028243bdab954c1d6b4f3874ccafe69bb0900c0b8528d56dd9bd1d78b0c328022210ff9fe95276f79d23278956a0898d974932bd90e6c79f7e970de6b637c7e6326540699080d39bd076a50095e031e980e68068e3e34a982ff4678c656db3c3b49df591ade6db848d7c2ddadf7e7d1db858848a948f858f7fd59068c6b816607e5abd4f039bf2d1904fd7f89a1917023a1fc4862dbe8848041da2e36271d76ad8b5e357ea3fd71ebc3617427a064256febf122773528023e4df1d25900dc1ab19a563587c74a82495c59115263c51dcea106baa5f7f82c0b50e7756370f0470cb4630d2a188309f28e1e0582c47a9ec76f864363835812984432a525", "result": { "valid": false, "reason": "truncated proof, one less undisclosed message" - }, - "trace": { - "random_scalars": { - "r1": "5ee9426ae206e3a127eb53c79044bc9ed1b71354f8354b01bf410a02220be7d0", - "r2": "280d4fcc38376193ffc777b68459ed7ba897e2857f938581acf95ae5a68988f3", - "e_tilde": "39966b00042fc43906297d692ebb41de08e36aada8d9504d4e0ae02ad59e9230", - "r1_tilde": "61f5c273999b0b50be8f84d2380eb9220fc5a88afe144efc4007545f0ab9c089", - "r3_tilde": "63af117e0c8b7d2f1f3e375fcf5d9430e136ff0f7e879423e49dadc401a50089", - "m_tilde_scalars": [ - "020b83ca2ab319cba0744d6d58da75ac3dfb6ba682bfce2587c5a6d86a4e4e7b", - "5bf565343611c08f83e4420e8b1577ace8cc4df5d5303aeb3c4e425f1080f836", - "049d77949af1192534da28975f76d4f211315dce1e36f93ffcf2a555de516b28", - "407e5a952f145de7da53533de8366bbd2e0c854721a204f03906dc82fde10f48", - "1c925d9052849edddcf04d5f1f0d4ff183a66b66eb820f59b675aee121cfc63c", - "07d7c41b02158a9c5eac212ed6d7c2cddeb8e38baea6e93e1a00b2e83e2a0995" - ] - }, - "A_bar": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7", - "B_bar": "b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0", - "D": "b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af3", - "T1": "8b497dd4dcdcf7eb58c9b43e57e06bcea3468a223ae2fc015d7a86506a952d68055e73f5a5847e58f133ea154256d0da", - "T2": "8655584d3da1313f881f48c239384a5623d2d292f08dae7ac1d8129c19a02a89b82fa45de3f6c2c439510fce5919656f", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b", - "challenge": "1bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof013.json b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof013.json index 4e310e62..2f44c042 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof013.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof013.json @@ -1,54 +1,17 @@ { "caseName": "invalid multi-message signature, all messages revealed proof (different header)", "signerPublicKey": "92d37d1d6cd38fea3a873953333eab23a4c0377e3e049974eb62bd45949cdeb18fb0490edcd4429adff56e65cbce42cf188b31bddbd619e419b99c2c41b38179eb001963bc3decaae0d9f702c7a8c004f207f46c734a5eae2e8e82833f3e7ea5", - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", "header": "ffeeddccbbaa00998877665544332211", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6 - ], - "proof": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af356dd39bf8bcbfd41bf95d913f4c9b2979e1ed2ca10ac7e881bb6a271722549681e398d29e9ba4eac8848b168eddd5e4acec7df4103e2ed165e6e32edc80f0a3b28c36fb39ca19b4b8acee570deadba2da9ec20d1f236b571e0d4c2ea3b826fe924175ed4dfffbf18a9cfa98546c241efb9164c444d970e8c89849bc8601e96cf228fdefe38ab3b7e289cac859e68d9cbb0e648faf692b27df5ff6539c30da17e5444a65143de02ca64cee7b0823be65865cdc310be038ec6b594b99280072ae067bad1117b0ff3201a5506a8533b925c7ffae9cdb64558857db0ac5f5e0f18e750ae77ec9cf35263474fef3f78138c7a1ef5cfbc878975458239824fad3ce05326ba3969b1f5451bd82bd1f8075f3d32ece2d61d89a064ab4804c3c892d651d11bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af" + }, + "proof": "ac0424b2a984c55d0061aa61df105f2c882d393494f3f4205d1e73f93c9c76b30664baeb3dc87f23fbf4035fb0a8e76b851dd39cecce8843e747ccf540f0850a30e1317f8897a56c2d85bfc1e0b4dba1b0e0322d89aad4feb8b21c414a384a0128d65da028243bdab954c1d6b4f3874ccafe69bb0900c0b8528d56dd9bd1d78b0c328022210ff9fe95276f79d23278956a0898d974932bd90e6c79f7e970de6b637c7e6326540699080d39bd076a50095e031e980e68068e3e34a982ff4678c656db3c3b49df591ade6db848d7c2ddadf7e7d1db858848a948f858f7fd59068c6b816607e5abd4f039bf2d1904fd7f89a1917023a1fc4862dbe8848041da2e36271d76ad8b5e357ea3fd71ebc3617427a064256febf122773528023e4df1d25900dc1ab19a563587c74a82495c59115263c51dcea106baa5f7f82c0b50e7756370f0470cb4630d2a188309f28e1e0582c47a9ec76f864363835812984432a5253f079b3ede1b244a809807ae2088deff841b93d0bca442e346b33d6b8aff8961", "result": { "valid": false, "reason": "different header" - }, - "trace": { - "random_scalars": { - "r1": "5ee9426ae206e3a127eb53c79044bc9ed1b71354f8354b01bf410a02220be7d0", - "r2": "280d4fcc38376193ffc777b68459ed7ba897e2857f938581acf95ae5a68988f3", - "e_tilde": "39966b00042fc43906297d692ebb41de08e36aada8d9504d4e0ae02ad59e9230", - "r1_tilde": "61f5c273999b0b50be8f84d2380eb9220fc5a88afe144efc4007545f0ab9c089", - "r3_tilde": "63af117e0c8b7d2f1f3e375fcf5d9430e136ff0f7e879423e49dadc401a50089", - "m_tilde_scalars": [ - "020b83ca2ab319cba0744d6d58da75ac3dfb6ba682bfce2587c5a6d86a4e4e7b", - "5bf565343611c08f83e4420e8b1577ace8cc4df5d5303aeb3c4e425f1080f836", - "049d77949af1192534da28975f76d4f211315dce1e36f93ffcf2a555de516b28", - "407e5a952f145de7da53533de8366bbd2e0c854721a204f03906dc82fde10f48", - "1c925d9052849edddcf04d5f1f0d4ff183a66b66eb820f59b675aee121cfc63c", - "07d7c41b02158a9c5eac212ed6d7c2cddeb8e38baea6e93e1a00b2e83e2a0995" - ] - }, - "A_bar": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7", - "B_bar": "b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0", - "D": "b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af3", - "T1": "8b497dd4dcdcf7eb58c9b43e57e06bcea3468a223ae2fc015d7a86506a952d68055e73f5a5847e58f133ea154256d0da", - "T2": "8655584d3da1313f881f48c239384a5623d2d292f08dae7ac1d8129c19a02a89b82fa45de3f6c2c439510fce5919656f", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b", - "challenge": "1bc325464a71cd7aacc2d956a811aaff13ea4c35cef7842b656e8ba4758e7558" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof014.json b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof014.json index 8a636f9e..9fcf7362 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof014.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof014.json @@ -1,53 +1,16 @@ { "caseName": "valid multi-message signature, multiple messages revealed proof, no header", "signerPublicKey": "92d37d1d6cd38fea3a873953333eab23a4c0377e3e049974eb62bd45949cdeb18fb0490edcd4429adff56e65cbce42cf188b31bddbd619e419b99c2c41b38179eb001963bc3decaae0d9f702c7a8c004f207f46c734a5eae2e8e82833f3e7ea5", - "signature": "88beeb970f803160d3058eacde505207c576a8c9e4e5dc7c5249cbcf2a046c15f8df047031eef3436e04b779d92a9cdb1fe4c6cc035ba1634f1740f9dd49816d3ca745ecbe39f655ea61fb700137fded", "header": "", "presentationHeader": "bed231d880675ed101ead304512e043ade9958dd0241ea70b4b3957fba941501", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6 - ], - "proof": "8ac336eea1d278656372d9914483c3d3b3069dfa4a7862293ac021dfeeebca93cadd7eb2b818f7b89719cdeffa5aa85989a7d691be11b1929a2bf089bfe9f2adc2c06788edc30585546efb74877f34ad91f0d6923b4ed7a53c49051dda8d056a95644ee738810772d90c1033f1dfe45c0b1b453d131170aafa8a99f812f3b90a5d1d9e6bd05a4dee6a50dd277ffc646f2429372f3ad9d5946ffeb53f24d41ffcc83c32cbb68afc9b6e0b64eebd24c69c6a7bd3bca8a6394ed8ae315abd555a6996f34d9da7680447947b3f35f54c38b562e990ee4d17a21569af4fc02f2991e6db78cc32d3ef9f6069fc5c2d47c8d8ff116dfb8a59641641961b854427f67649df14ab6e63f2d0d2a0cba2b2e1e835d20cd45e41f274532e9d50f31a690e5fef1c1456b65c668b80d8ec17b09bd5fb3b2c4edd6d6f5f790a5d6da22eb9a1aa2196d1a607f3c753813ba2bc6ece15d35263218fc7667c5f0fabfffe74745a8000e0415c8dafd5654ce6850ac2c6485d02433fdaebd9993f8b86a2eebb3beb10b4cc7735330384a3f4dfd4d5b21998ad0227b37e736cf9c144a0386f28cccf27a01e50aab45dda8275eb877728e77d2055309dba8c6604e7cff0d2c46ce6026b8e232c192955f909da6e47c2130c7e3f4f", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af" + }, + "proof": "ae46046037ed58bfa5771c603895b26b42748a3071a1dc9f8a272a4bc030bc3cda7cfa8686a6dc8382d728ad96e8d8ceb6ad6b76b99242514e520c43dd7d1a0728ce709d977c4dd200874e4acffa5b4cc0cbbd37c00d979d8688c636770cc8b428ea9f05ed60cd85fdbd4c2fd73092e8bfc167c244d6e285ace1deade4fe8ce74fe2993a041e84004fe7d3dd170db765f7811a91043c4e75e9231804d577bfa533ec7a44bb6e49eb85089d8df1dc1acfb00ea0c7bdce5609595099e3cf7559c1715df6ec6982c5d9fffd317955ec3387a9055de28691e399b5af14722ae044a506d622e0e6ff0de8d1e4d4f3e9e5fdb01c4dbab02826ac38cb40eb80afe7b9d661dc27c94b146fedea19353b70310714932674c1f4bc1edc2c17605749e0bbb60a77ac62a606d31081ff5a52e1485be257b2c0afa4b676438b0eaa0bd483c66828bc66032b91fbe8a309408e595e085a1b55e2dd12789e6f522ef5682ac46deb628e03e4eb0303af7162f36a119313c3396fe6bca6082238fe396e8c08e607c4", "result": { "valid": true - }, - "trace": { - "random_scalars": { - "r1": "5ee9426ae206e3a127eb53c79044bc9ed1b71354f8354b01bf410a02220be7d0", - "r2": "280d4fcc38376193ffc777b68459ed7ba897e2857f938581acf95ae5a68988f3", - "e_tilde": "39966b00042fc43906297d692ebb41de08e36aada8d9504d4e0ae02ad59e9230", - "r1_tilde": "61f5c273999b0b50be8f84d2380eb9220fc5a88afe144efc4007545f0ab9c089", - "r3_tilde": "63af117e0c8b7d2f1f3e375fcf5d9430e136ff0f7e879423e49dadc401a50089", - "m_tilde_scalars": [ - "020b83ca2ab319cba0744d6d58da75ac3dfb6ba682bfce2587c5a6d86a4e4e7b", - "5bf565343611c08f83e4420e8b1577ace8cc4df5d5303aeb3c4e425f1080f836", - "049d77949af1192534da28975f76d4f211315dce1e36f93ffcf2a555de516b28", - "407e5a952f145de7da53533de8366bbd2e0c854721a204f03906dc82fde10f48", - "1c925d9052849edddcf04d5f1f0d4ff183a66b66eb820f59b675aee121cfc63c", - "07d7c41b02158a9c5eac212ed6d7c2cddeb8e38baea6e93e1a00b2e83e2a0995" - ] - }, - "A_bar": "8ac336eea1d278656372d9914483c3d3b3069dfa4a7862293ac021dfeeebca93cadd7eb2b818f7b89719cdeffa5aa859", - "B_bar": "89a7d691be11b1929a2bf089bfe9f2adc2c06788edc30585546efb74877f34ad91f0d6923b4ed7a53c49051dda8d056a", - "D": "95644ee738810772d90c1033f1dfe45c0b1b453d131170aafa8a99f812f3b90a5d1d9e6bd05a4dee6a50dd277ffc646f", - "T1": "a5405cc2c5965dda18714ab35f4d4a7ae4024f388fa7a5ba71202d4455b50b316ec37b360659e3012234562fa8989980", - "T2": "9827a40454cdc90a70e9c927f097019dbdd84768babb10ebcb460c2d918e1ce1c0512bf2cc49ed7ec476dfcde7a6a10c", - "domain": "333d8686761cff65a3a2ef20bfa217d37bdf19105e87c210e9ce64ea1210a157", - "challenge": "309dba8c6604e7cff0d2c46ce6026b8e232c192955f909da6e47c2130c7e3f4f" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof015.json b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof015.json index 73e5a662..09f3eeae 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/proof/proof015.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/proof/proof015.json @@ -1,53 +1,16 @@ { "caseName": "valid multi-message signature, multiple messages revealed proof, no presentation header", "signerPublicKey": "92d37d1d6cd38fea3a873953333eab23a4c0377e3e049974eb62bd45949cdeb18fb0490edcd4429adff56e65cbce42cf188b31bddbd619e419b99c2c41b38179eb001963bc3decaae0d9f702c7a8c004f207f46c734a5eae2e8e82833f3e7ea5", - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", "header": "11223344556677889900aabbccddeeff", "presentationHeader": "", - "messages": [ - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", - "496694774c5604ab1b2544eababcf0f53278ff50", - "515ae153e22aae04ad16f759e07237b4", - "d183ddc6e2665aa4e2f088af", - "ac55fb33a75909ed", - "96012096", - "" - ], - "disclosedIndexes": [ - 0, - 2, - 4, - 6 - ], - "proof": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af33fda9e14ba4cc0fcad8015bce3fecc4704799bef9924ab19688fc04f760c4da35017072a3e295788eff1b0dc2311bb199c186f86ea0540379d5a2ac8b7bd02d22487f2acc0e299115e16097b970badea802752a6fcb56cfbbcc2569916a8d3fe6d2d0fb1ae801cfc5ce056699adf23e3cd16b1fdf197deac099ab093da049a5b4451d038c71b7cc69e8390967594f6777a855c7f5d301f0f0573211ac85e2e165ea196f78c33f54092645a51341b777f0f5342301991f3da276c04b0224f7308090ae0b290d428a0570a71605a27977e7daf01d42dfbdcec252686c3060a73d81f6e151e23e3df2473b322da389f15a55cb2cd8a2bf29ef0d83d4876117735465fae956d8df56ec9eb0e4748ad3ef5587797368c51a0ccd67eb6da38602a1c2d4fd411214efc6932334ba0bcbf562626e7c0e1ae0db912c28d99f194fa3cd3a2", + "revealedMessages": { + "0": "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", + "2": "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", + "4": "496694774c5604ab1b2544eababcf0f53278ff50", + "6": "d183ddc6e2665aa4e2f088af" + }, + "proof": "ac0424b2a984c55d0061aa61df105f2c882d393494f3f4205d1e73f93c9c76b30664baeb3dc87f23fbf4035fb0a8e76b851dd39cecce8843e747ccf540f0850a30e1317f8897a56c2d85bfc1e0b4dba1b0e0322d89aad4feb8b21c414a384a015238f4643b9d075bc6638ec42d0e285f73c6ca9830be2a5bb48955ddb094751026493147def3cfe2a37bbd89a4536bdff6548d891d5206ac6b69c22c6fa8624512caeb80c56dbd79b7a4c8050bc9e782232f9594087561b10d7f4b0bef708458096637a34962399e918d5adb496faf7c38ded94fe79c3bfdc53c81f0dcb0da3f1bed0dbfdb6f0310d71d50a63b265e1992dd7d12315bf11da69a8897d8e33be36f116d58eff998f80e23ad0aad544e93615a5f10f169a3aed7c4d6266191a21412f4f4d8eb5096a05243b809c4c53a8d237817dfa15a403d8943b968d1216c753fb988fbcfe9280232c25cac1570873a66d3f4a7e713fb19723f5b99338f053f08fae9f905b10e0526451968e25569e3779f642a4d2b6bcc1e00be28e2711d1a", "result": { "valid": true - }, - "trace": { - "random_scalars": { - "r1": "5ee9426ae206e3a127eb53c79044bc9ed1b71354f8354b01bf410a02220be7d0", - "r2": "280d4fcc38376193ffc777b68459ed7ba897e2857f938581acf95ae5a68988f3", - "e_tilde": "39966b00042fc43906297d692ebb41de08e36aada8d9504d4e0ae02ad59e9230", - "r1_tilde": "61f5c273999b0b50be8f84d2380eb9220fc5a88afe144efc4007545f0ab9c089", - "r3_tilde": "63af117e0c8b7d2f1f3e375fcf5d9430e136ff0f7e879423e49dadc401a50089", - "m_tilde_scalars": [ - "020b83ca2ab319cba0744d6d58da75ac3dfb6ba682bfce2587c5a6d86a4e4e7b", - "5bf565343611c08f83e4420e8b1577ace8cc4df5d5303aeb3c4e425f1080f836", - "049d77949af1192534da28975f76d4f211315dce1e36f93ffcf2a555de516b28", - "407e5a952f145de7da53533de8366bbd2e0c854721a204f03906dc82fde10f48", - "1c925d9052849edddcf04d5f1f0d4ff183a66b66eb820f59b675aee121cfc63c", - "07d7c41b02158a9c5eac212ed6d7c2cddeb8e38baea6e93e1a00b2e83e2a0995" - ] - }, - "A_bar": "b1f8bf99a11c39f04e2a032183c1ead12956ad322dd06799c50f20fb8cf6b0ac279210ef5a2920a7be3ec2aa0911ace7", - "B_bar": "b96811a98f3c1cceba4a2147ae763b3ba036f47bc21c39179f2b395e0ab1ac49017ea5b27848547bedd27be481c1dfc0", - "D": "b73372346feb94ab16189d4c525652b8d3361bab43463700720ecfb0ee75e595ea1b13330615011050a0dfcffdb21af3", - "T1": "8b497dd4dcdcf7eb58c9b43e57e06bcea3468a223ae2fc015d7a86506a952d68055e73f5a5847e58f133ea154256d0da", - "T2": "8655584d3da1313f881f48c239384a5623d2d292f08dae7ac1d8129c19a02a89b82fa45de3f6c2c439510fce5919656f", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b", - "challenge": "4fd411214efc6932334ba0bcbf562626e7c0e1ae0db912c28d99f194fa3cd3a2" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature001.json b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature001.json index 77ace19b..47532ce4 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature001.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature001.json @@ -8,12 +8,8 @@ "messages": [ "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02" ], - "signature": "b9a622a4b404e6ca4c85c15739d2124a1deb16df750be202e2430e169bc27fb71c44d98e6d40792033e1c452145ada95030832c5dc778334f2f1b528eced21b0b97a12025a283d78b7136bb9825d04ef", + "signature": "98eb37fceb31115bf647f2983aef578ad895e55f7451b1add02fa738224cb89a31b148eace4d20d001be31d162c58d12574f30e68665b6403956a83b23a16f1daceacce8c5fde25d3defd52d6d5ff2e1", "result": { "valid": true - }, - "trace": { - "B": "8bbc8c123d3f128f206dd0d2dae490e82af08b84e8d70af3dc291d32a6e98f635beefcc4533b2599804a164aabe68d7c", - "domain": "2f18dd269c11c512256a9d1d57e61a7d2de6ebcf41cac3053f37afedc4e650a9" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature002.json b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature002.json index 948574f1..d58ccd8a 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature002.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature002.json @@ -8,13 +8,9 @@ "messages": [ "" ], - "signature": "b9a622a4b404e6ca4c85c15739d2124a1deb16df750be202e2430e169bc27fb71c44d98e6d40792033e1c452145ada95030832c5dc778334f2f1b528eced21b0b97a12025a283d78b7136bb9825d04ef", + "signature": "98eb37fceb31115bf647f2983aef578ad895e55f7451b1add02fa738224cb89a31b148eace4d20d001be31d162c58d12574f30e68665b6403956a83b23a16f1daceacce8c5fde25d3defd52d6d5ff2e1", "result": { "valid": false, "reason": "modified message" - }, - "trace": { - "B": "8bbc8c123d3f128f206dd0d2dae490e82af08b84e8d70af3dc291d32a6e98f635beefcc4533b2599804a164aabe68d7c", - "domain": "2f18dd269c11c512256a9d1d57e61a7d2de6ebcf41cac3053f37afedc4e650a9" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature003.json b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature003.json index 1bb7d60d..4058b06f 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature003.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature003.json @@ -9,13 +9,9 @@ "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80" ], - "signature": "b9a622a4b404e6ca4c85c15739d2124a1deb16df750be202e2430e169bc27fb71c44d98e6d40792033e1c452145ada95030832c5dc778334f2f1b528eced21b0b97a12025a283d78b7136bb9825d04ef", + "signature": "98eb37fceb31115bf647f2983aef578ad895e55f7451b1add02fa738224cb89a31b148eace4d20d001be31d162c58d12574f30e68665b6403956a83b23a16f1daceacce8c5fde25d3defd52d6d5ff2e1", "result": { "valid": false, "reason": "extra unsigned message" - }, - "trace": { - "B": "8bbc8c123d3f128f206dd0d2dae490e82af08b84e8d70af3dc291d32a6e98f635beefcc4533b2599804a164aabe68d7c", - "domain": "2f18dd269c11c512256a9d1d57e61a7d2de6ebcf41cac3053f37afedc4e650a9" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature004.json b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature004.json index e3b3be5e..3f537c9e 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature004.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature004.json @@ -17,12 +17,8 @@ "96012096", "" ], - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", + "signature": "97a296c83ed3626fe254d26021c5e9a087b580f1e8bc91bb51efb04420bfdaca215fe376a0bc12440bcc52224fb33c696cca9239b9f28dcddb7bd850aae9cd1a9c3e9f3639953fe789dbba53b8f0dd6f", "result": { "valid": true - }, - "trace": { - "B": "ae8d4ebe248b9ad9c933d5661bfb46c56721fba2a1182ddda7e8fb443bda3c0a571ad018ad31d0b6d1f4e8b985e6c58d", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature005.json b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature005.json index f29df890..39ee7079 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature005.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature005.json @@ -9,13 +9,9 @@ "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80" ], - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", + "signature": "97a296c83ed3626fe254d26021c5e9a087b580f1e8bc91bb51efb04420bfdaca215fe376a0bc12440bcc52224fb33c696cca9239b9f28dcddb7bd850aae9cd1a9c3e9f3639953fe789dbba53b8f0dd6f", "result": { "valid": false, "reason": "missing messages" - }, - "trace": { - "B": "ae8d4ebe248b9ad9c933d5661bfb46c56721fba2a1182ddda7e8fb443bda3c0a571ad018ad31d0b6d1f4e8b985e6c58d", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature006.json b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature006.json index 02e02db0..4a3c9c2a 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature006.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature006.json @@ -17,13 +17,9 @@ "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02" ], - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", + "signature": "97a296c83ed3626fe254d26021c5e9a087b580f1e8bc91bb51efb04420bfdaca215fe376a0bc12440bcc52224fb33c696cca9239b9f28dcddb7bd850aae9cd1a9c3e9f3639953fe789dbba53b8f0dd6f", "result": { "valid": false, "reason": "re-ordered messages" - }, - "trace": { - "B": "ae8d4ebe248b9ad9c933d5661bfb46c56721fba2a1182ddda7e8fb443bda3c0a571ad018ad31d0b6d1f4e8b985e6c58d", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature007.json b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature007.json index dbb55c3b..e478c60e 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature007.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature007.json @@ -17,13 +17,9 @@ "96012096", "" ], - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", + "signature": "97a296c83ed3626fe254d26021c5e9a087b580f1e8bc91bb51efb04420bfdaca215fe376a0bc12440bcc52224fb33c696cca9239b9f28dcddb7bd850aae9cd1a9c3e9f3639953fe789dbba53b8f0dd6f", "result": { "valid": false, "reason": "wrong public key" - }, - "trace": { - "B": "ae8d4ebe248b9ad9c933d5661bfb46c56721fba2a1182ddda7e8fb443bda3c0a571ad018ad31d0b6d1f4e8b985e6c58d", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature008.json b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature008.json index b409db4f..7ed63a6c 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature008.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature008.json @@ -17,13 +17,9 @@ "96012096", "" ], - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", + "signature": "97a296c83ed3626fe254d26021c5e9a087b580f1e8bc91bb51efb04420bfdaca215fe376a0bc12440bcc52224fb33c696cca9239b9f28dcddb7bd850aae9cd1a9c3e9f3639953fe789dbba53b8f0dd6f", "result": { "valid": false, "reason": "different header" - }, - "trace": { - "B": "ae8d4ebe248b9ad9c933d5661bfb46c56721fba2a1182ddda7e8fb443bda3c0a571ad018ad31d0b6d1f4e8b985e6c58d", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature009.json b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature009.json index b472d485..4f403409 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature009.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature009.json @@ -6,24 +6,20 @@ }, "header": "11223344556677889900aabbccddeeff", "messages": [ - "496694774c5604ab1b2544eababcf0f53278ff50", + "515ae153e22aae04ad16f759e07237b4", + "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c", + "ac55fb33a75909ed", "d183ddc6e2665aa4e2f088af", + "", + "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", "96012096", + "496694774c5604ab1b2544eababcf0f53278ff50", "7372e9daa5ed31e6cd5c825eac1b855e84476a1d94932aa348e07b73", - "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80", - "ac55fb33a75909ed", - "9872ad089e452c7b6e283dfac2a80d58e8d0ff71cc4d5e310a1debdda4a45f02", - "", - "515ae153e22aae04ad16f759e07237b4", - "77fe97eb97a1ebe2e81e4e3597a3ee740a66e9ef2412472c" + "c344136d9ab02da4dd5908bbba913ae6f58c2cc844b802a6f811f5fb075f9b80" ], - "signature": "956a3427b1b8e3642e60e6a7990b67626811adeec7a0a6cb4f770cdd7c20cf08faabb913ac94d18e1e92832e924cb6e202912b624261fc6c59b0fea801547f67fb7d3253e1e2acbcf90ef59a6911931e", + "signature": "97a296c83ed3626fe254d26021c5e9a087b580f1e8bc91bb51efb04420bfdaca215fe376a0bc12440bcc52224fb33c696cca9239b9f28dcddb7bd850aae9cd1a9c3e9f3639953fe789dbba53b8f0dd6f", "result": { "valid": false, "reason": "re-ordered(randomly shuffled) messages" - }, - "trace": { - "B": "ae8d4ebe248b9ad9c933d5661bfb46c56721fba2a1182ddda7e8fb443bda3c0a571ad018ad31d0b6d1f4e8b985e6c58d", - "domain": "6f7ee8de30835599bb540d2cb4dd02fd0c6cf8246f14c9ee9a8463f7fd400f7b" } } \ No newline at end of file diff --git a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature010.json b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature010.json index c0997576..6ad9c319 100644 --- a/tests/fixtures/bbs/bls12_381_shake_256/signature/signature010.json +++ b/tests/fixtures/bbs/bls12_381_shake_256/signature/signature010.json @@ -17,12 +17,8 @@ "96012096", "" ], - "signature": "88beeb970f803160d3058eacde505207c576a8c9e4e5dc7c5249cbcf2a046c15f8df047031eef3436e04b779d92a9cdb1fe4c6cc035ba1634f1740f9dd49816d3ca745ecbe39f655ea61fb700137fded", + "signature": "abfa513cdb323e47214b7c182fb623197a0681b753f897545a73d82ee133a8ecf69db9aa09fe425df4e7687d99d779db5c66199c0dc9d2a442d331c43f56e060edc69a69ed2f13de3813b98ce6b05737", "result": { "valid": true - }, - "trace": { - "B": "8607ebc413b397c1e27ce591d1daa39f73da329018bda0f90bf996355cc28c3cdba19feeb81e35be9e1503a018e4086e", - "domain": "333d8686761cff65a3a2ef20bfa217d37bdf19105e87c210e9ce64ea1210a157" } } \ No newline at end of file diff --git a/tools/bbs-fixtures-generator/Cargo.toml b/tools/bbs-fixtures-generator/Cargo.toml index 1deec221..2970a199 100644 --- a/tools/bbs-fixtures-generator/Cargo.toml +++ b/tools/bbs-fixtures-generator/Cargo.toml @@ -14,7 +14,7 @@ path = "../../" features = ["__private_bbs_fixtures_generator_api"] [dependencies] -clap = { version = "4", features = ["derive"] } +clap = { version = "3.2.12", features = ["derive"] } serde = "1.0.139" serde_derive = "1.0.139" serde_json = "1.0.82" diff --git a/tools/bbs-fixtures-generator/src/generators/h2s.rs b/tools/bbs-fixtures-generator/src/generators/h2s.rs index 37612162..bb450d4d 100644 --- a/tools/bbs-fixtures-generator/src/generators/h2s.rs +++ b/tools/bbs-fixtures-generator/src/generators/h2s.rs @@ -1,5 +1,5 @@ use pairing_crypto::bbs::ciphersuites::{ - bls12_381::suite_constants::BBS_BLS12381G1_EXPAND_LEN, + bls12_381::BBS_BLS12381G1_EXPAND_LEN, bls12_381_g1_sha_256::{ ciphersuite_id as bls12_381_g1_sha_256_ciphersuite_id, default_hash_to_scalar_dst as bls12_381_sha_256_default_hash_to_scalar_dst, diff --git a/tools/bbs-fixtures-generator/src/generators/key_pair.rs b/tools/bbs-fixtures-generator/src/generators/key_pair.rs index 22bc2244..d4a97da4 100644 --- a/tools/bbs-fixtures-generator/src/generators/key_pair.rs +++ b/tools/bbs-fixtures-generator/src/generators/key_pair.rs @@ -84,7 +84,6 @@ macro_rules! generate_keygen_fixture { ( $keygen_fn:ident, $fixture_gen_input:ident, - $ciphersuite_id:ident, $output_dir:expr ) => { let key_pair = $keygen_fn( @@ -94,12 +93,8 @@ macro_rules! generate_keygen_fixture { .unwrap(); let fixture_scratch: FixtureKeyGen = $fixture_gen_input.clone().into(); - - let keygen_dst = [$ciphersuite_id(), b"KEYGEN_DST_".to_vec()].concat(); - let mut fixture = FixtureKeyGen { case_name: "key pair fixture".to_owned(), - key_dst: keygen_dst, key_pair, ..fixture_scratch }; @@ -112,14 +107,12 @@ pub fn generate(fixture_gen_input: &FixtureGenInput, output_dir: &Path) { generate_keygen_fixture!( sha256_bbs_key_gen_tool, fixture_gen_input, - sha256_ciphersuite_id, output_dir.join("bls12_381_sha_256") ); generate_keygen_fixture!( shake256_bbs_key_gen_tool, fixture_gen_input, - shake256_ciphersuite_id, output_dir.join("bls12_381_shake_256") ); } diff --git a/tools/bbs-fixtures-generator/src/generators/proof.rs b/tools/bbs-fixtures-generator/src/generators/proof.rs index 14de909b..875e3cbd 100644 --- a/tools/bbs-fixtures-generator/src/generators/proof.rs +++ b/tools/bbs-fixtures-generator/src/generators/proof.rs @@ -1,27 +1,26 @@ use blstrs::hash_to_curve::{ExpandMsgXmd, ExpandMsgXof}; use pairing_crypto::bbs::{ ciphersuites::{ - bls12_381::suite_constants::{ - BBS_BLS12381G1_EXPAND_LEN, - OCTET_POINT_G1_LENGTH, - OCTET_SCALAR_LENGTH, - }, + bls12_381::BBS_BLS12381G1_EXPAND_LEN, bls12_381_g1_sha_256::{ ciphersuite_id as bls12_381_sha_256_ciphersuite_id, + proof_gen_with_rng as bls12_381_sha_256_proof_gen, proof_verify as bls12_381_sha_256_proof_verify, - proof_with_rng_and_trace as bls12_381_sha_256_proof_gen, sign as bls12_381_sha_256_sign, verify as bls12_381_sha_256_verify, + POINT_G1_OCTETS_LENGTH as BLS12381_SHA256_POINT_G1_OCTETS_LENGTH, + SCALAR_OCTETS_LENGTH as BLS12381_SHA256_SCALAR_OCTETS_LENGTH, }, bls12_381_g1_shake_256::{ ciphersuite_id as bls12_381_shake_256_ciphersuite_id, + proof_gen_with_rng as bls12_381_shake_256_proof_gen, proof_verify as bls12_381_shake_256_proof_verify, - proof_with_rng_and_trace as bls12_381_shake_256_proof_gen, sign as bls12_381_shake_256_sign, verify as bls12_381_shake_256_verify, + POINT_G1_OCTETS_LENGTH as BLS12381_SHAKE256_POINT_G1_OCTETS_LENGTH, + SCALAR_OCTETS_LENGTH as BLS12381_SHAKE256_SCALAR_OCTETS_LENGTH, }, }, - types::ProofTrace, BbsProofGenRequest, BbsProofGenRevealMessageRequest, BbsProofVerifyRequest, @@ -55,7 +54,8 @@ macro_rules! generate_proof_fixture { $fixture_gen_input:ident, $output_dir:expr, $expander:ty, - ) => { + $point_g1_octets_length:ident, + $scalar_octets_length:ident) => { // Key pair let key_pair = $keygen_fn( &$fixture_gen_input.key_ikm, @@ -156,7 +156,7 @@ macro_rules! generate_proof_fixture { result, ) in fixture_data { - let (proof, disclosed_indexes, signature, trace) = proof_gen_helper!( + let (proof, disclosed_messages) = proof_gen_helper!( $sign_fn, $verify_fn, $proof_gen_fn, @@ -169,17 +169,16 @@ macro_rules! generate_proof_fixture { $ciphersuite_id, &disclosed_indices, $expander, + $point_g1_octets_length, + $scalar_octets_length ); let mut fixture = FixtureProof { case_name, header: header.clone(), - signature: signature.to_vec(), presentation_header: presentation_header.clone(), - messages: messages.clone(), - disclosed_indexes, + disclosed_messages, proof, result, - trace, ..fixture_scratch.clone() }; validate_proof_fixture!($proof_verify_fn, &fixture); @@ -193,7 +192,7 @@ macro_rules! generate_proof_fixture { // multi-message signature, multiple messages revealed proof let messages = &$fixture_gen_input.messages; let disclosed_indices = BTreeSet::::from([0, 2, 4, 6]); - let (proof, disclosed_indexes, signature, trace) = proof_gen_helper!( + let (proof, disclosed_messages) = proof_gen_helper!( $sign_fn, $verify_fn, $proof_gen_fn, @@ -206,19 +205,18 @@ macro_rules! generate_proof_fixture { $ciphersuite_id, &disclosed_indices, $expander, + $point_g1_octets_length, + $scalar_octets_length ); let fixture_negative = FixtureProof { case_name: "multi-message signature, all messages revealed proof" .to_owned(), - signature: signature.to_vec(), - messages: messages.clone(), - disclosed_indexes: disclosed_indexes.clone(), + disclosed_messages: disclosed_messages.clone(), proof: proof.clone(), result: ExpectedResult { valid: true, reason: None, }, - trace, ..fixture_scratch.clone() }; @@ -254,13 +252,12 @@ macro_rules! generate_proof_fixture { validate_proof_fixture!($proof_verify_fn, &fixture); save_test_vector(&mut fixture, &$output_dir.join("proof005.json")); - let mut modified_disclosed_messages = messages.clone(); + let mut modified_disclosed_messages = disclosed_messages.clone(); let mut buffer = [0u8; 100]; rand::thread_rng().fill_bytes(&mut buffer); - let first_disclosed_msg = disclosed_indexes.clone()[0]; - modified_disclosed_messages[first_disclosed_msg] = buffer.to_vec(); + modified_disclosed_messages[0].1 = buffer.to_vec(); let mut fixture = FixtureProof { - messages: modified_disclosed_messages, + disclosed_messages: modified_disclosed_messages, result: ExpectedResult { valid: false, reason: Some("modified messages".to_owned()), @@ -270,14 +267,10 @@ macro_rules! generate_proof_fixture { validate_proof_fixture!($proof_verify_fn, &fixture); save_test_vector(&mut fixture, &$output_dir.join("proof006.json")); - let mut invalid_disclosed_messages = messages.clone(); - let mut invalid_disclosed_indexes = disclosed_indexes.clone(); - - invalid_disclosed_messages.push(messages[9].clone()); - invalid_disclosed_indexes.push(9); + let mut invalid_disclosed_messages = disclosed_messages.clone(); + invalid_disclosed_messages.push((9, messages[9].clone())); let mut fixture = FixtureProof { - messages: invalid_disclosed_messages, - disclosed_indexes: invalid_disclosed_indexes, + disclosed_messages: invalid_disclosed_messages, result: ExpectedResult { valid: false, reason: Some("extra message un-revealed in proof".to_owned()), @@ -287,14 +280,10 @@ macro_rules! generate_proof_fixture { validate_proof_fixture!($proof_verify_fn, &fixture); save_test_vector(&mut fixture, &$output_dir.join("proof007.json")); - let mut invalid_disclosed_messages = messages.clone(); - let mut invalid_disclosed_indexes = disclosed_indexes.clone(); - - invalid_disclosed_messages.push(messages[8].clone()); - invalid_disclosed_indexes.push(9); + let mut invalid_disclosed_messages = disclosed_messages.clone(); + invalid_disclosed_messages.push((9, messages[8].clone())); let mut fixture = FixtureProof { - messages: invalid_disclosed_messages, - disclosed_indexes: invalid_disclosed_indexes, + disclosed_messages: invalid_disclosed_messages, result: ExpectedResult { valid: false, reason: Some( @@ -307,14 +296,10 @@ macro_rules! generate_proof_fixture { validate_proof_fixture!($proof_verify_fn, &fixture); save_test_vector(&mut fixture, &$output_dir.join("proof008.json")); - let mut missing_disclosed_messages = messages.clone(); - let mut missing_disclosed_indexes = disclosed_indexes.clone(); - + let mut missing_disclosed_messages = disclosed_messages.clone(); missing_disclosed_messages.remove(2); - missing_disclosed_indexes.remove(2); let mut fixture = FixtureProof { - messages: missing_disclosed_messages, - disclosed_indexes: missing_disclosed_indexes, + disclosed_messages: missing_disclosed_messages, result: ExpectedResult { valid: false, reason: Some("missing message revealed in proof".to_owned()), @@ -324,18 +309,11 @@ macro_rules! generate_proof_fixture { validate_proof_fixture!($proof_verify_fn, &fixture); save_test_vector(&mut fixture, &$output_dir.join("proof009.json")); - let mut swapped_disclosed_messages = messages.clone(); - let mut swapped_disclosed_indexes = disclosed_indexes.clone(); - - swapped_disclosed_messages[0] = messages[2].clone(); - swapped_disclosed_messages[0] = messages[2].clone(); - - swapped_disclosed_indexes[0] = disclosed_indexes[2].clone(); - swapped_disclosed_indexes[0] = disclosed_indexes[2].clone(); - + let mut swapped_disclosed_messages = disclosed_messages.clone(); + swapped_disclosed_messages[1].1 = disclosed_messages[3].1.clone(); + swapped_disclosed_messages[3].1 = disclosed_messages[1].1.clone(); let mut fixture = FixtureProof { - messages: swapped_disclosed_messages, - disclosed_indexes: swapped_disclosed_indexes, + disclosed_messages: swapped_disclosed_messages, result: ExpectedResult { valid: false, reason: Some("re-ordered messages".to_owned()), @@ -345,14 +323,10 @@ macro_rules! generate_proof_fixture { validate_proof_fixture!($proof_verify_fn, &fixture); save_test_vector(&mut fixture, &$output_dir.join("proof010.json")); - let mut extra_disclosed_messages = messages.clone(); - let mut extra_disclosed_indexes = disclosed_indexes.clone(); - - extra_disclosed_messages.push(messages[9].clone()); - extra_disclosed_indexes.push(9); + let mut extra_disclosed_messages = disclosed_messages.clone(); + extra_disclosed_messages.push((9, messages[9].clone())); let mut fixture = FixtureProof { - messages: extra_disclosed_messages, - disclosed_indexes: extra_disclosed_indexes, + disclosed_messages: extra_disclosed_messages, result: ExpectedResult { valid: false, reason: Some( @@ -409,6 +383,8 @@ macro_rules! proof_gen_helper { $ciphersuite_id:ident, $disclosed_indices:expr, $expander:ty, + $point_g1_octets_length:ident, + $scalar_octets_length:ident ) => {{ if $disclosed_indices.len() > $messages.len() { panic!("more disclosed indices than messages"); @@ -443,7 +419,6 @@ macro_rules! proof_gen_helper { let mut proof_messages: Vec> = Vec::new(); let mut disclosed_messages: Vec<(usize, Vec)> = Vec::new(); - let mut disclosed_indexes: Vec = Vec::new(); for (i, m) in $messages.iter().enumerate() { if $disclosed_indices.contains(&i) { @@ -452,7 +427,6 @@ macro_rules! proof_gen_helper { value: m.clone(), }); disclosed_messages.push((i, m.clone())); - disclosed_indexes.push(i); } else { proof_messages.push(BbsProofGenRevealMessageRequest { reveal: false, @@ -463,7 +437,7 @@ macro_rules! proof_gen_helper { // Mocked rng based on expand_message let dst = &[&$ciphersuite_id(), MOCKED_RNG_DST.as_bytes()].concat(); - let count = $messages.len() - $disclosed_indices.len() + 5; // max number of random scalar + let count = $messages.len() - $disclosed_indices.len() + 3; let mocked_rng = MockRng::<'_, $expander>::new( MOCKED_RNG_SEED.as_bytes(), dst, @@ -472,8 +446,6 @@ macro_rules! proof_gen_helper { ); // Generate the proof using the mocked rng - let mut trace = ProofTrace::default(); - let proof = $proof_gen_fn( &BbsProofGenRequest { $public_key, @@ -484,13 +456,12 @@ macro_rules! proof_gen_helper { verify_signature: None, }, mocked_rng, - Some(&mut trace), ) .unwrap(); // Sanity check for the count value in the input of mocked_rng if (proof.len() - != 3 * OCTET_POINT_G1_LENGTH + (count - 1) * OCTET_SCALAR_LENGTH) + != 2 * $point_g1_octets_length + count * $scalar_octets_length) { panic!( "Unexpected 'count' value in MockedRng during fixture proof \ @@ -510,7 +481,7 @@ macro_rules! proof_gen_helper { .unwrap(), true ); - (proof, disclosed_indexes, signature, trace) + (proof, disclosed_messages) }}; } @@ -518,17 +489,11 @@ macro_rules! proof_gen_helper { #[macro_export] macro_rules! validate_proof_fixture { ($proof_verify_fn:ident, $fixture:expr) => { - let mut disclosed_messages: Vec<(usize, Vec)> = Vec::new(); - for i in &$fixture.disclosed_indexes { - let msg = $fixture.messages[*i as usize].clone(); - disclosed_messages.push((*i as usize, msg)) - } - let result = $proof_verify_fn(&BbsProofVerifyRequest { public_key: &$fixture.signer_public_key.to_octets(), header: Some($fixture.header.clone()), presentation_header: Some($fixture.presentation_header.clone()), - messages: Some(&disclosed_messages), + messages: Some(&$fixture.disclosed_messages), proof: &$fixture.proof, }); @@ -570,6 +535,8 @@ pub fn generate(fixture_gen_input: &FixtureGenInput, output_dir: &Path) { .join("bls12_381_sha_256") .join(PROOF_FIXTURES_SUBDIR), ExpandMsgXmd, + BLS12381_SHA256_POINT_G1_OCTETS_LENGTH, + BLS12381_SHA256_SCALAR_OCTETS_LENGTH ); generate_proof_fixture!( @@ -584,5 +551,7 @@ pub fn generate(fixture_gen_input: &FixtureGenInput, output_dir: &Path) { .join("bls12_381_shake_256") .join(PROOF_FIXTURES_SUBDIR), ExpandMsgXof, + BLS12381_SHAKE256_POINT_G1_OCTETS_LENGTH, + BLS12381_SHAKE256_SCALAR_OCTETS_LENGTH ); } diff --git a/tools/bbs-fixtures-generator/src/generators/signature.rs b/tools/bbs-fixtures-generator/src/generators/signature.rs index f9db9378..135cf4c9 100644 --- a/tools/bbs-fixtures-generator/src/generators/signature.rs +++ b/tools/bbs-fixtures-generator/src/generators/signature.rs @@ -2,15 +2,14 @@ use pairing_crypto::bbs::{ ciphersuites::{ bls12_381::{KeyPair, BBS_BLS12381G1_SIGNATURE_LENGTH}, bls12_381_g1_sha_256::{ - sign_with_trace as bls12_381_sha_256_sign, + sign as bls12_381_sha_256_sign, verify as bls12_381_sha_256_verify, }, bls12_381_g1_shake_256::{ - sign_with_trace as bls12_381_shake_256_sign, + sign as bls12_381_shake_256_sign, verify as bls12_381_shake_256_verify, }, }, - types::SignatureTrace, BbsSignRequest, BbsVerifyRequest, }; @@ -37,24 +36,35 @@ macro_rules! generate_signature_fixture { ) .unwrap(); - let mut trace = SignatureTrace::default(); + let signature_single_message = $sign_fn(&BbsSignRequest { + secret_key: &key_pair.secret_key.to_bytes(), + public_key: &key_pair.public_key.to_octets(), + header: Some($fixture_gen_input.header.clone()), + messages: Some(&$fixture_gen_input.messages[..1]), + }) + .unwrap(); + + let signature_multi_message = $sign_fn(&BbsSignRequest { + secret_key: &key_pair.secret_key.to_bytes(), + public_key: &key_pair.public_key.to_octets(), + header: Some($fixture_gen_input.header.clone()), + messages: Some(&$fixture_gen_input.messages), + }) + .unwrap(); + + let signature_multi_message_no_header = $sign_fn(&BbsSignRequest { + secret_key: &key_pair.secret_key.to_bytes(), + public_key: &key_pair.public_key.to_octets(), + header: None, + messages: Some(&$fixture_gen_input.messages), + }) + .unwrap(); let fixture_scratch = FixtureSignature { key_pair: key_pair.clone(), ..FixtureSignature::from($fixture_gen_input.clone()) }; - let signature_single_message = $sign_fn( - &BbsSignRequest { - secret_key: &key_pair.secret_key.to_bytes(), - public_key: &key_pair.public_key.to_octets(), - header: Some($fixture_gen_input.header.clone()), - messages: Some(&$fixture_gen_input.messages[..1]), - }, - Some(&mut trace), - ) - .unwrap(); - // single message - valid case let mut fixture = FixtureSignature { case_name: "single message signature".to_owned(), @@ -64,7 +74,6 @@ macro_rules! generate_signature_fixture { valid: true, reason: None, }, - trace: trace.clone(), ..fixture_scratch.clone() }; validate_signature_fixture!($verify_fn, &fixture); @@ -81,7 +90,6 @@ macro_rules! generate_signature_fixture { valid: false, reason: Some("modified message".to_owned()), }, - trace: trace.clone(), ..fixture_scratch.clone() }; validate_signature_fixture!($verify_fn, &fixture); @@ -96,23 +104,11 @@ macro_rules! generate_signature_fixture { valid: false, reason: Some("extra unsigned message".to_owned()), }, - trace: trace.clone(), ..fixture_scratch.clone() }; validate_signature_fixture!($verify_fn, &fixture); save_test_vector(&mut fixture, &$output_dir.join("signature003.json")); - let signature_multi_message = $sign_fn( - &BbsSignRequest { - secret_key: &key_pair.secret_key.to_bytes(), - public_key: &key_pair.public_key.to_octets(), - header: Some($fixture_gen_input.header.clone()), - messages: Some(&$fixture_gen_input.messages), - }, - Some(&mut trace), - ) - .unwrap(); - // multi message - valid case let mut fixture = FixtureSignature { case_name: "multi-message signature".to_owned(), @@ -122,7 +118,6 @@ macro_rules! generate_signature_fixture { valid: true, reason: None, }, - trace: trace.clone(), ..fixture_scratch.clone() }; validate_signature_fixture!($verify_fn, &fixture); @@ -137,7 +132,6 @@ macro_rules! generate_signature_fixture { valid: false, reason: Some("missing messages".to_owned()), }, - trace: trace.clone(), ..fixture_scratch.clone() }; validate_signature_fixture!($verify_fn, &fixture); @@ -155,7 +149,6 @@ macro_rules! generate_signature_fixture { valid: false, reason: Some("re-ordered messages".to_owned()), }, - trace: trace.clone(), ..fixture_scratch.clone() }; validate_signature_fixture!($verify_fn, &fixture); @@ -167,20 +160,19 @@ macro_rules! generate_signature_fixture { &$fixture_gen_input.key_info, ) .unwrap(); - let spare_key_pair = KeyPair { + let key_pair = KeyPair { secret_key: key_pair.secret_key.clone(), public_key: spare_key_pair.public_key, }; let mut fixture = FixtureSignature { case_name: "multi-message signature".to_owned(), - key_pair: spare_key_pair, + key_pair, messages: $fixture_gen_input.messages.to_vec(), signature: signature_multi_message.to_vec(), result: ExpectedResult { valid: false, reason: Some("wrong public key".to_owned()), }, - trace: trace.clone(), ..fixture_scratch.clone() }; validate_signature_fixture!($verify_fn, &fixture); @@ -198,7 +190,6 @@ macro_rules! generate_signature_fixture { valid: false, reason: Some("different header".to_owned()), }, - trace: trace.clone(), ..fixture_scratch.clone() }; validate_signature_fixture!($verify_fn, &fixture); @@ -218,23 +209,11 @@ macro_rules! generate_signature_fixture { "re-ordered(randomly shuffled) messages".to_owned(), ), }, - trace: trace.clone(), ..fixture_scratch.clone() }; validate_signature_fixture!($verify_fn, &fixture); save_test_vector(&mut fixture, &$output_dir.join("signature009.json")); - let signature_multi_message_no_header = $sign_fn( - &BbsSignRequest { - secret_key: &key_pair.secret_key.to_bytes(), - public_key: &key_pair.public_key.to_octets(), - header: None, - messages: Some(&$fixture_gen_input.messages), - }, - Some(&mut trace), - ) - .unwrap(); - // multi message - valid case - no header let mut fixture = FixtureSignature { case_name: "multi-message signature, no header".to_owned(), @@ -245,7 +224,6 @@ macro_rules! generate_signature_fixture { valid: true, reason: None, }, - trace, ..fixture_scratch.clone() }; validate_signature_fixture!($verify_fn, &fixture); diff --git a/tools/bbs-fixtures-generator/src/main.rs b/tools/bbs-fixtures-generator/src/main.rs index 131e7f22..6ccb06d6 100644 --- a/tools/bbs-fixtures-generator/src/main.rs +++ b/tools/bbs-fixtures-generator/src/main.rs @@ -4,10 +4,10 @@ use clap::Parser; #[derive(Parser)] struct Cli { // The path to the file to read the test assets - #[clap(short = 'i', value_parser = clap::value_parser!(std::path::PathBuf), value_hint = clap::ValueHint::DirPath)] + #[clap(short = 'i', parse(from_os_str), value_hint = clap::ValueHint::DirPath)] test_asset_file: std::path::PathBuf, // The path to the directory to write the fixture files - #[clap(short = 'o', value_parser = clap::value_parser!(std::path::PathBuf), value_hint = clap::ValueHint::DirPath)] + #[clap(short = 'o', parse(from_os_str), value_hint = clap::ValueHint::DirPath)] fixture_output_dir: std::path::PathBuf, } diff --git a/tools/bbs-fixtures-generator/src/model.rs b/tools/bbs-fixtures-generator/src/model.rs index b8d87386..276f33d2 100644 --- a/tools/bbs-fixtures-generator/src/model.rs +++ b/tools/bbs-fixtures-generator/src/model.rs @@ -1,15 +1,10 @@ use std::collections::HashMap; use pairing_crypto::bbs::ciphersuites::bls12_381::{ - suite_constants::{OCTET_POINT_G1_LENGTH, OCTET_SCALAR_LENGTH}, KeyPair, PublicKey, SecretKey, }; - -use blstrs::Scalar; -use core::fmt; - use serde::{ de::{self, MapAccess}, ser::{SerializeMap, SerializeSeq, SerializeStruct}, @@ -50,9 +45,6 @@ pub struct FixtureKeyGen { pub case_name: String, pub key_material: String, pub key_info: String, - #[serde(serialize_with = "hex::serde::serialize")] - #[serde(deserialize_with = "hex::serde::deserialize")] - pub key_dst: Vec, #[serde(serialize_with = "serialize_key_pair")] #[serde(deserialize_with = "deserialize_key_pair")] pub key_pair: KeyPair, @@ -65,7 +57,6 @@ impl From for FixtureKeyGen { case_name: Default::default(), key_material: hex::encode(value.key_ikm), key_info: hex::encode(value.key_info), - key_dst: Default::default(), key_pair: Default::default(), } } @@ -141,8 +132,6 @@ pub struct FixtureSignature { #[serde(deserialize_with = "hex::serde::deserialize")] pub signature: Vec, pub result: ExpectedResult, - #[serde(with = "SignatureTraceDef")] - pub trace: SignatureTrace, } impl From for FixtureSignature { @@ -154,7 +143,6 @@ impl From for FixtureSignature { messages: val.messages, signature: Default::default(), result: Default::default(), - trace: SignatureTrace::default(), } } } @@ -164,54 +152,6 @@ implement_case_name!(FixtureSignature); #[derive(Serialize, Deserialize, Debug, Default, Clone)] #[serde(rename_all = "camelCase")] pub struct FixtureProof { - pub case_name: String, - #[serde(serialize_with = "serialize_public_key")] - #[serde(deserialize_with = "deserialize_public_key")] - pub signer_public_key: PublicKey, - #[serde(serialize_with = "hex::serde::serialize")] - #[serde(deserialize_with = "hex::serde::deserialize")] - pub signature: Vec, - #[serde(serialize_with = "hex::serde::serialize")] - #[serde(deserialize_with = "hex::serde::deserialize")] - pub header: Vec, - #[serde(serialize_with = "hex::serde::serialize")] - #[serde(deserialize_with = "hex::serde::deserialize")] - pub presentation_header: Vec, - #[serde(serialize_with = "serialize_messages")] - #[serde(deserialize_with = "deserialize_messages")] - pub messages: Vec>, - #[serde(rename = "disclosedIndexes")] - pub disclosed_indexes: Vec, - #[serde(serialize_with = "hex::serde::serialize")] - #[serde(deserialize_with = "hex::serde::deserialize")] - pub proof: Vec, - pub result: ExpectedResult, - #[serde(with = "ProofTraceDef")] - pub trace: ProofTrace, -} - -impl From for FixtureProof { - fn from(val: FixtureGenInput) -> Self { - Self { - case_name: Default::default(), - signer_public_key: Default::default(), - signature: Default::default(), - header: val.header, - presentation_header: val.presentation_header, - messages: Default::default(), - disclosed_indexes: Default::default(), - proof: Default::default(), - result: Default::default(), - trace: ProofTrace::default(), - } - } -} - -implement_case_name!(FixtureProof); - -#[derive(Serialize, Deserialize, Debug, Default, Clone)] -#[serde(rename_all = "camelCase")] -pub struct NegativeProofFixture { pub case_name: String, #[serde(serialize_with = "serialize_public_key")] #[serde(deserialize_with = "deserialize_public_key")] @@ -224,12 +164,15 @@ pub struct NegativeProofFixture { pub presentation_header: Vec, #[serde(serialize_with = "serialize_disclosed_messages")] #[serde(deserialize_with = "deserialize_disclosed_messages")] + #[serde(rename = "revealedMessages")] pub disclosed_messages: Vec<(usize, Vec)>, + #[serde(serialize_with = "hex::serde::serialize")] + #[serde(deserialize_with = "hex::serde::deserialize")] pub proof: Vec, pub result: ExpectedResult, } -impl From for NegativeProofFixture { +impl From for FixtureProof { fn from(val: FixtureGenInput) -> Self { Self { case_name: Default::default(), @@ -243,7 +186,7 @@ impl From for NegativeProofFixture { } } -implement_case_name!(NegativeProofFixture); +implement_case_name!(FixtureProof); #[derive(Serialize, Deserialize, Debug, Default, Clone)] #[serde(rename_all = "camelCase")] @@ -522,190 +465,3 @@ where } seq.end() } - -use pairing_crypto::bbs::types::{ProofTrace, RandomScalars, SignatureTrace}; - -#[derive(Serialize, Deserialize)] -#[serde(remote = "SignatureTrace")] -#[allow(non_snake_case)] -pub struct SignatureTraceDef { - /// The point B calculated during proof generation - #[serde(serialize_with = "hex::serde::serialize")] - #[serde(deserialize_with = "hex::serde::deserialize")] - pub B: [u8; OCTET_POINT_G1_LENGTH], - /// The domain scalar value calculated during proof generation - #[serde(serialize_with = "hex::serde::serialize")] - #[serde(deserialize_with = "hex::serde::deserialize")] - pub domain: [u8; OCTET_SCALAR_LENGTH], -} - -#[derive(Serialize, Deserialize)] -#[serde(remote = "RandomScalars")] -pub struct RandomScalarsDef { - /// The r1 random scalar - #[serde(serialize_with = "serialize_scalar")] - #[serde(deserialize_with = "deserialize_scalar")] - pub r1: Scalar, - /// The r1~random scalar (blinding the r1 value) - #[serde(serialize_with = "serialize_scalar")] - #[serde(deserialize_with = "deserialize_scalar")] - pub r2: Scalar, - /// The e~ random scalar (blinding the r1 value) - #[serde(serialize_with = "serialize_scalar")] - #[serde(deserialize_with = "deserialize_scalar")] - pub e_tilde: Scalar, - /// The r1~ random scalar (blinding the r1 value) - #[serde(serialize_with = "serialize_scalar")] - #[serde(deserialize_with = "deserialize_scalar")] - pub r1_tilde: Scalar, - /// The r3~ random scalar (blinding the r3 value) - #[serde(serialize_with = "serialize_scalar")] - #[serde(deserialize_with = "deserialize_scalar")] - pub r3_tilde: Scalar, - /// The list of m~_i random scalars (blinding the undisclosed messages) - #[serde(serialize_with = "serialize_scalars_vec")] - #[serde(deserialize_with = "deserialize_scalars_vec")] - pub m_tilde_scalars: Vec, -} - -#[derive(Serialize, Deserialize)] -#[serde(remote = "ProofTrace")] -#[allow(non_snake_case)] -pub struct ProofTraceDef { - /// The random scalars used during proof generation - #[serde(with = "RandomScalarsDef")] - pub random_scalars: RandomScalars, - /// The point A_bar calculated during proof generation - #[serde(serialize_with = "hex::serde::serialize")] - #[serde(deserialize_with = "hex::serde::deserialize")] - pub A_bar: [u8; OCTET_POINT_G1_LENGTH], - /// The point B_bar calculated during proof generation - #[serde(serialize_with = "hex::serde::serialize")] - #[serde(deserialize_with = "hex::serde::deserialize")] - pub B_bar: [u8; OCTET_POINT_G1_LENGTH], - /// The point D calculated during proof generation - #[serde(serialize_with = "hex::serde::serialize")] - #[serde(deserialize_with = "hex::serde::deserialize")] - pub D: [u8; OCTET_POINT_G1_LENGTH], - /// The point T1 calculated during proof generation - #[serde(serialize_with = "hex::serde::serialize")] - #[serde(deserialize_with = "hex::serde::deserialize")] - pub T1: [u8; OCTET_POINT_G1_LENGTH], - /// The point T2 calculated during proof generation - #[serde(serialize_with = "hex::serde::serialize")] - #[serde(deserialize_with = "hex::serde::deserialize")] - pub T2: [u8; OCTET_POINT_G1_LENGTH], - /// The domain scalar value calculated during proof generation - #[serde(serialize_with = "hex::serde::serialize")] - #[serde(deserialize_with = "hex::serde::deserialize")] - pub domain: [u8; OCTET_SCALAR_LENGTH], - /// The challenge scalar value calculated during proof generation - #[serde(serialize_with = "hex::serde::serialize")] - #[serde(deserialize_with = "hex::serde::deserialize")] - pub challenge: [u8; OCTET_SCALAR_LENGTH], -} - -pub(crate) fn serialize_scalar( - scalar: &Scalar, - serializer: S, -) -> Result -where - S: Serializer, -{ - let res = hex::encode(scalar.to_bytes_be()); - serializer.serialize_str(&res) -} - -pub(crate) fn serialize_scalars_vec( - scalars: &Vec, - serializer: S, -) -> Result -where - S: Serializer, -{ - let mut seq = serializer.serialize_seq(Some(scalars.len()))?; - for scalar in scalars { - seq.serialize_element(&hex::encode(scalar.to_bytes_be()))?; - } - seq.end() -} - -pub(crate) fn deserialize_scalar<'de, D>( - deserializer: D, -) -> Result -where - D: Deserializer<'de>, -{ - struct ScalarVisitor; - - impl<'de> de::Visitor<'de> for ScalarVisitor { - type Value = Scalar; - - fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - formatter.write_str("a Scalar value") - } - - fn visit_str(self, v: &str) -> Result - where - E: de::Error, - { - let bytes = hex::decode(v).expect("Hex decoding failed"); - let b = <[u8; 32]>::try_from(bytes).unwrap(); - - let scalar = Scalar::from_bytes_be(&b); - - if scalar.is_none().unwrap_u8() == 1u8 { - return Err(E::custom("Invalid Scalar value")); - }; - - Ok(scalar.unwrap()) - } - } - - deserializer.deserialize_str(ScalarVisitor) -} - -fn deserialize_scalars_vec<'de, D>( - deserializer: D, -) -> Result, D::Error> -where - D: Deserializer<'de>, -{ - struct ScalarsVecVisitor; - - impl<'de> de::Visitor<'de> for ScalarsVecVisitor { - type Value = Vec; - - fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - formatter.write_str("a sequence of Scalar values") - } - - fn visit_seq(self, mut seq: A) -> Result - where - A: de::SeqAccess<'de>, - { - let mut scalars_vec = - Vec::with_capacity(seq.size_hint().unwrap_or(0)); - - while let Some(scalar_hex) = seq.next_element::()? { - let scalar_bytes = <[u8; 32]>::try_from( - hex::decode(scalar_hex) - .expect("Scalar hex decoding failed"), - ) - .unwrap(); - - let scalar = Scalar::from_bytes_be(&scalar_bytes); - - if scalar.is_none().unwrap_u8() == 1u8 { - return Err(de::Error::custom("Invalid Scalar value")); - } - - scalars_vec.push(scalar.unwrap()) - } - - Ok(scalars_vec) - } - } - - deserializer.deserialize_seq(ScalarsVecVisitor) -} diff --git a/tools/bbs-generators/src/main.rs b/tools/bbs-generators/src/main.rs index dfd2313f..b2a8536d 100644 --- a/tools/bbs-generators/src/main.rs +++ b/tools/bbs-generators/src/main.rs @@ -22,7 +22,7 @@ enum OutputType { #[allow(non_snake_case)] #[derive(Serialize, Debug, Clone)] pub struct FixtureGenerators { - pub P1: String, + pub BP: String, pub Q1: String, pub MsgGenerators: Vec, } @@ -62,7 +62,7 @@ fn main() { .unwrap(); let fixture = FixtureGenerators { - P1: hex::encode(generators[0].clone()), + BP: hex::encode(generators[0].clone()), Q1: hex::encode(generators[1].clone()), MsgGenerators: generators .iter() diff --git a/wrappers/wasm/__fixtures__/index.ts b/wrappers/wasm/__fixtures__/index.ts index 7b1ed657..af197b6b 100644 --- a/wrappers/wasm/__fixtures__/index.ts +++ b/wrappers/wasm/__fixtures__/index.ts @@ -20,8 +20,7 @@ export interface ProofFixtureData { readonly header: string; readonly presentationHeader: string; result: { valid: false; reason: string } | { valid: true }; - readonly messages: string[]; - readonly disclosedIndexes: number[]; + readonly revealedMessages: { [key: number]: string }; readonly signerPublicKey: string; } diff --git a/wrappers/wasm/__tests__/bbs/bls12381/keyGen.spec.ts b/wrappers/wasm/__tests__/bbs/bls12381/keyGen.spec.ts index 7e42fc30..d343ff94 100644 --- a/wrappers/wasm/__tests__/bbs/bls12381/keyGen.spec.ts +++ b/wrappers/wasm/__tests__/bbs/bls12381/keyGen.spec.ts @@ -12,7 +12,6 @@ */ import { bbs } from "../../../lib"; -import { utilities } from "../../../lib"; describe("bbs", () => { describe("bls12381_shake256", () => { @@ -62,49 +61,6 @@ describe("bbs", () => { expect(result.secretKey as Uint8Array).toEqual(value.secretKey); expect(result.publicKey).toEqual(value.publicKey); }); - - it("should be able to map a compressed public key to an uncompressed representation", async () => { - const compressed_keypair = await bbs.bls12381_shake256.generateKeyPair({ - ikm: value.ikm, - keyInfo: value.keyInfo, - }); - - const uncompressed_keypair = await bbs.bls12381_shake256.generateKeyPairUncompressed({ - ikm: value.ikm, - keyInfo: value.keyInfo, - }); - - const uncompressed_from_compressed_pk = await utilities.compressedToUncompressedPublicKey( - compressed_keypair.publicKey - ); - - const compressed_from_uncompressed_pk = await utilities.uncompressedToCompressedPublicKey( - uncompressed_keypair.publicKey - ); - - expect(compressed_keypair.publicKey).toBeDefined(); - expect(compressed_keypair.secretKey).toBeDefined(); - - expect(uncompressed_keypair.publicKey).toBeDefined(); - expect(uncompressed_keypair.secretKey).toBeDefined(); - expect(uncompressed_keypair.publicKey?.length as number).toEqual( - bbs.bls12381_shake256.PUBLIC_KEY_LENGTH * 2 - ) - - expect(uncompressed_from_compressed_pk).toBeDefined(); - expect(uncompressed_from_compressed_pk?.length as number).toEqual( - bbs.bls12381_shake256.PUBLIC_KEY_LENGTH * 2 - ) - - expect(uncompressed_keypair.publicKey).toEqual(uncompressed_from_compressed_pk) - - expect(compressed_from_uncompressed_pk).toBeDefined(); - expect(compressed_from_uncompressed_pk?.length as number).toEqual( - bbs.bls12381_shake256.PUBLIC_KEY_LENGTH - ) - - expect(compressed_keypair.publicKey).toEqual(compressed_from_uncompressed_pk) - }); }); it("should be able to generate a key pair from random", async () => { @@ -117,7 +73,6 @@ describe("bbs", () => { ); expect(result.publicKey.length).toEqual(bbs.bls12381_shake256.PUBLIC_KEY_LENGTH); }); - }); }); }); diff --git a/wrappers/wasm/__tests__/bbs/bls12381/verifyProof-fixtures.spec.ts b/wrappers/wasm/__tests__/bbs/bls12381/verifyProof-fixtures.spec.ts index bb3a8bb9..f8232391 100644 --- a/wrappers/wasm/__tests__/bbs/bls12381/verifyProof-fixtures.spec.ts +++ b/wrappers/wasm/__tests__/bbs/bls12381/verifyProof-fixtures.spec.ts @@ -30,17 +30,20 @@ bls12381Shake256ProofFixtures.forEach((item: ProofFixture) => { presentationHeader: new Uint8Array( Buffer.from(item.value.presentationHeader, "hex") ), - messages: Object.fromEntries( - new Map( - item.value.disclosedIndexes.map( - (idx) => [ - idx, - new Uint8Array(Buffer.from(item.value.messages[idx], "hex")) - ] - ) - ) + messages: Object.entries(item.value.revealedMessages).reduce( + (map, val, _) => { + const key = parseInt(val[0]); + const message = new Uint8Array(Buffer.from(val[1], "hex")); + map = { + ...map, + [key]: message, + }; + return map; + }, + {} ), - })).toBeTruthy(); + }) + ).toBeTruthy(); }); } else { it(`should fail to verify case: ${item.value.caseName} because ${item.value.result["reason"]}`, async () => { @@ -54,16 +57,22 @@ bls12381Shake256ProofFixtures.forEach((item: ProofFixture) => { presentationHeader: new Uint8Array( Buffer.from(item.value.presentationHeader, "hex") ), - messages: Object.fromEntries( - new Map( - item.value.disclosedIndexes.map( - (idx) => [ - idx, - new Uint8Array(Buffer.from(item.value.messages[idx], "hex")) - ] - ) - ) - ) + messages: Object.entries(item.value.revealedMessages).reduce( + (map, val, _) => { + const key = parseInt(val[0]); + const message = new Uint8Array( + Buffer.from(val[1], "hex") + ); + + map = { + ...map, + [key]: message, + }; + + return map; + }, + {} + ), }) ).verified ).toBeFalsy(); diff --git a/wrappers/wasm/src/bbs/api.rs b/wrappers/wasm/src/bbs/api.rs index 9441686c..504f1544 100644 --- a/wrappers/wasm/src/bbs/api.rs +++ b/wrappers/wasm/src/bbs/api.rs @@ -16,36 +16,32 @@ use super::dtos::*; use crate::utils::*; use core::convert::{TryFrom, TryInto}; -use pairing_crypto::{ - bbs::{ - ciphersuites::{ - bls12_381::{ - KeyPair as Bls12381BbsKeyPair, - PublicKey as Bls12381BbsPublicKey, - BBS_BLS12381G1_PUBLIC_KEY_LENGTH, - BBS_BLS12381G1_SECRET_KEY_LENGTH, - BBS_BLS12381G1_SIGNATURE_LENGTH, - }, - bls12_381_g1_sha_256::{ - proof_gen as bls12_381_sha_256_proof_gen, - proof_verify as bls12_381_sha_256_proof_verify, - sign as bls12_381_sha_256_sign, - verify as bls12_381_sha_256_verify, - }, - bls12_381_g1_shake_256::{ - proof_gen as bls12_381_shake_256_proof_gen, - proof_verify as bls12_381_shake_256_proof_verify, - sign as bls12_381_shake_256_sign, - verify as bls12_381_shake_256_verify, - }, +use pairing_crypto::bbs::{ + ciphersuites::{ + bls12_381::{ + KeyPair as Bls12381BbsKeyPair, + BBS_BLS12381G1_PUBLIC_KEY_LENGTH, + BBS_BLS12381G1_SECRET_KEY_LENGTH, + BBS_BLS12381G1_SIGNATURE_LENGTH, + }, + bls12_381_g1_sha_256::{ + proof_gen as bls12_381_sha_256_proof_gen, + proof_verify as bls12_381_sha_256_proof_verify, + sign as bls12_381_sha_256_sign, + verify as bls12_381_sha_256_verify, + }, + bls12_381_g1_shake_256::{ + proof_gen as bls12_381_shake_256_proof_gen, + proof_verify as bls12_381_shake_256_proof_verify, + sign as bls12_381_shake_256_sign, + verify as bls12_381_shake_256_verify, }, - BbsProofGenRequest, - BbsProofGenRevealMessageRequest, - BbsProofVerifyRequest, - BbsSignRequest, - BbsVerifyRequest, }, - Error, + BbsProofGenRequest, + BbsProofGenRevealMessageRequest, + BbsProofVerifyRequest, + BbsSignRequest, + BbsVerifyRequest, }; use wasm_bindgen::prelude::*; @@ -88,81 +84,6 @@ pub async fn bbs_bls12_381_generate_key_pair( serde_wasm_bindgen::to_value(&keypair) } -/// Generate a key pair in uncompressed form -#[wasm_bindgen(js_name = bbs_bls12_381_generate_key_pair_uncompressed)] -pub async fn bbs_bls12_381_generate_key_pair_uncompressed( - request: JsValue, -) -> Result { - // Improves error output in JS based console.log() when built with - // debug feature enabled - set_panic_hook(); - - // Cast the supplied JSON request into a rust struct - let request: KeyGenerationRequestDto = request.try_into()?; - - let ikm = request.ikm.unwrap_or(Vec::new()); - let key_info = request.keyInfo.unwrap_or(Vec::new()); - - // // Derive secret key from supplied IKM and key information - // metadata. - let key_pair = Bls12381BbsKeyPair::new(&ikm, &key_info).ok_or( - serde_wasm_bindgen::Error::new( - "unexpected error, failed to generate keys.", - ), - )?; - - // Construct the JS DTO of the key pair to return - let keypair = KeyPair { - secretKey: key_pair.secret_key.to_bytes().to_vec(), - publicKey: key_pair.public_key.to_octets_uncompressed().to_vec(), - }; - serde_wasm_bindgen::to_value(&keypair) -} - -/// Convert the public key representation from compressed to uncompressed -#[wasm_bindgen(js_name = bbs_bls12_381_compressed_to_uncompressed_public_key)] -pub async fn bbs_bls12_381_compressed_to_uncompressed_public_key( - request: Vec, -) -> Result { - // debug feature enabled - set_panic_hook(); - - match Bls12381BbsPublicKey::compressed_to_uncompressed(&request) { - Ok(bytes) => serde_wasm_bindgen::to_value(&bytes.to_vec()), - Err(e) if e == Error::BadEncoding => { - Err(serde_wasm_bindgen::Error::new( - "unexpected error, input public key is incorrectly encoded.", - )) - } - Err(_) => Err(serde_wasm_bindgen::Error::new( - "unexpected error, failed to map public key from compressed to \ - uncompressed form.", - )), - } -} - -/// Convert the public key representation from uncompressed to compressed -#[wasm_bindgen(js_name = bbs_bls12_381_uncompressed_to_compressed_public_key)] -pub async fn bbs_bls12_381_uncompressed_to_compressed_public_key( - request: Vec, -) -> Result { - // debug feature enabled - set_panic_hook(); - - match Bls12381BbsPublicKey::uncompressed_to_compressed(&request) { - Ok(bytes) => serde_wasm_bindgen::to_value(&bytes.to_vec()), - Err(e) if e == Error::BadEncoding => { - Err(serde_wasm_bindgen::Error::new( - "unexpected error, input public key is incorrectly encoded.", - )) - } - Err(_) => Err(serde_wasm_bindgen::Error::new( - "unexpected error, failed to map public key from uncompressed to \ - compressed form.", - )), - } -} - macro_rules! bbs_wrapper_api_generator { ( $sign_wrapper_fn:ident, diff --git a/wrappers/wasm/src/js/index.d.ts b/wrappers/wasm/src/js/index.d.ts index b6c20c12..235f2dc4 100644 --- a/wrappers/wasm/src/js/index.d.ts +++ b/wrappers/wasm/src/js/index.d.ts @@ -47,9 +47,6 @@ export namespace bbs { function generateKeyPair( request?: KeyGenerationRequest ): Promise>; - function generateKeyPairUncompressed( - request?: KeyGenerationRequest - ): Promise>; function sign(request: BbsSignRequest): Promise; function verify(request: BbsVerifyRequest): Promise; function deriveProof(request: BbsDeriveProofRequest): Promise; @@ -66,9 +63,6 @@ export namespace bbs { function generateKeyPair( request?: KeyGenerationRequest ): Promise>; - function generateKeyPairUncompressed( - request?: KeyGenerationRequest - ): Promise>; function sign(request: BbsSignRequest): Promise; function verify(request: BbsVerifyRequest): Promise; function deriveProof(request: BbsDeriveProofRequest): Promise; @@ -113,12 +107,4 @@ export namespace utilities { function convertRevealMessageArrayToRevealMap( messages: { value: Uint8Array; reveal: boolean }[] ): { [key: number]: Uint8Array }; - - function compressedToUncompressedPublicKey( - request?: Uint8Array - ): Promise; - - function uncompressedToCompressedPublicKey( - request?: Uint8Array - ): Promise; } diff --git a/wrappers/wasm/src/js/index.js b/wrappers/wasm/src/js/index.js index 534c7da3..3ae9e582 100644 --- a/wrappers/wasm/src/js/index.js +++ b/wrappers/wasm/src/js/index.js @@ -70,33 +70,6 @@ const bbs_bls12_381_generate_key_pair = async (request) => { }; }; -const bbs_bls12_381_generate_key_pair_uncompressed = async (request) => { - await initialize(); - var result = await throwErrorOnRejectedPromise( - wasm.bbs_bls12_381_generate_key_pair_uncompressed(request ?? {}) - ); - return { - secretKey: new Uint8Array(result.secretKey), - publicKey: new Uint8Array(result.publicKey), - }; -} - -const bbs_bls12_381_compressed_to_uncompressed_public_key = async (request) => { - await initialize(); - var result = await throwErrorOnRejectedPromise( - wasm.bbs_bls12_381_compressed_to_uncompressed_public_key(request ?? {}) - ); - return new Uint8Array(result); -} - -const bbs_bls12_381_uncompressed_to_compressed_public_key = async (request) => { - await initialize(); - var result = await throwErrorOnRejectedPromise( - wasm.bbs_bls12_381_uncompressed_to_compressed_public_key(request ?? {}) - ); - return new Uint8Array(result); -} - const bbs_bls12_381_sha_256_sign = async (request) => { await initialize(); return new Uint8Array(await throwErrorOnRejectedPromise(wasm.bbs_bls12_381_sha_256_sign(request))); @@ -225,7 +198,6 @@ module.exports.bbs = { SIGNATURE_LENGTH: DEFAULT_BLS12381_BBS_SIGNATURE_LENGTH, generateKeyPair: bbs_bls12_381_generate_key_pair, - generateKeyPairUncompressed: bbs_bls12_381_generate_key_pair_uncompressed, sign: bbs_bls12_381_sha_256_sign, verify: bbs_bls12_381_sha_256_verify, deriveProof: bbs_bls12_381_sha_256_proof_gen, @@ -237,7 +209,6 @@ module.exports.bbs = { SIGNATURE_LENGTH: DEFAULT_BLS12381_BBS_SIGNATURE_LENGTH, generateKeyPair: bbs_bls12_381_generate_key_pair, - generateKeyPairUncompressed: bbs_bls12_381_generate_key_pair_uncompressed, sign: bbs_bls12_381_shake_256_sign, verify: bbs_bls12_381_shake_256_verify, deriveProof: bbs_bls12_381_shake_256_proof_gen, @@ -268,7 +239,5 @@ module.exports.bbs_bound = { module.exports.utilities = { convertToRevealMessageArray, - convertRevealMessageArrayToRevealMap, - compressedToUncompressedPublicKey: bbs_bls12_381_compressed_to_uncompressed_public_key, - uncompressedToCompressedPublicKey: bbs_bls12_381_uncompressed_to_compressed_public_key, + convertRevealMessageArrayToRevealMap } \ No newline at end of file