From 3773b4ea6ea3dcbc8a21c44016939ad72e100197 Mon Sep 17 00:00:00 2001 From: Fabian Jahr Date: Sat, 10 Jan 2026 18:48:03 +0100 Subject: [PATCH] halfagg: Increase max sigs limit --- half-aggregation.mediawiki | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/half-aggregation.mediawiki b/half-aggregation.mediawiki index 5667181..be48296 100644 --- a/half-aggregation.mediawiki +++ b/half-aggregation.mediawiki @@ -63,7 +63,7 @@ Moreover, they came up with an elegant approach to incremental aggregation that * A half-aggregate signature of ''u'' BIP 340 input signatures is serialized as the ''(u+1)⋅32''-byte array ''r1 || ... || ru || bytes(s)'' where ''ri'' is a 32-byte array from input signature ''i'' and ''s'' is a scalar aggregate (see below for details). * This document does ''not'' specify the aggregation of multiple aggregate signatures (yet). It is possible, but requires changing the encoding of an aggregate signature. Since it is not possible to undo the aggregation of the s-values, when verifying of such an aggregate signature the randomizers need to be the same as when verifying the individual aggregate signature. Therefore, the aggregate signature needs to encode a tree that reveals how the individual signatures were aggregated and how the resulting aggregate signatures were reaggregated. * The first randomizer ''z0'' is fixed to the constant ''1'', which speeds up verification because ''z0⋅R0 = R0''. This optimization has been suggested and proven secure by [https://eprint.iacr.org/2022/222.pdf Chen and Zhao]. -* The maximum number of signatures that can be aggregated is ''216 - 1''. Having a maximum value is supposed to prevent integer overflows. This specific value was a conservative choice and may be raised in the future (TODO). +* The maximum number of signatures that can be aggregated is ''232 - 1''. Having a maximum value is supposed to prevent integer overflows but it is understood that implementations may reject a lower number of signatures depending on their environment or application context. In order to prevent resource exhaustion implementations may set their own, lower limit. == Description == @@ -140,7 +140,7 @@ Input: * ''pms_to_agg0..u-1'': an array of ''u'' triples, where the first element of each tuple is a 32-byte public key, the second element is a 32-byte message and the third element is a 64-byte BIP 340 signature '''''IncAggregate(aggsig, pm_aggd0..v-1, pms_to_agg0..u-1)''''': -* Fail if ''v + u ≥ 216'' +* Fail if ''v + u ≥ 232'' * Fail if ''len(aggsig) ≠ 32 * (v + 1)'' * For ''i = 0 .. v-1'': ** Let ''(pki, mi) = pm_aggdi'' @@ -166,7 +166,7 @@ Input: '''''VerifyAggregate(aggsig, pm_aggd0..u-1)''''': The algorithm ''VerifyAggregate(aggsig, pm_aggd0..u-1)'' is defined as: -* Fail if ''u ≥ 216'' +* Fail if ''u ≥ 232'' * Fail if ''len(aggsig) ≠ 32 * (u + 1)'' * For ''i = 0 .. u-1'': ** Let ''(pki, mi) = pm_aggdi''