docs: def decode_secp256r1(str, unhex=True, check_on_curve=True):
          """
          decode a public key on the secp256r1 curve
          """
  
          GFp = FiniteField(int("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", 16))
          ec = EllipticCurve(GFp, 115792089210356248762697446949407573530086143415290314195533631308867097853948,
                             41058363725152142129326129780047268409114441015993725554835256314039467401291)
  
          point = ec.decode_from_hex(str, unhex=unhex)
  
          if check_on_curve:
              if point.isoncurve():
                  return ECDSA(GFp, point, int("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", 16))
              else:
                  raise Exception("Could not decode string")
  
          return ECDSA(GFp, point, int("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", 16))