5 from __future__
import annotations
7 OwnershipKeyPair, ownership_key_as_hex, gen_ownership_keypair, \
8 ownership_public_key_from_hex, ownership_secret_key_from_hex
10 EncryptionKeyPair, EncryptionPublicKey, EncryptionSecretKey, \
11 generate_encryption_keypair, encryption_public_key_as_hex, \
12 encryption_public_key_from_hex, encryption_secret_key_as_hex, \
13 encryption_secret_key_from_hex
15 from typing
import Dict, Any
20 Public half of a zethAddress. addr_pk = (a_pk and k_pk)
22 def __init__(self, a_pk: OwnershipPublicKey, k_pk: EncryptionPublicKey):
23 self.a_pk: OwnershipPublicKey = a_pk
24 self.k_pk: EncryptionPublicKey = k_pk
28 Write the address as "<ownership-key-hex>:<encryption_key_hex>".
29 (Technically the ":" is not required, since the first key is written
30 with fixed length, but a separator provides some limited sanity
35 return f
"{a_pk_hex}:{k_pk_hex}"
38 def parse(key_hex: str) -> ZethAddressPub:
39 owner_enc = key_hex.split(
":")
40 if len(owner_enc) != 2:
41 raise Exception(
"invalid JoinSplitPublicKey format")
49 Secret half of a zethAddress. addr_sk = (a_sk and k_sk)
51 def __init__(self, a_sk: OwnershipSecretKey, k_sk: EncryptionSecretKey):
52 self.a_sk: OwnershipSecretKey = a_sk
53 self.k_sk: EncryptionSecretKey = k_sk
60 return ZethAddressPriv._from_json_dict(json.loads(key_json))
62 def _to_json_dict(self) -> Dict[str, Any]:
69 def _from_json_dict(key_dict: Dict[str, Any]) -> ZethAddressPriv:
77 Secret and public keys for both ownership and encryption (referrred to as
78 "zethAddress" in the paper).
82 a_pk: OwnershipPublicKey,
83 k_pk: EncryptionPublicKey,
84 a_sk: OwnershipSecretKey,
85 k_sk: EncryptionSecretKey):
91 ownership: OwnershipKeyPair,
92 encryption: EncryptionKeyPair) -> ZethAddress:
101 js_secret: ZethAddressPriv,
102 js_public: ZethAddressPub) -> ZethAddress:
104 js_public.a_pk, js_public.k_pk, js_secret.a_sk, js_secret.k_sk)
113 return ZethAddress.from_key_pairs(ownership_keypair, encryption_keypair)