partialSigAgg static method
Aggregates MuSig2 partial signatures
Implementation
static 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 >= MuSig2Const.order) {
throw MuSig2Exception("Invalid schnorr signature.");
}
s = (s + sBig) % MuSig2Const.order;
}
BigInt g = BigInt.one;
if (values.publicKey.isOdd) {
g = MuSig2Const.order - BigInt.one;
}
s = (s + values.e * g * values.tacc) % MuSig2Const.order;
return [
...values.r.toXonly(),
...BigintUtils.toBytes(s, length: BigintUtils.bitlengthInBytes(s))
];
}