7
7
hashPersonalMessage ,
8
8
isValidSignature ,
9
9
fromRpcSig ,
10
- toRpcSig
10
+ toRpcSig ,
11
+ intToBuffer
11
12
} from '../src'
12
13
13
14
const echash = Buffer . from (
@@ -294,6 +295,45 @@ describe('isValidSignature', function() {
294
295
const s = Buffer . from ( '129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66' , 'hex' )
295
296
const v = chainId * 2 + 35
296
297
assert . equal ( isValidSignature ( v , r , s , false , chainId ) , true )
298
+ assert . equal ( isValidSignature ( intToBuffer ( v ) , r , s , false , intToBuffer ( chainId ) ) , true )
299
+ assert . equal ( isValidSignature ( new BN ( v ) , r , s , false , new BN ( chainId ) ) , true )
300
+ assert . equal (
301
+ isValidSignature (
302
+ '0x' + intToBuffer ( v ) . toString ( 'hex' ) ,
303
+ r ,
304
+ s ,
305
+ false ,
306
+ '0x' + intToBuffer ( chainId ) . toString ( 'hex' )
307
+ ) ,
308
+ true
309
+ )
310
+ } )
311
+ it ( 'should work otherwise(chainId larger than MAX_INTEGER)' , function ( ) {
312
+ const r = Buffer . from ( 'ec212841e0b7aaffc3b3e33a08adf32fa07159e856ef23db85175a4f6d71dc0f' , 'hex' )
313
+ const s = Buffer . from ( '4b8e02b96b94064a5aa2f8d72bd0040616ba8e482a5dd96422e38c9a4611f8d5' , 'hex' )
314
+
315
+ const vBuffer = Buffer . from ( 'f2ded8deec6714' , 'hex' )
316
+ const chainIDBuffer = Buffer . from ( '796f6c6f763378' , 'hex' )
317
+ assert . equal ( isValidSignature ( vBuffer , r , s , false , chainIDBuffer ) , true )
318
+ assert . equal ( isValidSignature ( new BN ( vBuffer ) , r , s , false , new BN ( chainIDBuffer ) ) , true )
319
+ assert . equal (
320
+ isValidSignature (
321
+ '0x' + vBuffer . toString ( 'hex' ) ,
322
+ r ,
323
+ s ,
324
+ false ,
325
+ '0x' + chainIDBuffer . toString ( 'hex' )
326
+ ) ,
327
+ true
328
+ )
329
+
330
+ const chainIDNumber = parseInt ( chainIDBuffer . toString ( 'hex' ) , 16 )
331
+ const vNumber = parseInt ( vBuffer . toString ( 'hex' ) , 16 )
332
+ assert . throws ( ( ) => {
333
+ // If we would use numbers for the `v` and `chainId` parameters, then it should throw.
334
+ // (The numbers are too high to perform arithmetic on)
335
+ isValidSignature ( vNumber , r , s , false , chainIDNumber )
336
+ } )
297
337
} )
298
338
// FIXME: add homestead test
299
339
} )
@@ -303,49 +343,57 @@ describe('message sig', function() {
303
343
const s = Buffer . from ( '129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66' , 'hex' )
304
344
305
345
it ( 'should return hex strings that the RPC can use' , function ( ) {
306
- assert . equal (
307
- toRpcSig ( 27 , r , s ) ,
346
+ const sig =
308
347
'0x99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca661b'
309
- )
310
- assert . deepEqual (
311
- fromRpcSig (
312
- '0x99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca661b'
313
- ) ,
314
- {
315
- v : 27 ,
316
- r : r ,
317
- s : s
318
- }
319
- )
320
- assert . deepEqual (
321
- fromRpcSig (
322
- '0x99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca6600'
323
- ) ,
324
- {
325
- v : 27 ,
326
- r : r ,
327
- s : s
328
- }
329
- )
348
+ assert . equal ( toRpcSig ( 27 , r , s ) , sig )
349
+ assert . deepEqual ( fromRpcSig ( sig ) , {
350
+ v : 27 ,
351
+ r : r ,
352
+ s : s
353
+ } )
330
354
} )
331
355
332
356
it ( 'should return hex strings that the RPC can use (chainId=150)' , function ( ) {
357
+ const sig =
358
+ '0x99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66014f'
333
359
const chainId = 150
334
360
const v = chainId * 2 + 35
361
+ assert . equal ( toRpcSig ( v , r , s , chainId ) , sig )
362
+ assert . equal ( toRpcSig ( intToBuffer ( v ) , r , s , intToBuffer ( chainId ) ) , sig )
363
+ assert . equal ( toRpcSig ( new BN ( v ) , r , s , new BN ( chainId ) ) , sig )
335
364
assert . equal (
336
- toRpcSig ( v , r , s , chainId ) ,
337
- '0x99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66014f'
338
- )
339
- assert . deepEqual (
340
- fromRpcSig (
341
- '0x99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66014f'
365
+ toRpcSig (
366
+ '0x' + intToBuffer ( v ) . toString ( 'hex' ) ,
367
+ r ,
368
+ s ,
369
+ '0x' + intToBuffer ( chainId ) . toString ( 'hex' )
342
370
) ,
343
- {
344
- v,
345
- r : r ,
346
- s : s
347
- }
371
+ sig
348
372
)
373
+ assert . deepEqual ( fromRpcSig ( sig ) , {
374
+ v,
375
+ r : r ,
376
+ s : s
377
+ } )
378
+ } )
379
+
380
+ it ( 'should return hex strings that the RPC can use (chainId larger than MAX_SAFE_INTEGER)' , function ( ) {
381
+ const sig =
382
+ '0x99e71a99cb2270b8cac5254f9e99b6210c6c10224a1579cf389ef88b20a1abe9129ff05af364204442bdb53ab6f18a99ab48acc9326fa689f228040429e3ca66f2ded8deec6714'
383
+ const chainIDBuffer = Buffer . from ( '796f6c6f763378' , 'hex' )
384
+ const vBuffer = Buffer . from ( 'f2ded8deec6714' , 'hex' )
385
+ assert . equal ( toRpcSig ( vBuffer , r , s , chainIDBuffer ) , sig )
386
+ assert . equal ( toRpcSig ( new BN ( vBuffer ) , r , s , new BN ( chainIDBuffer ) ) , sig )
387
+ assert . equal (
388
+ toRpcSig ( '0x' + vBuffer . toString ( 'hex' ) , r , s , '0x' + chainIDBuffer . toString ( 'hex' ) ) ,
389
+ sig
390
+ )
391
+
392
+ const chainIDNumber = parseInt ( chainIDBuffer . toString ( 'hex' ) , 16 )
393
+ const vNumber = parseInt ( vBuffer . toString ( 'hex' ) , 16 )
394
+ assert . throws ( function ( ) {
395
+ toRpcSig ( vNumber , r , s , chainIDNumber )
396
+ } )
349
397
} )
350
398
351
399
it ( 'should throw on shorter length' , function ( ) {
0 commit comments