simulate static method

Future<Uint8List> simulate({
  1. required List<Share> shares,
  2. required Uint8List message,
  3. Uint8List? context,
})

In-process C3 simulation — prefer package:pqthreshold/testing.dart.

Implementation

static Future<Uint8List> simulate({
  required List<Share> shares,
  required Uint8List message,
  Uint8List? context,
}) async {
  assertShareSetConsistent(shares);
  final params = shares.first.params;
  if (shares.length < params.t) {
    throw InsufficientShares(
      'Need at least ${params.t} shares, got ${shares.length}',
    );
  }

  final publicKey = PublicKey.create(
    params: params,
    ceremonyId: shares.first.ceremonyId,
    publicKeyBytes: shares.first.verificationData,
  );

  final partials = <PartialSignature>[];
  for (final share in shares.take(params.t)) {
    partials.add(
      await ThresholdSigner.signPartial(
        share: share,
        message: message,
        context: context,
      ),
    );
  }

  return ThresholdSigner.combine(
    partials: partials,
    publicKey: publicKey,
    message: message,
    context: context,
  );
}