n20-common-lib 2.9.13 → 2.9.14

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 (130) hide show
  1. package/nstc-g6/components/NstcCharts/NstcCharts.vue +16 -8
  2. package/package.json +8 -5
  3. package/src/assets/css/approve-card.scss +1 -1
  4. package/src/assets/css/date-quarter.scss +8 -0
  5. package/src/assets/css/expandable-pane.scss +7 -0
  6. package/src/assets/css/file-upload-table.scss +2 -3
  7. package/src/assets/css/font-icon.scss +3 -1
  8. package/src/assets/css/message.scss +6 -6
  9. package/src/assets/css/normalize.scss +4 -1
  10. package/src/assets/css/table.scss +16 -11
  11. package/src/assets/iconFont/SIMSUN.ttf +0 -0
  12. package/src/assets/iconFont/font.css +4 -0
  13. package/src/components/AIButton/index.vue +101 -0
  14. package/src/components/AdvancedFilter/formItemRender.vue +7 -4
  15. package/src/components/AdvancedFilter/index.vue +6 -7
  16. package/src/components/Anchor/index.vue +1 -0
  17. package/src/components/ApprovalButtons/index.vue +404 -82
  18. package/src/components/ApprovalButtons/indexApp.vue +1102 -0
  19. package/src/components/ApprovalButtons/selectSpr.vue +128 -0
  20. package/src/components/ApprovalButtons/setCarboncopyProp.vue +1 -1
  21. package/src/components/ApprovalButtons/setRejectToProp.vue +45 -5
  22. package/src/components/ApprovalButtons/showAppOpi.vue +265 -8
  23. package/src/components/ApprovalButtons/showOtherAttrNew.vue +161 -0
  24. package/src/components/ApprovalCard/index.vue +190 -44
  25. package/src/components/ApprovalCard/indexApp.vue +592 -0
  26. package/src/components/ApprovalRecord/approvalImgPro/child.vue +1 -1
  27. package/src/components/ApprovalRecord/approvalImgPro/index.vue +42 -5
  28. package/src/components/ApprovalRecord/index.vue +23 -6
  29. package/src/components/ApprovalRecord/indexApp.vue +79 -0
  30. package/src/components/AttachmentPass/index.vue +286 -0
  31. package/src/components/Button/button-group.vue +3 -1
  32. package/src/components/CascaderArea/index.vue +5 -6
  33. package/src/components/DatePicker/por.vue +31 -1
  34. package/src/components/DateSelect/quarterDatePicker.vue +23 -1
  35. package/src/components/Descriptions/index.vue +7 -3
  36. package/src/components/Dialog/index.vue +4 -0
  37. package/src/components/Diff/index.vue +4 -2
  38. package/src/components/DynamicField/DynamicField.vue +29 -6
  39. package/src/components/DynamicField/DynamicFieldMixin.js +13 -5
  40. package/src/components/DynamicField/DynamicFieldOptions.vue +135 -62
  41. package/src/components/DynamicField/DynamicTable.vue +11 -1
  42. package/src/components/DynamicField/contentPop.vue +110 -0
  43. package/src/components/DynamicField/tableList.vue +5 -1
  44. package/src/components/DynamicField/tableView.vue +143 -0
  45. package/src/components/ECharts/index.vue +15 -9
  46. package/src/components/Expandable/main.vue +17 -2
  47. package/src/components/FileImport/index.vue +4 -5
  48. package/src/components/FileUploadTable/FileUploadTableV3.vue +937 -0
  49. package/src/components/FileUploadTable/aiCheckDialog.vue +139 -0
  50. package/src/components/FileUploadTable/index.vue +251 -33
  51. package/src/components/FileUploadTable/jytg.svg +6 -0
  52. package/src/components/FileUploadTable/wsc.svg +3 -0
  53. package/src/components/FileUploadTable/ysc.svg +3 -0
  54. package/src/components/HandlingAdvice/index.vue +191 -0
  55. package/src/components/InputAccount/index.vue +105 -0
  56. package/src/components/InputNumber/index.vue +16 -4
  57. package/src/components/InputNumber/numberRange.vue +14 -0
  58. package/src/components/InputSearch/index.vue +8 -0
  59. package/src/components/Layout/HeaderWrap/changePwd.vue +50 -23
  60. package/src/components/Layout/HeaderWrap/index.vue +2 -2
  61. package/src/components/Layout/HeaderWrap/indexN.vue +296 -119
  62. package/src/components/Layout/SubContent/index.vue +45 -14
  63. package/src/components/Layout/indexN.vue +26 -5
  64. package/src/components/LoginTemporary/form.vue +126 -34
  65. package/src/components/LoginTemporary/index.vue +14 -3
  66. package/src/components/LoginTemporary/indexN.vue +35 -13
  67. package/src/components/Preview/index.vue +199 -0
  68. package/src/components/SelectDatePickerPro/customDatePicker.vue +7 -0
  69. package/src/components/SelectDatePickerPro/halfYearPicker.vue +165 -0
  70. package/src/components/SelectDatePickerPro/index.vue +44 -4
  71. package/src/components/SelectDatePickerPro/quarterDatePicker.vue +32 -10
  72. package/src/components/SelectTree/index.vue +10 -4
  73. package/src/components/SelectTree/pro.vue +3 -0
  74. package/src/components/ShowColumn/index copy 2.vue +545 -0
  75. package/src/components/ShowColumn/index copy.vue +566 -0
  76. package/src/components/ShowColumn/index.vue +11 -7
  77. package/src/components/Statis/statisItem.vue +8 -7
  78. package/src/components/Table/filters.js +13 -0
  79. package/src/components/Table/index.vue +4 -4
  80. package/src/components/TablePro/filterContent.vue +18 -8
  81. package/src/components/TablePro/index.js +41 -1
  82. package/src/components/TablePro/index.vue +117 -6
  83. package/src/components/TableProOperateColumn/OperateBtns.vue +11 -53
  84. package/src/components/TableProOperateColumn/OperateBtns_copy.vue +141 -0
  85. package/src/components/TableProOperateColumn/childrenOperateBtn.vue +108 -0
  86. package/src/components/TableProOperateColumn/index.vue +3 -6
  87. package/src/components/TableSetSize/index.vue +1 -1
  88. package/src/components/Tree/index.vue +21 -5
  89. package/src/components/Upload/index.vue +25 -10
  90. package/src/components/Upload/uploadMsg.vue +30 -25
  91. package/src/components/operatingStatus/index.vue +3 -4
  92. package/src/directives/VTitle/index.js +15 -5
  93. package/src/directives/watermark/index.js +140 -56
  94. package/src/i18n.json +146 -18
  95. package/src/index.js +31 -3
  96. package/src/plugins/Sign/CaMap.js +47 -8
  97. package/src/plugins/Sign/Itrus/index.js +1 -1
  98. package/src/plugins/Sign/Itrus/sign_3720.js +2 -1
  99. package/src/plugins/Sign/NetSM3/index.js +20 -11
  100. package/src/plugins/Sign/NetV3/index.js +163 -22
  101. package/src/plugins/Sign/SkfSign/index.js +55 -52
  102. package/src/plugins/Sign/bjca/index.js +229 -9
  103. package/src/plugins/Sign/hnca/index.js +5064 -0
  104. package/src/plugins/Sign/index.js +155 -103
  105. package/src/plugins/Sign/kySign/base64.js +160 -0
  106. package/src/plugins/Sign/kySign/hex.js +92 -0
  107. package/src/plugins/Sign/kySign/index.js +186 -0
  108. package/src/plugins/Sign/kySign/skf.js +937 -0
  109. package/src/plugins/Sign/kySign/test.html +463 -0
  110. package/src/plugins/Sign/sdca/index.js +73 -0
  111. package/src/plugins/Sign/sign.js +72 -52
  112. package/src/plugins/Sign/signV3/InfosecNetSignCNGAgent.min.js +1 -0
  113. package/src/plugins/Sign/signV3/sign.js +187 -0
  114. package/src/plugins/Sign/sign_back.js +172 -0
  115. package/src/utils/accountFormat.js +7 -0
  116. package/src/utils/asyncGetRelaNos.js +79 -46
  117. package/src/utils/axios.js +3 -5
  118. package/src/utils/i18n/index.js +1 -1
  119. package/src/utils/importGlobal.js +23 -12
  120. package/style/fonts/SIMSUN.5e0c362c.ttf +0 -0
  121. package/style/index.css +2 -2
  122. package/theme/blue.css +2 -2
  123. package/theme/cctcRed.css +2 -2
  124. package/theme/fonts/SIMSUN.5e0c362c.ttf +0 -0
  125. package/theme/green.css +2 -2
  126. package/theme/lightBlue.css +2 -2
  127. package/theme/orange.css +2 -2
  128. package/theme/purple.css +2 -2
  129. package/theme/red.css +2 -2
  130. package/theme/yellow.css +2 -2
@@ -0,0 +1,463 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+
4
+ <head>
5
+ <title>密码钥匙接口测试</title>
6
+ <meta charset="utf-8" />
7
+ <script src="./skf.js"></script>
8
+ <script src="./base64.js"></script>
9
+ <script src="./hex.js"></script>
10
+ <script>
11
+ var skf = new SKF(location.port, "http://127.0.0.1:2020/ssm/ukey/");
12
+ function enumDev() {
13
+ var rv = skf.SKF_EnumDev(1);
14
+ document.getElementById("s_enumdev").innerText = rv.Status;
15
+ if (rv.Status == 0) {
16
+ devlist = rv.DevList
17
+ const devs = devlist.split(',').map(dev => dev.trim());
18
+ // 获取下拉框元素
19
+ const select = document.getElementById('t_enumdev');
20
+ // 清空下拉框内容
21
+ select.innerHTML = '';
22
+ // 将解析后的设备逐个添加到下拉框
23
+ devs.forEach(dev => {
24
+ if (dev) { // 确保非空字符串
25
+ const option = document.createElement('option');
26
+ option.value = dev;
27
+ option.textContent = dev;
28
+ select.appendChild(option);
29
+ }
30
+ });
31
+ skf.SKF_GetDevState(document.getElementById("t_enumdev").value);
32
+ }
33
+ }
34
+ //连接三未ukey设备前需要先调用SKF_EnumDev进行枚举设备
35
+ function connectdev() {
36
+ var rv = skf.SKF_ConnectDev(document.getElementById("t_enumdev").value);
37
+ document.getElementById("s_connectdev").innerText = rv.Status;
38
+ document.getElementById("t_connectdev").value = rv.Status == 0 ? rv.DevHandle : rv.msg;
39
+ }
40
+ function disconnectdev() {
41
+ var rv = skf.SKF_DisConnectDev(parseInt(document.getElementById("t_connectdev").value));
42
+ document.getElementById("s_disconnectdev").value = rv.Status == 0 ? rv.Status : rv.msg;
43
+ }
44
+ function testdev() {
45
+ skf.SKF_SetLabel(parseInt(document.getElementById("t_connectdev").value), "testdev");
46
+ var rv = skf.SKF_GetDevInfo(parseInt(document.getElementById("t_connectdev").value));
47
+ document.getElementById("t_getdevinfo").value = rv.Status == 0 ? JSON.stringify(rv) : rv.msg;
48
+ document.getElementById("t_DevAuthAlgId").value = rv.Status == 0 ? rv.DevAuthAlgId : rv.msg;
49
+ skf.SKF_LockDev(parseInt(document.getElementById("t_connectdev").value), 10000);
50
+ skf.SKF_UnlockDev(parseInt(document.getElementById("t_connectdev").value));
51
+ }
52
+ function AuthDev() {
53
+ var rv = skf.SKF_SetSymmKey(parseInt(document.getElementById("t_connectdev").value), "MDAwMDAwMDAwMDAwMDAwMA==", parseInt(document.getElementById("t_DevAuthAlgId").value));
54
+ if (rv.Status != 0) {
55
+ document.getElementById("s_authDeverrorcode").value = rv.Status == 0 ? rv.Status : rv.msg;
56
+ return;
57
+ }
58
+ var keyhandle = rv.KeyHandle;
59
+ rv = skf.SKF_EncryptInit(keyhandle, '', 0, 0, 0);
60
+ if (rv.Status != 0) {
61
+ document.getElementById("s_authDeverrorcode").value = rv.Status == 0 ? rv.Status : rv.msg;
62
+ return;
63
+ }
64
+
65
+ rv = skf.SKF_GenRandom(parseInt(document.getElementById("t_connectdev").value), 8)
66
+ if (rv.Status != 0) {
67
+ document.getElementById("s_authDeverrorcode").value = rv.Status == 0 ? rv.Status : rv.msg;
68
+ return;
69
+ }
70
+
71
+ var base64data = base64ToHex(rv.Random).padEnd(32, '0');
72
+ document.getElementById("t_authDeverrorcode").value = rv.Status == 0 ? hexToBase64(base64data) : rv.msg;
73
+ rv = skf.SKF_Encrypt(keyhandle, hexToBase64(base64data), 16);
74
+ if (rv.Status != 0) {
75
+ document.getElementById("s_authDeverrorcode").value = rv.Status == 0 ? rv.Status : rv.msg;
76
+ return;
77
+ }
78
+
79
+ rv = skf.SKF_DevAuth(parseInt(document.getElementById("t_connectdev").value), rv.EncryptedData, rv.EncryptedDataLen)
80
+ document.getElementById("s_authDeverrorcode").value = rv.Status == 0 ? rv.Status : rv.msg;
81
+ rv = skf.SKF_CloseHandle(keyhandle);
82
+ }
83
+ function testAppliction() {
84
+ var rv = skf.SKF_CreateApplication(parseInt(document.getElementById("t_connectdev").value), document.getElementById("t_appname").value, "12345678", 10, "12345678", 10, 255);
85
+ rv = skf.SKF_EnumApplication(parseInt(document.getElementById("t_connectdev").value));
86
+ rv = skf.SKF_DeleteApplication(parseInt(document.getElementById("t_connectdev").value), document.getElementById("t_appname").value);
87
+ rv = skf.SKF_OpenApplication(parseInt(document.getElementById("t_connectdev").value), "test2024062701");
88
+ var ApplicationHandle = rv.Application
89
+ rv = skf.SKF_VerifyPIN(ApplicationHandle, 0, "12345678");
90
+ rv = skf.SKF_UnblockPIN(ApplicationHandle, "12345678", "12345678");
91
+ rv = skf.SKF_ClearSecureState(ApplicationHandle);
92
+ rv = skf.SKF_VerifyPIN(ApplicationHandle, 0, "123456");
93
+ rv = skf.SKF_GetPINInfo(ApplicationHandle, 0);
94
+ rv = skf.SKF_ChangePIN(ApplicationHandle, 0, "12345678", "123456789");
95
+ rv = skf.SKF_VerifyPIN(ApplicationHandle, 0, "123456789");
96
+ rv = skf.SKF_ChangePIN(ApplicationHandle, 0, "123456789", "12345678");
97
+ rv = skf.SKF_GetPINInfo(ApplicationHandle, 0);
98
+ rv = skf.SKF_CloseApplication(ApplicationHandle);
99
+ }
100
+ function testFile() {
101
+ var rv = skf.SKF_OpenApplication(parseInt(document.getElementById("t_connectdev").value), "test2024062701");
102
+ if (rv.Status != 0) {
103
+ return;
104
+ }
105
+ var ApplicationHandle = rv.Application
106
+ rv = skf.SKF_CreateFile(ApplicationHandle, "2024062701", 1024, 255, 255);
107
+ rv = skf.SKF_EnumFiles(ApplicationHandle);
108
+ rv = skf.SKF_GetFileInfo(ApplicationHandle, "2024062701");
109
+ rv = skf.SKF_WriteFile(ApplicationHandle, "2024062701", 0, "MTIzNDU2NzgxMjM0NTY3OA==", 16);
110
+ rv = skf.SKF_ReadFile(ApplicationHandle, "2024062701", 2, 16);
111
+ rv = skf.SKF_DeleteFile(ApplicationHandle, "2024062701");
112
+ rv = skf.SKF_CloseApplication(ApplicationHandle);
113
+ }
114
+ function testContainer() {
115
+ var rv = skf.SKF_OpenApplication(parseInt(document.getElementById("t_connectdev").value), "test2024062701");
116
+ if (rv.Status != 0) {
117
+ return;
118
+ }
119
+ var ApplicationHandle = rv.Application;
120
+ rv = skf.SKF_VerifyPIN(ApplicationHandle, 1, "12345678");
121
+ rv = skf.SKF_CreateContainer(ApplicationHandle, "test2024062701");
122
+ rv = skf.SKF_CloseContainer(rv.Container);
123
+ rv = skf.SKF_EnumContainer(ApplicationHandle);
124
+ rv = skf.SKF_OpenContainer(ApplicationHandle, "test2024062701");
125
+ var ContainerHandle = rv.Container;
126
+ rv = skf.SKF_GetContainerType(rv.Container);
127
+ rv = skf.SKF_CloseContainer(ContainerHandle);
128
+ rv = skf.SKF_DeleteContainer(ApplicationHandle, "test2024062701");
129
+ rv = skf.SKF_EnumContainer(ApplicationHandle);
130
+ rv = skf.SKF_CloseApplication(ApplicationHandle);
131
+ }
132
+ function testrsa() {
133
+ var rv = skf.SKF_OpenApplication(parseInt(document.getElementById("t_connectdev").value), "test2024062701");
134
+ var ApplicationHandle = rv.Application;
135
+ rv = skf.SKF_VerifyPIN(ApplicationHandle, 1, "12345678");
136
+ rv = skf.SKF_CreateContainer(ApplicationHandle, "test2024062701");
137
+ var ContainerHandle = rv.Container;
138
+ rv = skf.SKF_GenRSAKeyPair(ContainerHandle, 1024);
139
+ var publickey = rv.Publickey;
140
+ var publickeylen = rv.PublickeyLen;
141
+ rv = skf.SKF_RSASignData(ContainerHandle, "REY2REY2RDc3REI1REY2RDdBRTc4RjdBRUZERjM3REI1REY2", 36);
142
+ rv = skf.SKF_RSAVerify(parseInt(document.getElementById("t_connectdev").value), publickey, publickeylen, "REY2REY2RDc3REI1REY2RDdBRTc4RjdBRUZERjM3REI1REY2", 36, rv.Signature, rv.SignatureLen);
143
+ rv = skf.SKF_RSAExportSessionKey(ContainerHandle, 0x00000401, publickey, publickeylen);
144
+ rv = skf.SKF_ExportPublicKey(ContainerHandle, 1);
145
+ rv = skf.SKF_CloseContainer(ContainerHandle);
146
+ rv = skf.SKF_DeleteContainer(ApplicationHandle, "test2024062701");
147
+ rv = skf.SKF_CloseApplication(ApplicationHandle);
148
+ }
149
+ function testsm2() {
150
+ var rv = skf.SKF_OpenApplication(parseInt(document.getElementById("t_connectdev").value), "test2024062701");
151
+ var ApplicationHandle = rv.Application;
152
+ rv = skf.SKF_VerifyPIN(ApplicationHandle, 1, "12345678");
153
+ rv = skf.SKF_CreateContainer(ApplicationHandle, "test2024062702");
154
+ var ContainerHandle = rv.Container;
155
+ rv = skf.SKF_GenECCKeyPair(ContainerHandle, 0x00020100);
156
+ var publickey = rv.Publickey;
157
+ var publickeylen = rv.PublickeyLen;
158
+ rv = skf.SKF_ECCSignData(ContainerHandle, "REY2REY2RDc3REI1REY2RDdBRTc4RjdBRUZERjM3REI=", 32);
159
+ rv = skf.SKF_ECCVerify(parseInt(document.getElementById("t_connectdev").value), publickey, publickeylen, "REY2REY2RDc3REI1REY2RDdBRTc4RjdBRUZERjM3REI=", 32, rv.Signature, rv.SignatureLen);
160
+ rv = skf.SKF_ECCExportSessionKey(ContainerHandle, 0x00000401, publickey, publickeylen);
161
+ rv = skf.SKF_ExportPublicKey(ContainerHandle, 1);
162
+ rv = skf.SKF_ExtECCEncrypt(parseInt(document.getElementById("t_connectdev").value), "kIk4gZulvR1df0ifLbI+yScTFgwZqJdZDIsqAXT8v23a7UtD4UV7P7Ag1tTSo5YPuSPlVAksap+uPUmCc2hQRQ==", 64, "REY2REY2RDc3REI1REY2RDdBRTc4RjdBRUZERjM3REI=", 32);
163
+ rv = skf.SKF_CloseContainer(ContainerHandle);
164
+ rv = skf.SKF_DeleteContainer(ApplicationHandle, "test2024062702");
165
+ rv = skf.SKF_CloseApplication(ApplicationHandle);
166
+ }
167
+ function testEncrypt() {
168
+ var rv = skf.SKF_SetSymmKey(parseInt(document.getElementById("t_connectdev").value), "MDAwMDAwMDAwMDAwMDAwMA==", parseInt(document.getElementById("t_DevAuthAlgId").value));
169
+ if (rv.Status != 0) {
170
+ document.getElementById("s_authDeverrorcode").value = rv.Status == 0 ? rv.Status : rv.msg;
171
+ return;
172
+ }
173
+ var keyhandle = rv.KeyHandle;
174
+ rv = skf.SKF_EncryptInit(keyhandle, '', 0, 0, 0);
175
+ if (rv.Status != 0) {
176
+ document.getElementById("s_authDeverrorcode").value = rv.Status == 0 ? rv.Status : rv.msg;
177
+ return;
178
+ }
179
+ rv = skf.SKF_Encrypt(keyhandle, "REY2REY2RDc3REI1REY2RDdBRTc4RjdBRUZERjM3REI=", 32);
180
+ rv = skf.SKF_EncryptUpdate(keyhandle, "REY2REY2RDc3REI1REY2RDdBRTc4RjdBRUZERjM3REI=", 32);
181
+ rv = skf.SKF_EncryptFinal(keyhandle);
182
+ }
183
+ function testDecrypt() {
184
+ var rv = skf.SKF_SetSymmKey(parseInt(document.getElementById("t_connectdev").value), "MDAwMDAwMDAwMDAwMDAwMA==", parseInt(document.getElementById("t_DevAuthAlgId").value));
185
+ if (rv.Status != 0) {
186
+ document.getElementById("s_authDeverrorcode").value = rv.Status == 0 ? rv.Status : rv.msg;
187
+ return;
188
+ }
189
+ var keyhandle = rv.KeyHandle;
190
+ rv = skf.SKF_DecryptInit(keyhandle, '', 0, 0, 0);
191
+ if (rv.Status != 0) {
192
+ document.getElementById("s_authDeverrorcode").value = rv.Status == 0 ? rv.Status : rv.msg;
193
+ return;
194
+ }
195
+ rv = skf.SKF_Decrypt(keyhandle, "MansXBDar6cAT+38R84I4R9IukiWpsA/pdhx4yP190A=", 32);
196
+ }
197
+ function testDigest() {
198
+ rv = skf.SKF_DigestInit(parseInt(document.getElementById("t_connectdev").value), 1, "kIk4gZulvR1df0ifLbI+yScTFgwZqJdZDIsqAXT8v23a7UtD4UV7P7Ag1tTSo5YPuSPlVAksap+uPUmCc2hQRQ==", 64, "12345678", 8);
199
+ if (rv.Status != 0) {
200
+ document.getElementById("s_authDeverrorcode").value = rv.Status == 0 ? rv.Status : rv.msg;
201
+ return;
202
+ }
203
+ var hashHandle = rv.HashHandle;
204
+ //rv = skf.SKF_Digest(hashHandle,"MansXBDar6cAT+38R84I4R9IukiWpsA/pdhx4yP190A=",32);
205
+ rv = skf.SKF_DigestUpdate(hashHandle, "MansXBDar6cAT+38R84I4R9IukiWpsA/pdhx4yP190A=", 32);
206
+ rv = skf.SKF_DigestFinal(hashHandle);
207
+ }
208
+ function testMac() {
209
+ var rv = skf.SKF_SetSymmKey(parseInt(document.getElementById("t_connectdev").value), "MDAwMDAwMDAwMDAwMDAwMA==", parseInt(document.getElementById("t_DevAuthAlgId").value));
210
+ if (rv.Status != 0) {
211
+ document.getElementById("s_authDeverrorcode").value = rv.Status == 0 ? rv.Status : rv.msg;
212
+ return;
213
+ }
214
+ var keyhandle = rv.KeyHandle;
215
+ rv = skf.SKF_MacInit(keyhandle, '', 0, 0, 0);
216
+ if (rv.Status != 0) {
217
+ document.getElementById("s_authDeverrorcode").value = rv.Status == 0 ? rv.Status : rv.msg;
218
+ return;
219
+ }
220
+ rv = skf.SKF_Mac(hashHandle, "MansXBDar6cAT+38R84I4R9IukiWpsA/pdhx4yP190A=", 32);
221
+ // rv = skf.SKF_MacUpdate(hashHandle,"MansXBDar6cAT+38R84I4R9IukiWpsA/pdhx4yP190A=",32);
222
+ // rv = skf.SKF_MacFinal(hashHandle);
223
+ }
224
+ function EnumApp() {
225
+ rv = skf.SKF_EnumApplication(parseInt(document.getElementById("t_connectdev").value));
226
+ if (rv.Status != 0) {
227
+ document.getElementById("s_Applicationresult").value = rv.Status;
228
+ return;
229
+ }
230
+ applicationlist = rv.ApplicationList
231
+ const applications = applicationlist.split(',').map(application => application.trim());
232
+ // 获取下拉框元素
233
+ const select = document.getElementById('ApplicationList');
234
+ // 清空下拉框内容
235
+ select.innerHTML = '';
236
+ // 将解析后的设备逐个添加到下拉框
237
+ applications.forEach(application => {
238
+ if (application) { // 确保非空字符串
239
+ const option = document.createElement('option');
240
+ option.value = application;
241
+ option.textContent = application;
242
+ select.appendChild(option);
243
+ }
244
+ });
245
+ }
246
+ function EnumCon() {
247
+ rv = skf.SKF_OpenApplication(parseInt(document.getElementById("t_connectdev").value), document.getElementById("ApplicationList").value)
248
+ if (rv.Status != 0) {
249
+ document.getElementById("s_ContainerList").value = rv.Status;
250
+ return;
251
+ }
252
+ applicationhandle = parseInt(rv.Application)
253
+ rv = skf.SKF_EnumContainer(applicationhandle);
254
+ if (rv.Status != 0) {
255
+ document.getElementById("s_ContainerList").value = rv.Status;
256
+ skf.SKF_CloseApplication(parseInt(rv.Application))
257
+ return;
258
+ }
259
+ conlist = rv.ContainerList
260
+ const cons = conlist.split(',').map(con => con.trim());
261
+ // 获取下拉框元素
262
+ const select = document.getElementById('ContainerList');
263
+ // 清空下拉框内容
264
+ select.innerHTML = '';
265
+ // 将解析后的设备逐个添加到下拉框
266
+ cons.forEach(con => {
267
+ if (con) { // 确保非空字符串
268
+ const option = document.createElement('option');
269
+ option.value = con;
270
+ option.textContent = con;
271
+ select.appendChild(option);
272
+ }
273
+ });
274
+ skf.SKF_CloseApplication(applicationhandle)
275
+ }
276
+ function GenCsr() {
277
+ rv = skf.SKF_OpenApplication(parseInt(document.getElementById("t_connectdev").value), document.getElementById("ApplicationList").value)
278
+ if (rv.Status != 0) {
279
+ document.getElementById("s_GenCsr").value = rv.Status;
280
+ return;
281
+ }
282
+ applicationhandle = parseInt(rv.Application)
283
+
284
+ rv = skf.SKF_VerifyPIN(applicationhandle, 1, "12345678");
285
+ if (rv.Status != 0) {
286
+ document.getElementById("s_GenCsr").value = rv.Status;
287
+ skf.SKF_CloseApplication(applicationhandle)
288
+ return;
289
+ }
290
+
291
+ rv = skf.SKF_OpenContainer(applicationhandle, document.getElementById('ContainerList').value)
292
+ if (rv.Status != 0) {
293
+ document.getElementById("s_GenCsr").value = rv.Status;
294
+ skf.SKF_CloseApplication(applicationhandle)
295
+ return;
296
+ }
297
+ containerhandle = parseInt(rv.Container)
298
+
299
+ const keys = ['CN', 'O', 'OU', 'L', 'ST', 'C'];
300
+ const values = keys.map(key => {
301
+ const val = document.getElementById(key.toLowerCase()).value.trim();
302
+ return val ? `${key}=${val}` : '';
303
+ });
304
+
305
+ // 过滤掉空值
306
+ const nonEmptyFields = values.filter(item => item !== '');
307
+
308
+ if (nonEmptyFields.length === 0) {
309
+ document.getElementById('result').innerText = '错误:请至少填写一项!';
310
+ document.getElementById('result').style.color = 'red';
311
+ return;
312
+ }
313
+
314
+ const dn = nonEmptyFields.join(',');
315
+
316
+ const alg = document.getElementById('certAlg').value.trim();
317
+ var signalg = 1
318
+ var bitlen = 0
319
+ if (alg == 65536) {
320
+ signalg = 65536
321
+ bitlen = 1024
322
+ } else {
323
+ signalg = 1
324
+ bitlen = 0
325
+ }
326
+
327
+ rv = skf.SKF_GenCertificateRequest(containerhandle, dn, signalg, alg, bitlen)
328
+ if (rv.Status != 0) {
329
+ document.getElementById("s_GenCsr").value = rv.Status;
330
+ skf.SKF_CloseContainer(containerhandle)
331
+ skf.SKF_CloseApplication(applicationhandle)
332
+ return;
333
+ }
334
+
335
+ document.getElementById("t_csr").value = rv.CertificateRequest
336
+ skf.SKF_CloseContainer(containerhandle)
337
+ skf.SKF_CloseApplication(applicationhandle)
338
+ }
339
+
340
+ function pkcs7Sign() {
341
+ rv = skf.SKF_OpenApplication(parseInt(document.getElementById("t_connectdev").value), document.getElementById("ApplicationList").value)
342
+ if (rv.Status != 0) {
343
+ document.getElementById("s_pkcs7").value = rv.Status;
344
+ return;
345
+ }
346
+ applicationhandle = parseInt(rv.Application)
347
+
348
+ rv = skf.SKF_VerifyPIN(applicationhandle, 1, "12345678");
349
+ if (rv.Status != 0) {
350
+ document.getElementById("s_pkcs7").value = rv.Status;
351
+ skf.SKF_CloseApplication(applicationhandle)
352
+ return;
353
+ }
354
+
355
+ rv = skf.SKF_OpenContainer(applicationhandle, document.getElementById('ContainerList').value)
356
+ if (rv.Status != 0) {
357
+ document.getElementById("s_pkcs7").value = rv.Status;
358
+ skf.SKF_CloseApplication(applicationhandle)
359
+ return;
360
+ }
361
+ containerhandle = parseInt(rv.Container)
362
+
363
+ var data = document.getElementById('t_pkcs7data').value;
364
+ rv = skf.SKF_PKCS7SignData(containerhandle, data)
365
+ if (rv.Status != 0) {
366
+ document.getElementById("s_pkcs7").value = rv.Status;
367
+ skf.SKF_CloseApplication(applicationhandle)
368
+ return;
369
+ }
370
+ document.getElementById("t_pkcs7result").value = rv.Signature
371
+ skf.SKF_CloseContainer(containerhandle)
372
+ skf.SKF_CloseApplication(applicationhandle)
373
+ }
374
+ </script>
375
+ </head>
376
+
377
+ <body>
378
+ <p>
379
+ <label>设备列表:</label>
380
+ <select id="t_enumdev" value="1" style="width: 200px;"></select>
381
+ <input type="button" value="枚举设备" onclick="enumDev()" class="btn" />
382
+ <span id="s_enumdev" style="color:red"></span>
383
+ </p>
384
+ <p>
385
+ <label>设备句柄:</label>
386
+ <input type="text" style="width: 800px" id="t_connectdev" />
387
+ <input type="button" value="连接设备" onclick="connectdev()" class="btn" />
388
+ <span id="s_connectdev" style="color:red"></span>
389
+ <input type="button" value="断开设备" onclick="disconnectdev()" class="btn" />
390
+ <span id="s_disconnectdev" style="color:red"></span>
391
+ </p>
392
+ <p>
393
+ <label>设备信息:</label>
394
+ <input type="text" style="width: 800px" id="t_getdevinfo" />
395
+ <input type="text" style="width: 800px" id="t_DevAuthAlgId" />
396
+ <input type="button" value="获得设备信息" onclick="testdev()" class="btn" />
397
+ </p>
398
+ <p>
399
+ <input type="text" style="width: 800px" id="t_authDeverrorcode" />
400
+ <input type="button" value="验证设备" onclick="AuthDev()" class="btn" />
401
+ <span id="s_authDeverrorcode" style="color:black" />
402
+ </p>
403
+ <p>
404
+ <input type="text" style="width: 800px" id="t_appname" />
405
+ <input type="button" value="测试应用代码" onclick="testAppliction()" class="btn" />
406
+ <input type="button" value="测试文件" onclick="testFile()" class="btn" />
407
+ <input type="button" value="测试容器" onclick="testContainer()" class="btn" />
408
+ <input type="button" value="测试rsa" onclick="testrsa()" class="btn" />
409
+ <input type="button" value="测试sm2" onclick="testsm2()" class="btn" />
410
+ <input type="button" value="测试加密" onclick="testEncrypt()" class="btn" />
411
+ <input type="button" value="测试解密" onclick="testDecrypt()" class="btn" />
412
+ <input type="button" value="测试digist" onclick="testDigest()" class="btn" />
413
+ <input type="button" value="测试mac" onclick="testMac()" class="btn" />
414
+ <span id="s_testapplication" style="color:black" />
415
+ </p>
416
+ <p>
417
+ <label>应用列表:</label>
418
+ <select id="ApplicationList" value="1" style="width: 200px;"></select>
419
+ <span id="s_Applicationresult" style="color:black" />
420
+ <input type="button" value="枚举应用" onclick="EnumApp()" class="btn" />
421
+ <br><br>
422
+ <label>容器列表:</label>
423
+ <select id="ContainerList" value="1" style="width: 200px;"></select>
424
+ <span id="s_ContainerList" style="color:black" />
425
+ <input type="button" value="枚举容器" onclick="EnumCon()" class="btn" />
426
+ </p>
427
+ <p>
428
+ <label for="cn">CN:</label>
429
+ <input type="text" id="cn" />
430
+ <label for="o">O:</label>
431
+ <input type="text" id="o" />
432
+ <label for="ou">OU:</label>
433
+ <input type="text" id="ou" />
434
+ <label for="l">L:</label>
435
+ <input type="text" id="l" />
436
+ <label for="st">ST:</label>
437
+ <input type="text" id="st" />
438
+ <label for="c">C:</label>
439
+ <input type="text" id="c" />
440
+ <br><br>
441
+ <label>算法:</label>
442
+ <select id="certAlg" value="1" style="width: 200px;">
443
+ <option value="65536">RSA</option>
444
+ <option value="131328">SM2</option>
445
+ </select>
446
+ <br><br>
447
+ <label>请求文件内容:</label><br><br>
448
+ <input type="text" style="width: 800px" id="t_csr" />
449
+ <span id="s_GenCsr" style="color:black" />
450
+ <input type="button" value="生成证书请求文件" onclick="GenCsr()" class="btn" />
451
+ </p>
452
+ <p>
453
+ <label>待签名数据:</label>
454
+ <input type="text" style="width: 800px" id="t_pkcs7data" />
455
+ <input type="button" value="pkcs7签名" onclick="pkcs7Sign()" class="btn" />
456
+ <br><br>
457
+ <label>签名结果:</label>
458
+ <input type="text" style="width: 800px" id="t_pkcs7result" />
459
+ <span id="s_pkcs7" style="color:black" />
460
+ </p>
461
+ </body>
462
+
463
+ </html>
@@ -0,0 +1,73 @@
1
+ /**
2
+ * 山地CA
3
+ * by 2025-1-2
4
+ */
5
+
6
+ import axios from 'axios'
7
+ import { Message } from 'element-ui'
8
+
9
+ async function getKeyExist() {
10
+ const { data } = await axios.get('http://127.0.0.1:8090/keyExist')
11
+ if (data.code !== 200) {
12
+ Message.warning('Ukey不存在!')
13
+ throw new Error('Ukey不存在!')
14
+ }
15
+ }
16
+
17
+ async function getCertSN() {
18
+ const { data } = await axios.get('http://127.0.0.1:8090/getCertSN')
19
+ if (data.code !== 200) {
20
+ Message.warning('获取证书序列号失败!')
21
+ throw new Error('获取证书序列号失败!')
22
+ }
23
+ return data.msg
24
+ }
25
+
26
+ async function performSign(plain) {
27
+ const { data } = await axios.get(`http://127.0.0.1:8090/sign256?plain=${plain}`)
28
+ if (data.code !== 200) {
29
+ switch (data.msg) {
30
+ case '0x000000A0':
31
+ Message.warning('ukey密码错误')
32
+ throw new Error('ukey密码错误')
33
+ case '0x000000A4':
34
+ Message.warning('ukey被锁,请用管理员工具解锁')
35
+ throw new Error('ukey被锁,请用管理员工具解锁')
36
+ case '0x00005001':
37
+ Message.warning('未输入ukey密码')
38
+ throw new Error('未输入ukey密码')
39
+ default:
40
+ Message.warning('获取ukey异常')
41
+ throw new Error('获取ukey异常')
42
+ }
43
+ }
44
+ return data.msg
45
+ }
46
+
47
+ function getDN() {
48
+ let dn
49
+ let userInfo = JSON.parse(sessionStorage.getItem('userInfo'))
50
+ if (userInfo && userInfo.dn) {
51
+ dn = userInfo.dn
52
+ }
53
+ return dn
54
+ }
55
+
56
+ export async function getSign(plain, dn) {
57
+ if (dn === undefined) {
58
+ dn = getDN()
59
+ }
60
+ if (!dn) {
61
+ Message.error('签名参数DN错误!')
62
+ return false
63
+ }
64
+ let plainText = typeof plain === 'object' ? JSON.stringify(plain) : plain
65
+
66
+ await getKeyExist()
67
+ const certSN = await getCertSN()
68
+ if (certSN !== dn) {
69
+ Message.warning('当前Ukey不匹配!')
70
+ throw new Error('当前Ukey不匹配!')
71
+ }
72
+ return performSign(plainText)
73
+ }