ECDSAPublicKey constructor
ECDSAPublicKey(
- ProjectiveECCPoint generator,
- ProjectiveECCPoint point, {
- bool verify = true,
Creates an ECDSA public key with a generator and a point.
Parameters:
generator: The generator point for the elliptic curve.point: The public key point.verify: Set totrueto verify that the point is on the curve and has a valid order (default istrue).
Implementation
factory ECDSAPublicKey(
ProjectiveECCPoint generator,
ProjectiveECCPoint point, {
bool verify = true,
}) {
final curve = generator.curve;
final n = generator.order;
if (n == null) {
throw ArgumentException.invalidOperationArguments(
"ECDSAPublicKey",
reason: "Invalid curve generator.",
);
}
final p = curve.p;
if (!(BigInt.zero <= point.x && point.x < p) ||
!(BigInt.zero <= point.y && point.y < p)) {
throw ArgumentException.invalidOperationArguments(
"ECDSAPublicKey",
name: "point",
reason: "Invalid public key.",
);
}
if (verify && !curve.containsPoint(point.x, point.y)) {
throw ArgumentException.invalidOperationArguments(
"ECDSAPublicKey",
name: "point",
reason: "Invalid public key.",
);
}
if (verify && curve.cofactor() != BigInt.one && !(point * n).isZero()) {
throw ArgumentException.invalidOperationArguments(
"ECDSAPublicKey",
name: "point",
reason: "Invalid public key.",
);
}
return ECDSAPublicKey._(generator, point);
}