@ivujs/i-utils 2.0.0 → 2.1.1

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.
Files changed (228) hide show
  1. package/README.md +40 -42
  2. package/dist/cjs/ID-card/index.cjs +21 -13
  3. package/dist/cjs/array/index.cjs +40 -34
  4. package/dist/cjs/clipboard/index.cjs +14 -10
  5. package/dist/cjs/color/index.cjs +73 -59
  6. package/dist/cjs/constants/date.cjs +55 -1
  7. package/dist/cjs/constants/id-card.cjs +42 -1
  8. package/dist/cjs/constants/keycode.cjs +117 -2
  9. package/dist/cjs/constants/lang.cjs +7 -1
  10. package/dist/cjs/constants/math.cjs +9 -1
  11. package/dist/cjs/constants/regexp.cjs +33 -10
  12. package/dist/cjs/constants/sort.cjs +10 -1
  13. package/dist/cjs/cookie/index.cjs +16 -13
  14. package/dist/cjs/crypto/base64/base64.cjs +398 -206
  15. package/dist/cjs/crypto/base64/index.cjs +58 -35
  16. package/dist/cjs/crypto/md5/index.cjs +33 -8
  17. package/dist/cjs/crypto/md5/md5.cjs +298 -844
  18. package/dist/cjs/crypto/sha256/index.cjs +95 -0
  19. package/dist/cjs/crypto/sha256/sha256.cjs +557 -0
  20. package/dist/cjs/crypto/sm3/index.cjs +27 -0
  21. package/dist/cjs/crypto/sm3/sm3.cjs +200 -0
  22. package/dist/cjs/crypto/sm4/index.cjs +101 -0
  23. package/dist/cjs/crypto/sm4/sm4.cjs +498 -0
  24. package/dist/cjs/date/index.cjs +420 -340
  25. package/dist/cjs/desensitized/index.cjs +21 -18
  26. package/dist/cjs/device/index.cjs +33 -30
  27. package/dist/cjs/dom/index.cjs +26 -23
  28. package/dist/cjs/file/index.cjs +51 -41
  29. package/dist/cjs/function/index.cjs +22 -19
  30. package/dist/cjs/id/index.cjs +6 -2
  31. package/dist/cjs/index.cjs +110 -127
  32. package/dist/cjs/keycode/index.cjs +9 -12
  33. package/dist/cjs/math/index.cjs +113 -81
  34. package/dist/cjs/number/index.cjs +10 -7
  35. package/dist/cjs/object/index.cjs +77 -30
  36. package/dist/cjs/pagination/index.cjs +25 -10
  37. package/dist/cjs/random/index.cjs +8 -5
  38. package/dist/cjs/regexp/index.cjs +23 -20
  39. package/dist/cjs/storage/index.cjs +4 -1
  40. package/dist/cjs/storage/localStorage.cjs +5 -5
  41. package/dist/cjs/storage/sessionStorage.cjs +6 -6
  42. package/dist/cjs/string/index.cjs +66 -63
  43. package/dist/cjs/url/index.cjs +83 -80
  44. package/dist/cjs/validate/index.cjs +122 -106
  45. package/dist/es/ID-card/index.d.ts +19 -14
  46. package/dist/es/ID-card/index.mjs +22 -14
  47. package/dist/es/array/index.d.ts +56 -50
  48. package/dist/es/array/index.mjs +40 -34
  49. package/dist/es/clipboard/index.d.ts +10 -7
  50. package/dist/es/clipboard/index.mjs +14 -10
  51. package/dist/es/color/index.d.ts +28 -25
  52. package/dist/es/color/index.mjs +73 -59
  53. package/dist/es/constants/date.d.ts +58 -174
  54. package/dist/es/constants/date.mjs +55 -1
  55. package/dist/es/constants/id-card.d.ts +45 -43
  56. package/dist/es/constants/id-card.mjs +42 -1
  57. package/dist/es/constants/index.d.ts +11 -7
  58. package/dist/es/constants/keycode.d.ts +119 -103
  59. package/dist/es/constants/keycode.mjs +117 -2
  60. package/dist/es/constants/lang.d.ts +10 -4
  61. package/dist/es/constants/lang.mjs +7 -1
  62. package/dist/es/constants/math.d.ts +12 -4
  63. package/dist/es/constants/math.mjs +9 -1
  64. package/dist/es/constants/regexp.d.ts +27 -24
  65. package/dist/es/constants/regexp.mjs +33 -10
  66. package/dist/es/constants/sort.d.ts +13 -5
  67. package/dist/es/constants/sort.mjs +10 -1
  68. package/dist/es/cookie/index.d.ts +13 -13
  69. package/dist/es/cookie/index.mjs +16 -13
  70. package/dist/es/crypto/base64/base64.d.ts +8 -5
  71. package/dist/es/crypto/base64/base64.mjs +393 -204
  72. package/dist/es/crypto/base64/index.d.ts +41 -24
  73. package/dist/es/crypto/base64/index.mjs +53 -32
  74. package/dist/es/crypto/index.d.ts +8 -8
  75. package/dist/es/crypto/md5/index.d.ts +20 -7
  76. package/dist/es/crypto/md5/index.mjs +32 -9
  77. package/dist/es/crypto/md5/md5.d.ts +9 -142
  78. package/dist/es/crypto/md5/md5.mjs +299 -844
  79. package/dist/es/crypto/sha256/index.d.ts +52 -0
  80. package/dist/es/crypto/sha256/index.mjs +86 -0
  81. package/dist/es/crypto/sha256/sha256.d.ts +82 -0
  82. package/dist/es/crypto/sha256/sha256.mjs +548 -0
  83. package/dist/es/crypto/sm3/index.d.ts +13 -0
  84. package/dist/es/crypto/sm3/index.mjs +24 -0
  85. package/dist/es/crypto/sm3/sm3.d.ts +3 -0
  86. package/dist/es/crypto/sm3/sm3.mjs +197 -0
  87. package/dist/es/crypto/sm4/index.d.ts +56 -0
  88. package/dist/es/crypto/sm4/index.mjs +95 -0
  89. package/dist/es/crypto/sm4/sm4.d.ts +48 -0
  90. package/dist/es/crypto/sm4/sm4.mjs +490 -0
  91. package/dist/es/date/index.d.ts +269 -179
  92. package/dist/es/date/index.mjs +417 -340
  93. package/dist/es/desensitized/index.d.ts +26 -23
  94. package/dist/es/desensitized/index.mjs +21 -18
  95. package/dist/es/device/index.d.ts +31 -25
  96. package/dist/es/device/index.mjs +33 -30
  97. package/dist/es/dom/index.d.ts +32 -29
  98. package/dist/es/dom/index.mjs +26 -23
  99. package/dist/es/file/index.d.ts +30 -30
  100. package/dist/es/file/index.mjs +51 -41
  101. package/dist/es/function/index.d.ts +10 -7
  102. package/dist/es/function/index.mjs +22 -19
  103. package/dist/es/id/index.d.ts +3 -0
  104. package/dist/es/id/index.mjs +6 -2
  105. package/dist/es/index.d.ts +24 -25
  106. package/dist/es/index.mjs +6 -23
  107. package/dist/es/keycode/index.d.ts +6 -6
  108. package/dist/es/keycode/index.mjs +9 -12
  109. package/dist/es/math/index.d.ts +37 -37
  110. package/dist/es/math/index.mjs +113 -81
  111. package/dist/es/number/index.d.ts +7 -7
  112. package/dist/es/number/index.mjs +10 -7
  113. package/dist/es/object/index.d.ts +20 -19
  114. package/dist/es/object/index.mjs +77 -30
  115. package/dist/es/pagination/index.d.ts +39 -6
  116. package/dist/es/pagination/index.mjs +25 -10
  117. package/dist/es/random/index.d.ts +10 -7
  118. package/dist/es/random/index.mjs +8 -5
  119. package/dist/es/regexp/index.d.ts +30 -30
  120. package/dist/es/regexp/index.mjs +23 -20
  121. package/dist/es/storage/index.d.ts +10 -4
  122. package/dist/es/storage/index.mjs +4 -1
  123. package/dist/es/storage/localStorage.d.ts +9 -9
  124. package/dist/es/storage/localStorage.mjs +5 -5
  125. package/dist/es/storage/sessionStorage.d.ts +9 -9
  126. package/dist/es/storage/sessionStorage.mjs +6 -6
  127. package/dist/es/string/index.d.ts +62 -59
  128. package/dist/es/string/index.mjs +66 -63
  129. package/dist/es/url/index.d.ts +65 -65
  130. package/dist/es/url/index.mjs +83 -80
  131. package/dist/es/validate/index.d.ts +83 -80
  132. package/dist/es/validate/index.mjs +122 -106
  133. package/dist/index.d.ts +2643 -2803
  134. package/dist/lib/index.full.umd.js +3609 -9494
  135. package/dist/lib/index.full.umd.min.js +2 -64
  136. package/dist/lib/index.full.umd.min.js.map +1 -1
  137. package/dist/resolver/auto-imports.cjs +40 -31
  138. package/dist/resolver/auto-imports.mjs +40 -31
  139. package/dist/resolver/index.cjs +1 -2
  140. package/dist/resolver/index.d.ts +1 -1
  141. package/dist/resolver/index.mjs +1 -2
  142. package/package.json +96 -90
  143. package/dist/cjs/crypto/aes/aes.cjs +0 -480
  144. package/dist/cjs/crypto/aes/index.cjs +0 -27
  145. package/dist/cjs/crypto/base32/base32.cjs +0 -357
  146. package/dist/cjs/crypto/base32/index.cjs +0 -41
  147. package/dist/cjs/crypto/des/des.cjs +0 -257
  148. package/dist/cjs/crypto/des/index.cjs +0 -28
  149. package/dist/cjs/crypto/sha/sha1/index.cjs +0 -24
  150. package/dist/cjs/crypto/sha/sha1/sha1.cjs +0 -529
  151. package/dist/cjs/crypto/sha/sha256/index.cjs +0 -43
  152. package/dist/cjs/crypto/sha/sha256/sha256.cjs +0 -595
  153. package/dist/cjs/crypto/sha/sha3/index.cjs +0 -41
  154. package/dist/cjs/crypto/sha/sha3/sha3.cjs +0 -624
  155. package/dist/cjs/crypto/sha/sha512/index.cjs +0 -81
  156. package/dist/cjs/crypto/sha/sha512/sha512.cjs +0 -950
  157. package/dist/cjs/crypto/sm/lib/asn1.cjs +0 -149
  158. package/dist/cjs/crypto/sm/lib/ec.cjs +0 -315
  159. package/dist/cjs/crypto/sm/lib/jsbn.cjs +0 -1608
  160. package/dist/cjs/crypto/sm/lib/sm3.cjs +0 -158
  161. package/dist/cjs/crypto/sm/lib/utils.cjs +0 -170
  162. package/dist/cjs/crypto/sm/sm2/index.cjs +0 -112
  163. package/dist/cjs/crypto/sm/sm2/sm2.cjs +0 -231
  164. package/dist/cjs/crypto/sm/sm3/index.cjs +0 -15
  165. package/dist/cjs/crypto/sm/sm3/sm3.cjs +0 -93
  166. package/dist/cjs/crypto/sm/sm4/index.cjs +0 -27
  167. package/dist/cjs/crypto/sm/sm4/sm4.cjs +0 -327
  168. package/dist/cjs/crypto/tea/index.cjs +0 -25
  169. package/dist/cjs/crypto/tea/tea.cjs +0 -187
  170. package/dist/cjs/weapp/index.cjs +0 -142
  171. package/dist/es/crypto/aes/aes.d.ts +0 -156
  172. package/dist/es/crypto/aes/aes.mjs +0 -478
  173. package/dist/es/crypto/aes/index.d.ts +0 -16
  174. package/dist/es/crypto/aes/index.mjs +0 -24
  175. package/dist/es/crypto/base32/base32.d.ts +0 -3
  176. package/dist/es/crypto/base32/base32.mjs +0 -353
  177. package/dist/es/crypto/base32/index.d.ts +0 -24
  178. package/dist/es/crypto/base32/index.mjs +0 -36
  179. package/dist/es/crypto/des/des.d.ts +0 -52
  180. package/dist/es/crypto/des/des.mjs +0 -255
  181. package/dist/es/crypto/des/index.d.ts +0 -14
  182. package/dist/es/crypto/des/index.mjs +0 -25
  183. package/dist/es/crypto/sha/index.d.ts +0 -4
  184. package/dist/es/crypto/sha/sha1/index.d.ts +0 -13
  185. package/dist/es/crypto/sha/sha1/index.mjs +0 -21
  186. package/dist/es/crypto/sha/sha1/sha1.d.ts +0 -2
  187. package/dist/es/crypto/sha/sha1/sha1.mjs +0 -526
  188. package/dist/es/crypto/sha/sha256/index.d.ts +0 -26
  189. package/dist/es/crypto/sha/sha256/index.mjs +0 -38
  190. package/dist/es/crypto/sha/sha256/sha256.d.ts +0 -4
  191. package/dist/es/crypto/sha/sha256/sha256.mjs +0 -590
  192. package/dist/es/crypto/sha/sha3/index.d.ts +0 -24
  193. package/dist/es/crypto/sha/sha3/index.mjs +0 -36
  194. package/dist/es/crypto/sha/sha3/sha3.d.ts +0 -4
  195. package/dist/es/crypto/sha/sha3/sha3.mjs +0 -619
  196. package/dist/es/crypto/sha/sha512/index.d.ts +0 -52
  197. package/dist/es/crypto/sha/sha512/index.mjs +0 -72
  198. package/dist/es/crypto/sha/sha512/sha512.d.ts +0 -8
  199. package/dist/es/crypto/sha/sha512/sha512.mjs +0 -941
  200. package/dist/es/crypto/sm/index.d.ts +0 -3
  201. package/dist/es/crypto/sm/lib/asn1.d.ts +0 -12
  202. package/dist/es/crypto/sm/lib/asn1.mjs +0 -146
  203. package/dist/es/crypto/sm/lib/ec.d.ts +0 -126
  204. package/dist/es/crypto/sm/lib/ec.mjs +0 -312
  205. package/dist/es/crypto/sm/lib/jsbn.d.ts +0 -198
  206. package/dist/es/crypto/sm/lib/jsbn.mjs +0 -1605
  207. package/dist/es/crypto/sm/lib/sm3.d.ts +0 -5
  208. package/dist/es/crypto/sm/lib/sm3.mjs +0 -155
  209. package/dist/es/crypto/sm/lib/utils.d.ts +0 -53
  210. package/dist/es/crypto/sm/lib/utils.mjs +0 -158
  211. package/dist/es/crypto/sm/sm2/index.d.ts +0 -71
  212. package/dist/es/crypto/sm/sm2/index.mjs +0 -101
  213. package/dist/es/crypto/sm/sm2/sm2.d.ts +0 -34
  214. package/dist/es/crypto/sm/sm2/sm2.mjs +0 -220
  215. package/dist/es/crypto/sm/sm3/index.d.ts +0 -7
  216. package/dist/es/crypto/sm/sm3/index.mjs +0 -13
  217. package/dist/es/crypto/sm/sm3/sm3.d.ts +0 -1
  218. package/dist/es/crypto/sm/sm3/sm3.mjs +0 -91
  219. package/dist/es/crypto/sm/sm4/index.d.ts +0 -16
  220. package/dist/es/crypto/sm/sm4/index.mjs +0 -24
  221. package/dist/es/crypto/sm/sm4/sm4.d.ts +0 -2
  222. package/dist/es/crypto/sm/sm4/sm4.mjs +0 -324
  223. package/dist/es/crypto/tea/index.d.ts +0 -14
  224. package/dist/es/crypto/tea/index.mjs +0 -22
  225. package/dist/es/crypto/tea/tea.d.ts +0 -69
  226. package/dist/es/crypto/tea/tea.mjs +0 -185
  227. package/dist/es/weapp/index.d.ts +0 -57
  228. package/dist/es/weapp/index.mjs +0 -131
@@ -0,0 +1,95 @@
1
+ 'use strict';
2
+
3
+ var sha256$1 = require('./sha256.cjs');
4
+
5
+ // sha256
6
+ /**
7
+ * sha256 加密
8
+ * @param {string} str 字符串
9
+ * @returns {string} 返回加密后的字符串
10
+ */
11
+ function sha256(str) {
12
+ return sha256$1.sha256(str);
13
+ }
14
+ /**
15
+ * sha256_raw 加密
16
+ * @param {string} str 字符串
17
+ * @returns {string} 返回加密后的原始值
18
+ */
19
+ function sha256Raw(str) {
20
+ return sha256$1.sha256_raw(str);
21
+ }
22
+ /**
23
+ * sha256_hmac 加密
24
+ * @param {string} str 字符串
25
+ * @param {string} key 秘钥
26
+ * @returns {string} 返回加密后的字符串
27
+ */
28
+ function sha256Hmac(str, key) {
29
+ if (!str || !key) {
30
+ throw new Error("Missing str or key");
31
+ }
32
+ return sha256$1.sha256_hmac(key, str);
33
+ }
34
+ /**
35
+ * sha256_hmac_raw 加密
36
+ * @param {string} str 字符串
37
+ * @param {string} key 秘钥
38
+ * @returns {string} 返回加密后的原始值
39
+ */
40
+ function sha256HmacRaw(str, key) {
41
+ if (!str || !key) {
42
+ throw new Error("Missing str or key");
43
+ }
44
+ return sha256$1.sha256_hmac_raw(key, str);
45
+ }
46
+ // sha224
47
+ /**
48
+ * sha224 加密
49
+ * @param {string} str 字符串
50
+ * @returns {string} 返回加密后的字符串
51
+ */
52
+ function sha224(str) {
53
+ return sha256$1.sha224(str);
54
+ }
55
+ /**
56
+ * sha224_raw 加密
57
+ * @param {string} str 字符串
58
+ * @returns {string} 返回加密后的原始值
59
+ */
60
+ function sha224Raw(str) {
61
+ return sha256$1.sha224_raw(str);
62
+ }
63
+ /**
64
+ * sha224_hmac 加密
65
+ * @param {string} str 字符串
66
+ * @param {string} key 秘钥
67
+ * @returns {string} 返回加密后的字符串
68
+ */
69
+ function sha224Hmac(str, key) {
70
+ if (!str || !key) {
71
+ throw new Error("Missing str or key");
72
+ }
73
+ return sha256$1.sha224_hmac(key, str);
74
+ }
75
+ /**
76
+ * sha224_hmac_raw 加密
77
+ * @param {string} str 字符串
78
+ * @param {string} key 秘钥
79
+ * @returns {string} 返回加密后的原始值
80
+ */
81
+ function sha224HmacRaw(str, key) {
82
+ if (!str || !key) {
83
+ throw new Error("Missing str or key");
84
+ }
85
+ return sha256$1.sha224_hmac_raw(key, str);
86
+ }
87
+
88
+ exports.sha224 = sha224;
89
+ exports.sha224Hmac = sha224Hmac;
90
+ exports.sha224HmacRaw = sha224HmacRaw;
91
+ exports.sha224Raw = sha224Raw;
92
+ exports.sha256 = sha256;
93
+ exports.sha256Hmac = sha256Hmac;
94
+ exports.sha256HmacRaw = sha256HmacRaw;
95
+ exports.sha256Raw = sha256Raw;
@@ -0,0 +1,557 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * 纯前端 SHA256/SHA224 实现(无 Node.js 依赖,兼容所有浏览器)
5
+ * 核心逻辑借鉴 js-sha256,移除所有服务端相关代码,仅保留浏览器环境实现
6
+ */
7
+ // ========== 核心常量 ==========
8
+ const ERROR = "input is invalid type";
9
+ const HEX_CHARS = "0123456789abcdef".split("");
10
+ const EXTRA = [-2147483648, 8388608, 32768, 128];
11
+ const SHIFT = [24, 16, 8, 0];
12
+ // SHA256 常量 K
13
+ const K = [
14
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98,
15
+ 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,
16
+ 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8,
17
+ 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
18
+ 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,
19
+ 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,
20
+ 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7,
21
+ 0xc67178f2,
22
+ ];
23
+ // ========== SHA256 核心类 ==========
24
+ class Sha256 {
25
+ constructor(is224 = false) {
26
+ // 初始化区块数组(仅浏览器环境,无需共享内存)
27
+ this.blocks = new Array(17).fill(0);
28
+ // 初始化哈希值(SHA224/SHA256 不同初始值)
29
+ if (is224) {
30
+ this.h0 = 0xc1059ed8;
31
+ this.h1 = 0x367cd507;
32
+ this.h2 = 0x3070dd17;
33
+ this.h3 = 0xf70e5939;
34
+ this.h4 = 0xffc00b31;
35
+ this.h5 = 0x68581511;
36
+ this.h6 = 0x64f98fa7;
37
+ this.h7 = 0xbefa4fa4;
38
+ }
39
+ else {
40
+ this.h0 = 0x6a09e667;
41
+ this.h1 = 0xbb67ae85;
42
+ this.h2 = 0x3c6ef372;
43
+ this.h3 = 0xa54ff53a;
44
+ this.h4 = 0x510e527f;
45
+ this.h5 = 0x9b05688c;
46
+ this.h6 = 0x1f83d9ab;
47
+ this.h7 = 0x5be0cd19;
48
+ }
49
+ // 状态变量初始化
50
+ this.block = this.start = this.bytes = this.hBytes = 0;
51
+ this.finalized = this.hashed = false;
52
+ this.first = true;
53
+ this.is224 = is224;
54
+ }
55
+ // 更新哈希(处理输入数据)
56
+ update(message) {
57
+ if (this.finalized)
58
+ return this;
59
+ // 校验输入类型
60
+ let notString = false;
61
+ const type = typeof message;
62
+ if (type !== "string") {
63
+ if (type === "object") {
64
+ if (message === null)
65
+ throw new Error(ERROR);
66
+ // 支持 ArrayBuffer/Uint8Array
67
+ if (message.constructor === ArrayBuffer) {
68
+ message = new Uint8Array(message);
69
+ }
70
+ else if (!Array.isArray(message) && !ArrayBuffer.isView(message)) {
71
+ throw new Error(ERROR);
72
+ }
73
+ }
74
+ else {
75
+ throw new Error(ERROR);
76
+ }
77
+ notString = true;
78
+ }
79
+ let code, index = 0, i, length = message.length;
80
+ const blocks = this.blocks;
81
+ while (index < length) {
82
+ if (this.hashed) {
83
+ this.hashed = false;
84
+ blocks.fill(0);
85
+ blocks[0] = this.block;
86
+ }
87
+ // 处理字符串/字节数组
88
+ if (notString) {
89
+ for (i = this.start; index < length && i < 64; ++index) {
90
+ blocks[i >>> 2] |= message[index] << SHIFT[i++ & 3];
91
+ }
92
+ }
93
+ else {
94
+ for (i = this.start; index < length && i < 64; ++index) {
95
+ code = message.charCodeAt(index);
96
+ // UTF-8 编码处理
97
+ if (code < 0x80) {
98
+ blocks[i >>> 2] |= code << SHIFT[i++ & 3];
99
+ }
100
+ else if (code < 0x800) {
101
+ blocks[i >>> 2] |= (0xc0 | (code >>> 6)) << SHIFT[i++ & 3];
102
+ blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
103
+ }
104
+ else if (code < 0xd800 || code >= 0xe000) {
105
+ blocks[i >>> 2] |= (0xe0 | (code >>> 12)) << SHIFT[i++ & 3];
106
+ blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];
107
+ blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
108
+ }
109
+ else {
110
+ // 处理代理对
111
+ code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
112
+ blocks[i >>> 2] |= (0xf0 | (code >>> 18)) << SHIFT[i++ & 3];
113
+ blocks[i >>> 2] |= (0x80 | ((code >>> 12) & 0x3f)) << SHIFT[i++ & 3];
114
+ blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];
115
+ blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
116
+ }
117
+ }
118
+ }
119
+ this.lastByteIndex = i;
120
+ this.bytes += i - this.start;
121
+ // 区块满 64 字节,进行哈希计算
122
+ if (i >= 64) {
123
+ this.block = blocks[16];
124
+ this.start = i - 64;
125
+ this.hash();
126
+ this.hashed = true;
127
+ }
128
+ else {
129
+ this.start = i;
130
+ }
131
+ }
132
+ // 处理字节长度溢出
133
+ if (this.bytes > 4294967295) {
134
+ this.hBytes += (this.bytes / 4294967296) << 0;
135
+ this.bytes = this.bytes % 4294967296;
136
+ }
137
+ return this;
138
+ }
139
+ // 核心哈希计算
140
+ hash() {
141
+ let a = this.h0, b = this.h1, c = this.h2, d = this.h3;
142
+ let e = this.h4, f = this.h5, g = this.h6, h = this.h7;
143
+ const blocks = this.blocks;
144
+ let j, s0, s1, maj, t1, t2, ch, ab, da, cd, bc;
145
+ // 扩展区块
146
+ for (j = 16; j < 64; ++j) {
147
+ t1 = blocks[j - 15];
148
+ s0 = ((t1 >>> 7) | (t1 << 25)) ^ ((t1 >>> 18) | (t1 << 14)) ^ (t1 >>> 3);
149
+ t1 = blocks[j - 2];
150
+ s1 = ((t1 >>> 17) | (t1 << 15)) ^ ((t1 >>> 19) | (t1 << 13)) ^ (t1 >>> 10);
151
+ blocks[j] = (blocks[j - 16] + s0 + blocks[j - 7] + s1) << 0;
152
+ }
153
+ bc = b & c;
154
+ // 64 轮哈希计算
155
+ for (j = 0; j < 64; j += 4) {
156
+ if (this.first) {
157
+ if (this.is224) {
158
+ ab = 300032;
159
+ t1 = blocks[0] - 1413257819;
160
+ h = (t1 - 150054599) << 0;
161
+ d = (t1 + 24177077) << 0;
162
+ }
163
+ else {
164
+ ab = 704751109;
165
+ t1 = blocks[0] - 210244248;
166
+ h = (t1 - 1521486534) << 0;
167
+ d = (t1 + 143694565) << 0;
168
+ }
169
+ this.first = false;
170
+ }
171
+ else {
172
+ s0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10));
173
+ s1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7));
174
+ ab = a & b;
175
+ maj = ab ^ (a & c) ^ bc;
176
+ ch = (e & f) ^ (~e & g);
177
+ t1 = h + s1 + ch + K[j] + blocks[j];
178
+ t2 = s0 + maj;
179
+ h = (d + t1) << 0;
180
+ d = (t1 + t2) << 0;
181
+ }
182
+ s0 = ((d >>> 2) | (d << 30)) ^ ((d >>> 13) | (d << 19)) ^ ((d >>> 22) | (d << 10));
183
+ s1 = ((h >>> 6) | (h << 26)) ^ ((h >>> 11) | (h << 21)) ^ ((h >>> 25) | (h << 7));
184
+ da = d & a;
185
+ maj = da ^ (d & b) ^ ab;
186
+ ch = (h & e) ^ (~h & f);
187
+ t1 = g + s1 + ch + K[j + 1] + blocks[j + 1];
188
+ t2 = s0 + maj;
189
+ g = (c + t1) << 0;
190
+ c = (t1 + t2) << 0;
191
+ s0 = ((c >>> 2) | (c << 30)) ^ ((c >>> 13) | (c << 19)) ^ ((c >>> 22) | (c << 10));
192
+ s1 = ((g >>> 6) | (g << 26)) ^ ((g >>> 11) | (g << 21)) ^ ((g >>> 25) | (g << 7));
193
+ cd = c & d;
194
+ maj = cd ^ (c & a) ^ da;
195
+ ch = (g & h) ^ (~g & e);
196
+ t1 = f + s1 + ch + K[j + 2] + blocks[j + 2];
197
+ t2 = s0 + maj;
198
+ f = (b + t1) << 0;
199
+ b = (t1 + t2) << 0;
200
+ s0 = ((b >>> 2) | (b << 30)) ^ ((b >>> 13) | (b << 19)) ^ ((b >>> 22) | (b << 10));
201
+ s1 = ((f >>> 6) | (f << 26)) ^ ((f >>> 11) | (f << 21)) ^ ((f >>> 25) | (f << 7));
202
+ bc = b & c;
203
+ maj = bc ^ (b & d) ^ cd;
204
+ ch = (f & g) ^ (~f & h);
205
+ t1 = e + s1 + ch + K[j + 3] + blocks[j + 3];
206
+ t2 = s0 + maj;
207
+ e = (a + t1) << 0;
208
+ a = (t1 + t2) << 0;
209
+ }
210
+ // 更新哈希值
211
+ this.h0 = (this.h0 + a) << 0;
212
+ this.h1 = (this.h1 + b) << 0;
213
+ this.h2 = (this.h2 + c) << 0;
214
+ this.h3 = (this.h3 + d) << 0;
215
+ this.h4 = (this.h4 + e) << 0;
216
+ this.h5 = (this.h5 + f) << 0;
217
+ this.h6 = (this.h6 + g) << 0;
218
+ this.h7 = (this.h7 + h) << 0;
219
+ }
220
+ // 完成哈希计算(补位)
221
+ finalize() {
222
+ if (this.finalized)
223
+ return this;
224
+ this.finalized = true;
225
+ const blocks = this.blocks;
226
+ let i = this.lastByteIndex;
227
+ blocks[16] = this.block;
228
+ blocks[i >>> 2] |= EXTRA[i & 3];
229
+ this.block = blocks[16];
230
+ // 补位处理
231
+ if (i >= 56) {
232
+ if (!this.hashed)
233
+ this.hash();
234
+ blocks.fill(0);
235
+ blocks[0] = this.block;
236
+ }
237
+ // 写入长度信息
238
+ blocks[14] = (this.hBytes << 3) | (this.bytes >>> 29);
239
+ blocks[15] = this.bytes << 3;
240
+ this.hash();
241
+ return this;
242
+ }
243
+ // 输出十六进制字符串
244
+ hex() {
245
+ this.finalize();
246
+ const h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;
247
+ const h4 = this.h4, h5 = this.h5, h6 = this.h6, h7 = this.h7;
248
+ let hex = "";
249
+ // 拼接哈希值为十六进制
250
+ hex +=
251
+ HEX_CHARS[(h0 >>> 28) & 0x0f] +
252
+ HEX_CHARS[(h0 >>> 24) & 0x0f] +
253
+ HEX_CHARS[(h0 >>> 20) & 0x0f] +
254
+ HEX_CHARS[(h0 >>> 16) & 0x0f] +
255
+ HEX_CHARS[(h0 >>> 12) & 0x0f] +
256
+ HEX_CHARS[(h0 >>> 8) & 0x0f] +
257
+ HEX_CHARS[(h0 >>> 4) & 0x0f] +
258
+ HEX_CHARS[h0 & 0x0f];
259
+ hex +=
260
+ HEX_CHARS[(h1 >>> 28) & 0x0f] +
261
+ HEX_CHARS[(h1 >>> 24) & 0x0f] +
262
+ HEX_CHARS[(h1 >>> 20) & 0x0f] +
263
+ HEX_CHARS[(h1 >>> 16) & 0x0f] +
264
+ HEX_CHARS[(h1 >>> 12) & 0x0f] +
265
+ HEX_CHARS[(h1 >>> 8) & 0x0f] +
266
+ HEX_CHARS[(h1 >>> 4) & 0x0f] +
267
+ HEX_CHARS[h1 & 0x0f];
268
+ hex +=
269
+ HEX_CHARS[(h2 >>> 28) & 0x0f] +
270
+ HEX_CHARS[(h2 >>> 24) & 0x0f] +
271
+ HEX_CHARS[(h2 >>> 20) & 0x0f] +
272
+ HEX_CHARS[(h2 >>> 16) & 0x0f] +
273
+ HEX_CHARS[(h2 >>> 12) & 0x0f] +
274
+ HEX_CHARS[(h2 >>> 8) & 0x0f] +
275
+ HEX_CHARS[(h2 >>> 4) & 0x0f] +
276
+ HEX_CHARS[h2 & 0x0f];
277
+ hex +=
278
+ HEX_CHARS[(h3 >>> 28) & 0x0f] +
279
+ HEX_CHARS[(h3 >>> 24) & 0x0f] +
280
+ HEX_CHARS[(h3 >>> 20) & 0x0f] +
281
+ HEX_CHARS[(h3 >>> 16) & 0x0f] +
282
+ HEX_CHARS[(h3 >>> 12) & 0x0f] +
283
+ HEX_CHARS[(h3 >>> 8) & 0x0f] +
284
+ HEX_CHARS[(h3 >>> 4) & 0x0f] +
285
+ HEX_CHARS[h3 & 0x0f];
286
+ hex +=
287
+ HEX_CHARS[(h4 >>> 28) & 0x0f] +
288
+ HEX_CHARS[(h4 >>> 24) & 0x0f] +
289
+ HEX_CHARS[(h4 >>> 20) & 0x0f] +
290
+ HEX_CHARS[(h4 >>> 16) & 0x0f] +
291
+ HEX_CHARS[(h4 >>> 12) & 0x0f] +
292
+ HEX_CHARS[(h4 >>> 8) & 0x0f] +
293
+ HEX_CHARS[(h4 >>> 4) & 0x0f] +
294
+ HEX_CHARS[h4 & 0x0f];
295
+ hex +=
296
+ HEX_CHARS[(h5 >>> 28) & 0x0f] +
297
+ HEX_CHARS[(h5 >>> 24) & 0x0f] +
298
+ HEX_CHARS[(h5 >>> 20) & 0x0f] +
299
+ HEX_CHARS[(h5 >>> 16) & 0x0f] +
300
+ HEX_CHARS[(h5 >>> 12) & 0x0f] +
301
+ HEX_CHARS[(h5 >>> 8) & 0x0f] +
302
+ HEX_CHARS[(h5 >>> 4) & 0x0f] +
303
+ HEX_CHARS[h5 & 0x0f];
304
+ hex +=
305
+ HEX_CHARS[(h6 >>> 28) & 0x0f] +
306
+ HEX_CHARS[(h6 >>> 24) & 0x0f] +
307
+ HEX_CHARS[(h6 >>> 20) & 0x0f] +
308
+ HEX_CHARS[(h6 >>> 16) & 0x0f] +
309
+ HEX_CHARS[(h6 >>> 12) & 0x0f] +
310
+ HEX_CHARS[(h6 >>> 8) & 0x0f] +
311
+ HEX_CHARS[(h6 >>> 4) & 0x0f] +
312
+ HEX_CHARS[h6 & 0x0f];
313
+ // SHA224 不需要 h7
314
+ if (!this.is224) {
315
+ hex +=
316
+ HEX_CHARS[(h7 >>> 28) & 0x0f] +
317
+ HEX_CHARS[(h7 >>> 24) & 0x0f] +
318
+ HEX_CHARS[(h7 >>> 20) & 0x0f] +
319
+ HEX_CHARS[(h7 >>> 16) & 0x0f] +
320
+ HEX_CHARS[(h7 >>> 12) & 0x0f] +
321
+ HEX_CHARS[(h7 >>> 8) & 0x0f] +
322
+ HEX_CHARS[(h7 >>> 4) & 0x0f] +
323
+ HEX_CHARS[h7 & 0x0f];
324
+ }
325
+ return hex;
326
+ }
327
+ // 输出字节数组
328
+ digest() {
329
+ this.finalize();
330
+ const h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;
331
+ const h4 = this.h4, h5 = this.h5, h6 = this.h6, h7 = this.h7;
332
+ const arr = [
333
+ (h0 >>> 24) & 0xff,
334
+ (h0 >>> 16) & 0xff,
335
+ (h0 >>> 8) & 0xff,
336
+ h0 & 0xff,
337
+ (h1 >>> 24) & 0xff,
338
+ (h1 >>> 16) & 0xff,
339
+ (h1 >>> 8) & 0xff,
340
+ h1 & 0xff,
341
+ (h2 >>> 24) & 0xff,
342
+ (h2 >>> 16) & 0xff,
343
+ (h2 >>> 8) & 0xff,
344
+ h2 & 0xff,
345
+ (h3 >>> 24) & 0xff,
346
+ (h3 >>> 16) & 0xff,
347
+ (h3 >>> 8) & 0xff,
348
+ h3 & 0xff,
349
+ (h4 >>> 24) & 0xff,
350
+ (h4 >>> 16) & 0xff,
351
+ (h4 >>> 8) & 0xff,
352
+ h4 & 0xff,
353
+ (h5 >>> 24) & 0xff,
354
+ (h5 >>> 16) & 0xff,
355
+ (h5 >>> 8) & 0xff,
356
+ h5 & 0xff,
357
+ (h6 >>> 24) & 0xff,
358
+ (h6 >>> 16) & 0xff,
359
+ (h6 >>> 8) & 0xff,
360
+ h6 & 0xff,
361
+ ];
362
+ if (!this.is224) {
363
+ arr.push((h7 >>> 24) & 0xff, (h7 >>> 16) & 0xff, (h7 >>> 8) & 0xff, h7 & 0xff);
364
+ }
365
+ return arr;
366
+ }
367
+ // 输出二进制原始字符串(raw)
368
+ raw() {
369
+ this.finalize();
370
+ const bytes = this.digest();
371
+ let rawStr = "";
372
+ for (let i = 0; i < bytes.length; i++) {
373
+ rawStr += String.fromCharCode(bytes[i]);
374
+ }
375
+ return rawStr;
376
+ }
377
+ // 输出 ArrayBuffer
378
+ arrayBuffer() {
379
+ this.finalize();
380
+ const buffer = new ArrayBuffer(this.is224 ? 28 : 32);
381
+ const dataView = new DataView(buffer);
382
+ dataView.setUint32(0, this.h0);
383
+ dataView.setUint32(4, this.h1);
384
+ dataView.setUint32(8, this.h2);
385
+ dataView.setUint32(12, this.h3);
386
+ dataView.setUint32(16, this.h4);
387
+ dataView.setUint32(20, this.h5);
388
+ dataView.setUint32(24, this.h6);
389
+ if (!this.is224) {
390
+ dataView.setUint32(28, this.h7);
391
+ }
392
+ return buffer;
393
+ }
394
+ }
395
+ // ========== HMAC-SHA256 实现 ==========
396
+ class HmacSha256 {
397
+ constructor(key, is224 = false) {
398
+ // 处理密钥
399
+ let keyBytes = [];
400
+ const type = typeof key;
401
+ if (type === "string") {
402
+ // 字符串密钥转字节数组
403
+ let code, index = 0, length = key.length;
404
+ for (let i = 0; i < length; ++i) {
405
+ code = key.charCodeAt(i);
406
+ if (code < 0x80) {
407
+ keyBytes[index++] = code;
408
+ }
409
+ else if (code < 0x800) {
410
+ keyBytes[index++] = 0xc0 | (code >>> 6);
411
+ keyBytes[index++] = 0x80 | (code & 0x3f);
412
+ }
413
+ else if (code < 0xd800 || code >= 0xe000) {
414
+ keyBytes[index++] = 0xe0 | (code >>> 12);
415
+ keyBytes[index++] = 0x80 | ((code >>> 6) & 0x3f);
416
+ keyBytes[index++] = 0x80 | (code & 0x3f);
417
+ }
418
+ else {
419
+ code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));
420
+ keyBytes[index++] = 0xf0 | (code >>> 18);
421
+ keyBytes[index++] = 0x80 | ((code >>> 12) & 0x3f);
422
+ keyBytes[index++] = 0x80 | ((code >>> 6) & 0x3f);
423
+ keyBytes[index++] = 0x80 | (code & 0x3f);
424
+ }
425
+ }
426
+ }
427
+ else if (type === "object") {
428
+ if (key === null)
429
+ throw new Error(ERROR);
430
+ if (key.constructor === ArrayBuffer) {
431
+ keyBytes = Array.from(new Uint8Array(key));
432
+ }
433
+ else if (Array.isArray(key) || ArrayBuffer.isView(key)) {
434
+ keyBytes = Array.from(key);
435
+ }
436
+ else {
437
+ throw new Error(ERROR);
438
+ }
439
+ }
440
+ else {
441
+ throw new Error(ERROR);
442
+ }
443
+ // 密钥长度超过 64 字节,先哈希
444
+ if (keyBytes.length > 64) {
445
+ keyBytes = new Sha256(is224).update(keyBytes).digest();
446
+ }
447
+ // 生成内外填充
448
+ const oKeyPad = [];
449
+ const iKeyPad = [];
450
+ for (let i = 0; i < 64; ++i) {
451
+ const b = keyBytes[i] || 0;
452
+ oKeyPad[i] = 0x5c ^ b;
453
+ iKeyPad[i] = 0x36 ^ b;
454
+ }
455
+ // 初始化 SHA256
456
+ this.sha256 = new Sha256(is224);
457
+ this.sha256.update(iKeyPad);
458
+ this.oKeyPad = oKeyPad;
459
+ this.is224 = is224;
460
+ this.inner = true;
461
+ }
462
+ update(message) {
463
+ this.sha256.update(message);
464
+ return this;
465
+ }
466
+ finalize() {
467
+ if (this.inner) {
468
+ // 计算内部哈希
469
+ const innerHash = this.sha256.digest();
470
+ // 初始化外部哈希
471
+ this.sha256 = new Sha256(this.is224);
472
+ this.sha256.update(this.oKeyPad).update(innerHash);
473
+ this.inner = false;
474
+ }
475
+ this.sha256.finalize();
476
+ return this;
477
+ }
478
+ hex() {
479
+ this.finalize();
480
+ return this.sha256.hex();
481
+ }
482
+ digest() {
483
+ this.finalize();
484
+ return this.sha256.digest();
485
+ }
486
+ raw() {
487
+ this.finalize();
488
+ return this.sha256.raw();
489
+ }
490
+ arrayBuffer() {
491
+ this.finalize();
492
+ return this.sha256.arrayBuffer();
493
+ }
494
+ }
495
+ // ========== 便捷方法封装 ==========
496
+ const createMethod = (is224 = false) => {
497
+ const method = (message) => new Sha256(is224).update(message).hex();
498
+ method.raw = (message) => new Sha256(is224).update(message).raw();
499
+ method.digest = (message) => new Sha256(is224).update(message).digest();
500
+ method.arrayBuffer = (message) => new Sha256(is224).update(message).arrayBuffer();
501
+ method.create = () => new Sha256(is224);
502
+ method.update = (message) => method.create().update(message);
503
+ return method;
504
+ };
505
+ const createRawMethod = (is224 = false) => {
506
+ const method = (message) => new Sha256(is224).update(message).raw();
507
+ method.hex = (message) => new Sha256(is224).update(message).hex();
508
+ method.digest = (message) => new Sha256(is224).update(message).digest();
509
+ method.arrayBuffer = (message) => new Sha256(is224).update(message).arrayBuffer();
510
+ method.create = () => new Sha256(is224);
511
+ method.update = (message) => method.create().update(message);
512
+ return method;
513
+ };
514
+ const createHmacMethod = (is224 = false) => {
515
+ const method = (key, message) => new HmacSha256(key, is224).update(message).hex();
516
+ method.raw = (key, message) => new HmacSha256(key, is224).update(message).raw();
517
+ method.digest = (key, message) => new HmacSha256(key, is224).update(message).digest();
518
+ method.arrayBuffer = (key, message) => new HmacSha256(key, is224).update(message).arrayBuffer();
519
+ method.create = (key) => new HmacSha256(key, is224);
520
+ method.update = (key, message) => method.create(key).update(message);
521
+ return method;
522
+ };
523
+ const createHmacRawMethod = (is224 = false) => {
524
+ const method = (key, message) => new HmacSha256(key, is224).update(message).raw();
525
+ method.hex = (key, message) => new HmacSha256(key, is224).update(message).hex();
526
+ method.digest = (key, message) => new HmacSha256(key, is224).update(message).digest();
527
+ method.arrayBuffer = (key, message) => new HmacSha256(key, is224).update(message).arrayBuffer();
528
+ method.create = (key) => new HmacSha256(key, is224);
529
+ method.update = (key, message) => method.create(key).update(message);
530
+ return method;
531
+ };
532
+ /* 以下是内部实现需要的es模块化导出方法 */
533
+ // SHA256 基础方法
534
+ const sha256 = createMethod();
535
+ // SHA256 基础方法原始值
536
+ const sha256_raw = createRawMethod();
537
+ // HMAC-SHA256
538
+ const sha256_hmac = createHmacMethod();
539
+ // HMAC-SHA256原始值
540
+ const sha256_hmac_raw = createHmacRawMethod();
541
+ // SHA224 基础方法
542
+ const sha224 = createMethod(true);
543
+ // SHA224 基础方法原始值
544
+ const sha224_raw = createRawMethod(true);
545
+ // HMAC-SHA224
546
+ const sha224_hmac = createHmacMethod(true);
547
+ // HMAC-SHA224原始值
548
+ const sha224_hmac_raw = createHmacRawMethod(true);
549
+
550
+ exports.sha224 = sha224;
551
+ exports.sha224_hmac = sha224_hmac;
552
+ exports.sha224_hmac_raw = sha224_hmac_raw;
553
+ exports.sha224_raw = sha224_raw;
554
+ exports.sha256 = sha256;
555
+ exports.sha256_hmac = sha256_hmac;
556
+ exports.sha256_hmac_raw = sha256_hmac_raw;
557
+ exports.sha256_raw = sha256_raw;
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ var sm3 = require('./sm3.cjs');
4
+
5
+ /**
6
+ * sm3 加密
7
+ * @param {string} str 字符串
8
+ * @returns {string} 返回加密后的字符串
9
+ */
10
+ function sm3Encrypt(str) {
11
+ return sm3.encrypt(str);
12
+ }
13
+ /**
14
+ * sm3_hmac 加密
15
+ * @param {string} str 字符串
16
+ * @param {string} key 配置
17
+ * @returns {string} 返回加密后的字符串
18
+ */
19
+ function sm3EncryptHmac(str, key) {
20
+ if (!str || !key) {
21
+ throw new Error("Missing str or key");
22
+ }
23
+ return sm3.encrypt(str, key);
24
+ }
25
+
26
+ exports.sm3Encrypt = sm3Encrypt;
27
+ exports.sm3EncryptHmac = sm3EncryptHmac;