combine static method

Uint8List combine(
  1. AggregatedKey aggKey,
  2. NonceSession session,
  3. List<PartialSig> partials
)

Combine partials into a BIP-340 Schnorr sig (64 bytes: R_x || s). s_final = sum(s_i) mod n.

Implementation

static Uint8List combine(
  AggregatedKey aggKey,
  NonceSession session,
  List<PartialSig> partials,
) {
  if (partials.isEmpty) {
    throw ArgumentError('No partial signatures to combine');
  }

  final aggR = session.aggregateNonces();
  final rPoint = ecBytesToPoint(aggR);
  final rX = bigIntToBytes(rPoint.x, 32);

  BigInt sSum = BigInt.zero;
  for (final partial in partials) {
    sSum = (sSum + bytesToBigInt(partial.partialS)) % secp256k1N;
  }

  final sig = Uint8List(64);
  sig.setRange(0, 32, rX);
  sig.setRange(32, 64, bigIntToBytes(sSum, 32));
  return sig;
}