@@ -49,7 +49,13 @@ describe('HDNode', function() {
49
49
assert . equal ( hd . network , networks . testnet )
50
50
} )
51
51
52
- it ( 'throws an exception when an unknown network is given' , function ( ) {
52
+ it ( 'throws when an invalid length chain code is given' , function ( ) {
53
+ assert . throws ( function ( ) {
54
+ new HDNode ( d , chainCode . slice ( 0 , 20 ) , networks . testnet )
55
+ } , / E x p e c t e d c h a i n C o d e l e n g t h o f 3 2 , g o t 2 0 / )
56
+ } )
57
+
58
+ it ( 'throws when an unknown network is given' , function ( ) {
53
59
assert . throws ( function ( ) {
54
60
new HDNode ( d , chainCode , { } )
55
61
} , / U n k n o w n B I P 3 2 c o n s t a n t s f o r n e t w o r k / )
@@ -82,20 +88,21 @@ describe('HDNode', function() {
82
88
describe ( 'toBase58' , function ( ) {
83
89
fixtures . valid . forEach ( function ( f ) {
84
90
it ( 'exports ' + f . master . base58 + ' (public) correctly' , function ( ) {
85
- var hd = HDNode . fromSeedHex ( f . master . seed )
91
+ var hd = HDNode . fromSeedHex ( f . master . seed ) . neutered ( )
86
92
87
- assert . equal ( hd . toBase58 ( false ) , f . master . base58 )
93
+ assert . equal ( hd . toBase58 ( ) , f . master . base58 )
88
94
} )
89
95
} )
90
96
91
97
fixtures . valid . forEach ( function ( f ) {
92
98
it ( 'exports ' + f . master . base58Priv + ' (private) correctly' , function ( ) {
93
99
var hd = HDNode . fromSeedHex ( f . master . seed )
94
100
95
- assert . equal ( hd . toBase58 ( true ) , f . master . base58Priv )
101
+ assert . equal ( hd . toBase58 ( ) , f . master . base58Priv )
96
102
} )
97
103
} )
98
104
105
+ // FIXME: remove in 2.x.y
99
106
it ( 'fails when there is no private key' , function ( ) {
100
107
var hd = HDNode . fromBase58 ( fixtures . valid [ 0 ] . master . base58 )
101
108
@@ -160,20 +167,21 @@ describe('HDNode', function() {
160
167
describe ( 'toBuffer/toHex' , function ( ) {
161
168
fixtures . valid . forEach ( function ( f ) {
162
169
it ( 'exports ' + f . master . hex + ' (public) correctly' , function ( ) {
163
- var hd = HDNode . fromSeedHex ( f . master . seed )
170
+ var hd = HDNode . fromSeedHex ( f . master . seed ) . neutered ( )
164
171
165
- assert . equal ( hd . toHex ( false ) , f . master . hex )
172
+ assert . equal ( hd . toHex ( ) , f . master . hex )
166
173
} )
167
174
} )
168
175
169
176
fixtures . valid . forEach ( function ( f ) {
170
177
it ( 'exports ' + f . master . hexPriv + ' (private) correctly' , function ( ) {
171
178
var hd = HDNode . fromSeedHex ( f . master . seed )
172
179
173
- assert . equal ( hd . toHex ( true ) , f . master . hexPriv )
180
+ assert . equal ( hd . toHex ( ) , f . master . hexPriv )
174
181
} )
175
182
} )
176
183
184
+ // FIXME: remove in 2.x.y
177
185
it ( 'fails when there is no private key' , function ( ) {
178
186
var hd = HDNode . fromHex ( fixtures . valid [ 0 ] . master . hex )
179
187
@@ -220,6 +228,21 @@ describe('HDNode', function() {
220
228
} )
221
229
} )
222
230
231
+ describe ( 'neutered' , function ( ) {
232
+ var f = fixtures . valid [ 0 ]
233
+
234
+ it ( 'strips all private information' , function ( ) {
235
+ var hd = HDNode . fromBase58 ( f . master . base58 )
236
+ var hdn = hd . neutered ( )
237
+
238
+ assert . equal ( hdn . privKey , undefined )
239
+ assert . equal ( hdn . pubKey . toHex ( ) , hd . pubKey . toHex ( ) )
240
+ assert . equal ( hdn . chainCode , hd . chainCode )
241
+ assert . equal ( hdn . depth , hd . depth )
242
+ assert . equal ( hdn . index , hd . index )
243
+ } )
244
+ } )
245
+
223
246
describe ( 'derive' , function ( ) {
224
247
function verifyVector ( hd , v , depth ) {
225
248
assert . equal ( hd . privKey . toWIF ( ) , v . wif )
@@ -256,32 +279,28 @@ describe('HDNode', function() {
256
279
var f = fixtures . valid [ 1 ]
257
280
var c = f . children [ 0 ]
258
281
259
- var parentNode = HDNode . fromBase58 ( f . master . base58Priv )
260
- var child = parentNode . derive ( c . m )
282
+ var master = HDNode . fromBase58 ( f . master . base58Priv )
283
+ var child = master . derive ( c . m ) . neutered ( )
261
284
262
- // FIXME: N(CKDpriv((kpar, cpar), i)), could be done better...
263
- var childNeutered = HDNode . fromBase58 ( child . toBase58 ( false ) ) // neuter
264
- assert . equal ( childNeutered . toBase58 ( ) , c . base58 )
285
+ assert . equal ( child . toBase58 ( ) , c . base58 )
265
286
} )
266
287
267
288
it ( 'works for Private -> public (neutered, hardened)' , function ( ) {
268
289
var f = fixtures . valid [ 0 ]
269
290
var c = f . children [ 0 ]
270
291
271
- var parentNode = HDNode . fromBase58 ( f . master . base58Priv )
272
- var child = parentNode . deriveHardened ( c . m )
292
+ var master = HDNode . fromBase58 ( f . master . base58Priv )
293
+ var child = master . deriveHardened ( c . m ) . neutered ( )
273
294
274
- // FIXME: N(CKDpriv((kpar, cpar), i)), could be done better...
275
- var childNeutered = HDNode . fromBase58 ( child . toBase58 ( false ) ) // neuter
276
- assert . equal ( childNeutered . toBase58 ( ) , c . base58 )
295
+ assert . equal ( child . toBase58 ( ) , c . base58 )
277
296
} )
278
297
279
298
it ( 'works for Public -> public' , function ( ) {
280
299
var f = fixtures . valid [ 1 ]
281
300
var c = f . children [ 0 ]
282
301
283
- var parentNode = HDNode . fromBase58 ( f . master . base58 )
284
- var child = parentNode . derive ( c . m )
302
+ var master = HDNode . fromBase58 ( f . master . base58 )
303
+ var child = master . derive ( c . m )
285
304
286
305
assert . equal ( child . toBase58 ( ) , c . base58 )
287
306
} )
@@ -290,10 +309,10 @@ describe('HDNode', function() {
290
309
var f = fixtures . valid [ 0 ]
291
310
var c = f . children [ 0 ]
292
311
293
- var parentNode = HDNode . fromBase58 ( f . master . base58 )
312
+ var master = HDNode . fromBase58 ( f . master . base58 )
294
313
295
314
assert . throws ( function ( ) {
296
- parentNode . deriveHardened ( c . m )
315
+ master . deriveHardened ( c . m )
297
316
} , / C o u l d n o t d e r i v e h a r d e n e d c h i l d k e y / )
298
317
} )
299
318
} )
0 commit comments