@@ -3,7 +3,7 @@ const ecc = require('eosjs-ecc');
3
3
4
4
const { ec } = require ( 'elliptic' ) ;
5
5
6
- const { Signature, PrivateKey, PublicKey } = require ( '../eosjs-key-conversions' ) ;
6
+ const { Signature, PrivateKey, PublicKey, sha256 } = require ( '../eosjs-key-conversions' ) ;
7
7
const {
8
8
JsSignatureProvider,
9
9
} = require ( '../eosjs-jssig' ) ;
@@ -52,23 +52,25 @@ describe('JsSignatureProvider', () => {
52
52
const ellipticHashedStringAsBuffer = Buffer . from ( ellipticEc . hash ( ) . update ( dataAsString ) . digest ( ) , 'hex' ) ;
53
53
expect ( eccHashedString ) . toEqual ( ellipticHashedStringAsBuffer ) ;
54
54
55
- const eccSig = ecc . sign ( dataAsString , KPriv ) ;
56
- const ellipticSig = KPrivElliptic . sign ( ellipticHashedStringAsBuffer ) ;
55
+ const eccSig = ecc . sign ( dataAsString , KPriv , 'utf8' ) ;
56
+ const ellipticSig = KPrivElliptic . sign ( ellipticHashedStringAsBuffer , 'utf8' ) ;
57
57
58
- const eccKPub = ecc . recover ( eccSig , dataAsString ) ;
58
+ const eccKPub = ecc . recover ( eccSig , dataAsString , 'utf8' ) ;
59
59
const ellipticRecoveredKPub = ellipticEc . recoverPubKey (
60
60
ellipticHashedStringAsBuffer ,
61
61
ellipticSig ,
62
- ellipticSig . recoveryParam
62
+ ellipticSig . recoveryParam ,
63
+ 'utf8'
63
64
) ;
64
65
const ellipticKPub = ellipticEc . keyFromPublic ( ellipticRecoveredKPub ) ;
65
66
expect ( PublicKey . fromElliptic ( ellipticKPub , KeyType . k1 ) . toString ( ) ) . toEqual ( k1FormatPublicKeys [ idx ] ) ;
66
67
67
- const eccValid = ecc . verify ( eccSig , dataAsString , eccKPub ) ;
68
+ const eccValid = ecc . verify ( eccSig , dataAsString , eccKPub , 'utf8' ) ;
68
69
const ellipticValid = ellipticEc . verify (
69
70
ellipticHashedStringAsBuffer ,
70
71
ellipticSig ,
71
- ellipticEc . keyFromPublic ( ellipticKPub )
72
+ ellipticEc . keyFromPublic ( ellipticKPub ) ,
73
+ 'utf8'
72
74
) ;
73
75
expect ( eccValid ) . toEqual ( true ) ;
74
76
expect ( ellipticValid ) . toEqual ( true ) ;
@@ -88,14 +90,15 @@ describe('JsSignatureProvider', () => {
88
90
const ellipticHashedStringAsBuffer = Buffer . from ( ellipticEc . hash ( ) . update ( dataAsString ) . digest ( ) , 'hex' ) ;
89
91
expect ( eccHashedString ) . toEqual ( ellipticHashedStringAsBuffer ) ;
90
92
91
- const eccSig = ecc . sign ( dataAsString , KPriv ) ;
93
+ const eccSig = ecc . sign ( dataAsString , KPriv , 'utf8' ) ;
92
94
93
95
const ellipticSig = Signature . fromString ( eccSig ) . toElliptic ( ) ;
94
- const recoveredKPub = ecc . recover ( eccSig , dataAsString ) ;
96
+ const recoveredKPub = ecc . recover ( eccSig , dataAsString , 'utf8' ) ;
95
97
const ellipticRecoveredKPub = ellipticEc . recoverPubKey (
96
98
ellipticHashedStringAsBuffer ,
97
99
ellipticSig ,
98
- ellipticSig . recoveryParam
100
+ ellipticSig . recoveryParam ,
101
+ 'utf8'
99
102
) ;
100
103
101
104
const ellipticKPub = ellipticEc . keyFromPublic ( ellipticRecoveredKPub ) ;
@@ -105,7 +108,8 @@ describe('JsSignatureProvider', () => {
105
108
const ellipticValid = ellipticEc . verify (
106
109
ellipticHashedStringAsBuffer ,
107
110
ellipticSig ,
108
- ellipticEc . keyFromPublic ( ellipticKPub )
111
+ ellipticEc . keyFromPublic ( ellipticKPub ) ,
112
+ 'utf8'
109
113
) ;
110
114
expect ( ellipticValid ) . toEqual ( true ) ;
111
115
}
@@ -122,19 +126,67 @@ describe('JsSignatureProvider', () => {
122
126
123
127
const ellipticHashedStringAsBuffer = Buffer . from ( ellipticEc . hash ( ) . update ( dataAsString ) . digest ( ) , 'hex' ) ;
124
128
125
- const ellipticSig = KPrivElliptic . sign ( ellipticHashedStringAsBuffer ) ;
129
+ const ellipticSig = KPrivElliptic . sign ( ellipticHashedStringAsBuffer , 'utf8' ) ;
126
130
const ellipticSigAsString = Signature . fromElliptic ( ellipticSig , KeyType . k1 ) . toString ( ) ;
127
131
128
- const recoveredKPub = ecc . recover ( ellipticSigAsString , dataAsString ) ;
132
+ const recoveredKPub = ecc . recover ( ellipticSigAsString , dataAsString , 'utf8' ) ;
129
133
const ellipticRecoveredKPub = ellipticEc . recoverPubKey (
130
134
ellipticHashedStringAsBuffer ,
131
135
ellipticSig ,
132
- ellipticSig . recoveryParam
136
+ ellipticSig . recoveryParam ,
137
+ 'utf8'
133
138
) ;
134
139
const ellipticKPub = ellipticEc . keyFromPublic ( ellipticRecoveredKPub ) ;
135
140
expect ( PublicKey . fromElliptic ( ellipticKPub , KeyType . k1 ) . toString ( ) ) . toEqual ( k1FormatPublicKeys [ idx ] ) ;
136
141
137
- const eccValid = ecc . verify ( ellipticSigAsString , dataAsString , recoveredKPub ) ;
142
+ const eccValid = ecc . verify ( ellipticSigAsString , dataAsString , recoveredKPub , 'utf8' ) ;
143
+ expect ( eccValid ) . toEqual ( true ) ;
144
+ }
145
+ } ) ;
146
+
147
+ it ( 'ensure eosjs verifies eosjs-ecc\'s Sigs' , ( ) => {
148
+ for ( let idx = 0 ; idx < privateKeys . length ; idx ++ ) {
149
+ const KPriv = privateKeys [ idx ] ;
150
+ const privateKey = PrivateKey . fromString ( KPriv ) ;
151
+
152
+ const dataAsString = 'some string' ;
153
+
154
+ const eccHashedString = Buffer . from ( ecc . sha256 ( dataAsString ) , 'hex' ) ;
155
+ const eosjsHashedStringAsBuffer = Buffer . from ( sha256 ( dataAsString ) , 'hex' ) ;
156
+ expect ( eccHashedString ) . toEqual ( eosjsHashedStringAsBuffer ) ;
157
+
158
+ const eccSig = ecc . sign ( dataAsString , KPriv , 'utf8' ) ;
159
+
160
+ const eosjsSig = Signature . fromString ( eccSig ) ;
161
+ const recoveredKPub = ecc . recover ( eccSig , dataAsString , 'utf8' ) ;
162
+ const eosjsRecoveredKPub = eosjsSig . recover ( dataAsString , true , 'utf8' ) ;
163
+
164
+ expect ( eosjsRecoveredKPub . toLegacyString ( ) ) . toEqual ( recoveredKPub ) ;
165
+ expect ( eosjsRecoveredKPub . toString ( ) ) . toEqual ( k1FormatPublicKeys [ idx ] ) ;
166
+
167
+ const eosjsValid = eosjsSig . verify ( dataAsString , eosjsRecoveredKPub , true , 'utf8' ) ;
168
+ expect ( eosjsValid ) . toEqual ( true ) ;
169
+ }
170
+ } ) ;
171
+
172
+ it ( 'ensure ecc verifies eosjs\'s Sigs' , ( ) => {
173
+ for ( let idx = 0 ; idx < privateKeys . length ; idx ++ ) {
174
+ const KPriv = privateKeys [ idx ] ;
175
+ const privateKey = PrivateKey . fromString ( KPriv ) ;
176
+
177
+ const dataAsString = 'some string' ;
178
+
179
+ const eosjsHashedStringAsBuffer = Buffer . from ( sha256 ( dataAsString ) , 'hex' ) ;
180
+
181
+ const eosjsSig = privateKey . sign ( eosjsHashedStringAsBuffer , false , 'utf8' ) ;
182
+ const eosjsSigAsString = eosjsSig . toString ( ) ;
183
+
184
+ const recoveredKPub = ecc . recover ( eosjsSigAsString , dataAsString , 'utf8' ) ;
185
+ const eosjsRecoveredKPub = eosjsSig . recover ( dataAsString , true , 'utf8' ) ;
186
+ expect ( eosjsRecoveredKPub . toLegacyString ( ) ) . toEqual ( recoveredKPub ) ;
187
+ expect ( eosjsRecoveredKPub . toString ( ) ) . toEqual ( k1FormatPublicKeys [ idx ] ) ;
188
+
189
+ const eccValid = ecc . verify ( eosjsSigAsString , dataAsString , recoveredKPub , 'utf8' ) ;
138
190
expect ( eccValid ) . toEqual ( true ) ;
139
191
}
140
192
} ) ;
0 commit comments