Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def pub_key_to_point(pub_key: str) -> Point:
'''
Given a public key, return a Point object
(Used to verify signatures)
'''
xs, ys = pub_key.split('x')
return Point(int(xs, 16), int(ys, 16), curve=curve.P256)
:return HDKey: HD Key class object
"""
if network is None:
network = self.network.name
if index > 0x80000000:
raise BKeyError("Cannot derive hardened key from public private key. Index must be less than 0x80000000")
data = self.public_byte + struct.pack('>L', index)
key, chain = self._key_derivation(data)
key = change_base(key, 256, 10)
if key >= secp256k1_n:
raise BKeyError("Key cannot be greater than secp256k1_n. Try another index number.")
x, y = self.public_point()
if USE_FASTECDSA:
ki = ec_point(key) + fastecdsa_point.Point(x, y, fastecdsa_secp256k1)
ki_x = ki.x
ki_y = ki.y
else:
ki = ec_point(key) + ecdsa.ellipticcurve.Point(secp256k1_curve, x, y, secp256k1_n)
ki_x = ki.x()
ki_y = ki.y()
if ki_y % 2:
prefix = '03'
else:
prefix = '02'
xhex = change_base(ki_x, 10, 16, 64)
secret = binascii.unhexlify(prefix + xhex)
return HDKey(key=secret, chain=chain, depth=self.depth+1, parent_fingerprint=self.fingerprint,
child_index=index, is_private=False, witness_type=self.witness_type, multisig=self.multisig,
encoding=self.encoding, network=network)
x = int.from_bytes(pub_key[1:], "big")
y_y = pow(x, 3) + CURVE.a * x + CURVE.b
y = mod_sqrt(y_y, CURVE.p, y_odd)
elif len(pub_key) == 65:
tag = pub_key[0:1]
assert tag == SECP256K1_TAG_PUBKEY_UNCOMPRESSED
x = int.from_bytes(pub_key[1:ENCODED_SIZE + 1], "big")
y = int.from_bytes(pub_key[ENCODED_SIZE + 1:], "big")
else:
raise NotImplementedError
return point.Point(x, y, CURVE)
except:
raise ValueError("The public key could not be parsed or is invalid")