Skip to content

Commit

Permalink
Optimize multi::Signature::verify_raw
Browse files Browse the repository at this point in the history
  • Loading branch information
matteomonti committed Jun 3, 2022
1 parent d0c4211 commit 81cc87d
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 15 deletions.
2 changes: 1 addition & 1 deletion src/crypto/key_card.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ impl MultiSignature {
S: Statement,
{
self.verify_raw(
cards.into_iter().map(|card| card.keys.multi),
cards.into_iter().map(|card| &card.keys.multi),
&(S::SCOPE, S::HEADER, message),
)
}
Expand Down
30 changes: 16 additions & 14 deletions src/crypto/primitives/multi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ impl KeyPair {
/// let alice_signature = alice.sign_raw(&message).unwrap();
///
/// assert!(alice_signature.verify_raw(
/// [alice.public()],
/// [&alice.public()],
/// &message
/// ).is_ok());
/// ```
Expand Down Expand Up @@ -265,22 +265,20 @@ impl Signature {
/// .unwrap();
///
/// assert!(signature.verify_raw(
/// [alice.public(), bob.public()],
/// [&alice.public(), &bob.public()],
/// &message,
/// ).is_ok());
/// ```
pub fn verify_raw<P, M>(&self, signers: P, message: &M) -> Result<(), Top<MultiError>>
pub fn verify_raw<'p, P, M>(&self, signers: P, message: &M) -> Result<(), Top<MultiError>>
where
P: IntoIterator<Item = PublicKey>,
P: IntoIterator<Item = &'p PublicKey>,
M: Serialize,
{
let signers = signers
.into_iter()
.map(|signer| signer.0)
.map(|signer| &signer.0)
.collect::<Vec<_>>();

let signers = signers.iter().collect::<Vec<_>>();

let message = bincode::serialize(message)
.map_err(MultiError::serialize_failed)
.map_err(Doom::into_top)
Expand Down Expand Up @@ -492,7 +490,7 @@ mod tests {
let message: u32 = 1234;
let signature = keypair.sign_raw(&message).unwrap();

signature.verify_raw([keypair.public()], &message).unwrap();
signature.verify_raw([&keypair.public()], &message).unwrap();
}

#[test]
Expand All @@ -503,7 +501,7 @@ mod tests {

let message: u32 = 1235;

assert!(signature.verify_raw([keypair.public()], &message).is_err());
assert!(signature.verify_raw([&keypair.public()], &message).is_err());
}

#[test]
Expand All @@ -518,7 +516,9 @@ mod tests {

if let Ok(signature) = signature {
// Sometimes at random, deserializing a tampered signature results itself in an `Err`
assert!(signature.verify_raw([keypair.public()], &message,).is_err());
assert!(signature
.verify_raw([&keypair.public()], &message,)
.is_err());
}
}

Expand All @@ -538,7 +538,7 @@ mod tests {
Signature::aggregate([alice_signature, bob_signature, carl_signature]).unwrap();

signature
.verify_raw([alice.public(), bob.public(), carl.public()], &message)
.verify_raw([&alice.public(), &bob.public(), &carl.public()], &message)
.unwrap();
}

Expand All @@ -560,7 +560,7 @@ mod tests {
let message: u32 = 1235;

assert!(signature
.verify_raw([alice.public(), bob.public(), carl.public()], &message,)
.verify_raw([&alice.public(), &bob.public(), &carl.public()], &message,)
.is_err());
}

Expand All @@ -586,7 +586,7 @@ mod tests {
if let Ok(signature) = signature {
// Sometimes at random, deserializing a tampered signature results itself in an `Err`
assert!(signature
.verify_raw([alice.public(), bob.public(), carl.public()], &message,)
.verify_raw([&alice.public(), &bob.public(), &carl.public()], &message,)
.is_err());
}
}
Expand All @@ -602,6 +602,8 @@ mod tests {

let message = 42u64;
let signature = deserialized.sign_raw(&message).unwrap();
signature.verify_raw([original.public()], &message).unwrap();
signature
.verify_raw([&original.public()], &message)
.unwrap();
}
}

0 comments on commit 81cc87d

Please sign in to comment.