From 7c75a887b7b3661b8a6845fb1333ee3493157259 Mon Sep 17 00:00:00 2001 From: Deirdre Connolly Date: Wed, 30 Jun 2021 15:45:26 -0400 Subject: [PATCH] Add a test that explicitly checks for a bad RedPallas binding signature in batch verification Along with the explicit test for bad SpendAuth's in the batch. --- .../src/primitives/redpallas/tests/batch.rs | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/zebra-chain/src/primitives/redpallas/tests/batch.rs b/zebra-chain/src/primitives/redpallas/tests/batch.rs index 31c0d5870..33a7ea41c 100644 --- a/zebra-chain/src/primitives/redpallas/tests/batch.rs +++ b/zebra-chain/src/primitives/redpallas/tests/batch.rs @@ -58,7 +58,7 @@ fn alternating_batch_verify() { } #[test] -fn bad_batch_verify() { +fn bad_spendauth_in_batch_verify() { let mut rng = thread_rng(); let bad_index = 4; // must be even let mut batch = batch::Verifier::new(); @@ -97,3 +97,45 @@ fn bad_batch_verify() { } } } + +#[test] +fn bad_binding_in_batch_verify() { + let mut rng = thread_rng(); + let bad_index = 3; // must be odd + let mut batch = batch::Verifier::new(); + let mut items = Vec::new(); + for i in 0..32 { + let item: batch::Item = match i % 2 { + 0 => { + let sk = SigningKey::::new(&mut rng); + let vk = VerificationKey::from(&sk); + let msg = b"BatchVerifyTest"; + let sig = sk.sign(&mut rng, &msg[..]); + (vk.into(), sig, msg).into() + } + 1 => { + let sk = SigningKey::::new(&mut rng); + let vk = VerificationKey::from(&sk); + let msg = b"BatchVerifyTest"; + + let sig = if i != bad_index { + sk.sign(&mut rng, &msg[..]) + } else { + sk.sign(&mut rng, b"bad") + }; + (vk.into(), sig, msg).into() + } + _ => unreachable!(), + }; + items.push(item.clone()); + batch.queue(item); + } + assert!(batch.verify(rng).is_err()); + for (i, item) in items.drain(..).enumerate() { + if i != bad_index { + assert!(item.verify_single().is_ok()); + } else { + assert!(item.verify_single().is_err()); + } + } +}