ttk-app-core
Version:
enterprise develop framework
1,357 lines (1,152 loc) • 39.2 kB
JavaScript
// 日期类型格式化方法的定义
Date.prototype.TTKFormat = function (fmt) { //author: meizz
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt))
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt))
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
/*--------------------------------------------------------------------------
*
* BJCA Adaptive Javascript, Version 2.2
* This script is compatible with XTXAppCOM BJCASecCOMV2 BJCASecCOM
* Load COM order by XTXAppCOM BJCASecCOMV2 BJCASecCOM
* Author:BJCA-zys
*--------------------------------------------------------------------------*/
/* globals var */
var $_$softCertListID = ""; // Soft CertListID, Set by SetUserCertList
var $_$hardCertListID = ""; // USBKeyCertListID, Set by SetUserCertList
var $_$allCertListID = ""; // All CertListID, Set by SetUserCertList
var $_$loginCertID = ""; // logined CertID, Set by SetAutoLogoutParameter
var $_$logoutFunc = null; // logout Function, Set by SetAutoLogoutParameter
var $_$onUsbKeyChangeCallBackFunc = null; //custom onUsbkeyChange callback function
var $_$onUsbKeyChangeParentCallBackFunc = null; //custom onUsbkeyChange callback function
var $_$XTXAppObj = null; // XTXAppCOM class Object
var $_$SecXV2Obj = null; // BJCASecCOMV2 class Object
var $_$SecXObj = null; // BJCASecCOM class Object
var $_$CurrentObj = null; // Current use class Object
// const var
var CERT_TYPE_HARD = 1;
var CERT_TYPE_SOFT = 2;
var CERT_TYPE_ALL = 3;
// const var
var CERT_OID_VERSION = 1; // 证书版本 返回V1 V2 V3
var CERT_OID_SERIAL = 2; // 证书序列号
var CERT_OID_SIGN_METHOD = 3; // 获取证书类型 返回 RSA或SM2
var CERT_OID_ISSUER_C = 4; // 证书发放者国家名 多个之间用&&&隔开
var CERT_OID_ISSUER_O = 5; // 证书发放者组织名
var CERT_OID_ISSUER_OU = 6; // 证书发放者部门名
var CERT_OID_ISSUER_ST = 7; // 证书发放者省州名
var CERT_OID_ISSUER_CN = 8; // 证书发放者通用名
var CERT_OID_ISSUER_L = 9; // 证书发放者城市名
var CERT_OID_ISSUER_E = 10; // 证书发放者EMAIL地址
var CERT_OID_NOT_BEFORE = 11; // 证书有效期起始 格式YYYYMMDDHHMMSS
var CERT_OID_NOT_AFTER = 12; // 证书有效期截止 格式YYYYMMDDHHMMSS
var CERT_OID_SUBJECT_C = 13; // 用户国家名
var CERT_OID_SUBJECT_O = 14; // 用户组织名
var CERT_OID_SUBJECT_OU = 15; // 用户部门名
var CERT_OID_SUBJECT_ST = 16; // 用户省州名
var CERT_OID_SUBJECT_CN = 17; // 用户通用名
var CERT_OID_SUBJECT_L = 18; // 用户城市名
var CERT_OID_SUBJECT_E = 19; // 用户EMAIL地址
var CERT_OID_PUBKEY = 20; // 证书公钥
var CERT_OID_SUBJECT_DN = 33; // 用户DN
var CERT_OID_ISSUER_DN = 34; // 颁发者DN
var CERT_OID_UNIQUEID = 35; // 唯一实体ID
//内部函数 全部以$开头
//check browser, ie: return true, other return false
function $checkBrowserISIE() {
if (!!window.ActiveXObject || 'ActiveXObject' in window) {
return true;
} else {
return false;
}
//return navigator.userAgent.toLowerCase().search(/(msie\s|trident.*rv:)([\w.]+)/)!= -1;
}
// 填充一个证书列表框
function $oneFillCert(strUserList, certType, strListID) {
var objListID = eval(strListID);
if (objListID == undefined) {
return;
}
var i, n = objListID.length;
for (i = 0; i < n; i++) {
objListID.remove(0);
}
while (1) {
var i = strUserList.indexOf("&&&");
if (i <= 0) {
break;
}
var strOneUser = strUserList.substring(0, i);
var strName = strOneUser.substring(0, strOneUser.indexOf("||"));
var strCertID = strOneUser.substring(strOneUser.indexOf("||") + 2, strOneUser.length);
if (CERT_TYPE_ALL == certType) {
var objItem = new Option(strName, strCertID);
objListID.options.add(objItem);
} else {
var strCertType = GetDeviceType(strCertID);
if ((CERT_TYPE_HARD == certType && strCertType == "HARD") ||
(CERT_TYPE_SOFT == certType && strCertType == "SOFT")) {
var objItem = new Option(strName, strCertID);
objListID.options.add(objItem);
}
}
var len = strUserList.length;
strUserList = strUserList.substring(i + 3, len);
}
var objListID = null;
return;
}
//填充证书列表框
function $FillCertList() {
if ($_$hardCertListID == "" && $_$softCertListID == "" && $_$allCertListID == "") {
return;
}
var strUserList = GetUserList();
if ($_$hardCertListID != "") {
$oneFillCert(strUserList, CERT_TYPE_HARD, $_$hardCertListID);
}
if ($_$softCertListID != "") {
$oneFillCert(strUserList, CERT_TYPE_SOFT, $_$softCertListID);
}
if ($_$allCertListID != "") {
$oneFillCert(strUserList, CERT_TYPE_ALL, $_$allCertListID);
}
return;
}
//设备插拔时的回调函数
function $OnUsbKeyChange() {
$FillCertList();
if (typeof $_$onUsbKeyChangeCallBackFunc == 'function') {
$_$onUsbKeyChangeCallBackFunc();
}
if (typeof $_$onUsbKeyChangeParentCallBackFunc == 'function') {
$_$onUsbKeyChangeParentCallBackFunc();
}
if ($_$loginCertID != "" && typeof $_$logoutFunc == 'function') {
var strUsrList = GetUserList();
if (strUsrList.indexOf($_$loginCertID) <= 0) {
$_$logoutFunc();
}
}
}
// IE11下注册监听函数
function $AttachIE11OnUSBKeychangeEvent(strObjName) {
var handler = document.createElement("script");
handler.setAttribute("for", strObjName);
handler.setAttribute("event", "OnUsbKeyChange");
handler.appendChild(document.createTextNode("$OnUsbKeyChange()"));
document.body.appendChild(handler);
}
//加载一个控件
function $LoadControl(CLSID, ctlName, testFuncName, addEvent) {
var pluginDiv = document.getElementById("pluginDiv" + ctlName);
if (pluginDiv) {
document.body.removeChild(pluginDiv);
pluginDiv.innerHTML = "";
pluginDiv = null;
}
pluginDiv = document.createElement("div");
pluginDiv.id = "pluginDiv" + ctlName;
document.body.appendChild(pluginDiv);
try {
if ($checkBrowserISIE()) { // IE
pluginDiv.innerHTML = '<object id="' + ctlName + '" classid="CLSID:' + CLSID + '" style="HEIGHT:0px; WIDTH:0px"></object>';
if (addEvent) {
var clt = eval(ctlName);
if (clt.attachEvent) {
clt.attachEvent("OnUsbKeyChange", $OnUsbKeyChange);
} else {// IE11 not support attachEvent, and addEventListener do not work well, so addEvent ourself
$AttachIE11OnUSBKeychangeEvent(ctlName);
//clt.addEventListener("OnUsbKeyChange", $OnUsbKeyChange, false);
}
}
} else {
if (addEvent) {
pluginDiv.innerHTML = '<embed id=' + ctlName + ' type=application/x-xtx-axhost clsid={' + CLSID + '} event_OnUsbkeyChange=$OnUsbKeyChange style="width:400px; height:100px; border:3px solid black;" />';
} else {
pluginDiv.innerHTML = '<embed id=' + ctlName + ' type=application/x-xtx-axhost clsid={' + CLSID + '} style="width:400px; height:100px; border:3px solid black;" />';
}
//document.writeln("<embed id='XTXAPP' type=application/x-xtx-axhost clsid={' + CLSID + '} style=\"width: 400px; height: 100px; border: 3px solid black;\" />")
//document.createElement()
//pluginDiv.innerHTML = '<iframe><embed id=' + ctlName + ' type=application/x-xtx-axhost clsid={' + CLSID + '} width=0 height=0></embed></iframe>';
}
if (testFuncName != null && testFuncName != "") {
if (eval(ctlName + "." + testFuncName) == undefined) {
document.body.removeChild(pluginDiv);
pluginDiv.innerHTML = "";
pluginDiv = null;
return false;
}
}
return true;
} catch (e) {
//console.log("ActiveXObject dll可能没有注册成功!" + e.message);
document.body.removeChild(pluginDiv);
pluginDiv.innerHTML = "";
pluginDiv = null;
return false;
}
}
function $XTXAlert(strMsg) {
alert(strMsg);
}
//XTXAppCOM class
function CreateXTXAppObject() {
var bOK = $LoadControl("3F367B74-92D9-4C5E-AB93-234F8A91D5E6", "XTXAPP", "SOF_GetVersion()", true);
if (!bOK) {
return null;
}
var o = new Object();
o.GetUserList = function () {
return XTXAPP.SOF_GetUserList();
};
o.GetVersion = function () {
return XTXAPP.SOF_GetVersion();
};
o.ExportUserSignCert = function (strCertID) {
var strUserCert = XTXAPP.SOF_ExportUserCert(strCertID);
var strUserExchCert = XTXAPP.SOF_ExportExChangeUserCert(strCertID);
if (strUserCert == strUserExchCert) {
return "";
} else {
return strUserCert;
}
};
o.ExportUserExchangeCert = function (strCertID) {
return XTXAPP.SOF_ExportExChangeUserCert(strCertID);
};
o.VerifyUserPIN = function (strCertID, strUserPIN) {
return XTXAPP.SOF_Login(strCertID, strUserPIN);
};
o.ChangeUserPIN = function (strCertID, oldPwd, newPwd) {
return XTXAPP.SOF_ChangePassWd(strCertID, oldPwd, newPwd);
};
o.GetUserPINRetryCount = function (strCertID) {
return XTXAPP.SOF_GetPinRetryCount(strCertID);
};
o.GetCertInfo = function (strCert, Type) {
return XTXAPP.SOF_GetCertInfo(strCert, Type);
};
o.GetCertInfoByOID = function (strCert, strOID) {
return XTXAPP.SOF_GetCertInfoByOid(strCert, strOID);
};
o.GetCertEntity = function (strCert) {
return XTXAPP.SOF_GetCertEntity(strCert);
};
o.GenRandom = function (RandomLen) {
return XTXAPP.SOF_GenRandom(RandomLen);
};
o.SignData = function (strCertID, strInData) {
return XTXAPP.SOF_SignData(strCertID, strInData);
};
o.VerifySignedData = function (strCert, strInData, strSignValue) {
return XTXAPP.SOF_VerifySignedData(strCert, strInData, strSignValue);
};
o.PubKeyEncrypt = function (strCert, strInData) {
return XTXAPP.SOF_PubKeyEncrypt(strCert, strInData);
};
o.PriKeyDecrypt = function (strCertID, strInData) {
return XTXAPP.SOF_PriKeyDecrypt(strCertID, strInData);
};
o.SignDataByP7 = function (strCertID, strInData) {
return XTXAPP.SOF_SignMessage(0, strCertID, strInData);
};
o.VerifyDataByP7 = function (strP7Data, strPlainMsg) {
return XTXAPP.SOF_VerifySignedMessage(strP7Data, strPlainMsg);
};
o.EncyptMessage = function (strCert, strInData) {
return XTXAPP.SOF_EncryptDataEx(strCert, strInData);
};
o.DecryptMessage = function (strCertID, strP7Envlope) {
return XTXAPP.SOF_DecryptData(strCertID, strP7Envlope);
};
o.SignFile = function (strCertID, strFilePath) {
return XTXAPP.SOF_SignFile(strCertID, strFilePath);
};
o.VerifySignFile = function (strCert, strFilePath, strSignValue) {
return XTXAPP.SOF_VerifySignedFile(strCert, strFilePath, strSignValue);
};
o.GetSymKeyLength = function () {
return 24;
};
o.SymEncryptData = function (strKey, strInData) {
return XTXAPP.SOF_SymEncryptData(strKey, strInData);
};
o.SymDecryptData = function (strKey, strInData) {
return XTXAPP.SOF_SymDecryptData(strKey, strInData);
};
o.SymEncryptFile = function (strKey, strInFilePath, strOutFilePath) {
return XTXAPP.SOF_SymEncryptFile(strKey, strInFilePath, strOutFilePath);
};
o.SymDecryptFile = function (strKey, strInFilePath, strOutFilePath) {
return XTXAPP.SOF_SymDecryptFile(strKey, strInFilePath, strOutFilePath);
};
o.ValidateCert = function (strCert) {
var ret = XTXAPP.SOF_ValidateCert(strCert);
if (ret == 0) {
return true;
} else {
return false;
}
};
o.HashFile = function (strFilePath) {
return XTXAPP.SOF_HashFile(2, strFilePath); //sha1 alg
};
o.GetCertValidYear = function (strCertValid) {
return strCertValid.substring(0, 4);
};
o.GetCertValidMonth = function (strCertValid) {
return strCertValid.substring(4, 6);
};
o.GetCertValidDay = function (strCertValid) {
return strCertValid.substring(6, 8);
};
o.GetDeviceType = function (strCertID) {
return XTXAPP.GetDeviceInfo(strCertID, 7);
}
return o;
}
//SecXV2 class
function CreateSecXV2Object() {
var bOK = $LoadControl("FCAA4851-9E71-4BFE-8E55-212B5373F040", "SecXV2", "GetUserList()", true);
if (!bOK) {
return null;
}
var o = new Object();
o.GetUserList = function () {
return SecXV2.GetUserList();
};
o.ExportUserSignCert = function (strCertID) {
var strUserCert = SecXV2.ExportUserCert(strCertID);
var strUserExchCert = SecXV2.ExportExChangeUserCert(strCertID);
if (strUserCert == strUserExchCert) {
return "";
} else {
return strUserCert;
}
};
o.ExportUserExchangeCert = function (strCertID) {
return SecXV2.ExportExChangeUserCert(strCertID);
};
o.VerifyUserPIN = function (strCertID, strUserPIN) {
return SecXV2.UserLogin(strCertID, strUserPIN);
};
o.ChangeUserPIN = function (strCertID, oldPwd, newPwd) {
return SecXV2.ChangePasswd(strCertID, oldPwd, newPwd);
};
o.GetUserPINRetryCount = function (strCertID) {
var strExtLib = SecXV2.GetUserInfo(strCertID, 15);
return SecXV2.GetBjcaKeyParam(strExtLib, 8);
};
o.GetCertInfo = function (strCert, Type) {
return SecXV2.GetCertInfo(strCert, Type);
};
o.GetCertInfoByOID = function (strCert, strOID) {
return SecXV2.GetCertInfoByOid(strCert, strOID);
};
o.GetCertEntity = function (strCert) {
return SecXV2.GetCertInfoByOid(strCert, "2.16.840.1.113732.2");
};
o.GenRandom = function (RandomLen) {
return SecXV2.GenRandom(RandomLen);
};
o.SignData = function (strCertID, strInData) {
return SecXV2.SignData(strCertID, strInData);
};
o.VerifySignedData = function (strCert, strInData, strSignValue) {
return SecXV2.VerifySignedData(strCert, strInData, strSignValue);
};
o.PubKeyEncrypt = function (strCert, strInData) {
return SecXV2.PubKeyEncrypt(strCert, strInData);
};
o.PriKeyDecrypt = function (strCertID, strInData) {
return SecXV2.PriKeyDecrypt(strCertID, strInData);
};
o.SignDataByP7 = function (strCertID, strInData) {
return SecXV2.SignDataByP7(strCertID, strInData);
};
o.VerifyDataByP7 = function (strP7Data, strPlainMsg) {
return SecXV2.VerifySignedDatabyP7(strP7Data);
};
o.EncyptMessage = function (strCert, strInData) {
return SecXV2.EncodeP7EnvelopedData(strCert, strInData);
};
o.DecryptMessage = function (strCertID, strP7Envlope) {
return SecXV2.DecodeP7EnvelopedData(strCertID, strP7Envlope);
};
o.SignFile = function (strCertID, strFilePath) {
return SecXV2.SignFile(strCertID, strFilePath);
};
o.VerifySignFile = function (strCert, strFilePath, strSignValue) {
return SecXV2.VerifySignedFile(strCert, strFilePath, strSignValue);
};
o.GetSymKeyLength = function () {
return 24;
};
o.SymEncryptData = function (strKey, strInData) {
return SecXV2.EncryptData(strKey, strInData);
};
o.SymDecryptData = function (strKey, strInData) {
return SecXV2.DecryptData(strKey, strInData);
};
o.SymEncryptFile = function (strKey, strInFilePath, strOutFilePath) {
return SecXV2.EncryptFile(strKey, strInFilePath, strOutFilePath);
};
o.SymDecryptFile = function (strKey, strInFilePath, strOutFilePath) {
return SecXV2.DecryptFile(strKey, strInFilePath, strOutFilePath);
};
o.ValidateCert = function (strCert) {
return SecXV2.ValidateCert(strCert);
};
o.GetCertValidYear = function (strCertValid) {
return strCertValid.substring(0, 4);
};
o.GetCertValidMonth = function (strCertValid) {
return strCertValid.substring(5, 7);
};
o.GetCertValidDay = function (strCertValid) {
return strCertValid.substring(8, 10);
};
return o;
}
//SecXV2 class
function CreateSecXObject() {
$LoadControl("02BE3F91-A9E1-4D12-A65B-1E0D500292A7", "oCert", "", false);
$LoadControl("4F763EC7-657A-43A8-96D0-BD3AD6D5E17E", "oCrypto", "", false);
$LoadControl("D57CD2CA-8FA1-440F-8614-B0A28F64F0BE", "oDevice", "", false);
var bOK = $LoadControl("BB7D3BAD-A402-4E98-B813-1C3C22481AE7", "oUtil", "getUserList()", false);
if (!bOK) {
return null;
}
bOK = $LoadControl("0CF5259B-A812-4B6E-9746-ACF7279FEF74", "USBKEY", "EnumUsbKey()", true);
if (!bOK) {
return null;
}
var o = new Object();
o.CERT_SRC_BASE64 = 1; //证书来自Base64字符串
o.CERT_SRC_UNIQUEID = 2; //证书来自唯一表示
o.CERT_SRC_FILE = 3; //证书来自der文件
o.CERT_SRC_CONTAINER_UCA = 4; //证书来自UCA类型证书容器
o.CERT_SRC_CONTAINER_SIGN = 5; //证书来自容器下签名证书
o.CERT_SRC_CONTAINER_ENC = 6; //证书来自容器下加密证书
o.CERT_SRC_CONTAINER_BOTH = 7; //证书来自容器下签名加密证书
o.CERT_SRC_PKCS12 = 8; //证书来自PKCS12文件
o.CERT_DST_BASE64 = 1; //导出证书为Base64字符串
o.CERT_DST_DERFILE = 2; //导出证书为der文件
o.CERT_DST_P12 = 3; //到出证书为PKCS12文件
o.CERT_XML_SUBJECT = 1; //从XML配置文件取用户名
o.CERT_XML_UNIQUEID = 2; //从XML配置文件取用户唯一表识
o.CERT_XML_DEPT = 3; //从XML配置文件取用户所有者部门
o.CERT_XML_ISSUE = 4; //从XML配置文件取用户证书颁发者
o.CERT_XML_STATE = 5; //从XML配置文件取用户证书使用状态
o.CERT_XML_TRADETYPE = 6; //从XML配置文件取用户证书应用类型
o.CERT_XML_PASSWORD = 7; //从XML配置文件取用户证书私钥保护口令
o.CERT_XML_DEVICETYPE = 8; //从XML配置文件取用户证书介质类型
o.CERT_XML_CATYPE = 9; //从XML配置文件取用户证书CA类型
o.CERT_XML_KEYTYPE = 10; //从XML配置文件取用户证书密钥类型
o.CERT_XML_SIGNSN = 11; //从XML配置文件取用户签名证书序列号
o.CERT_XML_EXCHSN = 12; //从XML配置文件取用户加密证书序列号
o.CERT_XML_DEVICENAME = 13; //从XML配置文件取用户证书介质名称
o.CERT_XML_DEVICEPROVIDER = 14; //从XML配置文件取用户证书介质提供者
o.CERT_XML_DEVICEAFFIX = 15; //从XML配置文件取用户证书介质附加库
o.CERT_XML_SIGNPATH = 16; //从XML配置文件取用户签名证书路径
o.CERT_XML_EXCHPATH = 17; //从XML配置文件取用户加密证书路径
o.CERT_XML_SIGNPFXPATH = 18; //从XML配置文件取用户签名P12证书路径
o.CERT_XML_EXCHPFXPATH = 19; //从XML配置文件取用户加密P12证书路径
o.CERT_XML_CHAINPATH = 20; //从XML配置文件取用户证书链路径
o.CERT_XML_CRLPATH = 21; //从XML配置文件取用户证书作废列表路径
o.CERT_XML_UNIQUEIDOID = 22; //从XML配置文件取用户证书UniqueID的OID
o.CERT_XML_VERIFYTYPE = 23; //从XML配置文件取用户证书验证类型
o.CERT_XML_CACOUNTS = 24; //从XML配置文件取用户证书根证书个数
o.CERT_XML_CANUMTYPE = 25; //从XML配置文件取用户证书跟证书类型
o.CRYPT_CFGTYPE_UNSET = 0; //用户应用类型未定义
o.CRYPT_CFGTYPE_CSP = 1; //用户应用类型CSP
o.CRYPT_CFGTYPE_P11 = 2; //用户应用类型P11
o.CRYPT_CFGTYPE_P12 = 3; //用户应用类型软算法
o.ENVELOP_ENC = 1; //加密P7数字信封
o.ENVELOP_DEC = 0; //解密P7数字信封
o.GetUserList = function () {
return USBKEY.getUserList();
};
o.ExportUserSignCert = function (strCertID) {
var strCSPName = USBKEY.getUserInfoByContainer(strCertID, o.CERT_XML_DEVICEPROVIDER);
var KeyType = USBKEY.getUserInfoByContainer(strCertID, o.CERT_XML_KEYTYPE);
if (KeyType == 1) {
oCert.importCert(strCertID, o.CERT_SRC_CONTAINER_ENC, strCSPName);
} else if (KeyType == 2) {
oCert.importCert(strCertID, o.CERT_SRC_CONTAINER_SIGN, strCSPName);
}
else {
return "";
}
return oCert.exportCert(o.CERT_DST_BASE64);
};
o.ExportUserExchangeCert = function (strCertID) {
var strCSPName = USBKEY.getUserInfoByContainer(strCertID, o.CERT_XML_DEVICEPROVIDER);
oCert.importCert(strCertID, o.CERT_SRC_CONTAINER_ENC, strCSPName);
return oCert.exportCert(o.CERT_DST_BASE64);
};
o.VerifyUserPIN = function (strCertID, strUserPIN) {
var strCSPName = USBKEY.getUserInfoByContainer(strCertID, o.CERT_XML_DEVICEPROVIDER);
var strExtLib = USBKEY.getUserInfoByContainer(strCertID, o.CERT_XML_DEVICEAFFIX);
var ret = oDevice.userLogin(strCSPName, strUserPIN);
if (ret == 0) {
oCrypto.setUserCfg(o.CRYPT_CFGTYPE_CSP, strCSPName, strExtLib, strUserPIN);
return true;
} else {
return false;
}
};
o.ChangeUserPIN = function (strCertID, oldPwd, newPwd) {
var strCSPName = USBKEY.getUserInfoByContainer(strCertID, o.CERT_XML_DEVICEPROVIDER);
var strExtLib = USBKEY.getUserInfoByContainer(strCertID, o.CERT_XML_DEVICEAFFIX);
var ret = oDevice.changeUserPin(strCSPName, strExtLib, oldPwd, newPwd)
if (ret == 0) {
oCrypto.setUserCfg(o.CRYPT_CFGTYPE_CSP, strCSPName, strExtLib, newPwd);
return true;
} else {
return false;
}
};
o.GetUserPINRetryCount = function (strCertID) {
var strExtLib = USBKEY.getUserInfoByContainer(strCertID, o.CERT_XML_DEVICEAFFIX);
return oDevice.getKeyRetrys(strExtLib);
};
o.GetCertInfo = function (strCert, Type) {
oCert.importCert(strCert, o.CERT_SRC_BASE64);
var SecXType;
switch (Type) {
case CERT_OID_ISSUER_CN:
SecXType = 4;
break;
case CERT_OID_NOT_BEFORE:
SecXType = 5;
break;
case CERT_OID_SUBJECT_C:
SecXType = 42;
break;
case CERT_OID_SUBJECT_O:
SecXType = 45;
break;
case CERT_OID_SUBJECT_OU:
SecXType = 46;
break;
case CERT_OID_SUBJECT_ST:
SecXType = 44;
break;
case CERT_OID_SUBJECT_CN:
SecXType = 41;
break;
case CERT_OID_SUBJECT_L:
SecXType = 43;
break;
case CERT_OID_PUBKEY:
SecXType = 43;
break;
default:
SecXType = Type;
break;
}
return oCert.getBasicCertInfoByOID(SecXType)
};
o.GetCertInfoByOID = function (strCert, strOID) {
oCert.importCert(strCert, o.CERT_SRC_BASE64);
return oCert.getExtCertInfoByOID(strOID);
};
o.GetCertEntity = function (strCert) {
oCert.importCert(strCert, o.CERT_SRC_BASE64);
return oCert.getExtCertInfoByOID("2.16.840.1.113732.2");
};
o.GenRandom = function (RandomLen) {
return oCrypto.generateRandom(RandomLen);
};
o.SignData = function (strCertID, strInData) {
return oCrypto.signedData(strInData, strCertID);
};
o.VerifySignedData = function (strCert, strInData, strSignValue) {
var ret = oCrypto.verifySignedData(strSignValue, strCert, strInData);
if (ret == 0) {
return true;
} else {
return false;
}
};
o.PubKeyEncrypt = function (strCert, strInData) {
return oCrypto.EncDataByCert(strCert, strInData);
};
o.PriKeyDecrypt = function (strCertID, strInData) {
return oCrypto.DecDataByRSA(strCertID, strInData);
};
o.SignDataByP7 = function (strCertID, strInData) {
return oCrypto.signedDataByP7(strInData, strCertID);
};
o.VerifyDataByP7 = function (strP7Data, strPlainMsg) {
var ret = oCrypto.verifySignedDataByP7(strP7Data);
if (ret == 0) {
return true;
} else {
return false;
}
};
o.EncyptMessage = function (strCert, strInData) {
return oCrypto.envelopedData(strInData, o.ENVELOP_ENC, strCert);
};
o.DecryptMessage = function (strCertID, strP7Envlope) {
return oCrypto.envelopedData(strP7Envlope, o.ENVELOP_DEC, strCertID);
};
o.SignFile = function (strCertID, strFilePath) {
return oCrypto.signFile(strFilePath, strCertID);
};
o.VerifySignFile = function (strCert, strFilePath, strSignValue) {
var ret = oCrypto.verifySignFile(strFilePath, strCert, strSignValue);
if (ret == 0) {
return true;
} else {
return false;
}
};
o.GetSymKeyLength = function () {
return 24;
};
o.SymEncryptData = function (strKey, strInData) {
return oCrypto.encryptData(strKey, strInData);
};
o.SymDecryptData = function (strKey, strInData) {
return oCrypto.decryptData(strKey, strInData);
};
o.SymEncryptFile = function (strKey, strInFilePath, strOutFilePath) {
var ret = oCrypto.encryptFile(strInFilePath, strOutFilePath, strKey);
if (ret == 0) {
return true;
} else {
return false;
}
};
o.SymDecryptFile = function (strKey, strInFilePath, strOutFilePath) {
var ret = oCrypto.decryptFile(strInFilePath, strOutFilePath, strKey);
if (ret == 0) {
return true;
} else {
return false;
}
};
o.ValidateCert = function (strCert) {
var ret = oCert.validateCert("", "");
if (ret == 0) {
return true;
} else {
return false;
}
};
o.HashFile = function (strFilePath) {
return oCrypto.HashFile(strFilePath);
};
o.GetCertValidYear = function (strCertValid) {
return strCertValid.substring(0, 4);
};
o.GetCertValidMonth = function (strCertValid) {
return strCertValid.substring(5, 7);
};
o.GetCertValidDay = function (strCertValid) {
return strCertValid.substring(8, 10);
};
return o;
}
//Load BJCA Controls
function $LoadBJCACOM() {
$_$XTXAppObj = CreateXTXAppObject();
if ($_$XTXAppObj != null) {
$_$CurrentObj = $_$XTXAppObj;
return;
}
$_$SecXV2Obj = CreateSecXV2Object();
if ($_$SecXV2Obj != null) {
$_$CurrentObj = $_$SecXV2Obj;
return;
}
$_$SecXObj = CreateSecXObject();
if ($_$SecXObj != null) {
$_$CurrentObj = $_$SecXObj;
return;
}
//$XTXAlert("检查一证通证书应用环境出错,请您先安装一证通证书应用环境!");
//return;
}
function $onLoadFunc() {
var xtxappObject = document.getElementById('XTXAPP')
if (!xtxappObject) {
$LoadBJCACOM();
$FillCertList();
}
//alert();
}
//对外提供的接口
//add onLoad callback function
function AddOnLoadEvent(func) {
var oldOnLoad = window.onload;
if (typeof window.onload != 'function') {
//window.onload = func;
$onLoadFunc();
} else {
oldOnLoad();
func();
}
return;
}
function $AddLoadEvent(func) {
var oldOnLoad = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
oldOnLoad();
func();
}
return;
}
//get user list
function GetUserList() {
if ($_$CurrentObj != null) {
return $_$CurrentObj.GetUserList();
} else {
return "";
}
}
function GetVersion() {
if ($_$CurrentObj != null) {
return $_$CurrentObj.GetVersion();
} else {
return "";
}
}
function $GetUserListByType(strType) {
var strUserList = GetUserList();
var strReturn = "";
while (1) {
var i = strUserList.indexOf("&&&");
if (i <= 0) {
break;
}
var strOneUser = strUserList.substring(0, i);
var strName = strOneUser.substring(0, strOneUser.indexOf("||"));
var strCertID = strOneUser.substring(strOneUser.indexOf("||") + 2, strOneUser.length);
var strCertType = GetDeviceType(strCertID);
if (strCertType == strType) {
strReturn += (strOneUser + "&&&");
}
var len = strUserList.length;
strUserList = strUserList.substring(i + 3, len);
}
return strReturn;
}
//get usbKey user list
function GetUserList_USBKey() {
return $GetUserListByType("HARD");
}
//get soft user list
function GetUserList_Soft() {
return $GetUserListByType("SOFT");
}
//export user signature cert
function GetSignCert(strCertID) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.ExportUserSignCert(strCertID);
} else {
return "";
}
}
//export user exchange cert
function GetExchCert(strCertID) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.ExportUserExchangeCert(strCertID);
} else {
return "";
}
}
//verify user pin
function VerifyUserPIN(strCertID, strUserPIN) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.VerifyUserPIN(strCertID, strUserPIN);
} else {
return false;
}
}
//modify user pin
function ChangeUserPassword(strCertID, oldPwd, newPwd) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.ChangeUserPIN(strCertID, oldPwd, newPwd);
} else {
return false;
}
}
//get user pin retry count
function GetUserPINRetryCount(strCertID) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.GetUserPINRetryCount(strCertID);
} else {
return 0;
}
}
// get cert basic info
function GetCertBasicinfo(strCert, Type) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.GetCertInfo(strCert, Type);
} else {
return "";
}
}
// get cert extend info
function GetExtCertInfoByOID(strCert, strOID) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.GetCertInfoByOID(strCert, strOID);
} else {
return "";
}
}
// get cert entity id
function GetCertEntity(strCert) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.GetCertEntity(strCert);
} else {
return "";
}
}
//generate random
function GenerateRandom(RandomLen) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.GenRandom(RandomLen);
} else {
return "";
}
}
//sign data
function SignedData(strCertID, strInData) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.SignData(strCertID, strInData);
} else {
return "";
}
}
//verify signed data
function VerifySignedData(strCert, strInData, strSignValue) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.VerifySignedData(strCert, strInData, strSignValue);
} else {
return false;
}
}
//encrypt data by cert
function PubKeyEncrypt(strCert, strInData) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.PubKeyEncrypt(strCert, strInData);
} else {
return "";
}
}
//decrypt data by private key(not support by gm key)
function PriKeyDecrypt(strCertID, strInData) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.PriKeyDecrypt(strCertID, strInData);
} else {
return "";
}
}
//sign data with pkcs7 format
function SignByP7(strCertID, strInData) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.SignDataByP7(strCertID, strInData);
} else {
return "";
}
}
//verify pkcs7 signed data
function VerifyDatabyP7(strP7Data, strPlainMsg) {
if ($_$CurrentObj != null) {
if (arguments.length > 1) {
return $_$CurrentObj.VerifyDataByP7(strP7Data, strPlainMsg);
} else {
return $_$CurrentObj.VerifyDataByP7(strP7Data, "");
}
} else {
return "";
}
}
//encrypt pkcs7 envlope
function EncodeP7Enveloped(strCert, strInData) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.EncyptMessage(strCert, strInData);
} else {
return "";
}
}
//decrypt pkcs7 envlope
function DecodeP7Enveloped(strCertID, strP7Envlope) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.DecryptMessage(strCertID, strP7Envlope);
} else {
return "";
}
}
//sign file
function SignFile(strCertID, strFilePath) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.SignFile(strCertID, strFilePath);
} else {
return "";
}
}
//verify signed file
function VerifySignFile(strCert, strFilePath, strSignValue) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.VerifySignFile(strCert, strFilePath, strSignValue);
} else {
return "";
}
}
//get symmitric key length
//because xtx and secxv2 secx default symmitric alg is no equal
function GetSymKeyLength() {
if ($_$CurrentObj != null) {
return $_$CurrentObj.GetSymKeyLength();
} else {
return 24;
}
}
//encrypt data by symmitric key
function EncryptData(strKey, strInData) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.SymEncryptData(strKey, strInData);
} else {
return "";
}
}
//decrypt data by symmitric key
function DecryptData(strKey, strInData) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.SymDecryptData(strKey, strInData);
} else {
return "";
}
}
//encrypt file by symmitric key
function EncryptFile(strKey, strInFilePath, strOutFilePath) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.SymEncryptFile(strKey, strInFilePath, strOutFilePath);
} else {
return false;
}
}
//decrypt file by symmitric key
function DecryptFile(strKey, strInFilePath, strOutFilePath) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.SymDecryptFile(strKey, strInFilePath, strOutFilePath);
} else {
return false;
}
}
//validate cert
function ValidateCert(strCert) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.ValidateCert(strCert);
} else {
return false;
}
}
//get device type return SOFT or HARD
function GetDeviceType(strCertID) {
if ($_$CurrentObj != null && $_$CurrentObj.GetDeviceType != undefined) {
return $_$CurrentObj.GetDeviceType(strCertID);
} else {
return "HARD";
}
}
// calculate file's hash
function HashFile(strFilePath) {
if ($_$CurrentObj != null) {
if ($_$CurrentObj.HashFile != undefined) {
return $_$CurrentObj.HashFile(strFilePath);
}
}
return "";
}
// set auto logout parameters
function SetAutoLogoutParameter(strCertID, logoutFunc) {
$_$loginCertID = strCertID;
$_$logoutFunc = logoutFunc;
return;
}
function SetLoginCertID(strCertID) {
$_$loginCertID = strCertID;
return;
}
function SetLogoutFunction(logoutFunc) {
$_$logoutFunc = logoutFunc;
}
// set user cert list id
function SetUserCertList(strListID, certType) {
if (arguments.length == 1) {
$_$hardCertListID = strListID;
} else {
if (certType == CERT_TYPE_HARD) {
$_$hardCertListID = strListID;
}
if (certType == CERT_TYPE_SOFT) {
$_$softCertListID = strListID;
}
if (certType == CERT_TYPE_ALL) {
$_$allCertListID = strListID;
}
}
return;
}
// set custom usbkeychange callback
function SetOnUsbKeyChangeCallBack(callback) {
$_$onUsbKeyChangeCallBackFunc = callback;
}
function SetOnUsbKeyChangeParentCallBack(callback) {
$_$onUsbKeyChangeParentCallBackFunc = callback;
}
// get certvalid year
function GetCertValidYear(strCertValid) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.GetCertValidYear(strCertValid);
}
return "";
}
// get certvalid month
function GetCertValidMonth(strCertValid) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.GetCertValidMonth(strCertValid);
}
return "";
}
function GetCertValidDay(strCertValid) {
if ($_$CurrentObj != null) {
return $_$CurrentObj.GetCertValidDay(strCertValid);
}
return "";
}
function CheckValid(strUserCert) {
//检查证书有效期
var strNotBefore = GetCertBasicinfo(strUserCert, 11);
var strNotBefore_year = GetCertValidYear(strNotBefore);
var strNotBefore_month = GetCertValidMonth(strNotBefore);
var strNotBefore_day = GetCertValidDay(strNotBefore);
var notBeforeDate = strNotBefore_year + "/" + strNotBefore_month + "/" + strNotBefore_day;
var nowDate = new Date().TTKFormat("yyyy/MM/dd");
var days = (Date.parse(notBeforeDate) - Date.parse(nowDate)) / (1000 * 60 * 60 * 24);
if (days > 0) {
$XTXAlert("您的证书尚未生效!距离生效日期还剩" + days + "天!");
return false;
}
var strNotAfter = GetCertBasicinfo(strUserCert, 12);
var strNotAfter_year = GetCertValidYear(strNotAfter);
var strNotAfter_month = GetCertValidMonth(strNotAfter);
var strNotAfter_day = GetCertValidDay(strNotAfter);
var notAfterDate = strNotAfter_year + "/" + strNotAfter_month + "/" + strNotAfter_day;
var nowDate = new Date().TTKFormat("yyyy/MM/dd");
days = (Date.parse(notAfterDate) - Date.parse(nowDate)) / (1000 * 60 * 60 * 24);
if (days < 0) {
$XTXAlert("您的证书已过期 " + -days + " 天,超过了最后使用期限!\n请到办理证书更新手续。");
window.open("http://yzt.beijing.gov.cn/zn/info/2014/287.html");
return false;
}
if (days >= 0 && days <= 90) {
$XTXAlert("您的证书还有" + days + "天过期,\n请您尽快办理证书更新手续。");
window.open("http://yzt.beijing.gov.cn/zn/info/2014/287.html");
return true;
}
if (days < 0) {
$XTXAlert("您的证书已过期 " + -days + " 天,\n请尽快到证书更新手续。");
window.open("http://yzt.beijing.gov.cn/zn/info/2014/287.html");
}
return true;
}
//Form login
function XTXAppLogin(strCertID, strPin) {
// var objForm = eval(strFormName);
// if (objForm == null) {
// $XTXAlert("Form Error");
// return false;
// }
if (strPin == null || strPin == "") {
$XTXAlert("请输入证书密码!");
return false;
}
//verify user pin
var ret = VerifyUserPIN(strCertID, strPin);
if (!ret) {
var retryCount = GetUserPINRetryCount(strCertID);
if (retryCount > 0) {
//$XTXAlert("校验证书密码失败!您还有" + retryCount + "次机会重试!");
return false;
} else if (retryCount == 0) {
//$XTXAlert("您的证书密码已被锁死,请办理证书解锁!");
window.open("http://yzt.beijing.gov.cn/zn/info/2014/284.html");
return false;
} else {
//$XTXAlert("登录失败!");
return false;
}
}
//export user signature cert
var strUserCert = GetSignCert(strCertID);
if (strUserCert == null || strUserCert == "") {
$XTXAlert("导出用户证书失败!");
return false;
}
//check cert valid
// if (!CheckValid(strUserCert)) {
// return false;
// }
//verify server signature
// ret = VerifySignedData(strServerCert, strServerRan, strServerSignedData)
// if (!ret) {
// $XTXAlert("验证服务器端信息失败!");
// return false;
// }
//client sign random
// var strClientSignedData = SignedData(strCertID, strServerRan);
// if (strClientSignedData == null || strClientSignedData == "") {
// $XTXAlert("客户端签名失败!");
// return false;
// }
//Add a hidden item ...
//var strSignItem = "<input type=\"hidden\" id=\"UserLoginData\" name=\"UserLoginData\" value='" + strUserCert + "'>";
//if (objForm.UserLoginData == null) {
//objForm.insertAdjacentHTML("BeforeEnd", strSignItem);
//}
// if (document.getElementById('txtUserLoginData')) {
// document.getElementById('txtUserLoginData').value = strUserCert;
// }
// var strSignItem = "<input type=\"hidden\" name=\"UserSignedData\" value=\"\">";
// if (objForm.UserSignedData == null) {
// objForm.insertAdjacentHTML("BeforeEnd", strSignItem);
// }
// var strCertItem = "<input type=\"hidden\" name=\"UserCert\" value=\"\">";
// if (objForm.UserCert == null) {
// objForm.insertAdjacentHTML("BeforeEnd", strCertItem);
// }
// var strContainerItem = "<input type=\"hidden\" name=\"ContainerName\" value=\"\">";
// if (objForm.ContainerName == null) {
// objForm.insertAdjacentHTML("BeforeEnd", strContainerItem);
// }
// objForm.UserSignedData.value = strClientSignedData;
// objForm.UserCert.value = strUserCert;
// objForm.ContainerName.value = strCertID;
//alert(objForm.ContainerName.value);
return true;
}
// add onload function
AddOnLoadEvent($onLoadFunc);