@ivujs/i-utils 1.1.16 → 1.1.17

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 (213) hide show
  1. package/README.md +21 -19
  2. package/dist/cjs/index.cjs +5 -400
  3. package/dist/es/index.d.ts +1 -26
  4. package/dist/es/index.mjs +2 -55
  5. package/dist/index.d.ts +11 -2851
  6. package/dist/lib/index.full.umd.js +33 -14240
  7. package/dist/lib/index.full.umd.min.js +2 -64
  8. package/dist/lib/index.full.umd.min.js.map +1 -1
  9. package/dist/resolver/auto-imports.cjs +1 -337
  10. package/dist/resolver/auto-imports.mjs +1 -337
  11. package/dist/resolver/index.cjs +1 -1
  12. package/dist/resolver/index.d.ts +1 -1
  13. package/dist/resolver/index.mjs +1 -1
  14. package/package.json +5 -13
  15. package/dist/cjs/ID-card/index.cjs +0 -87
  16. package/dist/cjs/array/index.cjs +0 -470
  17. package/dist/cjs/clipboard/index.cjs +0 -128
  18. package/dist/cjs/color/index.cjs +0 -193
  19. package/dist/cjs/constants/date.cjs +0 -178
  20. package/dist/cjs/constants/id-card.cjs +0 -52
  21. package/dist/cjs/constants/keycode.cjs +0 -117
  22. package/dist/cjs/constants/lang.cjs +0 -13
  23. package/dist/cjs/constants/math.cjs +0 -13
  24. package/dist/cjs/constants/regexp.cjs +0 -53
  25. package/dist/cjs/constants/sort.cjs +0 -15
  26. package/dist/cjs/cookie/index.cjs +0 -70
  27. package/dist/cjs/crypto/aes/aes.cjs +0 -480
  28. package/dist/cjs/crypto/aes/index.cjs +0 -27
  29. package/dist/cjs/crypto/base32/base32.cjs +0 -357
  30. package/dist/cjs/crypto/base32/index.cjs +0 -41
  31. package/dist/cjs/crypto/base64/base64.cjs +0 -348
  32. package/dist/cjs/crypto/base64/index.cjs +0 -59
  33. package/dist/cjs/crypto/des/des.cjs +0 -257
  34. package/dist/cjs/crypto/des/index.cjs +0 -28
  35. package/dist/cjs/crypto/md5/index.cjs +0 -24
  36. package/dist/cjs/crypto/md5/md5.cjs +0 -897
  37. package/dist/cjs/crypto/sha/sha1/index.cjs +0 -24
  38. package/dist/cjs/crypto/sha/sha1/sha1.cjs +0 -529
  39. package/dist/cjs/crypto/sha/sha256/index.cjs +0 -43
  40. package/dist/cjs/crypto/sha/sha256/sha256.cjs +0 -595
  41. package/dist/cjs/crypto/sha/sha3/index.cjs +0 -41
  42. package/dist/cjs/crypto/sha/sha3/sha3.cjs +0 -624
  43. package/dist/cjs/crypto/sha/sha512/index.cjs +0 -81
  44. package/dist/cjs/crypto/sha/sha512/sha512.cjs +0 -950
  45. package/dist/cjs/crypto/sm/lib/asn1.cjs +0 -149
  46. package/dist/cjs/crypto/sm/lib/ec.cjs +0 -315
  47. package/dist/cjs/crypto/sm/lib/jsbn.cjs +0 -1608
  48. package/dist/cjs/crypto/sm/lib/sm3.cjs +0 -158
  49. package/dist/cjs/crypto/sm/lib/utils.cjs +0 -170
  50. package/dist/cjs/crypto/sm/sm2/index.cjs +0 -112
  51. package/dist/cjs/crypto/sm/sm2/sm2.cjs +0 -231
  52. package/dist/cjs/crypto/sm/sm3/index.cjs +0 -15
  53. package/dist/cjs/crypto/sm/sm3/sm3.cjs +0 -93
  54. package/dist/cjs/crypto/sm/sm4/index.cjs +0 -27
  55. package/dist/cjs/crypto/sm/sm4/sm4.cjs +0 -327
  56. package/dist/cjs/crypto/tea/index.cjs +0 -25
  57. package/dist/cjs/crypto/tea/tea.cjs +0 -187
  58. package/dist/cjs/date/index.cjs +0 -1266
  59. package/dist/cjs/desensitized/index.cjs +0 -75
  60. package/dist/cjs/device/index.cjs +0 -151
  61. package/dist/cjs/dom/index.cjs +0 -129
  62. package/dist/cjs/file/index.cjs +0 -333
  63. package/dist/cjs/function/index.cjs +0 -69
  64. package/dist/cjs/keycode/index.cjs +0 -33
  65. package/dist/cjs/math/index.cjs +0 -278
  66. package/dist/cjs/number/index.cjs +0 -31
  67. package/dist/cjs/object/index.cjs +0 -272
  68. package/dist/cjs/pagination/index.cjs +0 -131
  69. package/dist/cjs/random/index.cjs +0 -24
  70. package/dist/cjs/regexp/index.cjs +0 -100
  71. package/dist/cjs/storage/index.cjs +0 -11
  72. package/dist/cjs/storage/localStorage.cjs +0 -37
  73. package/dist/cjs/storage/sessionStorage.cjs +0 -37
  74. package/dist/cjs/string/index.cjs +0 -358
  75. package/dist/cjs/url/index.cjs +0 -258
  76. package/dist/cjs/validate/index.cjs +0 -468
  77. package/dist/cjs/weapp/index.cjs +0 -142
  78. package/dist/es/ID-card/index.d.ts +0 -31
  79. package/dist/es/ID-card/index.mjs +0 -81
  80. package/dist/es/array/index.d.ts +0 -203
  81. package/dist/es/array/index.mjs +0 -441
  82. package/dist/es/clipboard/index.d.ts +0 -29
  83. package/dist/es/clipboard/index.mjs +0 -122
  84. package/dist/es/color/index.d.ts +0 -52
  85. package/dist/es/color/index.mjs +0 -183
  86. package/dist/es/constants/date.d.ts +0 -174
  87. package/dist/es/constants/date.mjs +0 -176
  88. package/dist/es/constants/id-card.d.ts +0 -43
  89. package/dist/es/constants/id-card.mjs +0 -50
  90. package/dist/es/constants/index.d.ts +0 -7
  91. package/dist/es/constants/keycode.d.ts +0 -103
  92. package/dist/es/constants/keycode.mjs +0 -115
  93. package/dist/es/constants/lang.d.ts +0 -4
  94. package/dist/es/constants/lang.mjs +0 -11
  95. package/dist/es/constants/math.d.ts +0 -4
  96. package/dist/es/constants/math.mjs +0 -11
  97. package/dist/es/constants/regexp.d.ts +0 -24
  98. package/dist/es/constants/regexp.mjs +0 -51
  99. package/dist/es/constants/sort.d.ts +0 -5
  100. package/dist/es/constants/sort.mjs +0 -13
  101. package/dist/es/cookie/index.d.ts +0 -29
  102. package/dist/es/cookie/index.mjs +0 -64
  103. package/dist/es/crypto/aes/aes.d.ts +0 -156
  104. package/dist/es/crypto/aes/aes.mjs +0 -478
  105. package/dist/es/crypto/aes/index.d.ts +0 -16
  106. package/dist/es/crypto/aes/index.mjs +0 -24
  107. package/dist/es/crypto/base32/base32.d.ts +0 -3
  108. package/dist/es/crypto/base32/base32.mjs +0 -353
  109. package/dist/es/crypto/base32/index.d.ts +0 -24
  110. package/dist/es/crypto/base32/index.mjs +0 -36
  111. package/dist/es/crypto/base64/base64.d.ts +0 -5
  112. package/dist/es/crypto/base64/base64.mjs +0 -342
  113. package/dist/es/crypto/base64/index.d.ts +0 -36
  114. package/dist/es/crypto/base64/index.mjs +0 -52
  115. package/dist/es/crypto/des/des.d.ts +0 -52
  116. package/dist/es/crypto/des/des.mjs +0 -255
  117. package/dist/es/crypto/des/index.d.ts +0 -14
  118. package/dist/es/crypto/des/index.mjs +0 -25
  119. package/dist/es/crypto/index.d.ts +0 -8
  120. package/dist/es/crypto/md5/index.d.ts +0 -13
  121. package/dist/es/crypto/md5/index.mjs +0 -21
  122. package/dist/es/crypto/md5/md5.d.ts +0 -144
  123. package/dist/es/crypto/md5/md5.mjs +0 -894
  124. package/dist/es/crypto/sha/index.d.ts +0 -4
  125. package/dist/es/crypto/sha/sha1/index.d.ts +0 -13
  126. package/dist/es/crypto/sha/sha1/index.mjs +0 -21
  127. package/dist/es/crypto/sha/sha1/sha1.d.ts +0 -2
  128. package/dist/es/crypto/sha/sha1/sha1.mjs +0 -526
  129. package/dist/es/crypto/sha/sha256/index.d.ts +0 -26
  130. package/dist/es/crypto/sha/sha256/index.mjs +0 -38
  131. package/dist/es/crypto/sha/sha256/sha256.d.ts +0 -4
  132. package/dist/es/crypto/sha/sha256/sha256.mjs +0 -590
  133. package/dist/es/crypto/sha/sha3/index.d.ts +0 -24
  134. package/dist/es/crypto/sha/sha3/index.mjs +0 -36
  135. package/dist/es/crypto/sha/sha3/sha3.d.ts +0 -4
  136. package/dist/es/crypto/sha/sha3/sha3.mjs +0 -619
  137. package/dist/es/crypto/sha/sha512/index.d.ts +0 -52
  138. package/dist/es/crypto/sha/sha512/index.mjs +0 -72
  139. package/dist/es/crypto/sha/sha512/sha512.d.ts +0 -8
  140. package/dist/es/crypto/sha/sha512/sha512.mjs +0 -941
  141. package/dist/es/crypto/sm/index.d.ts +0 -3
  142. package/dist/es/crypto/sm/lib/asn1.d.ts +0 -12
  143. package/dist/es/crypto/sm/lib/asn1.mjs +0 -146
  144. package/dist/es/crypto/sm/lib/ec.d.ts +0 -126
  145. package/dist/es/crypto/sm/lib/ec.mjs +0 -312
  146. package/dist/es/crypto/sm/lib/jsbn.d.ts +0 -198
  147. package/dist/es/crypto/sm/lib/jsbn.mjs +0 -1605
  148. package/dist/es/crypto/sm/lib/sm3.d.ts +0 -5
  149. package/dist/es/crypto/sm/lib/sm3.mjs +0 -155
  150. package/dist/es/crypto/sm/lib/utils.d.ts +0 -53
  151. package/dist/es/crypto/sm/lib/utils.mjs +0 -158
  152. package/dist/es/crypto/sm/sm2/index.d.ts +0 -71
  153. package/dist/es/crypto/sm/sm2/index.mjs +0 -101
  154. package/dist/es/crypto/sm/sm2/sm2.d.ts +0 -34
  155. package/dist/es/crypto/sm/sm2/sm2.mjs +0 -220
  156. package/dist/es/crypto/sm/sm3/index.d.ts +0 -7
  157. package/dist/es/crypto/sm/sm3/index.mjs +0 -13
  158. package/dist/es/crypto/sm/sm3/sm3.d.ts +0 -1
  159. package/dist/es/crypto/sm/sm3/sm3.mjs +0 -91
  160. package/dist/es/crypto/sm/sm4/index.d.ts +0 -16
  161. package/dist/es/crypto/sm/sm4/index.mjs +0 -24
  162. package/dist/es/crypto/sm/sm4/sm4.d.ts +0 -2
  163. package/dist/es/crypto/sm/sm4/sm4.mjs +0 -324
  164. package/dist/es/crypto/tea/index.d.ts +0 -14
  165. package/dist/es/crypto/tea/index.mjs +0 -22
  166. package/dist/es/crypto/tea/tea.d.ts +0 -69
  167. package/dist/es/crypto/tea/tea.mjs +0 -185
  168. package/dist/es/date/index.d.ts +0 -547
  169. package/dist/es/date/index.mjs +0 -1179
  170. package/dist/es/desensitized/index.d.ts +0 -38
  171. package/dist/es/desensitized/index.mjs +0 -69
  172. package/dist/es/device/index.d.ts +0 -67
  173. package/dist/es/device/index.mjs +0 -137
  174. package/dist/es/dom/index.d.ts +0 -57
  175. package/dist/es/dom/index.mjs +0 -119
  176. package/dist/es/file/index.d.ts +0 -93
  177. package/dist/es/file/index.mjs +0 -317
  178. package/dist/es/function/index.d.ts +0 -23
  179. package/dist/es/function/index.mjs +0 -65
  180. package/dist/es/keycode/index.d.ts +0 -12
  181. package/dist/es/keycode/index.mjs +0 -30
  182. package/dist/es/math/index.d.ts +0 -66
  183. package/dist/es/math/index.mjs +0 -268
  184. package/dist/es/number/index.d.ts +0 -14
  185. package/dist/es/number/index.mjs +0 -28
  186. package/dist/es/object/index.d.ts +0 -83
  187. package/dist/es/object/index.mjs +0 -259
  188. package/dist/es/pagination/index.d.ts +0 -34
  189. package/dist/es/pagination/index.mjs +0 -125
  190. package/dist/es/random/index.d.ts +0 -15
  191. package/dist/es/random/index.mjs +0 -21
  192. package/dist/es/regexp/index.d.ts +0 -63
  193. package/dist/es/regexp/index.mjs +0 -89
  194. package/dist/es/storage/index.d.ts +0 -7
  195. package/dist/es/storage/index.mjs +0 -9
  196. package/dist/es/storage/localStorage.d.ts +0 -21
  197. package/dist/es/storage/localStorage.mjs +0 -32
  198. package/dist/es/storage/sessionStorage.d.ts +0 -21
  199. package/dist/es/storage/sessionStorage.mjs +0 -32
  200. package/dist/es/string/index.d.ts +0 -121
  201. package/dist/es/string/index.mjs +0 -339
  202. package/dist/es/url/index.d.ts +0 -118
  203. package/dist/es/url/index.mjs +0 -240
  204. package/dist/es/validate/index.d.ts +0 -228
  205. package/dist/es/validate/index.mjs +0 -431
  206. package/dist/es/weapp/index.d.ts +0 -57
  207. package/dist/es/weapp/index.mjs +0 -131
  208. package/dist/lib/index.full.cjs.js +0 -14264
  209. package/dist/lib/index.full.cjs.min.js +0 -69
  210. package/dist/lib/index.full.cjs.min.js.map +0 -1
  211. package/dist/lib/index.full.esm.js +0 -13910
  212. package/dist/lib/index.full.esm.min.js +0 -64
  213. package/dist/lib/index.full.esm.min.js.map +0 -1
@@ -1,324 +0,0 @@
1
- const DECRYPT = 0;
2
- const ROUND = 32;
3
- const BLOCK = 16;
4
- const Sbox = [
5
- 0xd6, 0x90, 0xe9, 0xfe, 0xcc, 0xe1, 0x3d, 0xb7, 0x16, 0xb6, 0x14, 0xc2, 0x28, 0xfb, 0x2c, 0x05, 0x2b, 0x67, 0x9a,
6
- 0x76, 0x2a, 0xbe, 0x04, 0xc3, 0xaa, 0x44, 0x13, 0x26, 0x49, 0x86, 0x06, 0x99, 0x9c, 0x42, 0x50, 0xf4, 0x91, 0xef,
7
- 0x98, 0x7a, 0x33, 0x54, 0x0b, 0x43, 0xed, 0xcf, 0xac, 0x62, 0xe4, 0xb3, 0x1c, 0xa9, 0xc9, 0x08, 0xe8, 0x95, 0x80,
8
- 0xdf, 0x94, 0xfa, 0x75, 0x8f, 0x3f, 0xa6, 0x47, 0x07, 0xa7, 0xfc, 0xf3, 0x73, 0x17, 0xba, 0x83, 0x59, 0x3c, 0x19,
9
- 0xe6, 0x85, 0x4f, 0xa8, 0x68, 0x6b, 0x81, 0xb2, 0x71, 0x64, 0xda, 0x8b, 0xf8, 0xeb, 0x0f, 0x4b, 0x70, 0x56, 0x9d,
10
- 0x35, 0x1e, 0x24, 0x0e, 0x5e, 0x63, 0x58, 0xd1, 0xa2, 0x25, 0x22, 0x7c, 0x3b, 0x01, 0x21, 0x78, 0x87, 0xd4, 0x00,
11
- 0x46, 0x57, 0x9f, 0xd3, 0x27, 0x52, 0x4c, 0x36, 0x02, 0xe7, 0xa0, 0xc4, 0xc8, 0x9e, 0xea, 0xbf, 0x8a, 0xd2, 0x40,
12
- 0xc7, 0x38, 0xb5, 0xa3, 0xf7, 0xf2, 0xce, 0xf9, 0x61, 0x15, 0xa1, 0xe0, 0xae, 0x5d, 0xa4, 0x9b, 0x34, 0x1a, 0x55,
13
- 0xad, 0x93, 0x32, 0x30, 0xf5, 0x8c, 0xb1, 0xe3, 0x1d, 0xf6, 0xe2, 0x2e, 0x82, 0x66, 0xca, 0x60, 0xc0, 0x29, 0x23,
14
- 0xab, 0x0d, 0x53, 0x4e, 0x6f, 0xd5, 0xdb, 0x37, 0x45, 0xde, 0xfd, 0x8e, 0x2f, 0x03, 0xff, 0x6a, 0x72, 0x6d, 0x6c,
15
- 0x5b, 0x51, 0x8d, 0x1b, 0xaf, 0x92, 0xbb, 0xdd, 0xbc, 0x7f, 0x11, 0xd9, 0x5c, 0x41, 0x1f, 0x10, 0x5a, 0xd8, 0x0a,
16
- 0xc1, 0x31, 0x88, 0xa5, 0xcd, 0x7b, 0xbd, 0x2d, 0x74, 0xd0, 0x12, 0xb8, 0xe5, 0xb4, 0xb0, 0x89, 0x69, 0x97, 0x4a,
17
- 0x0c, 0x96, 0x77, 0x7e, 0x65, 0xb9, 0xf1, 0x09, 0xc5, 0x6e, 0xc6, 0x84, 0x18, 0xf0, 0x7d, 0xec, 0x3a, 0xdc, 0x4d,
18
- 0x20, 0x79, 0xee, 0x5f, 0x3e, 0xd7, 0xcb, 0x39, 0x48,
19
- ];
20
- const CK = [
21
- 0x00070e15, 0x1c232a31, 0x383f464d, 0x545b6269, 0x70777e85, 0x8c939aa1, 0xa8afb6bd, 0xc4cbd2d9, 0xe0e7eef5,
22
- 0xfc030a11, 0x181f262d, 0x343b4249, 0x50575e65, 0x6c737a81, 0x888f969d, 0xa4abb2b9, 0xc0c7ced5, 0xdce3eaf1,
23
- 0xf8ff060d, 0x141b2229, 0x30373e45, 0x4c535a61, 0x686f767d, 0x848b9299, 0xa0a7aeb5, 0xbcc3cad1, 0xd8dfe6ed,
24
- 0xf4fb0209, 0x10171e25, 0x2c333a41, 0x484f565d, 0x646b7279,
25
- ];
26
- /**
27
- * 16 进制串转字节数组
28
- */
29
- function hexToArray(str) {
30
- const arr = [];
31
- for (let i = 0, len = str.length; i < len; i += 2) {
32
- arr.push(parseInt(str.substr(i, 2), 16));
33
- }
34
- return arr;
35
- }
36
- /**
37
- * 字节数组转 16 进制串
38
- */
39
- function ArrayToHex(arr) {
40
- return arr
41
- .map((item) => {
42
- item = item.toString(16);
43
- return item.length === 1 ? "0" + item : item;
44
- })
45
- .join("");
46
- }
47
- /**
48
- * utf8 串转字节数组
49
- */
50
- function utf8ToArray(str) {
51
- const arr = [];
52
- for (let i = 0, len = str.length; i < len; i++) {
53
- const point = str.codePointAt(i);
54
- if (point <= 0x007f) {
55
- // 单字节,标量值:00000000 00000000 0zzzzzzz
56
- arr.push(point);
57
- }
58
- else if (point <= 0x07ff) {
59
- // 双字节,标量值:00000000 00000yyy yyzzzzzz
60
- arr.push(0xc0 | (point >>> 6)); // 110yyyyy(0xc0-0xdf)
61
- arr.push(0x80 | (point & 0x3f)); // 10zzzzzz(0x80-0xbf)
62
- }
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
- }
69
- else if (point >= 0x010000 && point <= 0x10ffff) {
70
- // 四字节:标量值:000wwwxx xxxxyyyy yyzzzzzz
71
- i++;
72
- arr.push(0xf0 | ((point >>> 18) & 0x1c)); // 11110www(0xf0-0xf7)
73
- arr.push(0x80 | ((point >>> 12) & 0x3f)); // 10xxxxxx(0x80-0xbf)
74
- arr.push(0x80 | ((point >>> 6) & 0x3f)); // 10yyyyyy(0x80-0xbf)
75
- arr.push(0x80 | (point & 0x3f)); // 10zzzzzz(0x80-0xbf)
76
- }
77
- else {
78
- // 五、六字节,暂时不支持
79
- arr.push(point);
80
- throw new Error("input is not supported");
81
- }
82
- }
83
- return arr;
84
- }
85
- /**
86
- * 字节数组转 utf8 串
87
- */
88
- function arrayToUtf8(arr) {
89
- const str = [];
90
- for (let i = 0, len = arr.length; i < len; i++) {
91
- if (arr[i] >= 0xf0 && arr[i] <= 0xf7) {
92
- // 四字节
93
- str.push(String.fromCodePoint(((arr[i] & 0x07) << 18) + ((arr[i + 1] & 0x3f) << 12) + ((arr[i + 2] & 0x3f) << 6) + (arr[i + 3] & 0x3f)));
94
- i += 3;
95
- }
96
- else if (arr[i] >= 0xe0 && arr[i] <= 0xef) {
97
- // 三字节
98
- str.push(String.fromCodePoint(((arr[i] & 0x0f) << 12) + ((arr[i + 1] & 0x3f) << 6) + (arr[i + 2] & 0x3f)));
99
- i += 2;
100
- }
101
- else if (arr[i] >= 0xc0 && arr[i] <= 0xdf) {
102
- // 双字节
103
- str.push(String.fromCodePoint(((arr[i] & 0x1f) << 6) + (arr[i + 1] & 0x3f)));
104
- i++;
105
- }
106
- else {
107
- // 单字节
108
- str.push(String.fromCodePoint(arr[i]));
109
- }
110
- }
111
- return str.join("");
112
- }
113
- /**
114
- * 32 比特循环左移
115
- */
116
- function rotl(x, n) {
117
- const s = n & 31;
118
- return (x << s) | (x >>> (32 - s));
119
- }
120
- /**
121
- * 非线性变换
122
- */
123
- function byteSub(a) {
124
- return (((Sbox[(a >>> 24) & 0xff] & 0xff) << 24) |
125
- ((Sbox[(a >>> 16) & 0xff] & 0xff) << 16) |
126
- ((Sbox[(a >>> 8) & 0xff] & 0xff) << 8) |
127
- (Sbox[a & 0xff] & 0xff));
128
- }
129
- /**
130
- * 线性变换,加密/解密用
131
- */
132
- function l1(b) {
133
- return b ^ rotl(b, 2) ^ rotl(b, 10) ^ rotl(b, 18) ^ rotl(b, 24);
134
- }
135
- /**
136
- * 线性变换,生成轮密钥用
137
- */
138
- function l2(b) {
139
- return b ^ rotl(b, 13) ^ rotl(b, 23);
140
- }
141
- /**
142
- * 以一组 128 比特进行加密/解密操作
143
- */
144
- function sms4Crypt(input, output, roundKey) {
145
- const x = new Array(4);
146
- // 字节数组转成字数组(此处 1 字 = 32 比特)
147
- const tmp = new Array(4);
148
- for (let i = 0; i < 4; i++) {
149
- tmp[0] = input[4 * i] & 0xff;
150
- tmp[1] = input[4 * i + 1] & 0xff;
151
- tmp[2] = input[4 * i + 2] & 0xff;
152
- tmp[3] = input[4 * i + 3] & 0xff;
153
- x[i] = (tmp[0] << 24) | (tmp[1] << 16) | (tmp[2] << 8) | tmp[3];
154
- }
155
- // x[i + 4] = x[i] ^ l1(byteSub(x[i + 1] ^ x[i + 2] ^ x[i + 3] ^ roundKey[i]))
156
- for (let r = 0, mid; r < 32; r += 4) {
157
- mid = x[1] ^ x[2] ^ x[3] ^ roundKey[r + 0];
158
- x[0] ^= l1(byteSub(mid)); // x[4]
159
- mid = x[2] ^ x[3] ^ x[0] ^ roundKey[r + 1];
160
- x[1] ^= l1(byteSub(mid)); // x[5]
161
- mid = x[3] ^ x[0] ^ x[1] ^ roundKey[r + 2];
162
- x[2] ^= l1(byteSub(mid)); // x[6]
163
- mid = x[0] ^ x[1] ^ x[2] ^ roundKey[r + 3];
164
- x[3] ^= l1(byteSub(mid)); // x[7]
165
- }
166
- // 反序变换
167
- for (let j = 0; j < 16; j += 4) {
168
- output[j] = (x[3 - j / 4] >>> 24) & 0xff;
169
- output[j + 1] = (x[3 - j / 4] >>> 16) & 0xff;
170
- output[j + 2] = (x[3 - j / 4] >>> 8) & 0xff;
171
- output[j + 3] = x[3 - j / 4] & 0xff;
172
- }
173
- }
174
- /**
175
- * 密钥扩展算法
176
- */
177
- function sms4KeyExt(key, roundKey, cryptFlag) {
178
- const x = new Array(4);
179
- // 字节数组转成字数组(此处 1 字 = 32 比特)
180
- const tmp = new Array(4);
181
- for (let i = 0; i < 4; i++) {
182
- tmp[0] = key[0 + 4 * i] & 0xff;
183
- tmp[1] = key[1 + 4 * i] & 0xff;
184
- tmp[2] = key[2 + 4 * i] & 0xff;
185
- tmp[3] = key[3 + 4 * i] & 0xff;
186
- x[i] = (tmp[0] << 24) | (tmp[1] << 16) | (tmp[2] << 8) | tmp[3];
187
- }
188
- // 与系统参数做异或
189
- x[0] ^= 0xa3b1bac6;
190
- x[1] ^= 0x56aa3350;
191
- x[2] ^= 0x677d9197;
192
- x[3] ^= 0xb27022dc;
193
- // roundKey[i] = x[i + 4] = x[i] ^ l2(byteSub(x[i + 1] ^ x[i + 2] ^ x[i + 3] ^ CK[i]))
194
- for (let r = 0, mid; r < 32; r += 4) {
195
- mid = x[1] ^ x[2] ^ x[3] ^ CK[r + 0];
196
- roundKey[r + 0] = x[0] ^= l2(byteSub(mid)); // x[4]
197
- mid = x[2] ^ x[3] ^ x[0] ^ CK[r + 1];
198
- roundKey[r + 1] = x[1] ^= l2(byteSub(mid)); // x[5]
199
- mid = x[3] ^ x[0] ^ x[1] ^ CK[r + 2];
200
- roundKey[r + 2] = x[2] ^= l2(byteSub(mid)); // x[6]
201
- mid = x[0] ^ x[1] ^ x[2] ^ CK[r + 3];
202
- roundKey[r + 3] = x[3] ^= l2(byteSub(mid)); // x[7]
203
- }
204
- // 解密时使用反序的轮密钥
205
- if (cryptFlag === DECRYPT) {
206
- for (let r = 0, mid; r < 16; r++) {
207
- mid = roundKey[r];
208
- roundKey[r] = roundKey[31 - r];
209
- roundKey[31 - r] = mid;
210
- }
211
- }
212
- }
213
- function sm4(inArray, key, cryptFlag, { padding = "pkcs#7", mode, iv = [], output = "string" } = {}) {
214
- if (mode === "cbc") {
215
- // CBC 模式,默认走 ECB 模式
216
- if (typeof iv === "string")
217
- iv = hexToArray(iv);
218
- if (iv.length !== 128 / 8) {
219
- // iv 不是 128 比特
220
- throw new Error("iv is invalid");
221
- }
222
- }
223
- // 检查 key
224
- if (typeof key === "string")
225
- key = hexToArray(key);
226
- if (key.length !== 128 / 8) {
227
- // key 不是 128 比特
228
- throw new Error("key is invalid");
229
- }
230
- // 检查输入
231
- if (typeof inArray === "string") {
232
- if (cryptFlag !== DECRYPT) {
233
- // 加密,输入为 utf8 串
234
- inArray = utf8ToArray(inArray);
235
- }
236
- else {
237
- // 解密,输入为 16 进制串
238
- inArray = hexToArray(inArray);
239
- }
240
- }
241
- else {
242
- inArray = [...inArray];
243
- }
244
- // 新增填充,sm4 是 16 个字节一个分组,所以统一走到 pkcs#7
245
- if ((padding === "pkcs#5" || padding === "pkcs#7") && cryptFlag !== DECRYPT) {
246
- const paddingCount = BLOCK - (inArray.length % BLOCK);
247
- for (let i = 0; i < paddingCount; i++)
248
- inArray.push(paddingCount);
249
- }
250
- // 生成轮密钥
251
- const roundKey = new Array(ROUND);
252
- sms4KeyExt(key, roundKey, cryptFlag);
253
- const outArray = [];
254
- let lastVector = iv;
255
- let restLen = inArray.length;
256
- let point = 0;
257
- while (restLen >= BLOCK) {
258
- const input = inArray.slice(point, point + 16);
259
- const output = new Array(16);
260
- if (mode === "cbc") {
261
- for (let i = 0; i < BLOCK; i++) {
262
- if (cryptFlag !== DECRYPT) {
263
- // 加密过程在组加密前进行异或
264
- input[i] ^= lastVector[i];
265
- }
266
- }
267
- }
268
- sms4Crypt(input, output, roundKey);
269
- for (let i = 0; i < BLOCK; i++) {
270
- if (mode === "cbc") {
271
- if (cryptFlag === DECRYPT) {
272
- // 解密过程在组解密后进行异或
273
- output[i] ^= lastVector[i];
274
- }
275
- }
276
- outArray[point + i] = output[i];
277
- }
278
- if (mode === "cbc") {
279
- if (cryptFlag !== DECRYPT) {
280
- // 使用上一次输出作为加密向量
281
- lastVector = output;
282
- }
283
- else {
284
- // 使用上一次输入作为解密向量
285
- lastVector = input;
286
- }
287
- }
288
- restLen -= BLOCK;
289
- point += BLOCK;
290
- }
291
- // 去除填充,sm4 是 16 个字节一个分组,所以统一走到 pkcs#7
292
- if ((padding === "pkcs#5" || padding === "pkcs#7") && cryptFlag === DECRYPT) {
293
- const len = outArray.length;
294
- const paddingCount = outArray[len - 1];
295
- for (let i = 1; i <= paddingCount; i++) {
296
- if (outArray[len - i] !== paddingCount)
297
- throw new Error("padding is invalid");
298
- }
299
- outArray.splice(len - paddingCount, paddingCount);
300
- }
301
- // 调整输出
302
- if (output !== "array") {
303
- if (cryptFlag !== DECRYPT) {
304
- // 加密,输出转 16 进制串
305
- return ArrayToHex(outArray);
306
- }
307
- else {
308
- // 解密,输出转 utf8 串
309
- return arrayToUtf8(outArray);
310
- }
311
- }
312
- else {
313
- return outArray;
314
- }
315
- }
316
- /* 以下是内部实现需要的es模块化导出方法 */
317
- function encrypt(inArray, key, options) {
318
- return sm4(inArray, key, 1, options);
319
- }
320
- function decrypt(inArray, key, options) {
321
- return sm4(inArray, key, 0, options);
322
- }
323
-
324
- export { decrypt, encrypt };
@@ -1,14 +0,0 @@
1
- /**
2
- * tea 加密
3
- * @param {String} str 字符串
4
- * @param {String} key 秘钥
5
- * @returns {string} 返回加密后的字符串
6
- */
7
- export function encrypt(str: string, key: string): string;
8
- /**
9
- * tea 解密
10
- * @param {String} str 字符串
11
- * @param {String} key 秘钥
12
- * @returns {string} 返回解密后的字符串
13
- */
14
- export function decrypt(str: string, key: string): string;
@@ -1,22 +0,0 @@
1
- import Tea from './tea.mjs';
2
-
3
- /**
4
- * tea 加密
5
- * @param {String} str 字符串
6
- * @param {String} key 秘钥
7
- * @returns {string} 返回加密后的字符串
8
- */
9
- function encrypt(str, key) {
10
- return Tea.encrypt(str, key);
11
- }
12
- /**
13
- * tea 解密
14
- * @param {String} str 字符串
15
- * @param {String} key 秘钥
16
- * @returns {string} 返回解密后的字符串
17
- */
18
- function decrypt(str, key) {
19
- return Tea.decrypt(str, key);
20
- }
21
-
22
- export { decrypt, encrypt };
@@ -1,69 +0,0 @@
1
- export default Tea;
2
- /**
3
- * Tiny Encryption Algorithm. David Wheeler & Roger Needham, Cambridge University Computer Lab.
4
- *
5
- * www.movable-type.co.uk/scripts/tea.pdf - TEA, a Tiny Encryption Algorithm (1994)
6
- * www.movable-type.co.uk/scripts/xtea.pdf - Tea extensions (1997)
7
- * www.movable-type.co.uk/scripts/xxtea.pdf - Correction to xtea (1998)
8
- */
9
- declare class Tea {
10
- /**
11
- * Encrypts text using Corrected Block TEA (xxtea) algorithm.
12
- *
13
- * @param {string} plaintext - String to be encrypted (multi-byte safe).
14
- * @param {string} password - Password to be used for encryption (1st 16 chars).
15
- * @returns {string} Encrypted text (encoded as base64).
16
- */
17
- static encrypt(plaintext: string, password: string): string;
18
- /**
19
- * Decrypts text using Corrected Block TEA (xxtea) algorithm.
20
- *
21
- * @param {string} ciphertext - String to be decrypted.
22
- * @param {string} password - Password to be used for decryption (1st 16 chars).
23
- * @returns {string} Decrypted text.
24
- * @throws {Error} Invalid ciphertext
25
- */
26
- static decrypt(ciphertext: string, password: string): string;
27
- /**
28
- * XXTEA: encodes array of unsigned 32-bit integers using 128-bit key.
29
- *
30
- * @param {number[]} v - Data vector.
31
- * @param {number[]} k - Key.
32
- * @returns {number[]} Encoded vector.
33
- */
34
- static encode(v: number[], k: number[]): number[];
35
- /**
36
- * XXTEA: decodes array of unsigned 32-bit integers using 128-bit key.
37
- *
38
- * @param {number[]} v - Data vector.
39
- * @param {number[]} k - Key.
40
- * @returns {number[]} Decoded vector.
41
- */
42
- static decode(v: number[], k: number[]): number[];
43
- /**
44
- * Converts string to array of longs (each containing 4 chars).
45
- * @private
46
- */
47
- private static strToLongs;
48
- /**
49
- * Converts array of longs to string.
50
- * @private
51
- */
52
- private static longsToStr;
53
- /**
54
- * Encodes multi-byte string to utf8 - monsur.hossa.in/2012/07/20/utf-8-in-javascript.html
55
- */
56
- static utf8Encode(str: any): string;
57
- /**
58
- * Decodes utf8 string to multi-byte
59
- */
60
- static utf8Decode(utf8Str: any): any;
61
- /**
62
- * Encodes base64 - developer.mozilla.org/en-US/docs/Web/API/window.btoa, nodejs.org/api/buffer.html
63
- */
64
- static base64Encode(str: any): string;
65
- /**
66
- * Decodes base64
67
- */
68
- static base64Decode(b64Str: any): string | undefined;
69
- }
@@ -1,185 +0,0 @@
1
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2
- /* Block TEA (xxtea) Tiny Encryption Algorithm (c) Chris Veness 2002-2019 */
3
- /* MIT Licence */
4
- /* www.movable-type.co.uk/scripts/tea-block.html */
5
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
6
- /**
7
- * Tiny Encryption Algorithm. David Wheeler & Roger Needham, Cambridge University Computer Lab.
8
- *
9
- * www.movable-type.co.uk/scripts/tea.pdf - TEA, a Tiny Encryption Algorithm (1994)
10
- * www.movable-type.co.uk/scripts/xtea.pdf - Tea extensions (1997)
11
- * www.movable-type.co.uk/scripts/xxtea.pdf - Correction to xtea (1998)
12
- */
13
- class Tea {
14
- /**
15
- * Encrypts text using Corrected Block TEA (xxtea) algorithm.
16
- *
17
- * @param {string} plaintext - String to be encrypted (multi-byte safe).
18
- * @param {string} password - Password to be used for encryption (1st 16 chars).
19
- * @returns {string} Encrypted text (encoded as base64).
20
- */
21
- static encrypt(plaintext, password) {
22
- plaintext = String(plaintext);
23
- password = String(password);
24
- if (plaintext.length == 0)
25
- return ""; // nothing to encrypt
26
- // v is n-word data vector; converted to array of longs from UTF-8 string
27
- const v = Tea.strToLongs(Tea.utf8Encode(plaintext));
28
- // k is 4-word key; simply convert first 16 chars of password as key
29
- const k = Tea.strToLongs(Tea.utf8Encode(password).slice(0, 16));
30
- const cipher = Tea.encode(v, k);
31
- // convert array of longs to string
32
- const ciphertext = Tea.longsToStr(cipher);
33
- // convert binary string to base64 ascii for safe transport
34
- const cipherbase64 = Tea.base64Encode(ciphertext);
35
- return cipherbase64;
36
- }
37
- /**
38
- * Decrypts text using Corrected Block TEA (xxtea) algorithm.
39
- *
40
- * @param {string} ciphertext - String to be decrypted.
41
- * @param {string} password - Password to be used for decryption (1st 16 chars).
42
- * @returns {string} Decrypted text.
43
- * @throws {Error} Invalid ciphertext
44
- */
45
- static decrypt(ciphertext, password) {
46
- ciphertext = String(ciphertext);
47
- password = String(password);
48
- if (ciphertext.length == 0)
49
- return ""; // nothing to decrypt
50
- // v is n-word data vector; converted to array of longs from base64 string
51
- const v = Tea.strToLongs(Tea.base64Decode(ciphertext));
52
- // k is 4-word key; simply convert first 16 chars of password as key
53
- const k = Tea.strToLongs(Tea.utf8Encode(password).slice(0, 16));
54
- const plain = Tea.decode(v, k);
55
- const plaintext = Tea.longsToStr(plain);
56
- // strip trailing null chars resulting from filling 4-char blocks:
57
- const plainUnicode = Tea.utf8Decode(plaintext.replace(/\0+$/, ""));
58
- return plainUnicode;
59
- }
60
- /**
61
- * XXTEA: encodes array of unsigned 32-bit integers using 128-bit key.
62
- *
63
- * @param {number[]} v - Data vector.
64
- * @param {number[]} k - Key.
65
- * @returns {number[]} Encoded vector.
66
- */
67
- static encode(v, k) {
68
- if (v.length < 2)
69
- v[1] = 0; // algorithm doesn't work for n<2 so fudge by adding a null
70
- const n = v.length;
71
- const delta = 0x9e3779b9;
72
- let q = Math.floor(6 + 52 / n);
73
- let z = v[n - 1], y = v[0];
74
- let mx, e, sum = 0;
75
- while (q-- > 0) {
76
- // 6 + 52/n operations gives between 6 & 32 mixes on each word
77
- sum += delta;
78
- e = (sum >>> 2) & 3;
79
- for (let p = 0; p < n; p++) {
80
- y = v[(p + 1) % n];
81
- mx = (((z >>> 5) ^ (y << 2)) + ((y >>> 3) ^ (z << 4))) ^ ((sum ^ y) + (k[(p & 3) ^ e] ^ z));
82
- z = v[p] += mx;
83
- }
84
- }
85
- return v;
86
- }
87
- /**
88
- * XXTEA: decodes array of unsigned 32-bit integers using 128-bit key.
89
- *
90
- * @param {number[]} v - Data vector.
91
- * @param {number[]} k - Key.
92
- * @returns {number[]} Decoded vector.
93
- */
94
- static decode(v, k) {
95
- const n = v.length;
96
- const delta = 0x9e3779b9;
97
- const q = Math.floor(6 + 52 / n);
98
- let z = v[n - 1], y = v[0];
99
- let mx, e, sum = q * delta;
100
- while (sum != 0) {
101
- e = (sum >>> 2) & 3;
102
- for (let p = n - 1; p >= 0; p--) {
103
- z = v[p > 0 ? p - 1 : n - 1];
104
- mx = (((z >>> 5) ^ (y << 2)) + ((y >>> 3) ^ (z << 4))) ^ ((sum ^ y) + (k[(p & 3) ^ e] ^ z));
105
- y = v[p] -= mx;
106
- }
107
- sum -= delta;
108
- }
109
- return v;
110
- }
111
- /**
112
- * Converts string to array of longs (each containing 4 chars).
113
- * @private
114
- */
115
- static strToLongs(s) {
116
- // note chars must be within ISO-8859-1 (Unicode code-point <= U+00FF) to fit 4/long
117
- const l = new Array(Math.ceil(s.length / 4));
118
- for (let i = 0; i < l.length; i++) {
119
- // note little-endian encoding - endianness is irrelevant as long as it matches longsToStr()
120
- l[i] =
121
- s.charCodeAt(i * 4) +
122
- (s.charCodeAt(i * 4 + 1) << 8) +
123
- (s.charCodeAt(i * 4 + 2) << 16) +
124
- (s.charCodeAt(i * 4 + 3) << 24);
125
- } // note running off the end of the string generates nulls since bitwise operators treat NaN as 0
126
- return l;
127
- }
128
- /**
129
- * Converts array of longs to string.
130
- * @private
131
- */
132
- static longsToStr(l) {
133
- let str = "";
134
- for (let i = 0; i < l.length; i++) {
135
- str += String.fromCharCode(l[i] & 0xff, (l[i] >>> 8) & 0xff, (l[i] >>> 16) & 0xff, (l[i] >>> 24) & 0xff);
136
- }
137
- return str;
138
- }
139
- /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
140
- /**
141
- * Encodes multi-byte string to utf8 - monsur.hossa.in/2012/07/20/utf-8-in-javascript.html
142
- */
143
- static utf8Encode(str) {
144
- return unescape(encodeURIComponent(str));
145
- }
146
- /**
147
- * Decodes utf8 string to multi-byte
148
- */
149
- static utf8Decode(utf8Str) {
150
- try {
151
- return decodeURIComponent(escape(utf8Str));
152
- }
153
- catch (e) {
154
- return utf8Str; // invalid UTF-8? return as-is
155
- }
156
- }
157
- /**
158
- * Encodes base64 - developer.mozilla.org/en-US/docs/Web/API/window.btoa, nodejs.org/api/buffer.html
159
- */
160
- static base64Encode(str) {
161
- if (typeof btoa != "undefined")
162
- return btoa(str); // browser
163
- if (typeof Buffer != "undefined")
164
- return new Buffer(str, "binary").toString("base64"); // Node.js
165
- throw new Error("No Base64 Encode");
166
- }
167
- /**
168
- * Decodes base64
169
- */
170
- static base64Decode(b64Str) {
171
- if (typeof atob == "undefined" && typeof Buffer == "undefined")
172
- throw new Error("No base64 decode");
173
- try {
174
- if (typeof atob != "undefined")
175
- return atob(b64Str); // browser
176
- if (typeof Buffer != "undefined")
177
- return new Buffer(b64Str, "base64").toString("binary"); // Node.js
178
- }
179
- catch (e) {
180
- throw new Error("Invalid ciphertext");
181
- }
182
- }
183
- }
184
-
185
- export { Tea as default };