partialSigAgg method
Aggregates MuSig2 partial signatures
Implementation
List<int> partialSigAgg({
required List<List<int>> signatures,
required MuSig2Session session,
}) {
final values = MuSig2Utils.decodeSession(session);
BigInt s = BigInt.zero;
for (final i in signatures) {
final sBig = BigintUtils.fromBytes(i);
if (sBig >= MuSig2Constants.order) {
throw ArgumentException.invalidOperationArguments(
"partialSigAgg",
name: "signatures",
reason: "Invalid signatures.",
);
}
s = (s + sBig) % MuSig2Constants.order;
}
BigInt g = BigInt.one;
if (values.publicKey.isOdd) {
g = MuSig2Constants.order - BigInt.one;
}
s =
(s + values.eAsInteger * g * values.taccAsInteger) %
MuSig2Constants.order;
return [...values.r.toXonly(), ...BigintUtils.toBytes(s)];
}