completeRound3 method

Future<MlDsaSigningMessage> completeRound3({
  1. required Iterable<MlDsaSigningMessage> round1Messages,
  2. required Iterable<MlDsaSigningMessage> round2Messages,
})

Completes Round3 after collecting Round1 + Round2 wire messages.

Implementation

Future<MlDsaSigningMessage> completeRound3({
  required Iterable<MlDsaSigningMessage> round1Messages,
  required Iterable<MlDsaSigningMessage> round2Messages,
}) async {
  _assertRound1Messages(round1Messages);
  _assertRound2Messages(round2Messages);
  final hashes = _orderedRound1Hashes(round1Messages);
  final reveals = _orderedRound2Reveals(round2Messages);
  final wfinals = await mithrilAggregateWfinals(
    t: params.t,
    n: params.n,
    round2Reveals: reveals,
  );
  final response = await mithrilRound3Party(
    t: params.t,
    n: params.n,
    ceremonySeed: _ceremonySeed.bytes,
    partyIdZeroBased: signerIndex - 1,
    activePartyIdsZeroBased: activePartyIdsZeroBased,
    message: message,
    sessionId: sessionId,
    round1Hashes: hashes,
    round2Reveals: reveals,
    wfinals: wfinals,
  );
  return MlDsaSigningMessage.round3(
    params: params,
    ceremonyId: ceremonyId,
    senderIndex: signerIndex,
    sessionId: sessionId,
    responseBytes: response,
  );
}