mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-02 16:21:42 +00:00
fix(bls): fix is_infinity when aggregating onto empty AggregateSignature (#8496)
Co-Authored-By: figtracer <1gusredo@gmail.com> Co-Authored-By: Michael Sproul <michaelsproul@users.noreply.github.com>
This commit is contained in:
@@ -124,13 +124,15 @@ where
|
||||
/// Aggregates a signature onto `self`.
|
||||
pub fn add_assign(&mut self, other: &GenericSignature<Pub, Sig>) {
|
||||
if let Some(other_point) = other.point() {
|
||||
self.is_infinity = self.is_infinity && other.is_infinity;
|
||||
if let Some(self_point) = &mut self.point {
|
||||
self_point.add_assign(other_point)
|
||||
self_point.add_assign(other_point);
|
||||
self.is_infinity = self.is_infinity && other.is_infinity;
|
||||
} else {
|
||||
let mut self_point = AggSig::infinity();
|
||||
self_point.add_assign(other_point);
|
||||
self.point = Some(self_point)
|
||||
self.point = Some(self_point);
|
||||
// the result is infinity, if `other` is
|
||||
self.is_infinity = other.is_infinity;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -138,13 +140,15 @@ where
|
||||
/// Aggregates an aggregate signature onto `self`.
|
||||
pub fn add_assign_aggregate(&mut self, other: &Self) {
|
||||
if let Some(other_point) = other.point() {
|
||||
self.is_infinity = self.is_infinity && other.is_infinity;
|
||||
if let Some(self_point) = &mut self.point {
|
||||
self_point.add_assign_aggregate(other_point)
|
||||
self_point.add_assign_aggregate(other_point);
|
||||
self.is_infinity = self.is_infinity && other.is_infinity;
|
||||
} else {
|
||||
let mut self_point = AggSig::infinity();
|
||||
self_point.add_assign_aggregate(other_point);
|
||||
self.point = Some(self_point)
|
||||
self.point = Some(self_point);
|
||||
// the result is infinity, if `other` is
|
||||
self.is_infinity = other.is_infinity;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -356,6 +356,17 @@ macro_rules! test_suite {
|
||||
.assert_single_message_verify(true)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn empty_aggregate_plus_infinity_should_be_infinity() {
|
||||
let mut agg = AggregateSignature::empty();
|
||||
let infinity_sig = Signature::deserialize(&INFINITY_SIGNATURE).unwrap();
|
||||
agg.add_assign(&infinity_sig);
|
||||
assert!(
|
||||
agg.is_infinity(),
|
||||
"is_infinity flag should be true after adding infinity to empty"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn deserialize_infinity_public_key() {
|
||||
PublicKey::deserialize(&bls::INFINITY_PUBLIC_KEY).unwrap_err();
|
||||
|
||||
Reference in New Issue
Block a user