sign method

  1. @override
List<int> sign(
  1. List<int> data
)
override

Signs the given data and returns the signature as bytes.

Implementation

@override
List<int> sign(List<int> data) {
  if (_privKey == null) {
    throw StateError('Private key required for signing');
  }
  final signer = ECDSASigner();
  final random = FortunaRandom();
  random.seed(KeyParameter(Uint8List.fromList(List.generate(
      32, (_) => DateTime.now().microsecondsSinceEpoch % 256))));
  signer.init(
      true,
      ParametersWithRandom(
          PrivateKeyParameter<ECPrivateKey>(_privKey!), random));
  final sig =
      signer.generateSignature(Uint8List.fromList(data)) as ECSignature;
  // For now, concatenate r and s as bytes (DER encoding not available in basic_utils)
  final rBytes = _bigIntToFixedBytes(sig.r, 32);
  final sBytes = _bigIntToFixedBytes(sig.s, 32);
  return Uint8List.fromList([...rBytes, ...sBytes]);
}