partialSigAgg static method

List<int> partialSigAgg({
  1. required List<List<int>> signatures,
  2. required MuSig2Session session,
})

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))
  ];
}