sign static method
Sign bytes using sha256 with ecdsa
Implementation
static Signature sign(common.PrivateKey privateKey, Uint8List msgBytes,
{bool hashMessage = true}) {
// Setup deterministic signer
pc.ECDomainParameters domainParams =
pc.ECDomainParameters(privateKey.curve.name!);
BigInt d = common.PDUtil.decodeBigInt(privateKey.ec(), endian: Endian.big);
pc.PrivateKeyParameter privKeyParams =
pc.PrivateKeyParameter(pc.ECPrivateKey(d, domainParams));
ECDSASigner signer = ECDSASigner(
hashMessage ? SHA256Digest() : null, HMac(SHA256Digest(), 64));
// Sign
signer.init(true, privKeyParams);
pc.ECSignature ecsig = signer.generateSignature(msgBytes) as pc.ECSignature;
// Verify
ECDSASigner verifier = ECDSASigner(
hashMessage ? SHA256Digest() : null, HMac(SHA256Digest(), 64));
pc.ECPoint? Q = domainParams.G * d;
pc.PublicKeyParameter pubKeyParams =
pc.PublicKeyParameter(pc.ECPublicKey(Q, domainParams));
verifier.init(false, pubKeyParams);
if (verifier.verifySignature(msgBytes, ecsig)) {
return Signature(r: ecsig.r, s: ecsig.s, ensureBigEndian: true);
}
throw Exception("Couldn't verify signature");
}