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.
This commit is contained in:
Deirdre Connolly 2021-06-30 15:45:26 -04:00
parent 08d84cc0a7
commit 7c75a887b7
1 changed files with 43 additions and 1 deletions

View File

@ -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::<SpendAuth>::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::<Binding>::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());
}
}
}