verifySignature static method

bool verifySignature(
  1. String msg,
  2. String signHex,
  3. String publicKey, {
  4. bool der = false,
  5. String userId = '1234567812345678',
})

标准验签

Implementation

static bool verifySignature(String msg, String signHex, String publicKey,
    {bool der = false, String userId = '1234567812345678'}) {
  final e = BigInt.parse(_getHash(msg, publicKey, userId), radix: 16);

  BigInt r, s;
  if (der) {
    final obj = ASN1Utils.decodeDer(signHex);
    r = obj['r']!;
    s = obj['s']!;
  } else {
    r = BigInt.parse(signHex.substring(0, 64), radix: 16);
    s = BigInt.parse(signHex.substring(64), radix: 16);
  }

  if (r <= BigInt.zero || r >= _ecParam.n) return false;
  if (s <= BigInt.zero || s >= _ecParam.n) return false;

  final t = (r + s) % _ecParam.n;
  if (t == BigInt.zero) return false;

  final p1 = _ecParam.G!.multiply(s);
  final p2 = _ecParam.curve.decodePointHex(publicKey)!.multiply(t);
  final p = p1.add(p2);

  final R = (e + p.getX().toBigInteger()) % _ecParam.n;
  return R == r;
}