mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-03-25 04:25:42 +00:00
core/cardano: simplify keychain implementation
This commit is contained in:
parent
d2c1624602
commit
4eb5b927c0
@ -16,21 +16,14 @@ class Keychain:
|
||||
"""Cardano keychain hard-coded to Byron and Shelley seed namespaces."""
|
||||
|
||||
def __init__(self, root: bip32.HDNode) -> None:
|
||||
self.root = root
|
||||
self.byron_root = self._create_namespace_root(seed_namespaces.BYRON)
|
||||
self.shelley_root = self._create_namespace_root(seed_namespaces.SHELLEY)
|
||||
self.byron_root = derive_path_cardano(root, seed_namespaces.BYRON)
|
||||
self.shelley_root = derive_path_cardano(root, seed_namespaces.SHELLEY)
|
||||
root.__del__()
|
||||
|
||||
def verify_path(self, path: Bip32Path) -> None:
|
||||
if not is_byron_path(path) and not is_shelley_path(path):
|
||||
raise wire.DataError("Forbidden key path")
|
||||
|
||||
def _create_namespace_root(self, namespace: list):
|
||||
new_root = self.root.clone()
|
||||
for i in namespace:
|
||||
new_root.derive_cardano(i)
|
||||
|
||||
return new_root
|
||||
|
||||
def _get_path_root(self, path: list):
|
||||
if is_byron_path(path):
|
||||
return self.byron_root
|
||||
@ -48,10 +41,7 @@ class Keychain:
|
||||
suffix = node_path[len(seed_namespaces.SHELLEY) :]
|
||||
|
||||
# derive child node from the root
|
||||
node = path_root.clone()
|
||||
for i in suffix:
|
||||
node.derive_cardano(i)
|
||||
return node
|
||||
return derive_path_cardano(path_root, suffix)
|
||||
|
||||
# XXX the root node remains in session cache so we should not delete it
|
||||
# def __del__(self) -> None:
|
||||
@ -66,6 +56,13 @@ def is_shelley_path(path: Bip32Path):
|
||||
return path[: len(seed_namespaces.SHELLEY)] == seed_namespaces.SHELLEY
|
||||
|
||||
|
||||
def derive_path_cardano(root: bip32.HDNode, path: Bip32Path) -> bip32.HDNode:
|
||||
node = root.clone()
|
||||
for i in path:
|
||||
node.derive_cardano(i)
|
||||
return node
|
||||
|
||||
|
||||
@cache.stored_async(cache.APP_CARDANO_ROOT)
|
||||
async def get_keychain(ctx: wire.Context) -> Keychain:
|
||||
if not device.is_initialized():
|
||||
|
Loading…
Reference in New Issue
Block a user