@@ -95,9 +95,10 @@ export function deriveChildNodePrivate(
9595 const kR : Buffer = Buffer . from ( extendedKey . subarray ( 32 , 64 ) ) ;
9696 const cc : Uint8Array = extendedKey . subarray ( 64 , 96 ) ;
9797
98+ // Steps 1 & 3: Produce Z and child chain code, in accordance with hardening branching logic
9899 const { z, childChainCode } = index < 0x80000000 ? derivedNonHardened ( kL , cc , index ) : deriveHardened ( kL , kR , cc , index ) ;
99100
100- const chainCode = childChainCode . subarray ( 32 , 64 ) ;
101+ // Step 2: compute child private key
101102 const zLeft = z . subarray ( 0 , 32 ) ; // 32 bytes
102103 const zRight = z . subarray ( 32 , 64 ) ;
103104
@@ -139,7 +140,7 @@ export function deriveChildNodePrivate(
139140 Buffer . from ( right ) . copy ( rightBuffer , 0 , 0 , right . length ) // padding with zeros if needed
140141
141142 // return (kL, kR, c)
142- return Buffer . concat ( [ left , rightBuffer , chainCode ] ) ;
143+ return Buffer . concat ( [ left , rightBuffer , childChainCode ] ) ;
143144}
144145
145146/**
@@ -169,7 +170,6 @@ export function deriveChildNodePublic(extendedKey: Uint8Array, index: number, g:
169170 data [ 0 ] = 0x02 ;
170171 const z : Buffer = createHmac ( "sha512" , cc ) . update ( data ) . digest ( ) ;
171172
172-
173173 // Step 2: Compute child public key
174174 const zL : Uint8Array = trunc_256_minus_g_bits ( z . subarray ( 0 , 32 ) , g )
175175
@@ -188,10 +188,10 @@ export function deriveChildNodePublic(extendedKey: Uint8Array, index: number, g:
188188
189189 // Step 3: Compute child chain code
190190 data [ 0 ] = 0x03 ;
191- const i : Buffer = createHmac ( "sha512" , cc ) . update ( data ) . digest ( ) ;
192- const chainCode : Buffer = i . subarray ( 32 , 64 ) ;
191+ const fullChildChainCode : Buffer = createHmac ( "sha512" , cc ) . update ( data ) . digest ( ) ;
192+ const childChainCode : Buffer = fullChildChainCode . subarray ( 32 , 64 ) ;
193193
194- return Buffer . concat ( [ crypto_core_ed25519_add ( p , pk ) , chainCode ] ) ;
194+ return Buffer . concat ( [ crypto_core_ed25519_add ( p , pk ) , childChainCode ] ) ;
195195}
196196
197197/**
@@ -218,7 +218,8 @@ function derivedNonHardened(
218218 const z : Buffer = createHmac ( "sha512" , cc ) . update ( data ) . digest ( ) ;
219219
220220 data [ 0 ] = 0x03 ;
221- const childChainCode : Buffer = createHmac ( "sha512" , cc ) . update ( data ) . digest ( ) ;
221+ const fullChildChainCode : Buffer = createHmac ( "sha512" , cc ) . update ( data ) . digest ( ) ;
222+ const childChainCode : Buffer = fullChildChainCode . subarray ( 32 , 64 ) ;
222223
223224 return { z, childChainCode } ;
224225}
@@ -247,7 +248,8 @@ function deriveHardened(
247248 data [ 0 ] = 0x00 ;
248249 const z : Buffer = createHmac ( "sha512" , cc ) . update ( data ) . digest ( ) ;
249250 data [ 0 ] = 0x01 ;
250- const childChainCode : Buffer = createHmac ( "sha512" , cc ) . update ( data ) . digest ( ) ;
251+ const fullChildChainCode : Buffer = createHmac ( "sha512" , cc ) . update ( data ) . digest ( ) ;
252+ const childChainCode : Buffer = fullChildChainCode . subarray ( 32 , 64 ) ;
251253
252254 return { z, childChainCode } ;
253255}
0 commit comments