docs: def point_is_valid( generator, x, y ):
    """Is (x,y) a valid public key based on the specified generator?"""
  
    # These are the tests specified in X9.62.
  
    n = generator.order()
    curve = generator.curve()
    if x < 0 or n <= x or y < 0 or n <= y:
      return False
    if not curve.contains_point( x, y ):
      return False
    if not n*ellipticcurve.Point( curve, x, y ) == \
       ellipticcurve.INFINITY:
      return False
    return True