34 lines
874 B
Python
34 lines
874 B
Python
import hashlib
|
|
|
|
import binascii
|
|
|
|
|
|
class HashDerivedKey:
|
|
|
|
@staticmethod
|
|
def from_hex(hex_str):
|
|
return HashDerivedKey(bytes(bytearray.fromhex(hex_str)))
|
|
|
|
def __init__(self, master):
|
|
def ensure_bytes(b):
|
|
assert isinstance(b, bytes)
|
|
return b
|
|
ensure_bytes(master)
|
|
|
|
def derive(seed):
|
|
ensure_bytes(seed)
|
|
sha = hashlib.sha256()
|
|
sha.update(master)
|
|
sha.update(seed)
|
|
return sha.digest()
|
|
|
|
def hex(b): return binascii.hexlify(b).decode("utf-8")
|
|
self.master = master
|
|
self.master_hex = lambda: hex(master)
|
|
self.derive = derive
|
|
self.derive_hex = lambda seed: hex(derive(seed))
|
|
|
|
def derive_metadata(self, seed):
|
|
key = self.derive(seed)
|
|
return (key, {"key_seed": binascii.hexlify(seed).decode("utf-8")})
|