@@ -42,44 +42,40 @@ def CKDh(Context, sk_par, c_par, i, lead, tag):
42
42
class RegisteredKey (object ):
43
43
Registered = HardenedOnlyContext (b'ZIPRegistered_KD' , b'\xAC ' )
44
44
45
- def __init__ (self , IKM , path , sk , chaincode , full_width = None ):
45
+ def __init__ (self , IKM , subpath , sk , chaincode , full_width = None ):
46
46
self .IKM = IKM
47
- self .path = path
47
+ self .subpath = subpath
48
48
self .sk = sk
49
49
self .chaincode = chaincode
50
50
self .full_width = full_width # the full-width cryptovalue at this path
51
51
52
52
@classmethod
53
- def master (cls , ContextString , S ):
53
+ def subtree_root (cls , ContextString , S , ZipNumber ):
54
54
length_ContextString = len (ContextString )
55
55
length_S = len (S )
56
56
57
57
assert length_ContextString <= 252
58
58
assert 32 <= length_S <= 252
59
59
60
60
IKM = bytes ([length_ContextString ]) + ContextString + bytes ([length_S ]) + S
61
- (sk , chaincode ) = MKGh (cls .Registered , IKM )
61
+ (sk_m , c_m ) = MKGh (cls .Registered , IKM )
62
+ (sk , chaincode ) = CKDh (cls .Registered , sk_m , c_m , hardened (ZipNumber ), 0 , b"" )
62
63
return cls (IKM , [], sk , chaincode )
63
64
64
- def child (self , i ):
65
- (sk_child , c_child ) = CKDh (self .Registered , self .sk , self .chaincode , i , 0 , b"" )
66
- return self .__class__ (None , self .path + [i ], sk_child , c_child )
67
-
68
- def child_with_tag (self , i , tag ):
65
+ def child (self , i , tag ):
69
66
(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 )
71
- return self .__class__ (None , self .path + [(i , tag )], sk_child , c_child , left + right )
67
+ (I_L , I_R ) = CKDh (self .Registered , self .sk , self .chaincode , i , 1 , tag )
68
+ return self .__class__ (None , self .subpath + [(i , tag )], sk_child , c_child , I_L + I_R )
72
69
73
70
74
71
def registered_key_derivation_tvs ():
75
72
args = render_args ()
76
73
77
74
context_string = b'Zcash test vectors'
78
75
seed = bytes (range (32 ))
79
- m = RegisteredKey .master (context_string , seed )
80
- m_1h = m .child (hardened (1 ))
81
- m_1h_2h = m_1h .child_with_tag (hardened (2 ), b"trans rights are human rights" )
82
- m_1h_2h_3h = m_1h_2h .child_with_tag (hardened (3 ), b"" )
76
+ m_1h = RegisteredKey .subtree_root (context_string , seed , 1 )
77
+ m_1h_2h = m_1h .child (hardened (2 ), b"trans rights are human rights" )
78
+ m_1h_2h_3h = m_1h_2h .child (hardened (3 ), b"" )
83
79
84
80
keys = [m_1h , m_1h_2h , m_1h_2h_3h ]
85
81
@@ -88,7 +84,7 @@ def registered_key_derivation_tvs():
88
84
'context_string' : context_string ,
89
85
'seed' : seed ,
90
86
'zip_number' : 1 ,
91
- 'subpath' : k .path [ 1 :] ,
87
+ 'subpath' : k .subpath ,
92
88
'sk' : k .sk ,
93
89
'c' : k .chaincode ,
94
90
'full_width' : k .full_width ,
0 commit comments