@@ -40,7 +40,7 @@ def CKDh(Context, sk_par, c_par, i, lead, tag):
40
40
41
41
42
42
class RegisteredKey (object ):
43
- Context = HardenedOnlyContext (b'ZIPRegistered_KD' , b'\xAC ' )
43
+ Registered = HardenedOnlyContext (b'ZIPRegistered_KD' , b'\xAC ' )
44
44
45
45
def __init__ (self , IKM , path , sk , chaincode , full_width = None ):
46
46
self .IKM = IKM
@@ -58,16 +58,16 @@ def master(cls, ContextString, S):
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 .Context , IKM )
61
+ (sk , chaincode ) = MKGh (cls .Registered , IKM )
62
62
return cls (IKM , [], sk , chaincode )
63
63
64
64
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"" )
66
66
return self .__class__ (None , self .path + [i ], sk_child , c_child )
67
67
68
68
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 )
71
71
return self .__class__ (None , self .path + [(i , tag )], sk_child , c_child , left + right )
72
72
73
73
@@ -112,8 +112,30 @@ def registered_key_derivation_tvs():
112
112
)
113
113
114
114
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 ):
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_i , c_i ) = CKDh (self .Adhoc , self .sk , self .chaincode , i , 0 , b"" )
138
+ return self .__class__ (None , self .path + [i ], sk_i , c_i )
117
139
118
140
119
141
def arbitrary_key_derivation_tvs ():
0 commit comments