From a17a9301d7b58c27c4fc8ce663c1745b3d1c4000 Mon Sep 17 00:00:00 2001 From: therealyingtong Date: Fri, 9 Jul 2021 13:33:57 +0800 Subject: [PATCH] sinsemilla::tests: Witness and constrain expected result of commit. --- src/circuit/gadget/sinsemilla.rs | 51 ++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/src/circuit/gadget/sinsemilla.rs b/src/circuit/gadget/sinsemilla.rs index 72b0aa27..c6f794b9 100644 --- a/src/circuit/gadget/sinsemilla.rs +++ b/src/circuit/gadget/sinsemilla.rs @@ -401,7 +401,7 @@ mod tests { chip::{EccChip, EccConfig}, Point, }, - constants::MERKLE_CRH_PERSONALIZATION, + constants::{COMMIT_IVK_PERSONALIZATION, MERKLE_CRH_PERSONALIZATION}, primitives::sinsemilla::{self, K}, }; @@ -579,20 +579,47 @@ mod tests { { let chip2 = SinsemillaChip::construct(config.2); - let commit_ivk = - CommitDomain::new(chip2.clone(), ecc_chip, &SinsemillaCommitDomains::CommitIvk); - let r = Some(pallas::Scalar::rand()); + let commit_ivk = CommitDomain::new( + chip2.clone(), + ecc_chip.clone(), + &SinsemillaCommitDomains::CommitIvk, + ); + let r_val = pallas::Scalar::rand(); let message: Vec> = (0..500).map(|_| Some(rand::random::())).collect(); - let message = Message::from_bitstring( - chip2, - layouter.namespace(|| "witness message"), - message, - )?; - commit_ivk.commit(layouter.namespace(|| "commit"), message, r)?; - } - Ok(()) + let result = { + let message = Message::from_bitstring( + chip2, + layouter.namespace(|| "witness message"), + message.clone(), + )?; + commit_ivk.commit(layouter.namespace(|| "commit"), message, Some(r_val))? + }; + + // Witness expected result. + let expected_result = { + let message: Option> = message.into_iter().collect(); + let expected_result = if let Some(message) = message { + let domain = sinsemilla::CommitDomain::new(COMMIT_IVK_PERSONALIZATION); + let point = domain.commit(message.into_iter(), &r_val).unwrap(); + Some(point.to_affine()) + } else { + None + }; + + Point::new( + ecc_chip, + layouter.namespace(|| "Witness expected result"), + expected_result, + )? + }; + + result.constrain_equal( + layouter.namespace(|| "result == expected result"), + &expected_result, + ) + } } }