ed25519-zebra/tests/batch.rs

45 lines
1.2 KiB
Rust

use rand::thread_rng;
use ed25519_zebra::*;
#[test]
fn batch_verify() {
let mut batch = batch::Verifier::new();
for _ in 0..32 {
let sk = SigningKey::new(thread_rng());
let pk_bytes = VerificationKeyBytes::from(&sk);
let msg = b"BatchVerifyTest";
let sig = sk.sign(&msg[..]);
batch.queue((pk_bytes, sig, msg));
}
assert!(batch.verify(thread_rng()).is_ok());
}
#[test]
fn batch_verify_with_one_bad_sig() {
let bad_index = 10;
let mut batch = batch::Verifier::new();
let mut items = Vec::new();
for i in 0..32 {
let sk = SigningKey::new(thread_rng());
let pk_bytes = VerificationKeyBytes::from(&sk);
let msg = b"BatchVerifyTest";
let sig = if i != bad_index {
sk.sign(&msg[..])
} else {
sk.sign(b"badmsg")
};
let item: batch::Item = (pk_bytes, sig, msg).into();
items.push(item.clone());
batch.queue(item);
}
assert!(batch.verify(thread_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());
}
}
}