szca_crypto.js 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542
  1. // var url = "ws://192.168.100.170:8080";
  2. let d = new Date();
  3. let url = "wss://127.0.0.1:23939";
  4. let socket;
  5. let arr =[];
  6. let SzcaPki = function() {};
  7. function initWebSocket() {
  8. //判断当前浏览器是否支持WebSocket
  9. if("WebSocket" in window) {
  10. socket = new WebSocket(url);
  11. }else if("MozWebSocket" in window) {
  12. socket = new MozWebSocket(url);
  13. }else {
  14. alert("当前浏览器不支持WebSocket !");
  15. }
  16. //连接成功建立的回调方法
  17. socket.onopen = function() {
  18. // Web Socket 已连接上,使用 send() 方法发送数据
  19. // socket.send('123');
  20. // alert("服务已连接...");
  21. };
  22. //接收到消息的回调方法
  23. socket.onmessage = function(event) {
  24. let data = event.data;
  25. // alert("数据已接收..." + data);
  26. };
  27. //连接关闭的回调方法
  28. socket.onclose = function(event) {
  29. };
  30. //连接发生错误的回调方法
  31. socket.onerror = function(){
  32. };
  33. }
  34. initWebSocket();
  35. // 初始化应用
  36. SzcaPki.prototype.getApplyId = function (callback) { //data为空
  37. // return new Promise((resolve, reject) => {
  38. // try {
  39. // let params = {
  40. // fun: 'createApply',
  41. // arguments: {
  42. // requestID: 'getApplyId'
  43. // }
  44. // }
  45. // socket.send(JSON.stringify(params))
  46. // socket.onmessage = function(event) {
  47. // let res = JSON.parse(event.data)
  48. // if (res.requestID == 'getApplyId') {
  49. // if (res.code == 0) {
  50. // resolve(res.data)
  51. // }
  52. // }
  53. // };
  54. // } catch (err) {
  55. // reject(err);
  56. // }
  57. // })
  58. let requestID = 'getApplyId-' + d.getTime();
  59. let params = {
  60. fun: 'createApply',
  61. arguments: {
  62. requestID: requestID,
  63. clientVer: '1.0'
  64. }
  65. }
  66. arr.push({
  67. requestID: requestID,
  68. callback: callback
  69. })
  70. socket.send(JSON.stringify(params));
  71. getMessage();
  72. // getMessage(requestID,function(data) {
  73. // callback(data)
  74. // })
  75. }
  76. // 关闭应用
  77. SzcaPki.prototype.closeApplyId = function(id,callback){
  78. let requestID = 'closeApplyId-' + d.getTime();
  79. let params = {
  80. fun: 'destroyApply',
  81. arguments: {
  82. requestID: requestID,
  83. applyID:id
  84. }
  85. }
  86. arr.push({
  87. requestID: requestID,
  88. callback: callback
  89. })
  90. socket.send(JSON.stringify(params))
  91. getMessage();
  92. // getMessage(requestID,function(data) {
  93. // callback(data)
  94. // })
  95. }
  96. // 枚举密钥设备/获取keyID
  97. SzcaPki.prototype.keyDevice = function (id,callback){
  98. let requestID = 'keyDevice-' + d.getTime();
  99. let params = {
  100. fun: 'enumKey',
  101. arguments: {
  102. requestID: requestID,
  103. applyID:id
  104. }
  105. }
  106. arr.push({
  107. requestID: requestID,
  108. callback: callback
  109. })
  110. socket.send(JSON.stringify(params))
  111. getMessage();
  112. // getMessage(requestID,function(data) {
  113. // callback(data)
  114. // })
  115. }
  116. // // 获取密钥设备标识
  117. // function getKeyDeviceObj(id,index){ //index为设备索引
  118. // let params = {
  119. // applyID:id,
  120. // equipmentIndex:index
  121. // }
  122. // socket.send(JSON.stringify(params))
  123. // return socket.onmessage = function(event) {
  124. // return event.data;
  125. // };
  126. // }
  127. // 设备监听
  128. SzcaPki.prototype.equipmentMonitor = function (id,flag,callback){ //flag为布尔值
  129. let requestID = 'equipmentMonitor-' + d.getTime();
  130. let params = {
  131. fun: 'registListener',
  132. arguments: {
  133. requestID: requestID,
  134. applyID:id,
  135. enabled: flag
  136. }
  137. }
  138. arr.push({
  139. requestID: requestID,
  140. callback: callback
  141. })
  142. socket.send(JSON.stringify(params))
  143. getMessage();
  144. // getMessage(requestID,function(data) {
  145. // callback(data)
  146. // })
  147. }
  148. // OCSP
  149. function getOCSP(id){
  150. let params = {
  151. applyID:id
  152. }
  153. socket.send(JSON.stringify(params))
  154. return socket.onmessage = function(event) {
  155. return event.data;
  156. };
  157. }
  158. // CRL
  159. function getCRL(id){
  160. let params = {
  161. applyID:id
  162. }
  163. socket.send(JSON.stringify(params))
  164. return socket.onmessage = function(event) {
  165. return event.data;
  166. };
  167. }
  168. // 时间戳
  169. function getTimestamp(id,timeAddress,account,password){
  170. let params = {
  171. applyID:id,
  172. timeAddress: timeAddress,
  173. account: account,
  174. password: password
  175. }
  176. socket.send(JSON.stringify(params))
  177. return socket.onmessage = function(event) {
  178. return event.data;
  179. };
  180. }
  181. // 获取设备名称
  182. SzcaPki.prototype.getEquipmentName = function (deviceIdentification,callback){ //deviceIdentification设备标识
  183. let requestID = 'getEquipmentName-' + d.getTime();
  184. let params = {
  185. fun: 'getKeyName',
  186. arguments: {
  187. requestID: requestID,
  188. keyID: deviceIdentification
  189. }
  190. }
  191. arr.push({
  192. requestID: requestID,
  193. callback: callback
  194. });
  195. socket.send(JSON.stringify(params))
  196. getMessage();
  197. // getMessage(requestID,function(data) {
  198. // callback(data)
  199. // })
  200. }
  201. // 获取设备硬件序列号
  202. SzcaPki.prototype.getEquipmentNumber = function (deviceIdentification,callback){ //deviceIdentification设备标识
  203. let requestID = 'getEquipmentNumber-' + d.getTime();
  204. let params = {
  205. fun: 'getKeySerialNumber',
  206. arguments: {
  207. requestID: requestID,
  208. keyID: deviceIdentification
  209. }
  210. }
  211. arr.push({
  212. requestID: requestID,
  213. callback: callback
  214. });
  215. socket.send(JSON.stringify(params))
  216. getMessage();
  217. // getMessage(requestID,function(data) {
  218. // callback(data)
  219. // })
  220. }
  221. // 设备初始化
  222. SzcaPki.prototype.initEquipment = function (obj,callback){ //deviceIdentification设备标识
  223. let requestID = 'initEquipment-' + d.getTime();
  224. let params = {
  225. fun: 'initToken',
  226. arguments: {
  227. requestID: requestID,
  228. keyID: obj.deviceIdentification,
  229. tokenName: obj.tokenName,
  230. soPIN: obj.soPIN,
  231. userPIN: obj.userPIN,
  232. }
  233. }
  234. arr.push({
  235. requestID: requestID,
  236. callback: callback
  237. })
  238. socket.send(JSON.stringify(params))
  239. getMessage();
  240. }
  241. // 枚举证书个数
  242. SzcaPki.prototype.getCertificateNumber = function (deviceIdentification,callback){ //data为空
  243. let requestID = 'getCertificateNumber-' + d.getTime();
  244. let params = {
  245. fun: 'getCertList',
  246. arguments: {
  247. requestID: requestID,
  248. keyID: deviceIdentification
  249. }
  250. }
  251. arr.push({
  252. requestID: requestID,
  253. callback: callback
  254. });
  255. socket.send(JSON.stringify(params));
  256. getMessage();
  257. }
  258. // // 读取公钥证书
  259. // function getPublickeyCertificate(deviceIdentification,index){ // 设备标识、证书索引
  260. // let params = {
  261. // deviceIdentification: deviceIdentification,
  262. // certificateIndex:index
  263. // }
  264. // socket.send(JSON.stringify(params))
  265. // return socket.onmessage = function(event) {
  266. // return event.data;
  267. // };
  268. // }
  269. // 获取当前算法
  270. SzcaPki.prototype.getCurrentAlgorithm = function (deviceIdentification,callback) { // 设备标识
  271. let requestID = 'getCurrentAlgorithm-' + d.getTime();
  272. let params = {
  273. fun: 'getCurrentAlgorithm',
  274. arguments: {
  275. requestID: requestID,
  276. keyID: deviceIdentification
  277. }
  278. }
  279. arr.push({
  280. requestID: requestID,
  281. callback: callback
  282. });
  283. socket.send(JSON.stringify(params));
  284. getMessage();
  285. }
  286. // 选定算法
  287. SzcaPki.prototype.setCurrentAlgorithm = function (deviceIdentification,algorithmType,callback) { // 设备标识、算法类型
  288. let requestID = 'setCurrentAlgorithm-' + d.getTime();
  289. let params = {
  290. fun: 'setCurrentAlgorithm',
  291. arguments: {
  292. requestID: requestID,
  293. keyID: deviceIdentification,
  294. algoType: Number(algorithmType)
  295. }
  296. }
  297. arr.push({
  298. requestID: requestID,
  299. callback: callback
  300. });
  301. socket.send(JSON.stringify(params));
  302. getMessage();
  303. }
  304. // 选定证书
  305. SzcaPki.prototype.selectedCertificate = function (deviceIdentification,index,callback) { // 设备标识、证书索引/序列号
  306. let requestID = 'setCurrentCert-' + d.getTime();
  307. let params = {
  308. fun: 'setCurrentCert',
  309. arguments: /^\d+$/.test(index) ? {
  310. requestID: requestID,
  311. keyID: deviceIdentification,
  312. certIndex: Number(index)
  313. } : {
  314. requestID: requestID,
  315. keyID: deviceIdentification,
  316. certSN: index
  317. }
  318. }
  319. arr.push({
  320. requestID: requestID,
  321. callback: callback
  322. });
  323. socket.send(JSON.stringify(params));
  324. getMessage();
  325. }
  326. // 枚举的文件
  327. SzcaPki.prototype.enumerationFile = function (deviceIdentification,callback){ // 设备标识
  328. let requestID = 'enumerationFile-' + d.getTime();
  329. let params = {
  330. fun: 'getFileList',
  331. arguments: {
  332. requestID: requestID,
  333. keyID: deviceIdentification,
  334. }
  335. }
  336. arr.push({
  337. requestID: requestID,
  338. callback: callback
  339. });
  340. socket.send(JSON.stringify(params));
  341. getMessage();
  342. }
  343. // 读取文件数据
  344. SzcaPki.prototype.getFileData = function (deviceIdentification,fileName,callback) { // 设备标识、文件名称
  345. let requestID = 'readFile-' + d.getTime();
  346. let params = {
  347. fun: 'readFile',
  348. arguments: {
  349. requestID: requestID,
  350. keyID: deviceIdentification,
  351. fileName: fileName
  352. }
  353. }
  354. arr.push({
  355. requestID: requestID,
  356. callback: callback
  357. });
  358. socket.send(JSON.stringify(params));
  359. getMessage();
  360. }
  361. // 写入文件数据
  362. SzcaPki.prototype.writeFileData = function (deviceIdentification,fileName,fileData,callback) { //设备标识 文件名称、文件数据
  363. let requestID = 'writeFileData-' + d.getTime();
  364. let params = {
  365. fun: 'writeFile',
  366. arguments: {
  367. requestID: requestID,
  368. keyID: deviceIdentification,
  369. fileName: fileName,
  370. fileContent: fileData,
  371. force: true,
  372. fileSize: 666
  373. }
  374. }
  375. arr.push({
  376. requestID: requestID,
  377. callback: callback
  378. });
  379. socket.send(JSON.stringify(params));
  380. getMessage();
  381. }
  382. // 删除文件数据
  383. SzcaPki.prototype.deleteFileData = function (deviceIdentification,fileName,callback) { // 设备标识 文件名称
  384. let requestID = 'deleteFileData-' + d.getTime();
  385. let params = {
  386. fun: 'deleteFile',
  387. arguments: {
  388. requestID: requestID,
  389. keyID: deviceIdentification,
  390. fileName: fileName,
  391. }
  392. }
  393. arr.push({
  394. requestID: requestID,
  395. callback: callback
  396. });
  397. socket.send(JSON.stringify(params));
  398. getMessage();
  399. }
  400. // 数据发送
  401. SzcaPki.prototype.sendData = function (deviceIdentification,fileName,fileData) { // 设备标识、文件名称,文件数据
  402. let params = {
  403. fun: 'sendData',
  404. arguments: {
  405. dataID: '8004AFFF',
  406. // rangFrom: 0,
  407. // rangTo: 2047,
  408. packetIndex: 0,
  409. dataContent: fileData,
  410. abort: false
  411. }
  412. }
  413. socket.send(JSON.stringify(params))
  414. return socket.onmessage = function(event) {
  415. return event.data;
  416. };
  417. }
  418. // 数据接收
  419. SzcaPki.prototype.recvData = function (deviceIdentification,fileName,fileData) { // 设备标识、文件名称,文件数据
  420. let params = {
  421. fun: 'recvData',
  422. arguments: {
  423. recvDataID: "8004AFFF",
  424. // rangFrom: 0,
  425. // rangTo: 2048,
  426. packetIndex: 0,
  427. dataContent: fileData
  428. }
  429. }
  430. socket.send(JSON.stringify(params))
  431. return socket.onmessage = function(event) {
  432. return event.data;
  433. };
  434. }
  435. // 登录
  436. SzcaPki.prototype.login = function (deviceIdentification,pin,callback) { // 设备标识、PIN码
  437. let requestID = 'login-' + d.getTime();
  438. let params = {
  439. fun: 'loginKey',
  440. arguments: {
  441. requestID: requestID,
  442. keyID: deviceIdentification,
  443. PIN: pin
  444. }
  445. }
  446. arr.push({
  447. requestID: requestID,
  448. callback: callback
  449. });
  450. socket.send(JSON.stringify(params));
  451. getMessage();
  452. }
  453. // 登出
  454. SzcaPki.prototype.out = function (deviceIdentification,callback) {
  455. let requestID = 'out-' + d.getTime();
  456. let params = {
  457. fun: 'logoutKey',
  458. arguments: {
  459. requestID: requestID,
  460. keyID: deviceIdentification,
  461. }
  462. }
  463. arr.push({
  464. requestID: requestID,
  465. callback: callback
  466. });
  467. socket.send(JSON.stringify(params));
  468. getMessage();
  469. }
  470. // 查询登录状态
  471. SzcaPki.prototype.queryLoginStatus = function (deviceIdentification,callback) {
  472. let requestID = 'queryLoginStatus-' + d.getTime();
  473. let params = {
  474. fun: 'loginState',
  475. arguments: {
  476. requestID: requestID,
  477. keyID: deviceIdentification,
  478. }
  479. }
  480. arr.push({
  481. requestID: requestID,
  482. callback: callback
  483. });
  484. socket.send(JSON.stringify(params));
  485. getMessage();
  486. }
  487. // 数据解密
  488. SzcaPki.prototype.dataDecryption = function (deviceIdentification,cipherArray,callback) { //cipherArray为密文数组或者文件
  489. let requestID = 'dataDecryption-' + d.getTime();
  490. let params = {
  491. fun: 'dataDecrypt',
  492. arguments: {
  493. requestID: requestID,
  494. keyID: deviceIdentification,
  495. // ciphertextFile: 'd:\\test.txt',
  496. // targetFilePath: 'd:\\out.txt',
  497. ciphertextData: cipherArray,
  498. ciphertextSize: 666
  499. }
  500. }
  501. arr.push({
  502. requestID: requestID,
  503. callback: callback
  504. });
  505. socket.send(JSON.stringify(params));
  506. getMessage();
  507. }
  508. // 文件数据解密
  509. SzcaPki.prototype.dataDecryption1 = function (deviceIdentification,ciphertextFile,targetFilePath,callback) { //cipherArray为密文数组或者文件
  510. let requestID = 'dataDecryption1-' + d.getTime();
  511. let params = {
  512. fun: 'dataDecrypt',
  513. arguments: {
  514. requestID: requestID,
  515. keyID: deviceIdentification,
  516. ciphertextFile: ciphertextFile,
  517. targetFilePath: targetFilePath,
  518. // ciphertextData: cipherArray,
  519. ciphertextSize: 666
  520. }
  521. }
  522. arr.push({
  523. requestID: requestID,
  524. callback: callback
  525. });
  526. socket.send(JSON.stringify(params));
  527. getMessage();
  528. }
  529. // 数字信封解密
  530. SzcaPki.prototype.digitalEnvelopeDecryption = function (deviceIdentification,digitalEnvelope,cipherData,callback) { //设备标识 digitalEnvelope为数字信封,cipherData密文数据
  531. let requestID = 'digitalEnvelopeDecryption-' + d.getTime();
  532. let params = {
  533. fun: 'dataDecEnvelop',
  534. arguments: {
  535. requestID: requestID,
  536. keyID: deviceIdentification,
  537. // filePathEnvelop: 'd:\\test.txt',
  538. // filePathEncrypt: 'd:\\test2.txt',
  539. // targetFilePath: 'd:\\out.txt',
  540. contentEnvelop: digitalEnvelope,
  541. contentEncrypt: cipherData,
  542. encDataSize: 666
  543. }
  544. }
  545. arr.push({
  546. requestID: requestID,
  547. callback: callback
  548. });
  549. socket.send(JSON.stringify(params));
  550. getMessage();
  551. }
  552. // 文件数字信封解密
  553. SzcaPki.prototype.digitalEnvelopeDecryption1 = function (deviceIdentification,filePathEnvelop,filePathEncrypt,targetFilePath,callback) { //设备标识 digitalEnvelope为数字信封,cipherData密文数据
  554. let requestID = 'digitalEnvelopeDecryption1-' + d.getTime();
  555. let params = {
  556. fun: 'dataDecEnvelop',
  557. arguments: {
  558. requestID: requestID,
  559. keyID: deviceIdentification,
  560. filePathEnvelop: filePathEnvelop, // 'd:\\test.txt',
  561. filePathEncrypt: filePathEncrypt,//'d:\\test2.txt',
  562. targetFilePath: targetFilePath,//'d:\\out.txt',
  563. // contentEnvelop: digitalEnvelope,
  564. // contentEncrypt: cipherData,
  565. encDataSize: 666
  566. }
  567. }
  568. arr.push({
  569. requestID: requestID,
  570. callback: callback
  571. });
  572. socket.send(JSON.stringify(params));
  573. getMessage();
  574. }
  575. // 数据签名P1
  576. SzcaPki.prototype.getP1 = function (deviceIdentification,signData,callback) { // 设备标识 signData是待签名数据
  577. let requestID = 'getP1-' + d.getTime();
  578. let params = {
  579. fun: 'signP1',
  580. arguments: {
  581. requestID: requestID,
  582. keyID: deviceIdentification,
  583. plaintextData: signData,
  584. plaintextSize: 666
  585. }
  586. }
  587. arr.push({
  588. requestID: requestID,
  589. callback: callback
  590. });
  591. socket.send(JSON.stringify(params));
  592. getMessage();
  593. }
  594. // 文件数据签名P1
  595. SzcaPki.prototype.getP11 = function (deviceIdentification,plaintextFile,callback) { // 设备标识 signData是待签名数据
  596. let requestID = 'getP11-' + d.getTime();
  597. let params = {
  598. fun: 'signP1',
  599. arguments: {
  600. requestID: requestID,
  601. keyID: deviceIdentification,
  602. plaintextFile: plaintextFile,
  603. plaintextSize: 666
  604. }
  605. }
  606. arr.push({
  607. requestID: requestID,
  608. callback: callback
  609. });
  610. socket.send(JSON.stringify(params));
  611. getMessage();
  612. }
  613. // 数据签名P7
  614. SzcaPki.prototype.getP7 = function (deviceIdentification,signData,detached,callback) { // 设备标识 signData是待签名数据
  615. let requestID = 'getP7-' + d.getTime();
  616. let params = {
  617. fun: 'signP7',
  618. arguments: {
  619. requestID: requestID,
  620. keyID: deviceIdentification,
  621. // plaintextFile: 'd:\\test.txt',
  622. // targetFilePath: 'd:\\out.txt',
  623. plaintextData: signData,
  624. plaintextSize: 666,
  625. detached: detached //true 不附原文
  626. }
  627. }
  628. arr.push({
  629. requestID: requestID,
  630. callback: callback
  631. });
  632. socket.send(JSON.stringify(params));
  633. getMessage();
  634. }
  635. // 数据签名P7
  636. SzcaPki.prototype.getP71 = function (deviceIdentification,plaintextFile,targetFilePath,detached,callback) { // 设备标识 signData是待签名数据
  637. let requestID = 'getP71-' + d.getTime();
  638. let params = {
  639. fun: 'signP7',
  640. arguments: {
  641. requestID: requestID,
  642. keyID: deviceIdentification,
  643. plaintextFile: plaintextFile,//'d:\\test.txt',
  644. targetFilePath: targetFilePath,//'d:\\out.txt',
  645. // plaintextData: signData,
  646. plaintextSize: 666,
  647. detached: detached //true 不附原文
  648. }
  649. }
  650. arr.push({
  651. requestID: requestID,
  652. callback: callback
  653. });
  654. socket.send(JSON.stringify(params));
  655. getMessage();
  656. }
  657. // 生成对称密钥
  658. // encryptType加密类型
  659. // ET_AES_CBC = 0,
  660. // ET_AES_ECB,
  661. // ET_DES_CBC = 10,
  662. // ET_DES_ECB,
  663. // ET_DES_ECB3,
  664. // ET_SM4_CBC = 20,
  665. // ET_SM4_ECB
  666. SzcaPki.prototype.generateSymmetricKey = function (deviceIdentification,encryptType,callback) { // 设备标识、对称加密类型
  667. let requestID = 'generateSymmetricKey-' + d.getTime();
  668. let params = {
  669. fun: 'generateSymmKey',
  670. arguments: {
  671. requestID: requestID,
  672. keyID: deviceIdentification,
  673. symmKeyType: Number(encryptType)
  674. }
  675. }
  676. arr.push({
  677. requestID: requestID,
  678. callback: callback
  679. });
  680. socket.send(JSON.stringify(params));
  681. getMessage();
  682. }
  683. // 生成对称密钥(软证书)
  684. SzcaPki.prototype.generateSymmetricKey2 = function (encryptType,callback) { // 对称加密类型
  685. let requestID = 'generateSymmetricKey2-' + d.getTime();
  686. let params = {
  687. fun: 'generateSymmKey2',
  688. arguments: {
  689. requestID: requestID,
  690. symmKeyType: Number(encryptType)
  691. }
  692. }
  693. arr.push({
  694. requestID: requestID,
  695. callback: callback
  696. });
  697. socket.send(JSON.stringify(params));
  698. getMessage();
  699. }
  700. // 数据求哈希接口
  701. SzcaPki.prototype.getHex = function (algorithmType,originalData,callback) { //algorithmType算法类型,originalData原始数据
  702. let requestID = 'getHex-' + d.getTime();
  703. let params = {
  704. fun: 'Digest',
  705. arguments: {
  706. requestID: requestID,
  707. hashID: Number(algorithmType),
  708. // filePath: "d:\\test.txt",
  709. dataContent: originalData,
  710. dataSize: 666
  711. }
  712. }
  713. arr.push({
  714. requestID: requestID,
  715. callback: callback
  716. });
  717. socket.send(JSON.stringify(params));
  718. getMessage();
  719. }
  720. // 对称加密
  721. SzcaPki.prototype.symmetricalEncryption = function (symmetricalEncryptionType,clearData,secretKey,callback) { //symmetricalEncryptionType对称加密类型,clearData明文数据
  722. let requestID = 'symmetricalEncryption-' + d.getTime();
  723. let params = {
  724. fun: 'symmEncrypt',
  725. arguments: {
  726. requestID: requestID,
  727. encType: Number(symmetricalEncryptionType),
  728. // filePath: "d:\\input.txt",
  729. // targetFilePath: "d:\\out.txt",
  730. dataContent: clearData,
  731. dataSize: 666,
  732. encrypt: true,
  733. symmKey: secretKey
  734. }
  735. }
  736. arr.push({
  737. requestID: requestID,
  738. callback: callback
  739. });
  740. socket.send(JSON.stringify(params));
  741. getMessage();
  742. }
  743. // 文件对称加密
  744. SzcaPki.prototype.symmetricalEncryption1 = function (symmetricalEncryptionType,filePath,targetFilePath,secretKey,callback) { //symmetricalEncryptionType对称加密类型,clearData明文数据
  745. let requestID = 'symmetricalEncryption1-' + d.getTime();
  746. let params = {
  747. fun: 'symmEncrypt',
  748. arguments: {
  749. requestID: requestID,
  750. encType: Number(symmetricalEncryptionType),
  751. filePath: filePath,
  752. targetFilePath: targetFilePath,
  753. // dataContent: clearData,
  754. dataSize: 666,
  755. encrypt: true,
  756. symmKey: secretKey
  757. }
  758. }
  759. arr.push({
  760. requestID: requestID,
  761. callback: callback
  762. });
  763. socket.send(JSON.stringify(params));
  764. getMessage();
  765. }
  766. // 对称解密
  767. SzcaPki.prototype.symmetricDecryption = function (symmetricalEncryptionType,cipherData,secretKey,callback) { //cipherData密文数据
  768. let requestID = 'symmetricDecryption-' + d.getTime();
  769. let params = {
  770. fun: 'symmEncrypt',
  771. arguments: {
  772. requestID: requestID,
  773. encType: Number(symmetricalEncryptionType),
  774. // filePath: "d:\\input.txt",
  775. // targetFilePath: "d:\\out.txt",
  776. dataContent: cipherData,
  777. dataSize: 666,
  778. encrypt: false,
  779. symmKey: secretKey,
  780. }
  781. }
  782. arr.push({
  783. requestID: requestID,
  784. callback: callback
  785. });
  786. socket.send(JSON.stringify(params));
  787. getMessage();
  788. }
  789. // 文件对称解密
  790. SzcaPki.prototype.symmetricDecryption1 = function (symmetricalEncryptionType,filePath,targetFilePath,secretKey,callback) { //cipherData密文数据
  791. let requestID = 'symmetricDecryption1-' + d.getTime();
  792. let params = {
  793. fun: 'symmEncrypt',
  794. arguments: {
  795. requestID: requestID,
  796. encType: Number(symmetricalEncryptionType),
  797. filePath: filePath,
  798. targetFilePath: targetFilePath,
  799. // dataContent: cipherData,
  800. dataSize: 666,
  801. encrypt: false,
  802. symmKey: secretKey,
  803. }
  804. }
  805. arr.push({
  806. requestID: requestID,
  807. callback: callback
  808. });
  809. socket.send(JSON.stringify(params));
  810. getMessage();
  811. }
  812. // 非对称加密
  813. SzcaPki.prototype.asymmetricDecryption = function (encryptionCertificate,clearData,callback) { //encryptionCertificate加密证书 明文数据
  814. let requestID = 'asymmetricDecryption-' + d.getTime();
  815. let params = {
  816. fun: 'dataEncrypt',
  817. arguments: {
  818. requestID: requestID,
  819. certData: encryptionCertificate,
  820. // plaintextFile: "d:\\test.txt",
  821. // targetFilePath: "d:\\out.txt",
  822. plaintextData: clearData,
  823. plaintextSize: 666
  824. }
  825. }
  826. arr.push({
  827. requestID: requestID,
  828. callback: callback
  829. });
  830. socket.send(JSON.stringify(params));
  831. getMessage();
  832. }
  833. // 非对称加密(公钥)
  834. SzcaPki.prototype.dataEncryptOfECKey = function (encryptionCertificate,clearData,callback) { //encryptionCertificate加密证书 明文数据
  835. let requestID = 'dataEncryptOfECKey-' + d.getTime();
  836. let params = {
  837. fun: 'dataEncryptOfECKey',
  838. arguments: {
  839. requestID: requestID,
  840. ECKeyData: encryptionCertificate,
  841. // plaintextFile: "d:\\test.txt",
  842. // targetFilePath: "d:\\out.txt",
  843. plaintextData: clearData,
  844. plaintextSize: 666
  845. }
  846. }
  847. arr.push({
  848. requestID: requestID,
  849. callback: callback
  850. });
  851. socket.send(JSON.stringify(params));
  852. getMessage();
  853. }
  854. // 文件非对称加密
  855. SzcaPki.prototype.asymmetricDecryption1 = function (encryptionCertificate,plaintextFile,targetFilePath,callback) { //encryptionCertificate加密证书 明文数据
  856. let requestID = 'asymmetricDecryption1-' + d.getTime();
  857. let params = {
  858. fun: 'dataEncrypt',
  859. arguments: {
  860. requestID: requestID,
  861. certData: encryptionCertificate,
  862. plaintextFile: plaintextFile, // 输入文件路径
  863. targetFilePath: targetFilePath, // 输出文件路径
  864. plaintextSize: 666
  865. }
  866. }
  867. arr.push({
  868. requestID: requestID,
  869. callback: callback
  870. });
  871. socket.send(JSON.stringify(params));
  872. getMessage();
  873. }
  874. // 数字信封加密
  875. SzcaPki.prototype.digitalEnvelopeEncryption = function (encryptionCertificate,clearData,split,callback) { // 加密证书、明文数据(或文件)
  876. let requestID = 'digitalEnvelopeEncryption-' + d.getTime();
  877. let params = {
  878. fun: 'dataEnvelope',
  879. arguments: {
  880. requestID: requestID,
  881. certData: encryptionCertificate,
  882. // plaintextFile: "d:\\test.txt",
  883. // targetFilePath: "d:\\out.txt",
  884. // targetFilePathEncrypt: "d:\\encrypt.txt",
  885. plaintextData: clearData,
  886. plaintextSize: 666,
  887. split: split
  888. }
  889. }
  890. arr.push({
  891. requestID: requestID,
  892. callback: callback
  893. });
  894. socket.send(JSON.stringify(params));
  895. getMessage();
  896. }
  897. // 数字信封文件加密
  898. SzcaPki.prototype.digitalEnvelopeEncryption1 = function (encryptionCertificate,plaintextFile,targetFilePath,targetFilePathEncrypt,split,callback) { // 加密证书、明文数据(或文件)
  899. let requestID = 'digitalEnvelopeEncryption1-' + d.getTime();
  900. let params = {
  901. fun: 'dataEnvelope',
  902. arguments: {
  903. requestID: requestID,
  904. certData: encryptionCertificate,
  905. plaintextFile: plaintextFile, // 输入文件路径
  906. targetFilePath: targetFilePath, // 输出文件路径
  907. targetFilePathEncrypt: targetFilePathEncrypt,
  908. // plaintextData: clearData,
  909. plaintextSize: 666,
  910. split: split
  911. }
  912. }
  913. arr.push({
  914. requestID: requestID,
  915. callback: callback
  916. });
  917. socket.send(JSON.stringify(params));
  918. getMessage();
  919. }
  920. // 签名验证P1
  921. SzcaPki.prototype.signatureVerifyP1 = function (signatureCertificate,signatureData,signature,callback) { //签名证书、签名原文数据(或文件)、签名值
  922. let requestID = 'signatureVerifyP1-' + d.getTime();
  923. let params = {
  924. fun: 'signedVerifyP1',
  925. arguments: {
  926. requestID: requestID,
  927. certData: signatureCertificate,
  928. signature: signature,
  929. // plaintextFile: "d:\\test.txt",
  930. plaintextData: signatureData,
  931. plaintextSize: 666
  932. }
  933. }
  934. arr.push({
  935. requestID: requestID,
  936. callback: callback
  937. });
  938. socket.send(JSON.stringify(params));
  939. getMessage();
  940. }
  941. // 文件签名验证P1
  942. SzcaPki.prototype.signatureVerifyP11 = function (signatureCertificate,plaintextFile,signature,callback) { //签名证书、签名原文数据(或文件)、签名值
  943. let requestID = 'signatureVerifyP11-' + d.getTime();
  944. let params = {
  945. fun: 'signedVerifyP1',
  946. arguments: {
  947. requestID: requestID,
  948. certData: signatureCertificate,
  949. signature: signature,
  950. plaintextFile: plaintextFile,
  951. // plaintextData: signatureData,
  952. plaintextSize: 666
  953. }
  954. }
  955. arr.push({
  956. requestID: requestID,
  957. callback: callback
  958. });
  959. socket.send(JSON.stringify(params));
  960. getMessage();
  961. }
  962. // 签名验证P7
  963. SzcaPki.prototype.signatureVerifyP7 = function (signatureData,signature,callback) { //signatureData原文
  964. let requestID = 'signatureVerifyP7-' + d.getTime();
  965. let params = {
  966. fun: 'signedVerifyP7',
  967. arguments: {
  968. requestID: requestID,
  969. // signatureFile: "d:\\signed.txt",
  970. // plaintextFile: "d:\\test.txt",
  971. signatureData: signature,
  972. plaintextData: signatureData,
  973. plaintextSize: 666
  974. }
  975. }
  976. arr.push({
  977. requestID: requestID,
  978. callback: callback
  979. });
  980. socket.send(JSON.stringify(params));
  981. getMessage();
  982. }
  983. // 文件签名验证P7
  984. SzcaPki.prototype.signatureVerifyP71 = function (signatureFile,plaintextFile,callback) { //signatureData原文
  985. let requestID = 'signatureVerifyP71-' + d.getTime();
  986. let params = {
  987. fun: 'signedVerifyP7',
  988. arguments: {
  989. requestID: requestID,
  990. signatureFile: signatureFile,
  991. plaintextFile: plaintextFile,
  992. // signatureData: signature,
  993. // plaintextData: signatureData,
  994. plaintextSize: 666
  995. }
  996. }
  997. arr.push({
  998. requestID: requestID,
  999. callback: callback
  1000. });
  1001. socket.send(JSON.stringify(params));
  1002. getMessage();
  1003. }
  1004. // 验证P7签名值(附原文)
  1005. SzcaPki.prototype.serifyP7Signature = function (signatureData,callback) {
  1006. let requestID = 'serifyP7Signature-' + d.getTime();
  1007. let params = {
  1008. fun: 'signatureVerify',
  1009. arguments: {
  1010. requestID: requestID,
  1011. // signatureFile: "d:\\signed.txt",
  1012. signatureData: signatureData,
  1013. signatureSize: 666
  1014. }
  1015. }
  1016. arr.push({
  1017. requestID: requestID,
  1018. callback: callback
  1019. });
  1020. socket.send(JSON.stringify(params));
  1021. getMessage();
  1022. }
  1023. // 文件验证P7签名值(附原文)
  1024. SzcaPki.prototype.serifyP7Signature1 = function (signatureFile,callback) {
  1025. let requestID = 'serifyP7Signature1-' + d.getTime();
  1026. let params = {
  1027. fun: 'signatureVerify',
  1028. arguments: {
  1029. requestID: requestID,
  1030. signatureFile: signatureFile,
  1031. // signatureData: signatureData,
  1032. signatureSize: 666
  1033. }
  1034. }
  1035. arr.push({
  1036. requestID: requestID,
  1037. callback: callback
  1038. });
  1039. socket.send(JSON.stringify(params));
  1040. getMessage();
  1041. }
  1042. // 时间戳签名请求
  1043. SzcaPki.prototype.getTimeSignature = function (hash,signatureData,timeHost,account,password,callback) { //摘要算法、待签名数据、时间戳服务器地址、账号、密码
  1044. let requestID = 'getTimeSignature-' + d.getTime();
  1045. let params = {
  1046. fun: 'timestampSign',
  1047. arguments: {
  1048. requestID: requestID,
  1049. hashID: Number(hash),
  1050. // filePath: "d:\\test.txt",
  1051. dataContent: signatureData,
  1052. dataSize: 666,
  1053. timestampUrl: timeHost,
  1054. timestampUser: account,
  1055. timestampPassword: password
  1056. }
  1057. }
  1058. arr.push({
  1059. requestID: requestID,
  1060. callback: callback
  1061. });
  1062. socket.send(JSON.stringify(params));
  1063. getMessage();
  1064. }
  1065. // // 证书有效性验证
  1066. // function certVerify(signatureData,timeHost,account,password) { //待签名数据、时间戳服务器地址、账号、密码
  1067. // let params = {
  1068. // fun: 'certVerify',
  1069. // arguments: {
  1070. // requestID: 'certVerify',
  1071. // certData: "公钥证书的BASE64",
  1072. // verifyWith: 1,
  1073. // rootCert: "根证书的BASE64",
  1074. // clrData: "证书吊销列表BASE64",
  1075. // ocsp: "http:\\xxxx"
  1076. // }
  1077. // }
  1078. // socket.send(JSON.stringify(params))
  1079. // return socket.onmessage = function(event) {
  1080. // return event.data;
  1081. // };
  1082. // }
  1083. // 用根证书验证证书
  1084. SzcaPki.prototype.verifyRootCertificate = function (certificate,rootCertificate,callback) { //待验证的证书、跟证书
  1085. let requestID = 'verifyRootCertificate-' + d.getTime();
  1086. let params = {
  1087. fun: 'certVerify',
  1088. arguments: {
  1089. requestID: requestID,
  1090. certData: certificate,
  1091. rootCert: rootCertificate,
  1092. }
  1093. }
  1094. arr.push({
  1095. requestID: requestID,
  1096. callback: callback
  1097. });
  1098. socket.send(JSON.stringify(params));
  1099. getMessage();
  1100. }
  1101. // 用CRL验证证书
  1102. SzcaPki.prototype.verifyCertificateCRL = function (certificate,crl,callback) { //待验证的证书、crl文件(或链接)
  1103. let requestID = 'verifyRootCertificate-' + d.getTime();
  1104. let params = {
  1105. fun: 'certVerify',
  1106. arguments: {
  1107. requestID: requestID,
  1108. certData: certificate,
  1109. clrData: crl,
  1110. }
  1111. }
  1112. arr.push({
  1113. requestID: requestID,
  1114. callback: callback
  1115. });
  1116. socket.send(JSON.stringify(params));
  1117. getMessage();
  1118. }
  1119. // 用OCSP验证证书
  1120. SzcaPki.prototype.verifyCertificateOCSP = function (certificate,ocsp,rootCertificate,callback) { //待验证的证书、ocsp地址
  1121. let requestID = 'verifyCertificateOCSP-' + d.getTime();
  1122. let params = {
  1123. fun: 'certVerify',
  1124. arguments: {
  1125. requestID: requestID,
  1126. certData: certificate,
  1127. ocsp: ocsp,
  1128. rootCert: rootCertificate,
  1129. }
  1130. }
  1131. arr.push({
  1132. requestID: requestID,
  1133. callback: callback
  1134. });
  1135. socket.send(JSON.stringify(params));
  1136. getMessage();
  1137. }
  1138. // 加载证书并解析
  1139. SzcaPki.prototype.analyticalCertificate = function (publicKeyCertificateDER,oid,callback) { //公钥证书DER或公钥证书路径
  1140. let requestID = 'verifyCertificateOCSP-' + d.getTime();
  1141. let params = {
  1142. fun: 'analyseCert',
  1143. arguments: {
  1144. requestID: requestID,
  1145. certData: publicKeyCertificateDER,
  1146. extends: oid,
  1147. }
  1148. }
  1149. arr.push({
  1150. requestID: requestID,
  1151. callback: callback
  1152. });
  1153. socket.send(JSON.stringify(params));
  1154. getMessage();
  1155. }
  1156. // 基础属性
  1157. SzcaPki.prototype.getBasicAttribute = function (certificateId) { //证书ID
  1158. let params = {
  1159. certificateId: certificateId
  1160. }
  1161. socket.send(JSON.stringify(params))
  1162. return socket.onmessage = function(event) {
  1163. return event.data;
  1164. };
  1165. }
  1166. // 扩展属性
  1167. SzcaPki.prototype.getExtendedAttributes = function (certificateId,extendedAttributesOid) { //证书ID、扩展属性oid
  1168. let params = {
  1169. certificateId: certificateId,
  1170. extendedAttributesOid: extendedAttributesOid
  1171. }
  1172. socket.send(JSON.stringify(params))
  1173. return socket.onmessage = function(event) {
  1174. return event.data;
  1175. };
  1176. }
  1177. // 生成随机数
  1178. SzcaPki.prototype.generateRandom = function (deviceIdentification,len,callback) { // 设备标识 随机数长度
  1179. let requestID = 'generateRandom-' + d.getTime();
  1180. let params = {
  1181. fun: 'generateRandom',
  1182. arguments: {
  1183. requestID: requestID,
  1184. keyID: deviceIdentification,
  1185. len: Number(len),
  1186. }
  1187. }
  1188. arr.push({
  1189. requestID: requestID,
  1190. callback: callback
  1191. });
  1192. socket.send(JSON.stringify(params));
  1193. getMessage();
  1194. }
  1195. // 介质初始化
  1196. SzcaPki.prototype.initMedium = function (deviceIdentification,fileName,adminPin,userPin,callback) { //设备标识、名称、管理员PIN、用户PIN
  1197. let requestID = 'initMedium-' + d.getTime();
  1198. let params = {
  1199. fun: 'initMedium',
  1200. arguments: {
  1201. requestID: requestID,
  1202. keyID: deviceIdentification,
  1203. tokenName: fileName,
  1204. soPIN: adminPin,
  1205. userPIN: userPin
  1206. }
  1207. }
  1208. arr.push({
  1209. requestID: requestID,
  1210. callback: callback
  1211. });
  1212. socket.send(JSON.stringify(params));
  1213. getMessage();
  1214. }
  1215. // 介质解锁
  1216. SzcaPki.prototype.mediumUnlock = function (deviceIdentification,adminPin,newUserPin) { // 设备标识、管理员PIN、新的用户PIN
  1217. let params = {
  1218. deviceIdentification: deviceIdentification,
  1219. adminPin: adminPin,
  1220. newUserPin: newUserPin
  1221. }
  1222. socket.send(JSON.stringify(params))
  1223. return socket.onmessage = function(event) {
  1224. return event.data;
  1225. };
  1226. }
  1227. // 修改管理员PIN
  1228. SzcaPki.prototype.modificationAdminPin = function (deviceIdentification,oldAdminPin,newAdminPin,callback) { // 设备标识、旧管理员PIN、新的管理员PIN
  1229. let requestID = 'modificationAdminPin-' + d.getTime();
  1230. let params = {
  1231. fun: 'modifyOSPIN',
  1232. arguments: {
  1233. requestID: requestID,
  1234. keyID: deviceIdentification,
  1235. soPIN: oldAdminPin,
  1236. newSOPIN: newAdminPin
  1237. }
  1238. }
  1239. arr.push({
  1240. requestID: requestID,
  1241. callback: callback
  1242. });
  1243. socket.send(JSON.stringify(params));
  1244. getMessage();
  1245. }
  1246. // 修改用户PIN
  1247. SzcaPki.prototype.modificationUserPin = function (deviceIdentification,oldUserPin,newUserPin,callback) { // 设备标识、旧用户PIN、新的用户PIN
  1248. let requestID = 'modificationUserPin-' + d.getTime();
  1249. let params = {
  1250. fun: 'modifyUserPIN',
  1251. arguments: {
  1252. requestID: requestID,
  1253. keyID: deviceIdentification,
  1254. userPIN: oldUserPin,
  1255. newUserPIN: newUserPin
  1256. }
  1257. }
  1258. arr.push({
  1259. requestID: requestID,
  1260. callback: callback
  1261. });
  1262. socket.send(JSON.stringify(params));
  1263. getMessage();
  1264. }
  1265. // 重置用户PIN
  1266. SzcaPki.prototype.resetUserPIN = function (deviceIdentification,adminPin,userPin,callback) { // 设备标识、管理员PIN、用户PIN
  1267. let requestID = 'modificationUserPin-' + d.getTime();
  1268. let params = {
  1269. fun: 'resetUserPIN',
  1270. arguments: {
  1271. requestID: requestID,
  1272. keyID: deviceIdentification,
  1273. soPIN: adminPin,
  1274. userPIN: userPin
  1275. }
  1276. }
  1277. arr.push({
  1278. requestID: requestID,
  1279. callback: callback
  1280. });
  1281. socket.send(JSON.stringify(params));
  1282. getMessage();
  1283. }
  1284. // 修改用户PIN
  1285. SzcaPki.prototype.modifyUserPin = function (deviceIdentification, adminPin, userPin, callback) { // 设备标识、管理员PIN、用户PIN
  1286. let requestID = 'modifyUserPin-' + d.getTime();
  1287. let params = {
  1288. fun: 'modifyUserPin',
  1289. arguments: {
  1290. requestID: requestID,
  1291. keyID: deviceIdentification,
  1292. oldPIN: adminPin,
  1293. newPIN: userPin
  1294. }
  1295. }
  1296. arr.push({
  1297. requestID: requestID,
  1298. callback: callback
  1299. });
  1300. socket.send(JSON.stringify(params));
  1301. getMessage();
  1302. }
  1303. // 生成P10
  1304. SzcaPki.prototype.getP10 = function (obj,callback) { // 设备标识、管理员PIN、用户PIN
  1305. let requestID = 'generatePkcs10-' + d.getTime();
  1306. let params = {
  1307. fun: 'generatePkcs10',
  1308. arguments: {
  1309. requestID: requestID,
  1310. keyID: obj.keyID,
  1311. containername: obj.contentName,
  1312. subject: obj.subject,
  1313. algoType: Number(obj.algoType),
  1314. keyType: Number(obj.keyType),
  1315. keyLength: Number(obj.keyLength),
  1316. }
  1317. }
  1318. arr.push({
  1319. requestID: requestID,
  1320. callback: callback
  1321. });
  1322. socket.send(JSON.stringify(params));
  1323. getMessage();
  1324. }
  1325. // 安装证书
  1326. SzcaPki.prototype.installCertificate = function (obj,callback) { // 设备标识、管理员PIN、用户PIN
  1327. let requestID = 'installCerts-' + d.getTime();
  1328. let params = {
  1329. fun: 'installCerts',
  1330. arguments: {
  1331. requestID: requestID,
  1332. keyID: obj.keyID,
  1333. containername: obj.contentName,
  1334. subject: obj.subject,
  1335. algoType: Number(obj.algoType),
  1336. signP7b: obj.signP7b,
  1337. signSN: obj.signSN,
  1338. encP7b: obj.encP7b,
  1339. encSN: obj.encSN,
  1340. encSessKey: obj.encSessKey,
  1341. encPriKey: obj.encPriKey,
  1342. symmAlgoType: Number(obj.symmAlgoType),
  1343. }
  1344. }
  1345. arr.push({
  1346. requestID: requestID,
  1347. callback: callback
  1348. });
  1349. socket.send(JSON.stringify(params));
  1350. getMessage();
  1351. }
  1352. // 删除证书所有
  1353. SzcaPki.prototype.deleteCerts = function (deviceIdentification,callback) { // 设备标识、管理员PIN、用户PIN
  1354. let requestID = 'deleteCerts-' + d.getTime();
  1355. let params = {
  1356. fun: 'deleteCerts',
  1357. arguments: {
  1358. requestID: requestID,
  1359. keyID: deviceIdentification,
  1360. }
  1361. }
  1362. arr.push({
  1363. requestID: requestID,
  1364. callback: callback
  1365. });
  1366. socket.send(JSON.stringify(params));
  1367. getMessage();
  1368. }
  1369. // 删除证书单个
  1370. SzcaPki.prototype.deleteCert = function (deviceIdentification,certNumber,callback) { // 设备标识、管理员PIN、用户PIN
  1371. let requestID = 'deleteCert-' + d.getTime();
  1372. let params = {
  1373. fun: 'deleteCert',
  1374. arguments: {
  1375. requestID: requestID,
  1376. keyID: deviceIdentification,
  1377. certsn: certNumber,
  1378. }
  1379. }
  1380. arr.push({
  1381. requestID: requestID,
  1382. callback: callback
  1383. });
  1384. socket.send(JSON.stringify(params));
  1385. getMessage();
  1386. }
  1387. // 删除空容器
  1388. SzcaPki.prototype.DeleteEmptyContainers = function (deviceIdentification,callback) { // 设备标识、管理员PIN、用户PIN
  1389. let requestID = 'deleteContainer-' + d.getTime();
  1390. let params = {
  1391. fun: 'deleteContainer',
  1392. arguments: {
  1393. requestID: requestID,
  1394. keyID: deviceIdentification,
  1395. }
  1396. }
  1397. arr.push({
  1398. requestID: requestID,
  1399. callback: callback
  1400. });
  1401. socket.send(JSON.stringify(params));
  1402. getMessage();
  1403. }
  1404. // 获取Ukey印章
  1405. SzcaPki.prototype.readSeals = function (deviceIdentification, callback) { // 设备标识、管理员PIN、用户PIN
  1406. let requestID = 'readSeals-' + d.getTime();
  1407. let params = {
  1408. fun: 'readSeals',
  1409. arguments: {
  1410. requestID: requestID,
  1411. keyID: deviceIdentification,
  1412. }
  1413. }
  1414. arr.push({
  1415. requestID: requestID,
  1416. callback: callback
  1417. });
  1418. socket.send(JSON.stringify(params));
  1419. getMessage();
  1420. }
  1421. // 处理onmessage接收信息
  1422. function getMessage() {
  1423. socket.onmessage = function(event) {
  1424. if (event) {
  1425. let res = JSON.parse(event.data)
  1426. if (res.fun == 'tokenEvent') {
  1427. console.log(res);
  1428. // 在html页面显示ukey监听信息
  1429. if (document.getElementById('showMessage')) {
  1430. document.getElementById('showMessage').textContent = JSON.stringify(res);
  1431. document.getElementById('text2').value = JSON.stringify(res);
  1432. return
  1433. }
  1434. };
  1435. if (res.code == 0) {
  1436. arr.map( function(e) {
  1437. if (e.requestID == res.requestID) {
  1438. e.callback(res);
  1439. removeArray(arr,e);
  1440. }
  1441. });
  1442. } else {
  1443. // alert(res.msg);
  1444. arr.map( function(e) {
  1445. if (e.requestID == res.requestID) {
  1446. e.callback(res);
  1447. removeArray(arr,e);
  1448. }
  1449. });
  1450. }
  1451. }
  1452. };
  1453. }
  1454. getMessage();
  1455. //根据数组的下标,删除该下标的元素对象
  1456. function removeArray(_arr, _obj) {
  1457. var length = _arr.length;
  1458. for (var i = 0; i < length; i++) {
  1459. if (_arr[i] == _obj) {
  1460. _arr.splice(i, 1); //删除下标为i的元素
  1461. return _arr;
  1462. }
  1463. }
  1464. }