/* globals var */ var $_$WebSocketConnectState = false; var $_$WebSign_WebSocketObj = null; // WebSocket class Object var $_$WebSign_CurrentObj = null; // Current use class Object var $_$SGD_SM3_RSA = 0x00010001; //基于SM3算法和RSA算法的签名 var $_$SGD_SHA1_RSA = 0x00010002; //基于SHA1算法和RSA算法的签名 var $_$SGD_SHA256_RSA = 0x00010004; //基于SHA256算法和RSA算法的签名 var $_$SGD_SM3_SM2 = 0x00020101; //基于SM2算法和SM3算法的签名 /** * 设置证书信任链 */ function ESeaL_SetUserConfig() { var p7bs_len = $_$P7BS.length; var certs_len = $_$CERTS.length; if(p7bs_len <= 0 || certs_len <= 0) { return; } for(i = 0; i < p7bs_len; i++) { SetUserConfig_BJCAWebSign(6, $_$P7BS[i], function (strRes) { if (!strRes.retVal) { return; } }, null); } for(i = 0; i < certs_len; i++) { SetUserConfig_BJCAWebSign(4, $_$CERTS[i], function (strRes) { if (!strRes.retVal) { return; } }, null); } } /** * 成功回调函数 */ function ESeaL_OKRtnFunc(retVal, cb) { if (typeof cb == "function") { var retObj = { retVal: retVal }; cb(retObj); } return retVal; } /** * 失败回调函数 */ function ESeaL_ErrorRtnFunc(retVal, cb) { if (typeof cb == "function") { var retObj = { retVal: retVal }; cb(retObj); } return retVal; } /** * 设置在线签章地址, * @param iType 0:离线,1:国密在线,2:国办在线验证印章状态 * @param url 服务器url */ function ESeaL_SetSignTypeAndURL(iType, url, cb) { var ctx = null; if ($_$WebSign_WebSocketObj != null && $_$WebSign_WebSocketObj.SetSignTypeAndURL != undefined) { return $_$WebSign_WebSocketObj.SetSignTypeAndURL(iType, url, cb, ctx); } else { return ESeaL_ErrorRtnFunc($_$METHOD_NOT_EXIST, cb); } } /** * 获取在线用户列表, * @param certid 用户certid */ function $GetSealList(certid, cb) { var ctx = null; if ($_$WebSign_WebSocketObj != null && $_$WebSign_WebSocketObj.GetSealList != undefined) { return $_$WebSign_WebSocketObj.GetSealList(certid, cb, ctx); } else { return ESeaL_ErrorRtnFunc($_$METHOD_NOT_EXIST, cb); } } /** * 获取在线用户列表, * @param certid 用户certid */ function ESeaL_GetUserSealList(certid, cb) { $GetSealList(certid, function(ret){ if(ret.retVal == "") { return ESeaL_ErrorRtnFunc("", cb); } //获取的格式为sealName1||sealNum1&&&sealName2||sealNum2&&& var strSealList = ret.retVal; var sealListArray = []; while (true) { var i = strSealList.indexOf("&&&"); if (i <= 0) { break; } var strOneSeal = strSealList.substring(0, i); sealListArray.push(strOneSeal); var len = strSealList.length; strSealList = strSealList.substring(i + 3, len); } return ESeaL_OKRtnFunc(sealListArray, cb); }); } /** * 获取印章图片 * @param certid 用户certid * @param strOneSeal, 选中印章信息,格式:sealName||sealNum */ function ESeaL_GetStampPic(certid, strOneSeal, cb) { var ctx = null; var strName = strOneSeal.substring(0, strOneSeal.indexOf("||")); var strSealNum = strOneSeal.substring(strOneSeal.indexOf("||") + 2, strOneSeal.length); if($_$WebSign_WebSocketObj != null && $_$WebSign_WebSocketObj.ESeaL_GetStampPicForAll != undefined) { return $_$WebSign_WebSocketObj.ESeaL_GetStampPicForAll(certid, strSealNum, cb, ctx); } else { return ESeaL_ErrorRtnFunc($_$METHOD_NOT_EXIST, cb); } } /** * 签章 * @param strCertID:CertID * @param org_data 签名原文 */ function ESeaL_Sign(strCertID, org_data, cb) { // 签章 var ctx = null; if($_$WebSign_WebSocketObj != null && $_$WebSign_WebSocketObj.ESeaL_Sign != undefined) { return $_$WebSign_WebSocketObj.ESeaL_Sign(strCertID, org_data, cb, ctx); } else { return ESeaL_ErrorRtnFunc($_$METHOD_NOT_EXIST, cb); } } /** * 批量签章 * @param strCertID:CertID * @param org_data 签名原文 */ function ESeaL_BatchSign(strCertID, org_data, cb) { // 签章 var ctx = null; if($_$WebSign_WebSocketObj != null && $_$WebSign_WebSocketObj.ESeaL_BatchSign != undefined) { return $_$WebSign_WebSocketObj.ESeaL_BatchSign(strCertID, org_data, cb, ctx); } else { return ESeaL_ErrorRtnFunc($_$METHOD_NOT_EXIST, cb); } } /** * 签章 * @param orgData 签名原文 * @param signdata 签名值 */ function ESeal_Verify(orgdata, signdata, cb) { if ($_$WebSign_CurrentObj != null && $_$WebSign_CurrentObj.Verify != undefined) { return $_$WebSign_CurrentObj.Verify(orgdata, signdata, cb); } else { return ESeaL_ErrorRtnFunc($_$METHOD_NOT_EXIST, cb); } } /** * 签章 * @param bVerifyResult 验证结果 * @param signdata 签名值 */ function ESeal_GetStampPicAfterVerified(bVerifyResult, signdata, cb) { if ($_$WebSign_CurrentObj != null && $_$WebSign_CurrentObj.GetStampPicAfterVerified != undefined) { return $_$WebSign_CurrentObj.GetStampPicAfterVerified(bVerifyResult, signdata, cb); } else { return ESeaL_ErrorRtnFunc($_$METHOD_NOT_EXIST, cb); } } /** * 撤章 * @param certID:用户CertID * @param signature:签名值 */ function ESeaL_RemoveSeal(certID, signature, cb) { //判断是否登录 SOF_IsLogin_BJCAWebSign(certID, function (ret) { if (!ret.retVal) { if (typeof cb == 'function') { var retObj = {retVal:false, isLogin:false}; cb(retObj); } return; } if ($_$WebSign_WebSocketObj != null && $_$WebSign_WebSocketObj.ESeaL_CheckRemoveRight != undefined) { //1、获取待签名数据 $_$WebSign_WebSocketObj.ESeaL_CheckRemoveRight(certID, signature, function (ret) { if (ret.retVal == "true") { if (typeof cb == 'function') { var retObj = {retVal:ret.retVal, isLogin:true}; cb(retObj); } return; } else { if (typeof cb == 'function') { var retObj = {retVal:ret.retVal, isLogin:true}; cb(retObj); } return; } }); } else { return ESeaL_ErrorRtnFunc($_$METHOD_NOT_EXIST, cb); } }, null); } /** * 显示证书信息 * @param signature:签名值 */ function Eseal_ShowUserCerInfo(signature, cb) { if ($_$WebSign_WebSocketObj != null && $_$WebSign_WebSocketObj.ESeaL_ShowUserCerInfo != undefined) { return $_$WebSign_WebSocketObj.ESeaL_ShowUserCerInfo(signature, cb); } else { return ESeaL_ErrorRtnFunc($_$METHOD_NOT_EXIST, cb); } } /** * 显示签章时间 * @param signature:签名值 */ function Eseal_ShowSignTime(signature, cb) { if ($_$WebSign_CurrentObj != null && $_$WebSign_CurrentObj.ShowSignTimeEx != undefined) { return $_$WebSign_CurrentObj.ShowSignTimeEx(signature, cb); } else { return ESeaL_ErrorRtnFunc($_$METHOD_NOT_EXIST, cb); } } /** * 关于 */ function ESeal_GetVersion(cb) { if ($_$WebSign_CurrentObj != null && $_$WebSign_CurrentObj.GetVersion != undefined) { return $_$WebSign_CurrentObj.GetVersion(cb); } else { return ESeaL_ErrorRtnFunc($_$METHOD_NOT_EXIST, cb); } } /** * 获取最近一次错误信息 */ function ESeal_GetLastErrJS(cb) { var ctx = null; if ($_$WebSign_CurrentObj != null && $_$WebSign_CurrentObj.GetLastErr != undefined) { return $_$WebSign_CurrentObj.GetLastErr(cb, ctx); } else { return ESeaL_ErrorRtnFunc($_$METHOD_NOT_EXIST, cb); } } /** * 获取签章算法 */ function ESeal_GetSignMethod(signdata, cb) { if ($_$WebSign_CurrentObj != null && $_$WebSign_CurrentObj.ESeaL_GetSignMethod != undefined) { return $_$WebSign_CurrentObj.ESeaL_GetSignMethod(signdata, cb); } else { return ESeaL_ErrorRtnFunc($_$METHOD_NOT_EXIST, cb); } } /** * 创建网页签章webSocket对象 */ //webSocket client class function CreateWebSocketObject_WebSign() { var o = new Object(); o.ws_obj = null; o.ws_heartbeat_id = 0; o.ws_queue_id = 0; // call_cmd_id o.ws_queue_list = {}; // call_cmd_id callback queue o.ws_queue_ctx = {}; o.xtx_version = ""; o.load_websocket = function () { //说明,是否用TLS/SSL,根据url给的ws/wss及端口号来定,端口号固定(21051/21061) var ws_url; ws_url = "ws://127.0.0.1:21051/websign/"; //非TLS/SSL //ws_url = "wss://127.0.0.1:21061/xtxapp/"; try { o.ws_obj = new WebSocket(ws_url); } catch (e) { // console.log(e); return; } // o.ws_queue_list["onUsbkeyChange"] = $OnUsbKeyChange; o.ws_obj.onopen = function (evt) { clearInterval(o.ws_heartbeat_id); // o.callMethod("SOF_GetVersion", function(str){o.xtx_version = str.retVal;}); o.ws_heartbeat_id = setInterval(function () { o.callMethod("ESeaL_GetGetVersion", function(str){}); }, 10 * 1000); // GetUserList($pushAllDropListBox); $_$WebSocketConnectState = true; }; o.ws_obj.onclose = function (evt) {}; o.ws_obj.onmessage = function (evt) { var res = ""; if (evt.data != "") { res = JSON.parse(evt.data); } if (res['set-cookie']) { document.cookie = res['set-cookie']; } //登录失败 // if(res['loginError']) // { // alert(res['loginError']); // } var call_cmd_id = res['call_cmd_id']; if (!call_cmd_id) { return; } var execFunc = o.ws_queue_list[call_cmd_id]; if (typeof (execFunc) != 'function') { return; } var ctx = o.ws_queue_ctx[res['call_cmd_id']]; ctx = ctx || { returnType: "string" }; var ret; if (ctx.returnType == "bool") { ret = res.retVal == "true" ? true : false; } else if (ctx.returnType == "number") { ret = Number(res.retVal); } else { ret = res.retVal; } var retObj = { retVal: ret, ctx: ctx }; execFunc(retObj); if (res['call_cmd_id'] != "onUsbkeyChange") { delete o.ws_queue_list[res['call_cmd_id']]; } delete o.ws_queue_ctx[res['call_cmd_id']]; }; o.ws_obj.onerror = function (evt) { o.load_websocket(); }; return true; }; o.sendMessage = function (sendMsg) { if (o.ws_obj.readyState == WebSocket.OPEN) { o.ws_obj.send(JSON.stringify(sendMsg)); } else { console.log("Can't connect to WebSocket server!"); } }; o.callMethod = function (strMethodName, cb, ctx, returnType, argsArray) { o.ws_queue_id++; if (typeof (cb) == 'function') { o.ws_queue_list['i_' + o.ws_queue_id] = cb; ctx = ctx || {}; ctx.returnType = returnType; o.ws_queue_ctx['i_' + o.ws_queue_id] = ctx; } var sendArray = {}; sendArray['cookie'] = document.cookie; sendArray['websign_func_name'] = strMethodName; //get sessionid sendArray['call_cmd_id'] = 'i_' + o.ws_queue_id; if (o.xtx_version >= "2.16") { sendArray['URL'] = window.location.href; } if (arguments.length > 4) { for (var i = 1; i <= argsArray.length; i++) { var strParam = "param_" + i; sendArray[strParam] = argsArray[i - 1]; } sendArray["param"] = argsArray; } if (o.ws_obj.readyState == WebSocket.OPEN) { o.sendMessage(sendArray) } else if (o.ws_obj.readyState != WebSocket.CONNECTING) { o.load_websocket(); setTimeout(o.sendMessage(sendArray), 500); } }; o.Verify = function (plainstring, signDataString, cb, ctx) { var paramArray = [plainstring, signDataString]; ctx = null; returnType = null; o.callMethod('ESeaL_Verify', cb, ctx, returnType, paramArray); }; o.ESeaL_ShowUserCerInfo = function (signDataString, cb, ctx) { var paramArray = [signDataString]; ctx = null; returnType = null; o.callMethod('ESeaL_ShowUserCerInfo', cb, ctx, returnType, paramArray); }; o.ShowSignTimeEx = function (signDataString, cb, ctx) { var paramArray = [signDataString]; ctx = null; returnType = null; o.callMethod('ESeaL_ShowSignTime', cb, ctx, returnType, paramArray); }; o.GetVersion = function (cb, ctx) { var paramArray = ""; ctx = null; returnType = null; o.callMethod('ESeaL_GetGetVersion', cb, ctx, returnType, paramArray); }; o.ESeaL_CheckRemoveRight = function (certid, signDataString, cb, ctx) { var paramArray = [certid, signDataString]; ctx = null; returnType = null; o.callMethod('ESeaL_CheckRemoveRight', cb, ctx, returnType, paramArray); }; o.GetStampPicAfterVerified = function (bVerify, signature, cb, ctx) { var paramArray = [bVerify, signature]; ctx = null; returnType = null; o.callMethod('ESeaL_GetStampPicAfterVerified', cb, ctx, returnType, paramArray); }; o.GetLastErr = function (cb, ctx) { var paramArray = ""; ctx = null; returnType = null; o.callMethod('ESeaL_GetLastErr', cb, ctx, returnType, paramArray); }; o.SetSignTypeAndURL = function (iSignType, url, cb, ctx) { var paramArray = [iSignType, url]; ctx = null; returnType = null; o.callMethod('ESeaL_SetSignTypeAndURL', cb, ctx, returnType, paramArray); }; o.GetSealList = function (certid, cb, ctx) { var paramArray = [certid]; ctx = null; returnType = null; o.callMethod('ESeaL_GetSealList', cb, ctx, returnType, paramArray); }; o.ESeaL_GetStampPicForAll = function (certid, sealNum, cb, ctx) { var paramArray = [certid, sealNum]; ctx = null; returnType = null; o.callMethod('ESeaL_GetStampPicForAll', cb, ctx, returnType, paramArray); }; o.ESeaL_Sign = function (strCertID, plainstring, cb, ctx) { var paramArray = [strCertID, plainstring]; ctx = null; returnType = null; o.callMethod('ESeaL_Sign', cb, ctx, returnType, paramArray); }; o.ESeaL_BatchSign = function (strCertID, plainstring, cb, ctx) { var paramArray = [strCertID, plainstring]; ctx = null; returnType = null; o.callMethod('ESeaL_BatchSign', cb, ctx, returnType, paramArray); }; o.ESeaL_GetSignMethod = function (signDataString, cb, ctx) { var paramArray = [signDataString]; ctx = null; returnType = null; o.callMethod('ESeaL_GetSignMethod', cb, ctx, returnType, paramArray); }; if (!o.load_websocket()) { return null; } return o; } (function $onLoadFunc() { $_$WebSign_WebSocketObj = CreateWebSocketObject_WebSign(); if ($_$WebSign_WebSocketObj != null) { $_$WebSign_CurrentObj = $_$WebSign_WebSocketObj; return; } $_$WebSign_CurrentObj = null; //alert("初始化签章核心服务出错!"); return; })();