sign static method

Signature sign(
  1. PrivateKey privateKey,
  2. Uint8List msgBytes, {
  3. bool hashMessage = true,
})

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");
}