mirror of
https://github.com/aljazceru/nutshell.git
synced 2025-12-21 11:04:19 +01:00
32 lines
972 B
Python
32 lines
972 B
Python
import hashlib
|
|
from typing import Dict, List
|
|
from cashu.core.secp import PrivateKey, PublicKey
|
|
from cashu.core.settings import MAX_ORDER
|
|
|
|
|
|
def derive_keys(master_key: str, derivation_path: str = ""):
|
|
"""
|
|
Deterministic derivation of keys for 2^n values.
|
|
TODO: Implement BIP32.
|
|
"""
|
|
return {
|
|
2
|
|
** i: PrivateKey(
|
|
hashlib.sha256((str(master_key) + derivation_path + str(i)).encode("utf-8"))
|
|
.hexdigest()
|
|
.encode("utf-8")[:32],
|
|
raw=True,
|
|
)
|
|
for i in range(MAX_ORDER)
|
|
}
|
|
|
|
|
|
def derive_pubkeys(keys: Dict[int, PrivateKey]):
|
|
return {amt: keys[amt].pubkey for amt in [2**i for i in range(MAX_ORDER)]}
|
|
|
|
|
|
def derive_keyset_id(keys: Dict[str, PublicKey]):
|
|
"""Deterministic derivation keyset_id from set of public keys."""
|
|
pubkeys_concat = "".join([p.serialize().hex() for _, p in keys.items()])
|
|
return hashlib.sha256((pubkeys_concat).encode("utf-8")).hexdigest()[:16]
|