@@ -7,98 +7,6 @@ var utils = require('./utils.js');
77var secp256k1 = new ( elliptic . ec ) ( 'secp256k1' ) ;
88
99
10- function getChecksumAddress ( address ) {
11- if ( typeof ( address ) !== 'string' || ! address . match ( / ^ 0 x [ 0 - 9 A - F a - f ] { 40 } $ / ) ) {
12- throw new Error ( 'invalid address' ) ;
13- }
14-
15- address = address . substring ( 2 ) . toLowerCase ( ) ;
16- var hashed = utils . sha3 ( address ) ;
17-
18- address = address . split ( '' ) ;
19- for ( var i = 0 ; i < 40 ; i += 2 ) {
20- if ( ( hashed [ i >> 1 ] >> 4 ) >= 8 ) {
21- address [ i ] = address [ i ] . toUpperCase ( ) ;
22- }
23- if ( ( hashed [ i >> 1 ] & 0x0f ) >= 8 ) {
24- address [ i + 1 ] = address [ i + 1 ] . toUpperCase ( ) ;
25- }
26- }
27-
28- return '0x' + address . join ( '' ) ;
29- }
30-
31- function getAddress ( address ) {
32- var result = null ;
33-
34- if ( typeof ( address ) !== 'string' ) { throw new Error ( 'invalid address' ) ; }
35-
36- if ( address . match ( / ^ ( 0 x ) ? [ 0 - 9 a - f A - F ] { 40 } $ / ) ) {
37-
38- // Missing the 0x prefix
39- if ( address . substring ( 0 , 2 ) !== '0x' ) { address = '0x' + address ; }
40-
41- result = getChecksumAddress ( address ) ;
42-
43- // It is a checksummed address with a bad checksum
44- if ( address . match ( / ( [ A - F ] .* [ a - f ] ) | ( [ a - f ] .* [ A - F ] ) / ) && result !== address ) {
45- throw new Error ( 'invalid address checksum' ) ;
46- }
47-
48- // Maybe ICAP? (we only support direct mode)
49- } else if ( address . match ( / ^ X E [ 0 - 9 ] { 2 } [ 0 - 9 A - Z a - z ] { 30 , 31 } $ / ) ) {
50-
51- // It is an ICAP address with a bad checksum
52- if ( address . substring ( 2 , 4 ) !== ibanChecksum ( address ) ) {
53- throw new Error ( 'invalid address icap checksum' ) ;
54- }
55-
56- result = ( new utils . BN ( address . substring ( 4 ) , 36 ) ) . toString ( 16 ) ;
57- while ( result . length < 40 ) { result = '0' + result ; }
58- result = getChecksumAddress ( '0x' + result ) ;
59-
60- } else {
61- throw new Error ( 'invalid address' ) ;
62- }
63-
64- return result ;
65- }
66-
67- // See: https://en.wikipedia.org/wiki/International_Bank_Account_Number
68- var ibanChecksum = ( function ( ) {
69-
70- // Create lookup table
71- var ibanLookup = { } ;
72- for ( var i = 0 ; i < 10 ; i ++ ) { ibanLookup [ String ( i ) ] = String ( i ) ; }
73- for ( var i = 0 ; i < 26 ; i ++ ) { ibanLookup [ String . fromCharCode ( 65 + i ) ] = String ( 10 + i ) ; }
74-
75- // How many decimal digits can we process? (for 64-bit float, this is 15)
76- var safeDigits = Math . floor ( Math . log10 ( Number . MAX_SAFE_INTEGER ) ) ;
77-
78- return function ( address ) {
79- address = address . toUpperCase ( ) ;
80- address = address . substring ( 4 ) + address . substring ( 0 , 2 ) + '00' ;
81-
82- var expanded = address . split ( '' ) ;
83- for ( var i = 0 ; i < expanded . length ; i ++ ) {
84- expanded [ i ] = ibanLookup [ expanded [ i ] ] ;
85- }
86- expanded = expanded . join ( '' ) ;
87-
88- // Javascript can handle integers safely up to 15 (decimal) digits
89- while ( expanded . length >= safeDigits ) {
90- var block = expanded . substring ( 0 , safeDigits ) ;
91- expanded = parseInt ( block , 10 ) % 97 + expanded . substring ( block . length ) ;
92- }
93-
94- var checksum = String ( 98 - ( parseInt ( expanded , 10 ) % 97 ) ) ;
95- while ( checksum . length < 2 ) { checksum = '0' + checksum ; }
96-
97- return checksum ;
98- } ;
99- } ) ( ) ;
100-
101-
10210function SigningKey ( privateKey ) {
10311 if ( ! ( this instanceof SigningKey ) ) { throw new Error ( 'missing new' ) ; }
10412
@@ -112,22 +20,13 @@ function SigningKey(privateKey) {
11220 var keyPair = secp256k1 . keyFromPrivate ( privateKey ) ;
11321 var publicKey = ( new Buffer ( keyPair . getPublic ( false , 'hex' ) , 'hex' ) ) . slice ( 1 ) ;
11422
115- var address = getAddress ( utils . sha3 ( publicKey ) . slice ( 12 ) . toString ( 'hex' ) ) ;
23+ var address = utils . getAddress ( utils . sha3 ( publicKey ) . slice ( 12 ) . toString ( 'hex' ) ) ;
11624 utils . defineProperty ( this , 'address' , address )
11725
11826 utils . defineProperty ( this , 'signDigest' , function ( digest ) {
11927 return keyPair . sign ( digest , { canonical : true } ) ;
12028 } ) ;
12129}
12230
123- utils . defineProperty ( SigningKey , 'getAddress' , getAddress ) ;
124-
125- utils . defineProperty ( SigningKey , 'getIcapAddress' , function ( address ) {
126- address = getAddress ( address ) . substring ( 2 ) ;
127- var base36 = ( new utils . BN ( address , 16 ) ) . toString ( 36 ) . toUpperCase ( ) ;
128- while ( base36 . length < 30 ) { base36 = '0' + base36 ; }
129- return 'XE' + ibanChecksum ( 'XE00' + base36 ) + base36 ;
130- } ) ;
131-
13231
13332module . exports = SigningKey ;
0 commit comments