From 722a91762ada7360ffc2be2b9e8d6fed24fdd946 Mon Sep 17 00:00:00 2001 From: figtracer <1gusredo@gmail.com> Date: Fri, 28 Nov 2025 09:21:15 +0000 Subject: [PATCH 1/2] fix(bls): fix is_infinity when aggregating onto empty AggregateSignature --- crypto/bls/src/generic_aggregate_signature.rs | 16 ++++++++++------ crypto/bls/tests/tests.rs | 10 ++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/crypto/bls/src/generic_aggregate_signature.rs b/crypto/bls/src/generic_aggregate_signature.rs index 98a634ee11f..35674394a0d 100644 --- a/crypto/bls/src/generic_aggregate_signature.rs +++ b/crypto/bls/src/generic_aggregate_signature.rs @@ -124,13 +124,15 @@ where /// Aggregates a signature onto `self`. pub fn add_assign(&mut self, other: &GenericSignature) { 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; } } } diff --git a/crypto/bls/tests/tests.rs b/crypto/bls/tests/tests.rs index 00f82bfcecd..26070cba8f2 100644 --- a/crypto/bls/tests/tests.rs +++ b/crypto/bls/tests/tests.rs @@ -356,6 +356,16 @@ 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(); From e95f38b944ddd0641f6708f9bb66c4fbef6e9eea Mon Sep 17 00:00:00 2001 From: figtracer <1gusredo@gmail.com> Date: Tue, 9 Dec 2025 17:16:56 +0000 Subject: [PATCH 2/2] fmt --- crypto/bls/tests/tests.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/crypto/bls/tests/tests.rs b/crypto/bls/tests/tests.rs index 26070cba8f2..1827ea99210 100644 --- a/crypto/bls/tests/tests.rs +++ b/crypto/bls/tests/tests.rs @@ -356,14 +356,15 @@ 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"); + assert!( + agg.is_infinity(), + "is_infinity flag should be true after adding infinity to empty" + ); } #[test]