1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-30 11:28:21 +00:00
trezor-firmware/TrezorCrypto.pyx

41 lines
1.0 KiB
Cython
Raw Normal View History

2015-01-11 15:43:07 +00:00
cimport c
cimport cython
cdef class HDNode:
cdef c.HDNode node
def __init__(self, str serialized = None, HDNode copyfrom = None):
if copyfrom is not None:
self.node = copyfrom.node
elif serialized is not None:
if c.hdnode_deserialize(serialized, cython.address(self.node)) != 0:
2015-01-11 15:43:07 +00:00
raise Exception('Invalid xpub/xprv provided')
else:
raise Exception('Need to provide serialized or node parameter')
2015-01-11 15:43:07 +00:00
def xpub(self):
cdef char[120] string
c.hdnode_serialize_public(cython.address(self.node), string, 120)
return str(string)
def xprv(self):
cdef char[120] string
c.hdnode_serialize_private(cython.address(self.node), string, 120)
return str(string)
def address(self):
cdef char[40] string
c.ecdsa_get_address(self.node.public_key, 0, string, 40)
return str(string)
def public_ckd(self, int i):
x = HDNode(copyfrom=self)
2015-01-11 15:43:07 +00:00
c.hdnode_public_ckd(cython.address(x.node), i)
return x
def private_ckd(self, int i):
x = HDNode(copyfrom=self)
2015-01-11 15:43:07 +00:00
c.hdnode_private_ckd(cython.address(x.node), i)
return x