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