partialSigAgg method

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

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