2020-01-28 17:11:43 -08:00
|
|
|
use rand::thread_rng;
|
|
|
|
|
2020-06-15 18:47:49 -07:00
|
|
|
use ed25519_zebra::*;
|
2020-01-28 17:11:43 -08:00
|
|
|
|
2020-01-28 23:10:07 -08:00
|
|
|
#[test]
|
2020-06-15 18:47:49 -07:00
|
|
|
fn batch_verify() {
|
2020-06-16 13:44:34 -07:00
|
|
|
let mut batch = batch::Verifier::new();
|
2020-06-15 18:47:49 -07:00
|
|
|
for _ in 0..32 {
|
2020-06-15 20:45:25 -07:00
|
|
|
let sk = SigningKey::new(thread_rng());
|
|
|
|
let pk_bytes = VerificationKeyBytes::from(&sk);
|
2020-06-15 18:47:49 -07:00
|
|
|
let msg = b"BatchVerifyTest";
|
|
|
|
let sig = sk.sign(&msg[..]);
|
2020-06-16 13:44:34 -07:00
|
|
|
batch.queue((pk_bytes, sig, msg));
|
2020-06-15 18:47:49 -07:00
|
|
|
}
|
|
|
|
assert!(batch.verify(thread_rng()).is_ok());
|
2020-01-29 16:06:30 -08:00
|
|
|
}
|
2020-07-15 12:25:46 -07:00
|
|
|
|
|
|
|
#[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());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|