ECDSAPublicKey constructor

ECDSAPublicKey(
  1. ProjectiveECCPoint generator,
  2. ProjectiveECCPoint point, {
  3. 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 to true to verify that the point is on the curve and has a valid order (default is true).

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