verifySignature static method
标准验签
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;
}