@ivujs/i-utils 1.1.1 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -19
- package/dist/cjs/id/index.cjs +26 -43
- package/dist/cjs/index.cjs +8 -398
- package/dist/es/id/index.d.ts +16 -0
- package/dist/es/id/index.mjs +28 -42
- package/dist/es/index.d.ts +2 -0
- package/dist/es/index.mjs +8 -58
- package/dist/index.d.ts +21 -0
- package/dist/lib/index.full.cjs.js +38 -0
- package/dist/lib/index.full.cjs.min.js +2 -0
- package/dist/lib/index.full.cjs.min.js.map +1 -0
- package/dist/lib/index.full.esm.js +35 -15822
- package/dist/lib/index.full.esm.min.js +2 -58
- package/dist/lib/index.full.esm.min.js.map +1 -0
- package/dist/lib/index.full.umd.js +39 -16176
- package/dist/lib/index.full.umd.min.js +2 -0
- package/dist/lib/index.full.umd.min.js.map +1 -0
- package/package.json +84 -54
- package/dist/cjs/ID-card/index.cjs +0 -122
- package/dist/cjs/array/index.cjs +0 -465
- package/dist/cjs/clipboard/index.cjs +0 -135
- package/dist/cjs/color/index.cjs +0 -210
- package/dist/cjs/constants/date.cjs +0 -186
- package/dist/cjs/constants/lang.cjs +0 -13
- package/dist/cjs/constants/math.cjs +0 -13
- package/dist/cjs/constants/regexp.cjs +0 -57
- package/dist/cjs/constants/sort.cjs +0 -15
- package/dist/cjs/cookie/index.cjs +0 -71
- package/dist/cjs/crypto/aes/aes.cjs +0 -533
- package/dist/cjs/crypto/aes/index.cjs +0 -28
- package/dist/cjs/crypto/base32/base32.cjs +0 -385
- package/dist/cjs/crypto/base32/index.cjs +0 -44
- package/dist/cjs/crypto/base64/base64.cjs +0 -433
- package/dist/cjs/crypto/base64/index.cjs +0 -64
- package/dist/cjs/crypto/des/des.cjs +0 -1054
- package/dist/cjs/crypto/des/index.cjs +0 -30
- package/dist/cjs/crypto/md5/index.cjs +0 -25
- package/dist/cjs/crypto/md5/md5.cjs +0 -944
- package/dist/cjs/crypto/sha/sha1/index.cjs +0 -25
- package/dist/cjs/crypto/sha/sha1/sha1.cjs +0 -602
- package/dist/cjs/crypto/sha/sha256/index.cjs +0 -46
- package/dist/cjs/crypto/sha/sha256/sha256.cjs +0 -654
- package/dist/cjs/crypto/sha/sha3/index.cjs +0 -44
- package/dist/cjs/crypto/sha/sha3/sha3.cjs +0 -747
- package/dist/cjs/crypto/sha/sha512/index.cjs +0 -88
- package/dist/cjs/crypto/sha/sha512/sha512.cjs +0 -1186
- package/dist/cjs/crypto/sm/lib/asn1.cjs +0 -167
- package/dist/cjs/crypto/sm/lib/ec.cjs +0 -352
- package/dist/cjs/crypto/sm/lib/jsbn.cjs +0 -1633
- package/dist/cjs/crypto/sm/lib/sm3.cjs +0 -173
- package/dist/cjs/crypto/sm/lib/utils.cjs +0 -198
- package/dist/cjs/crypto/sm/sm2/index.cjs +0 -122
- package/dist/cjs/crypto/sm/sm2/sm2.cjs +0 -269
- package/dist/cjs/crypto/sm/sm3/index.cjs +0 -15
- package/dist/cjs/crypto/sm/sm3/sm3.cjs +0 -103
- package/dist/cjs/crypto/sm/sm4/index.cjs +0 -28
- package/dist/cjs/crypto/sm/sm4/sm4.cjs +0 -362
- package/dist/cjs/crypto/tea/index.cjs +0 -26
- package/dist/cjs/crypto/tea/tea.cjs +0 -215
- package/dist/cjs/date/index.cjs +0 -1349
- package/dist/cjs/desensitized/index.cjs +0 -74
- package/dist/cjs/device/index.cjs +0 -159
- package/dist/cjs/dom/index.cjs +0 -176
- package/dist/cjs/file/index.cjs +0 -339
- package/dist/cjs/function/index.cjs +0 -67
- package/dist/cjs/keycode/index.cjs +0 -142
- package/dist/cjs/math/index.cjs +0 -284
- package/dist/cjs/number/index.cjs +0 -14
- package/dist/cjs/object/index.cjs +0 -216
- package/dist/cjs/pagination/index.cjs +0 -140
- package/dist/cjs/random/index.cjs +0 -25
- package/dist/cjs/regexp/index.cjs +0 -109
- package/dist/cjs/storage/index.cjs +0 -11
- package/dist/cjs/storage/localStorage.cjs +0 -40
- package/dist/cjs/storage/sessionStorage.cjs +0 -40
- package/dist/cjs/string/index.cjs +0 -338
- package/dist/cjs/url/index.cjs +0 -279
- package/dist/cjs/validate/index.cjs +0 -487
- package/dist/cjs/weapp/index.cjs +0 -151
- package/dist/es/ID-card/index.mjs +0 -116
- package/dist/es/array/index.mjs +0 -437
- package/dist/es/clipboard/index.mjs +0 -129
- package/dist/es/color/index.mjs +0 -200
- package/dist/es/constants/date.mjs +0 -184
- package/dist/es/constants/lang.mjs +0 -11
- package/dist/es/constants/math.mjs +0 -11
- package/dist/es/constants/regexp.mjs +0 -55
- package/dist/es/constants/sort.mjs +0 -13
- package/dist/es/cookie/index.mjs +0 -65
- package/dist/es/crypto/aes/aes.mjs +0 -529
- package/dist/es/crypto/aes/index.mjs +0 -25
- package/dist/es/crypto/base32/base32.mjs +0 -381
- package/dist/es/crypto/base32/index.mjs +0 -39
- package/dist/es/crypto/base64/base64.mjs +0 -427
- package/dist/es/crypto/base64/index.mjs +0 -57
- package/dist/es/crypto/des/des.mjs +0 -1050
- package/dist/es/crypto/des/index.mjs +0 -27
- package/dist/es/crypto/md5/index.mjs +0 -22
- package/dist/es/crypto/md5/md5.mjs +0 -941
- package/dist/es/crypto/sha/sha1/index.mjs +0 -22
- package/dist/es/crypto/sha/sha1/sha1.mjs +0 -599
- package/dist/es/crypto/sha/sha256/index.mjs +0 -41
- package/dist/es/crypto/sha/sha256/sha256.mjs +0 -649
- package/dist/es/crypto/sha/sha3/index.mjs +0 -39
- package/dist/es/crypto/sha/sha3/sha3.mjs +0 -742
- package/dist/es/crypto/sha/sha512/index.mjs +0 -79
- package/dist/es/crypto/sha/sha512/sha512.mjs +0 -1177
- package/dist/es/crypto/sm/lib/asn1.mjs +0 -164
- package/dist/es/crypto/sm/lib/ec.mjs +0 -349
- package/dist/es/crypto/sm/lib/jsbn.mjs +0 -1630
- package/dist/es/crypto/sm/lib/sm3.mjs +0 -170
- package/dist/es/crypto/sm/lib/utils.mjs +0 -186
- package/dist/es/crypto/sm/sm2/index.mjs +0 -111
- package/dist/es/crypto/sm/sm2/sm2.mjs +0 -258
- package/dist/es/crypto/sm/sm3/index.mjs +0 -13
- package/dist/es/crypto/sm/sm3/sm3.mjs +0 -99
- package/dist/es/crypto/sm/sm4/index.mjs +0 -25
- package/dist/es/crypto/sm/sm4/sm4.mjs +0 -359
- package/dist/es/crypto/tea/index.mjs +0 -23
- package/dist/es/crypto/tea/tea.mjs +0 -211
- package/dist/es/date/index.mjs +0 -1262
- package/dist/es/desensitized/index.mjs +0 -69
- package/dist/es/device/index.mjs +0 -145
- package/dist/es/dom/index.mjs +0 -164
- package/dist/es/file/index.mjs +0 -323
- package/dist/es/function/index.mjs +0 -63
- package/dist/es/keycode/index.mjs +0 -139
- package/dist/es/math/index.mjs +0 -274
- package/dist/es/number/index.mjs +0 -12
- package/dist/es/object/index.mjs +0 -203
- package/dist/es/pagination/index.mjs +0 -134
- package/dist/es/random/index.mjs +0 -22
- package/dist/es/regexp/index.mjs +0 -98
- package/dist/es/storage/index.mjs +0 -9
- package/dist/es/storage/localStorage.mjs +0 -35
- package/dist/es/storage/sessionStorage.mjs +0 -35
- package/dist/es/string/index.mjs +0 -321
- package/dist/es/url/index.mjs +0 -261
- package/dist/es/validate/index.mjs +0 -451
- package/dist/es/weapp/index.mjs +0 -140
|
@@ -1,269 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var jsbn = require('../lib/jsbn.cjs');
|
|
4
|
-
var asn1 = require('../lib/asn1.cjs');
|
|
5
|
-
var utils = require('../lib/utils.cjs');
|
|
6
|
-
var sm3 = require('../lib/sm3.cjs');
|
|
7
|
-
|
|
8
|
-
const { BigInteger } = jsbn;
|
|
9
|
-
const { decodeDer, encodeDer } = asn1;
|
|
10
|
-
|
|
11
|
-
const { G, curve, n } = utils.generateEcparam();
|
|
12
|
-
const C1C2C3 = 0;
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* 加密
|
|
16
|
-
*/
|
|
17
|
-
function doEncrypt(msg, publicKey, cipherMode = 1) {
|
|
18
|
-
msg = typeof msg === "string" ? utils.hexToArray(utils.utf8ToHex(msg)) : Array.prototype.slice.call(msg);
|
|
19
|
-
publicKey = utils.getGlobalCurve().decodePointHex(publicKey); // 先将公钥转成点
|
|
20
|
-
|
|
21
|
-
const keypair = utils.generateKeyPairHex();
|
|
22
|
-
const k = new BigInteger(keypair.privateKey, 16); // 随机数 k
|
|
23
|
-
|
|
24
|
-
// c1 = k * G
|
|
25
|
-
let c1 = keypair.publicKey;
|
|
26
|
-
if (c1.length > 128) c1 = c1.substr(c1.length - 128);
|
|
27
|
-
|
|
28
|
-
// (x2, y2) = k * publicKey
|
|
29
|
-
const p = publicKey.multiply(k);
|
|
30
|
-
const x2 = utils.hexToArray(utils.leftPad(p.getX().toBigInteger().toRadix(16), 64));
|
|
31
|
-
const y2 = utils.hexToArray(utils.leftPad(p.getY().toBigInteger().toRadix(16), 64));
|
|
32
|
-
|
|
33
|
-
// c3 = hash(x2 || msg || y2)
|
|
34
|
-
const c3 = utils.arrayToHex(sm3.sm3([].concat(x2, msg, y2)));
|
|
35
|
-
|
|
36
|
-
let ct = 1;
|
|
37
|
-
let offset = 0;
|
|
38
|
-
let t = []; // 256 位
|
|
39
|
-
const z = [].concat(x2, y2);
|
|
40
|
-
const nextT = () => {
|
|
41
|
-
// (1) Hai = hash(z || ct)
|
|
42
|
-
// (2) ct++
|
|
43
|
-
t = sm3.sm3([...z, (ct >> 24) & 0x00ff, (ct >> 16) & 0x00ff, (ct >> 8) & 0x00ff, ct & 0x00ff]);
|
|
44
|
-
ct++;
|
|
45
|
-
offset = 0;
|
|
46
|
-
};
|
|
47
|
-
nextT(); // 先生成 Ha1
|
|
48
|
-
|
|
49
|
-
for (let i = 0, len = msg.length; i < len; i++) {
|
|
50
|
-
// t = Ha1 || Ha2 || Ha3 || Ha4
|
|
51
|
-
if (offset === t.length) nextT();
|
|
52
|
-
|
|
53
|
-
// c2 = msg ^ t
|
|
54
|
-
msg[i] ^= t[offset++] & 0xff;
|
|
55
|
-
}
|
|
56
|
-
const c2 = utils.arrayToHex(msg);
|
|
57
|
-
|
|
58
|
-
return cipherMode === C1C2C3 ? c1 + c2 + c3 : c1 + c3 + c2;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* 解密
|
|
63
|
-
*/
|
|
64
|
-
function doDecrypt(encryptData, privateKey, cipherMode = 1, { output = "string" } = {}) {
|
|
65
|
-
privateKey = new BigInteger(privateKey, 16);
|
|
66
|
-
|
|
67
|
-
let c3 = encryptData.substr(128, 64);
|
|
68
|
-
let c2 = encryptData.substr(128 + 64);
|
|
69
|
-
|
|
70
|
-
if (cipherMode === C1C2C3) {
|
|
71
|
-
c3 = encryptData.substr(encryptData.length - 64);
|
|
72
|
-
c2 = encryptData.substr(128, encryptData.length - 128 - 64);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
const msg = utils.hexToArray(c2);
|
|
76
|
-
const c1 = utils.getGlobalCurve().decodePointHex("04" + encryptData.substr(0, 128));
|
|
77
|
-
|
|
78
|
-
const p = c1.multiply(privateKey);
|
|
79
|
-
const x2 = utils.hexToArray(utils.leftPad(p.getX().toBigInteger().toRadix(16), 64));
|
|
80
|
-
const y2 = utils.hexToArray(utils.leftPad(p.getY().toBigInteger().toRadix(16), 64));
|
|
81
|
-
|
|
82
|
-
let ct = 1;
|
|
83
|
-
let offset = 0;
|
|
84
|
-
let t = []; // 256 位
|
|
85
|
-
const z = [].concat(x2, y2);
|
|
86
|
-
const nextT = () => {
|
|
87
|
-
// (1) Hai = hash(z || ct)
|
|
88
|
-
// (2) ct++
|
|
89
|
-
t = sm3.sm3([...z, (ct >> 24) & 0x00ff, (ct >> 16) & 0x00ff, (ct >> 8) & 0x00ff, ct & 0x00ff]);
|
|
90
|
-
ct++;
|
|
91
|
-
offset = 0;
|
|
92
|
-
};
|
|
93
|
-
nextT(); // 先生成 Ha1
|
|
94
|
-
|
|
95
|
-
for (let i = 0, len = msg.length; i < len; i++) {
|
|
96
|
-
// t = Ha1 || Ha2 || Ha3 || Ha4
|
|
97
|
-
if (offset === t.length) nextT();
|
|
98
|
-
|
|
99
|
-
// c2 = msg ^ t
|
|
100
|
-
msg[i] ^= t[offset++] & 0xff;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// c3 = hash(x2 || msg || y2)
|
|
104
|
-
const checkC3 = utils.arrayToHex(sm3.sm3([].concat(x2, msg, y2)));
|
|
105
|
-
|
|
106
|
-
if (checkC3 === c3.toLowerCase()) {
|
|
107
|
-
return output === "array" ? msg : utils.arrayToUtf8(msg);
|
|
108
|
-
} else {
|
|
109
|
-
return output === "array" ? [] : "";
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* 签名
|
|
115
|
-
*/
|
|
116
|
-
function doSignature(msg, privateKey, { pointPool, der, hash, publicKey, userId } = {}) {
|
|
117
|
-
let hashHex = typeof msg === "string" ? utils.utf8ToHex(msg) : utils.arrayToHex(msg);
|
|
118
|
-
|
|
119
|
-
if (hash) {
|
|
120
|
-
// sm3杂凑
|
|
121
|
-
publicKey = publicKey || getPublicKeyFromPrivateKey(privateKey);
|
|
122
|
-
hashHex = getHash(hashHex, publicKey, userId);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
const dA = new BigInteger(privateKey, 16);
|
|
126
|
-
const e = new BigInteger(hashHex, 16);
|
|
127
|
-
|
|
128
|
-
// k
|
|
129
|
-
let k = null;
|
|
130
|
-
let r = null;
|
|
131
|
-
let s = null;
|
|
132
|
-
|
|
133
|
-
do {
|
|
134
|
-
do {
|
|
135
|
-
let point;
|
|
136
|
-
if (pointPool && pointPool.length) {
|
|
137
|
-
point = pointPool.pop();
|
|
138
|
-
} else {
|
|
139
|
-
point = getPoint();
|
|
140
|
-
}
|
|
141
|
-
k = point.k;
|
|
142
|
-
|
|
143
|
-
// r = (e + x1) mod n
|
|
144
|
-
r = e.add(point.x1).mod(n);
|
|
145
|
-
} while (r.equals(BigInteger.ZERO) || r.add(k).equals(n));
|
|
146
|
-
|
|
147
|
-
// s = ((1 + dA)^-1 * (k - r * dA)) mod n
|
|
148
|
-
s = dA
|
|
149
|
-
.add(BigInteger.ONE)
|
|
150
|
-
.modInverse(n)
|
|
151
|
-
.multiply(k.subtract(r.multiply(dA)))
|
|
152
|
-
.mod(n);
|
|
153
|
-
} while (s.equals(BigInteger.ZERO));
|
|
154
|
-
|
|
155
|
-
if (der) return encodeDer(r, s); // asn.1 der 编码
|
|
156
|
-
|
|
157
|
-
return utils.leftPad(r.toString(16), 64) + utils.leftPad(s.toString(16), 64);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* 验签
|
|
162
|
-
*/
|
|
163
|
-
function doVerifySignature(msg, signHex, publicKey, { der, hash, userId } = {}) {
|
|
164
|
-
let hashHex = typeof msg === "string" ? utils.utf8ToHex(msg) : utils.arrayToHex(msg);
|
|
165
|
-
|
|
166
|
-
if (hash) {
|
|
167
|
-
// sm3杂凑
|
|
168
|
-
hashHex = getHash(hashHex, publicKey, userId);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
let r;
|
|
172
|
-
let s;
|
|
173
|
-
if (der) {
|
|
174
|
-
const decodeDerObj = decodeDer(signHex); // asn.1 der 解码
|
|
175
|
-
r = decodeDerObj.r;
|
|
176
|
-
s = decodeDerObj.s;
|
|
177
|
-
} else {
|
|
178
|
-
r = new BigInteger(signHex.substring(0, 64), 16);
|
|
179
|
-
s = new BigInteger(signHex.substring(64), 16);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
const PA = curve.decodePointHex(publicKey);
|
|
183
|
-
const e = new BigInteger(hashHex, 16);
|
|
184
|
-
|
|
185
|
-
// t = (r + s) mod n
|
|
186
|
-
const t = r.add(s).mod(n);
|
|
187
|
-
|
|
188
|
-
if (t.equals(BigInteger.ZERO)) return false;
|
|
189
|
-
|
|
190
|
-
// x1y1 = s * G + t * PA
|
|
191
|
-
const x1y1 = G.multiply(s).add(PA.multiply(t));
|
|
192
|
-
|
|
193
|
-
// R = (e + x1) mod n
|
|
194
|
-
const R = e.add(x1y1.getX().toBigInteger()).mod(n);
|
|
195
|
-
|
|
196
|
-
return r.equals(R);
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* sm3杂凑算法
|
|
201
|
-
*/
|
|
202
|
-
function getHash(hashHex, publicKey, userId = "1234567812345678") {
|
|
203
|
-
// z = hash(entl || userId || a || b || gx || gy || px || py)
|
|
204
|
-
userId = utils.utf8ToHex(userId);
|
|
205
|
-
const a = utils.leftPad(G.curve.a.toBigInteger().toRadix(16), 64);
|
|
206
|
-
const b = utils.leftPad(G.curve.b.toBigInteger().toRadix(16), 64);
|
|
207
|
-
const gx = utils.leftPad(G.getX().toBigInteger().toRadix(16), 64);
|
|
208
|
-
const gy = utils.leftPad(G.getY().toBigInteger().toRadix(16), 64);
|
|
209
|
-
let px;
|
|
210
|
-
let py;
|
|
211
|
-
if (publicKey.length === 128) {
|
|
212
|
-
px = publicKey.substr(0, 64);
|
|
213
|
-
py = publicKey.substr(64, 64);
|
|
214
|
-
} else {
|
|
215
|
-
const point = G.curve.decodePointHex(publicKey);
|
|
216
|
-
px = utils.leftPad(point.getX().toBigInteger().toRadix(16), 64);
|
|
217
|
-
py = utils.leftPad(point.getY().toBigInteger().toRadix(16), 64);
|
|
218
|
-
}
|
|
219
|
-
const data = utils.hexToArray(userId + a + b + gx + gy + px + py);
|
|
220
|
-
|
|
221
|
-
const entl = userId.length * 4;
|
|
222
|
-
data.unshift(entl & 0x00ff);
|
|
223
|
-
data.unshift((entl >> 8) & 0x00ff);
|
|
224
|
-
|
|
225
|
-
const z = sm3.sm3(data);
|
|
226
|
-
|
|
227
|
-
// e = hash(z || msg)
|
|
228
|
-
return utils.arrayToHex(sm3.sm3(z.concat(utils.hexToArray(hashHex))));
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* 计算公钥
|
|
233
|
-
*/
|
|
234
|
-
function getPublicKeyFromPrivateKey(privateKey) {
|
|
235
|
-
const PA = G.multiply(new BigInteger(privateKey, 16));
|
|
236
|
-
const x = utils.leftPad(PA.getX().toBigInteger().toString(16), 64);
|
|
237
|
-
const y = utils.leftPad(PA.getY().toBigInteger().toString(16), 64);
|
|
238
|
-
return "04" + x + y;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* 获取椭圆曲线点
|
|
243
|
-
*/
|
|
244
|
-
function getPoint() {
|
|
245
|
-
const keypair = utils.generateKeyPairHex();
|
|
246
|
-
const PA = curve.decodePointHex(keypair.publicKey);
|
|
247
|
-
|
|
248
|
-
keypair.k = new BigInteger(keypair.privateKey, 16);
|
|
249
|
-
keypair.x1 = PA.getX().toBigInteger();
|
|
250
|
-
|
|
251
|
-
return keypair;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
// es6 export
|
|
255
|
-
const generateKeyPairHex = utils.generateKeyPairHex;
|
|
256
|
-
const compressPublicKeyHex = utils.compressPublicKeyHex;
|
|
257
|
-
const comparePublicKeyHex = utils.comparePublicKeyHex;
|
|
258
|
-
const verifyPublicKey = utils.verifyPublicKey;
|
|
259
|
-
|
|
260
|
-
exports.comparePublicKeyHex = comparePublicKeyHex;
|
|
261
|
-
exports.compressPublicKeyHex = compressPublicKeyHex;
|
|
262
|
-
exports.doDecrypt = doDecrypt;
|
|
263
|
-
exports.doEncrypt = doEncrypt;
|
|
264
|
-
exports.doSignature = doSignature;
|
|
265
|
-
exports.doVerifySignature = doVerifySignature;
|
|
266
|
-
exports.generateKeyPairHex = generateKeyPairHex;
|
|
267
|
-
exports.getPoint = getPoint;
|
|
268
|
-
exports.getPublicKeyFromPrivateKey = getPublicKeyFromPrivateKey;
|
|
269
|
-
exports.verifyPublicKey = verifyPublicKey;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var sm3 = require('./sm3.cjs');
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* sm3 加密
|
|
7
|
-
* @param {String} str 字符串
|
|
8
|
-
* @param {Object} options 配置
|
|
9
|
-
* @returns {String} 返回加密后的字符串
|
|
10
|
-
*/
|
|
11
|
-
function encrypt(str, options) {
|
|
12
|
-
return sm3.default(str, options);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
exports.encrypt = encrypt;
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var sm3 = require('../lib/sm3.cjs');
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* 补全16进制字符串
|
|
9
|
-
*/
|
|
10
|
-
function leftPad(input, num) {
|
|
11
|
-
if (input.length >= num) return input;
|
|
12
|
-
|
|
13
|
-
return new Array(num - input.length + 1).join("0") + input;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* 字节数组转 16 进制串
|
|
18
|
-
*/
|
|
19
|
-
function ArrayToHex(arr) {
|
|
20
|
-
return arr
|
|
21
|
-
.map((item) => {
|
|
22
|
-
item = item.toString(16);
|
|
23
|
-
return item.length === 1 ? "0" + item : item;
|
|
24
|
-
})
|
|
25
|
-
.join("");
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* 转成字节数组
|
|
30
|
-
*/
|
|
31
|
-
function hexToArray(hexStr) {
|
|
32
|
-
const words = [];
|
|
33
|
-
let hexStrLength = hexStr.length;
|
|
34
|
-
|
|
35
|
-
if (hexStrLength % 2 !== 0) {
|
|
36
|
-
hexStr = leftPad(hexStr, hexStrLength + 1);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
hexStrLength = hexStr.length;
|
|
40
|
-
|
|
41
|
-
for (let i = 0; i < hexStrLength; i += 2) {
|
|
42
|
-
words.push(parseInt(hexStr.substr(i, 2), 16));
|
|
43
|
-
}
|
|
44
|
-
return words;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* utf8 串转字节数组
|
|
49
|
-
*/
|
|
50
|
-
function utf8ToArray(str) {
|
|
51
|
-
const arr = [];
|
|
52
|
-
|
|
53
|
-
for (let i = 0, len = str.length; i < len; i++) {
|
|
54
|
-
const point = str.codePointAt(i);
|
|
55
|
-
|
|
56
|
-
if (point <= 0x007f) {
|
|
57
|
-
// 单字节,标量值:00000000 00000000 0zzzzzzz
|
|
58
|
-
arr.push(point);
|
|
59
|
-
} else if (point <= 0x07ff) {
|
|
60
|
-
// 双字节,标量值:00000000 00000yyy yyzzzzzz
|
|
61
|
-
arr.push(0xc0 | (point >>> 6)); // 110yyyyy(0xc0-0xdf)
|
|
62
|
-
arr.push(0x80 | (point & 0x3f)); // 10zzzzzz(0x80-0xbf)
|
|
63
|
-
} else if (point <= 0xd7ff || (point >= 0xe000 && point <= 0xffff)) {
|
|
64
|
-
// 三字节:标量值:00000000 xxxxyyyy yyzzzzzz
|
|
65
|
-
arr.push(0xe0 | (point >>> 12)); // 1110xxxx(0xe0-0xef)
|
|
66
|
-
arr.push(0x80 | ((point >>> 6) & 0x3f)); // 10yyyyyy(0x80-0xbf)
|
|
67
|
-
arr.push(0x80 | (point & 0x3f)); // 10zzzzzz(0x80-0xbf)
|
|
68
|
-
} else if (point >= 0x010000 && point <= 0x10ffff) {
|
|
69
|
-
// 四字节:标量值:000wwwxx xxxxyyyy yyzzzzzz
|
|
70
|
-
i++;
|
|
71
|
-
arr.push(0xf0 | ((point >>> 18) & 0x1c)); // 11110www(0xf0-0xf7)
|
|
72
|
-
arr.push(0x80 | ((point >>> 12) & 0x3f)); // 10xxxxxx(0x80-0xbf)
|
|
73
|
-
arr.push(0x80 | ((point >>> 6) & 0x3f)); // 10yyyyyy(0x80-0xbf)
|
|
74
|
-
arr.push(0x80 | (point & 0x3f)); // 10zzzzzz(0x80-0xbf)
|
|
75
|
-
} else {
|
|
76
|
-
// 五、六字节,暂时不支持
|
|
77
|
-
arr.push(point);
|
|
78
|
-
throw new Error("input is not supported");
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
return arr;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/* 以下是内部实现需要的es模块化导出方法 */
|
|
86
|
-
function SM3 (input, options) {
|
|
87
|
-
input = typeof input === "string" ? utf8ToArray(input) : Array.prototype.slice.call(input);
|
|
88
|
-
|
|
89
|
-
if (options) {
|
|
90
|
-
const mode = options.mode || "hmac";
|
|
91
|
-
if (mode !== "hmac") throw new Error("invalid mode");
|
|
92
|
-
|
|
93
|
-
let key = options.key;
|
|
94
|
-
if (!key) throw new Error("invalid key");
|
|
95
|
-
|
|
96
|
-
key = typeof key === "string" ? hexToArray(key) : Array.prototype.slice.call(key);
|
|
97
|
-
return ArrayToHex(sm3.hmac(input, key));
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
return ArrayToHex(sm3.sm3(input));
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
exports.default = SM3;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var sm4 = require('./sm4.cjs');
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* sm4 加密
|
|
7
|
-
* @param {String} str 字符串
|
|
8
|
-
* @param {String} key 秘钥
|
|
9
|
-
* @param {Object} options 配置
|
|
10
|
-
* @returns {String} 返回加密后的字符串
|
|
11
|
-
*/
|
|
12
|
-
function encrypt(str, key, options) {
|
|
13
|
-
return sm4.encrypt(str, key, options);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* sm4 解密
|
|
18
|
-
* @param {String} str 字符串
|
|
19
|
-
* @param {String} key 秘钥
|
|
20
|
-
* @param {Object} options 配置
|
|
21
|
-
* @returns {String} 返回解密后的数据
|
|
22
|
-
*/
|
|
23
|
-
function decrypt(str, key, options) {
|
|
24
|
-
return sm4.decrypt(str, key, options);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
exports.decrypt = decrypt;
|
|
28
|
-
exports.encrypt = encrypt;
|