@@ -90,23 +90,21 @@ HDNode.fromBase58 = function (string, networks) {
9090
9191  // 32 bytes: the chain code 
9292  var  chainCode  =  buffer . slice ( 13 ,  45 ) 
93-   var  data ,   keyPair 
93+   var  keyPair 
9494
9595  // 33 bytes: private key data (0x00 + k) 
9696  if  ( version  ===  network . bip32 . private )  { 
9797    if  ( buffer . readUInt8 ( 45 )  !==  0x00 )  throw  new  Error ( 'Invalid private key' ) 
9898
99-     data  =  buffer . slice ( 46 ,  78 ) 
100-     var  d  =  BigInteger . fromBuffer ( data ) 
99+     var  d  =  BigInteger . fromBuffer ( buffer . slice ( 46 ,  78 ) ) 
101100
102101    keyPair  =  new  ECPair ( d ,  null ,  { 
103102      network : network 
104103    } ) 
105104
106105  // 33 bytes: public key data (0x02 + X or 0x03 + X) 
107106  }  else  { 
108-     data  =  buffer . slice ( 45 ,  78 ) 
109-     var  Q  =  ecurve . Point . decodeFrom ( curve ,  data ) 
107+     var  Q  =  ecurve . Point . decodeFrom ( curve ,  buffer . slice ( 45 ,  78 ) ) 
110108    if  ( ! Q . compressed )  throw  new  Error ( 'Invalid public key' ) 
111109
112110    // Verify that the X coordinate in the public point corresponds to a point on the curve. 
@@ -194,29 +192,23 @@ HDNode.prototype.toBase58 = function (__isPrivate) {
194192// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions 
195193HDNode . prototype . derive  =  function  ( index )  { 
196194  var  isHardened  =  index  >=  HDNode . HIGHEST_BIT 
197-   var  indexBuffer  =  new  Buffer ( 4 ) 
198-   indexBuffer . writeUInt32BE ( index ,  0 ) 
199- 
200-   var  data 
195+   var  data  =  new  Buffer ( 37 ) 
201196
202197  // Hardened child 
203198  if  ( isHardened )  { 
204199    if  ( ! this . keyPair . d )  throw  new  TypeError ( 'Could not derive hardened child key' ) 
205200
206201    // data = 0x00 || ser256(kpar) || ser32(index) 
207-     data  =  Buffer . concat ( [ 
208-       this . keyPair . d . toBuffer ( 33 ) , 
209-       indexBuffer 
210-     ] ) 
202+     data [ 0 ]  =  0x00 
203+     this . keyPair . d . toBuffer ( 32 ) . copy ( data ,  1 ) 
204+     data . writeUInt32BE ( index ,  33 ) 
211205
212206  // Normal child 
213207  }  else  { 
214208    // data = serP(point(kpar)) || ser32(index) 
215209    //      = serP(Kpar) || ser32(index) 
216-     data  =  Buffer . concat ( [ 
217-       this . keyPair . getPublicKeyBuffer ( ) , 
218-       indexBuffer 
219-     ] ) 
210+     this . keyPair . getPublicKeyBuffer ( ) . copy ( data ,  0 ) 
211+     data . writeUInt32BE ( index ,  33 ) 
220212  } 
221213
222214  var  I  =  createHmac ( 'sha512' ,  this . chainCode ) . update ( data ) . digest ( ) 
0 commit comments