@@ -90,7 +90,7 @@ function adaptSM2 (ecdsa) {
90
90
ecdsa [ sm2 ] = true
91
91
/**
92
92
* Encrypt data with SM2 alg
93
- * @param {String |Uint8Array|Buffer } data The data to be encrypted
93
+ * @param {string |Uint8Array } data The data to be encrypted
94
94
* @param {EncrypterOptions } opts options for ciphertext format, default is C1C3C2
95
95
* @returns hex string of ciphertext
96
96
*/
@@ -101,12 +101,12 @@ function adaptSM2 (ecdsa) {
101
101
102
102
/**
103
103
* Encrypt hex data with SM2 alg
104
- * @param {String } data The hex data to be encrypted
104
+ * @param {string } data The hex data to be encrypted
105
105
* @param {EncrypterOptions } opts options for ciphertext format, default is C1C3C2
106
106
* @returns hex string of ciphertext
107
107
*/
108
108
ecdsa . encryptHex = function ( dataHex , opts = DEFAULT_SM2_ENCRYPT_OPTIONS ) {
109
- return this . encrypt ( new Uint8Array ( Buffer . from ( dataHex , 'hex' ) ) , opts )
109
+ return this . encrypt ( util . hexToUint8Array ( dataHex ) , opts )
110
110
}
111
111
112
112
/**
@@ -133,7 +133,7 @@ function adaptSM2 (ecdsa) {
133
133
const k = this . getBigRandom ( n )
134
134
const c1 = G . multiply ( k )
135
135
const s = Q . multiply ( k )
136
- const c2 = kdf ( new Uint8Array ( util . integerToBytes ( s . getX ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) . concat ( util . integerToBytes ( s . getY ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) ) ) , dataLen )
136
+ const c2 = kdf ( Uint8Array . from ( util . integerToBytes ( s . getX ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) . concat ( util . integerToBytes ( s . getY ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) ) ) , dataLen )
137
137
if ( ! c2 ) {
138
138
if ( count ++ > MAX_RETRY ) {
139
139
throw new Error ( 'sm2: A5, failed to calculate valid t' )
@@ -143,25 +143,25 @@ function adaptSM2 (ecdsa) {
143
143
for ( let i = 0 ; i < dataLen ; i ++ ) {
144
144
c2 [ i ] ^= data [ i ]
145
145
}
146
- md . update ( new Uint8Array ( util . integerToBytes ( s . getX ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) ) )
146
+ md . update ( Uint8Array . from ( util . integerToBytes ( s . getX ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) ) )
147
147
md . update ( data )
148
- md . update ( new Uint8Array ( util . integerToBytes ( s . getY ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) ) )
148
+ md . update ( Uint8Array . from ( util . integerToBytes ( s . getY ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) ) )
149
149
const c3 = md . digestRaw ( )
150
150
if ( opts . getEncodingFormat ( ) === CIPHERTEXT_ENCODING_PLAIN ) {
151
- return Buffer . from ( c1 . getEncoded ( false ) ) . toString ( 'hex' ) + Buffer . from ( c3 ) . toString ( 'hex' ) + Buffer . from ( c2 ) . toString ( 'hex' )
151
+ return util . toHex ( c1 . getEncoded ( false ) ) + util . toHex ( c3 ) + util . toHex ( c2 )
152
152
}
153
153
const derX = new rs . asn1 . DERInteger ( { bigint : c1 . getX ( ) . toBigInteger ( ) } )
154
154
const derY = new rs . asn1 . DERInteger ( { bigint : c1 . getY ( ) . toBigInteger ( ) } )
155
- const derC3 = new rs . asn1 . DEROctetString ( { hex : Buffer . from ( c3 ) . toString ( 'hex' ) } )
156
- const derC2 = new rs . asn1 . DEROctetString ( { hex : Buffer . from ( c2 ) . toString ( 'hex' ) } )
155
+ const derC3 = new rs . asn1 . DEROctetString ( { hex : util . toHex ( c3 ) } )
156
+ const derC2 = new rs . asn1 . DEROctetString ( { hex : util . toHex ( c2 ) } )
157
157
const derSeq = new rs . asn1 . DERSequence ( { array : [ derX , derY , derC3 , derC2 ] } )
158
158
return derSeq . tohex ( )
159
159
} while ( true )
160
160
}
161
161
162
162
/**
163
163
* SM2 decryption
164
- * @param {String|Uint8Array|Buffer } data The data to be decrypted
164
+ * @param {String|Uint8Array } data The data to be decrypted
165
165
* @return {String } decrypted hex content
166
166
*/
167
167
ecdsa . decrypt = function ( data ) {
@@ -171,18 +171,18 @@ function adaptSM2 (ecdsa) {
171
171
172
172
/**
173
173
* SM2 decryption
174
- * @param {String } dataHex The hex data to be decrypted
175
- * @return {String } decrypted hex content
174
+ * @param {string } dataHex The hex data to be decrypted
175
+ * @return {string } decrypted hex content
176
176
*/
177
177
ecdsa . decryptHex = function ( dataHex ) {
178
- return this . decrypt ( new Uint8Array ( Buffer . from ( dataHex , 'hex' ) ) )
178
+ return this . decrypt ( util . hexToUint8Array ( dataHex ) )
179
179
}
180
180
181
181
/**
182
182
* SM2 decryption (internal function)
183
183
* @param {Uint8Array } data The hex data to be decrypted
184
184
* @param {BigInteger } d The SM2 private key
185
- * @return {String } decrypted hex content
185
+ * @return {string } decrypted hex content
186
186
*/
187
187
ecdsa . decryptRaw = function ( data , d ) {
188
188
data = util . normalizeInput ( data )
@@ -198,7 +198,7 @@ function adaptSM2 (ecdsa) {
198
198
const s = c1 . multiply ( d )
199
199
const c2 = data . subarray ( 97 )
200
200
const c3 = data . subarray ( 65 , 97 )
201
- const plaintext = kdf ( new Uint8Array ( util . integerToBytes ( s . getX ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) . concat ( util . integerToBytes ( s . getY ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) ) ) , dataLen - 97 )
201
+ const plaintext = kdf ( Uint8Array . from ( util . integerToBytes ( s . getX ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) . concat ( util . integerToBytes ( s . getY ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) ) ) , dataLen - 97 )
202
202
if ( ! plaintext ) {
203
203
throw new Error ( 'sm2: invalid cipher content' )
204
204
}
@@ -207,9 +207,9 @@ function adaptSM2 (ecdsa) {
207
207
}
208
208
// check c3
209
209
const md = new MessageDigest ( )
210
- md . update ( new Uint8Array ( util . integerToBytes ( s . getX ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) ) )
210
+ md . update ( Uint8Array . from ( util . integerToBytes ( s . getX ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) ) )
211
211
md . update ( plaintext )
212
- md . update ( new Uint8Array ( util . integerToBytes ( s . getY ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) ) )
212
+ md . update ( Uint8Array . from ( util . integerToBytes ( s . getY ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) ) )
213
213
const hash = md . digestRaw ( )
214
214
let difference = 0
215
215
for ( let i = 0 ; i < hash . length ; i ++ ) {
@@ -219,7 +219,7 @@ function adaptSM2 (ecdsa) {
219
219
throw new Error ( 'sm2: decryption error' )
220
220
}
221
221
222
- return Buffer . from ( plaintext ) . toString ( 'hex' )
222
+ return util . toHex ( plaintext )
223
223
}
224
224
225
225
/**
@@ -301,7 +301,7 @@ function adaptSM2 (ecdsa) {
301
301
302
302
/**
303
303
* calculateZA ZA = H256(ENTLA || IDA || a || b || xG || yG || xA || yA)
304
- * @param {String |Uint8Array|Buffer } uid The user id, use default if not specified
304
+ * @param {string |Uint8Array } uid The user id, use default if not specified
305
305
* @returns Uint8Array of the result
306
306
*/
307
307
ecdsa . calculateZA = function ( uid ) {
@@ -315,29 +315,29 @@ function adaptSM2 (ecdsa) {
315
315
}
316
316
const entla = uidLen << 3 // bit length
317
317
const md = new MessageDigest ( )
318
- md . update ( new Uint8Array ( [ 0xff & ( entla >>> 8 ) , 0xff & entla ] ) )
318
+ md . update ( Uint8Array . from ( [ 0xff & ( entla >>> 8 ) , 0xff & entla ] ) )
319
319
md . update ( uid )
320
- md . update ( new Uint8Array ( Buffer . from ( SM2_CURVE_PARAMS_FOR_ZA , 'hex' ) ) ) // a||b||gx||gy
320
+ md . update ( util . hexToUint8Array ( SM2_CURVE_PARAMS_FOR_ZA ) ) // a||b||gx||gy
321
321
let Q
322
322
if ( this . pubKeyHex ) {
323
323
Q = rs . ECPointFp . decodeFromHex ( this . ecparams . curve , this . pubKeyHex )
324
324
} else {
325
325
const d = new rs . BigInteger ( this . prvKeyHex , 16 )
326
326
const G = this . ecparams . G
327
327
Q = G . multiply ( d )
328
- this . pubKeyHex = Buffer . from ( Q . getEncoded ( ) ) . toString ( 'hex' )
328
+ this . pubKeyHex = util . toHex ( Q . getEncoded ( ) )
329
329
}
330
- md . update ( new Uint8Array ( util . integerToBytes ( Q . getX ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) ) ) // x
331
- md . update ( new Uint8Array ( util . integerToBytes ( Q . getY ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) ) ) // y
330
+ md . update ( Uint8Array . from ( util . integerToBytes ( Q . getX ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) ) ) // x
331
+ md . update ( Uint8Array . from ( util . integerToBytes ( Q . getY ( ) . toBigInteger ( ) , SM2_BYTE_SIZE ) ) ) // y
332
332
return md . digestRaw ( )
333
333
}
334
334
}
335
335
}
336
336
337
337
/**
338
338
* SM2 KDF function
339
- * @param {String |Uint8Array|Buffer } data The salt for kdf
340
- * @param {Number } len The request key bytes length
339
+ * @param {string |Uint8Array } data The salt for kdf
340
+ * @param {number } len The request key bytes length
341
341
* @returns Uint8Array of the generated key
342
342
*/
343
343
function kdf ( data , len ) {
@@ -394,7 +394,7 @@ class MessageDigest {
394
394
*/
395
395
updateHex ( hex ) {
396
396
if ( useNodeSM3 ) {
397
- this . md . update ( new Uint8Array ( Buffer . from ( hex , 'hex' ) ) )
397
+ this . md . update ( util . hexToUint8Array ( hex ) )
398
398
} else {
399
399
this . md . update ( rs . CryptoJS . enc . Hex . parse ( hex ) )
400
400
}
@@ -618,7 +618,7 @@ class Signature {
618
618
* SM2 encryption function
619
619
*
620
620
* @param {string|object } pubkey hex public key string or ECDSA object
621
- * @param {string|Buffer| Uint8Array } data plaintext data
621
+ * @param {string|Uint8Array } data plaintext data
622
622
* @param {EncrypterOptions } opts options, just support encodingFormat now, default is plain encoding format
623
623
* @returns hex plain format ciphertext
624
624
*/
@@ -643,7 +643,7 @@ function encrypt (pubkey, data, opts = DEFAULT_SM2_ENCRYPT_OPTIONS) {
643
643
* @returns hex ans.1 format ciphertext
644
644
*/
645
645
function plainCiphertext2ASN1 ( data ) {
646
- data = new Uint8Array ( Buffer . from ( data , 'hex' ) )
646
+ data = util . hexToUint8Array ( data )
647
647
const dataLen = data . length
648
648
649
649
if ( data [ 0 ] !== UNCOMPRESSED ) {
@@ -657,8 +657,8 @@ function plainCiphertext2ASN1 (data) {
657
657
const c3 = data . subarray ( 65 , 97 )
658
658
const derX = new rs . asn1 . DERInteger ( { bigint : point1 . getX ( ) . toBigInteger ( ) } )
659
659
const derY = new rs . asn1 . DERInteger ( { bigint : point1 . getY ( ) . toBigInteger ( ) } )
660
- const derC3 = new rs . asn1 . DEROctetString ( { hex : Buffer . from ( c3 ) . toString ( 'hex' ) } )
661
- const derC2 = new rs . asn1 . DEROctetString ( { hex : Buffer . from ( c2 ) . toString ( 'hex' ) } )
660
+ const derC3 = new rs . asn1 . DEROctetString ( { hex : util . toHex ( c3 ) } )
661
+ const derC2 = new rs . asn1 . DEROctetString ( { hex : util . toHex ( c2 ) } )
662
662
const derSeq = new rs . asn1 . DERSequence ( { array : [ derX , derY , derC3 , derC2 ] } )
663
663
664
664
return derSeq . getEncodedHex ( )
@@ -704,7 +704,7 @@ function asn1Ciphertext2Plain (hexASN1Data) {
704
704
const c3 = aValue [ 2 ]
705
705
const c2 = aValue [ 3 ]
706
706
707
- return Buffer . from ( point . getEncoded ( false ) ) . toString ( 'hex' ) + c3 + c2
707
+ return util . toHex ( point . getEncoded ( false ) ) + c3 + c2
708
708
}
709
709
710
710
/**
@@ -716,14 +716,14 @@ function asn1Ciphertext2Plain (hexASN1Data) {
716
716
* @returns hex plain format ciphertext
717
717
*/
718
718
function encryptHex ( pubkey , data , opts = DEFAULT_SM2_ENCRYPT_OPTIONS ) {
719
- return encrypt ( pubkey , new Uint8Array ( Buffer . from ( data , 'hex' ) ) , opts )
719
+ return encrypt ( pubkey , util . hexToUint8Array ( data ) , opts )
720
720
}
721
721
722
722
/**
723
723
* SM2 decrypt function
724
724
*
725
725
* @param {string|object } prvKey private key used to decrypt, private key hex string or ECDSA object.
726
- * @param {string|Buffer| Uint8Array } data plain format (C1||C3|C2) ciphertext data
726
+ * @param {string|Uint8Array } data plain format (C1||C3|C2) ciphertext data
727
727
* @returns hex plaintext
728
728
*/
729
729
function decrypt ( prvKey , data ) {
@@ -758,7 +758,7 @@ function decryptHex (prvKey, data) {
758
758
if ( tag === '30' ) {
759
759
data = asn1Ciphertext2Plain ( data )
760
760
}
761
- return decrypt ( prvKey , new Uint8Array ( Buffer . from ( data , 'hex' ) ) )
761
+ return decrypt ( prvKey , util . hexToUint8Array ( data ) )
762
762
}
763
763
764
764
function getCurveName ( ) {
@@ -780,7 +780,7 @@ rs.asn1.csr.CSRUtil.newCSRPEM = function (param) {
780
780
const hCSRI = ( new rs . asn1 . csr . CertificationRequestInfo ( this . params ) ) . getEncodedHex ( )
781
781
const sig = new Signature ( { alg : this . params . sigalg } )
782
782
sig . init ( this . params . sbjprvkey )
783
- const sighex = sig . sm2Sign ( new Uint8Array ( Buffer . from ( hCSRI , 'hex' ) ) )
783
+ const sighex = sig . sm2Sign ( util . hexToUint8Array ( hCSRI ) )
784
784
this . params . sighex = sighex
785
785
}
786
786
}
@@ -801,7 +801,7 @@ function createX509 () {
801
801
802
802
const sig = new Signature ( { alg : algName } )
803
803
sig . init ( pubKey )
804
- return sig . sm2Verify ( hSigVal , new Uint8Array ( Buffer . from ( hTbsCert , 'hex' ) ) )
804
+ return sig . sm2Verify ( hSigVal , util . hexToUint8Array ( hTbsCert ) )
805
805
}
806
806
return x
807
807
}
0 commit comments