Skip to content

Commit 4490c8e

Browse files
committed
check expected error and correct box usage for errors
1 parent 92f2b93 commit 4490c8e

File tree

3 files changed

+21
-14
lines changed

3 files changed

+21
-14
lines changed

mithril-stm/src/error.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pub enum MultiSignatureError {
3636

3737
/// Verification key is the infinity
3838
#[error("Verification key is the infinity")]
39-
VerificationKeyInfinity(VerificationKey),
39+
VerificationKeyInfinity(Box<VerificationKey>),
4040
}
4141

4242
/// Errors which can be output by Mithril single signature verification.
@@ -146,6 +146,10 @@ pub enum RegisterError {
146146
#[error("This key has already been registered.")]
147147
KeyRegistered(Box<VerificationKey>),
148148

149+
/// Verification key is the infinity
150+
#[error("Verification key is the infinity")]
151+
VerificationKeyInfinity(Box<VerificationKey>),
152+
149153
/// The supplied key is not valid
150154
#[error("The verification of correctness of the supplied key is invalid.")]
151155
KeyInvalid(Box<VerificationKeyPoP>),
@@ -263,6 +267,7 @@ impl From<MultiSignatureError> for RegisterError {
263267
match e {
264268
MultiSignatureError::SerializationError => Self::SerializationError,
265269
MultiSignatureError::KeyInvalid(e) => Self::KeyInvalid(e),
270+
MultiSignatureError::VerificationKeyInfinity(e) => Self::VerificationKeyInfinity(e),
266271
_ => unreachable!(),
267272
}
268273
}
@@ -273,7 +278,7 @@ impl From<MultiSignatureError> for RegisterError {
273278
pub(crate) fn blst_err_to_mithril(
274279
e: BLST_ERROR,
275280
sig: Option<Signature>,
276-
key: Option<VerificationKey>
281+
key: Option<VerificationKey>,
277282
) -> Result<(), MultiSignatureError> {
278283
match e {
279284
BLST_ERROR::BLST_SUCCESS => Ok(()),
@@ -282,7 +287,7 @@ pub(crate) fn blst_err_to_mithril(
282287
return Err(MultiSignatureError::SignatureInfinity(s));
283288
}
284289
if let Some(vk) = key {
285-
return Err(MultiSignatureError::VerificationKeyInfinity(vk));
290+
return Err(MultiSignatureError::VerificationKeyInfinity(Box::new(vk)));
286291
}
287292
Err(MultiSignatureError::SerializationError)
288293
}

mithril-stm/src/key_reg.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,9 @@ impl KeyReg {
4242
/// The function fails when the proof of possession is invalid or when the key is already registered.
4343
pub fn register(&mut self, stake: Stake, pk: VerificationKeyPoP) -> Result<(), RegisterError> {
4444
if let Entry::Vacant(e) = self.keys.entry(pk.vk) {
45-
if pk.check().is_ok() {
46-
e.insert(stake);
47-
return Ok(());
48-
} else {
49-
return Err(RegisterError::KeyInvalid(Box::new(pk)));
50-
}
45+
pk.check()?;
46+
e.insert(stake);
47+
return Ok(());
5148
}
5249
Err(RegisterError::KeyRegistered(Box::new(pk.vk)))
5350
}

mithril-stm/src/multi_sig.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,8 @@ impl Signature {
406406

407407
blst_err_to_mithril(
408408
aggr_sig.0.verify(false, msg, &[], &[], &aggr_vk.0, false),
409-
Some(aggr_sig), None,
409+
Some(aggr_sig),
410+
None,
410411
)
411412
}
412413

@@ -434,7 +435,7 @@ impl Signature {
434435
blst_err_to_mithril(
435436
batched_sig.aggregate_verify(false, &slice_msgs, &[], &p2_vks, false),
436437
None,
437-
None
438+
None,
438439
)
439440
.map_err(|_| MultiSignatureError::BatchInvalid)
440441
}
@@ -636,6 +637,7 @@ mod unsafe_helpers {
636637
#[cfg(test)]
637638
mod tests {
638639
use super::*;
640+
use crate::error::RegisterError;
639641
use crate::key_reg::KeyReg;
640642
use proptest::prelude::*;
641643
use rand_chacha::ChaCha20Rng;
@@ -674,7 +676,8 @@ mod tests {
674676
let p1 = blst_p1::default();
675677
let sig_infinity = Signature(p1_affine_to_sig(&p1));
676678

677-
assert!(sig_infinity.verify(&msg, &vk).is_err());
679+
let result = sig_infinity.verify(&msg, &vk);
680+
assert_eq!(result, Err(MultiSignatureError::SignatureInfinity(sig_infinity)));
678681
}
679682

680683
#[test]
@@ -687,7 +690,8 @@ mod tests {
687690
let vk_infinity = VerificationKey(p2_affine_to_vk(&p2));
688691
let vkpop_infinity = VerificationKeyPoP { vk: vk_infinity, pop };
689692

690-
assert!(vkpop_infinity.check().is_err());
693+
let result = vkpop_infinity.check();
694+
assert_eq!(result, Err(MultiSignatureError::VerificationKeyInfinity(Box::new(vkpop_infinity.vk))));
691695
}
692696

693697
#[test]
@@ -707,7 +711,8 @@ mod tests {
707711
let _ = kr.register(1, vkpop);
708712
}
709713

710-
assert!(kr.register(1, vkpop_infinity).is_err());
714+
let result = kr.register(1, vkpop_infinity);
715+
assert_eq!(result, Err(RegisterError::VerificationKeyInfinity(Box::new(vkpop_infinity.vk))));
711716
}
712717

713718
#[test]

0 commit comments

Comments
 (0)