Skip to content

Commit 0f20d79

Browse files
dairastr4dnuttycom
committed
Update CKDh to match ZIP 32 changes.
Co-authored-by: Jack Grigg <[email protected]> Co-authored-by: Kris Nuttycombe <[email protected]> Signed-off-by: Daira-Emma Hopwood <[email protected]>
1 parent 7de2348 commit 0f20d79

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

zcash_test_vectors/orchard/key_components.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def master(cls, S):
6666
return cls(chaincode, sk)
6767

6868
def child(self, i):
69-
(sk_i, c_i) = CKDh(self.Orchard, self.data, self.chaincode, i)
69+
(sk_i, c_i) = CKDh(self.Orchard, self.data, self.chaincode, i, 0, b"")
7070
return self.__class__(c_i, sk_i)
7171

7272

zcash_test_vectors/zip_0032.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,20 @@ def MKGh(Context, IKM):
2626
I_R = I[32:]
2727
return (I_L, I_R)
2828

29-
def CKDh(Context, sk_par, c_par, i):
29+
def CKDh(Context, sk_par, c_par, i, lead, tag):
3030
assert type(Context) == HardenedOnlyContext
3131
assert 0x80000000 <= i and i <= 0xFFFFFFFF
32+
assert 0x00 <= lead and lead <= 0xFF
33+
assert type(tag) == bytes
3234

33-
I = prf_expand(c_par, Context.CKDDomain + sk_par + i2leosp(32, i))
35+
lead_enc = bytes([] if lead == 0 and tag == b"" else [lead])
36+
I = prf_expand(c_par, Context.CKDDomain + sk_par + i2leosp(32, i) + lead_enc + tag)
3437
I_L = I[:32]
3538
I_R = I[32:]
3639
return (I_L, I_R)
3740

3841
class ArbitraryKey(object):
39-
Arbitrary = HardenedOnlyContext(b'ZcashArbitraryKD', b'\xAB')
42+
Adhoc = HardenedOnlyContext(b'ZcashArbitraryKD', b'\xAB')
4043

4144
def __init__(self, IKM, path, sk, chaincode):
4245
self.IKM = IKM
@@ -53,11 +56,11 @@ def master(cls, ContextString, S):
5356
assert 32 <= length_S <= 252
5457

5558
IKM = bytes([length_ContextString]) + ContextString + bytes([length_S]) + S
56-
(sk, chaincode) = MKGh(cls.Arbitrary, IKM)
59+
(sk, chaincode) = MKGh(cls.Adhoc, IKM)
5760
return cls(IKM, [], sk, chaincode)
5861

5962
def child(self, i):
60-
(sk_i, c_i) = CKDh(self.Arbitrary, self.sk, self.chaincode, i)
63+
(sk_i, c_i) = CKDh(self.Adhoc, self.sk, self.chaincode, i, 0, b"")
6164
return self.__class__(None, self.path + [i], sk_i, c_i)
6265

6366

0 commit comments

Comments
 (0)