Skip to content

Commit 493bb5d

Browse files
committed
WIP for ArbitraryKey reversion.
Signed-off-by: Daira-Emma Hopwood <[email protected]>
1 parent dd6ab67 commit 493bb5d

File tree

1 file changed

+29
-7
lines changed

1 file changed

+29
-7
lines changed

zcash_test_vectors/zip_0032.py

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def CKDh(Context, sk_par, c_par, i, lead, tag):
4040

4141

4242
class RegisteredKey(object):
43-
Context = HardenedOnlyContext(b'ZIPRegistered_KD', b'\xAC')
43+
Registered = HardenedOnlyContext(b'ZIPRegistered_KD', b'\xAC')
4444

4545
def __init__(self, IKM, path, sk, chaincode, full_width=None):
4646
self.IKM = IKM
@@ -58,16 +58,16 @@ def master(cls, ContextString, S):
5858
assert 32 <= length_S <= 252
5959

6060
IKM = bytes([length_ContextString]) + ContextString + bytes([length_S]) + S
61-
(sk, chaincode) = MKGh(cls.Context, IKM)
61+
(sk, chaincode) = MKGh(cls.Registered, IKM)
6262
return cls(IKM, [], sk, chaincode)
6363

6464
def child(self, i):
65-
(sk_child, c_child) = CKDh(self.Context, self.sk, self.chaincode, i, 0, b"")
65+
(sk_child, c_child) = CKDh(self.Registered, self.sk, self.chaincode, i, 0, b"")
6666
return self.__class__(None, self.path + [i], sk_child, c_child)
6767

6868
def child_with_tag(self, i, tag):
69-
(sk_child, c_child) = CKDh(self.Context, self.sk, self.chaincode, i, 0, tag)
70-
(left, right) = CKDh(self.Context, self.sk, self.chaincode, i, 1, tag)
69+
(sk_child, c_child) = CKDh(self.Registered, self.sk, self.chaincode, i, 0, tag)
70+
(left, right) = CKDh(self.Registered, self.sk, self.chaincode, i, 1, tag)
7171
return self.__class__(None, self.path + [(i, tag)], sk_child, c_child, left + right)
7272

7373

@@ -112,8 +112,30 @@ def registered_key_derivation_tvs():
112112
)
113113

114114

115-
class ArbitraryKey(RegisteredKey):
116-
Context = HardenedOnlyContext(b'ZcashArbitraryKD', b'\xAB')
115+
class ArbitraryKey(object):
116+
Adhoc = HardenedOnlyContext(b'ZcashArbitraryKD', b'\xAB')
117+
118+
def __init__(self, IKM, path, sk, chaincode, full_width=None):
119+
self.IKM = IKM
120+
self.path = path
121+
self.sk = sk
122+
self.chaincode = chaincode
123+
124+
@classmethod
125+
def master(cls, ContextString, S):
126+
length_ContextString = len(ContextString)
127+
length_S = len(S)
128+
129+
assert length_ContextString <= 252
130+
assert 32 <= length_S <= 252
131+
132+
IKM = bytes([length_ContextString]) + ContextString + bytes([length_S]) + S
133+
(sk, chaincode) = MKGh(cls.Adhoc, IKM)
134+
return cls(IKM, [], sk, chaincode)
135+
136+
def child(self, i):
137+
(sk_child, c_child) = CKDh(self.Adhoc, self.sk, self.chaincode, i, 0, b"")
138+
return self.__class__(None, self.path + [i], sk_child, c_child)
117139

118140

119141
def arbitrary_key_derivation_tvs():

0 commit comments

Comments
 (0)