EcdaSignature.sign constructor
Implementation
factory EcdaSignature.sign(String message, Uint8List privateKey) {
final messageHash = dynamicToUint8List(message);
final digest = SHA256Digest();
final signer = ECDSASigner(null, HMac(digest, 64));
final key = ECPrivateKey(hexToBigInt(dynamicToHex(privateKey)), secp256k1);
signer.init(true, PrivateKeyParameter(key));
ECSignature sig = signer.generateSignature(messageHash) as ECSignature;
if (sig.s.compareTo(_halfCurveOrder) > 0) {
final canonicalisedS = secp256k1.n - sig.s;
sig = ECSignature(sig.r, canonicalisedS);
}
String pubHex =
dynamicToHex(privateKeyToPublicKey(privateKey, compress: false));
int recId = getRecid(pubHex, message, sig);
if (recId == -1) {
throw Exception(
'Could not construct a recoverable key. This should never happen');
}
return EcdaSignature(Uint8List.fromList(toBytesPadded(sig.r, 32)),
Uint8List.fromList(toBytesPadded(sig.s, 32)), recId);
}