/////const //////////////////////////
var CERT_SRC_BASE64 = 1; //证书来自Base64字符串
var CERT_SRC_UNIQUEID = 2; //证书来自唯一表示
var CERT_SRC_FILE = 3; //证书来自der文件
var CERT_SRC_CONTAINER_UCA = 4; //证书来自UCA类型证书容器
var CERT_SRC_CONTAINER_SIGN = 5; //证书来自容器下签名证书
var CERT_SRC_CONTAINER_ENC = 6; //证书来自容器下加密证书
var CERT_SRC_CONTAINER_BOTH = 7; //证书来自容器下签名加密证书
var CERT_SRC_PKCS12 = 8; //证书来自PKCS12文件
var CERT_DST_BASE64 = 1; //导出证书为Base64字符串
var CERT_DST_DERFILE = 2; //导出证书为der文件
var CERT_DST_P12 = 3; //到出证书为PKCS12文件
var CERT_XML_SUBJECT = 1; //从XML配置文件取用户名
var CERT_XML_UNIQUEID = 2; //从XML配置文件取用户唯一表识
var CERT_XML_DEPT = 3; //从XML配置文件取用户所有者部门
var CERT_XML_ISSUE = 4; //从XML配置文件取用户证书颁发者
var CERT_XML_STATE = 5; //从XML配置文件取用户证书使用状态
var CERT_XML_TRADETYPE = 6; //从XML配置文件取用户证书应用类型
var CERT_XML_PASSWORD = 7; //从XML配置文件取用户证书私钥保护口令
var CERT_XML_DEVICETYPE = 8; //从XML配置文件取用户证书介质类型
var CERT_XML_CATYPE = 9; //从XML配置文件取用户证书CA类型
var CERT_XML_KEYTYPE = 10; //从XML配置文件取用户证书密钥类型
var CERT_XML_SIGNSN = 11; //从XML配置文件取用户签名证书序列号
var CERT_XML_EXCHSN = 12; //从XML配置文件取用户加密证书序列号
var CERT_XML_DEVICENAME = 13; //从XML配置文件取用户证书介质名称
var CERT_XML_DEVICEPROVIDER = 14; //从XML配置文件取用户证书介质提供者
var CERT_XML_DEVICEAFFIX = 15; //从XML配置文件取用户证书介质附加库
var CERT_XML_SIGNPATH = 16; //从XML配置文件取用户签名证书路径
var CERT_XML_EXCHPATH = 17; //从XML配置文件取用户加密证书路径
var CERT_XML_SIGNPFXPATH = 18; //从XML配置文件取用户签名P12证书路径
var CERT_XML_EXCHPFXPATH = 19; //从XML配置文件取用户加密P12证书路径
var CERT_XML_CHAINPATH = 20; //从XML配置文件取用户证书链路径
var CERT_XML_CRLPATH = 21; //从XML配置文件取用户证书作废列表路径
var CERT_XML_UNIQUEIDOID = 22; //从XML配置文件取用户证书UniqueID的OID
var CERT_XML_VERIFYTYPE = 23; //从XML配置文件取用户证书验证类型
var CERT_XML_CACOUNTS = 24; //从XML配置文件取用户证书根证书个数
var CERT_XML_CANUMTYPE = 25; //从XML配置文件取用户证书跟证书类型
var CRYPT_CFGTYPE_UNSET = 0; //用户应用类型未定义
var CRYPT_CFGTYPE_CSP = 1; //用户应用类型CSP
var CRYPT_CFGTYPE_P11 = 2; //用户应用类型P11
var CRYPT_CFGTYPE_P12 = 3; //用户应用类型软算法
var ENVELOP_ENC = 1; //加密P7数字信封
var ENVELOP_DEC = 0; //解密P7数字信封
var CRYPT_ALG_HASH = 1; //Hash标志位
var CRYPT_ALG_SYMM = 2; //对称算法标志位
var CRYPT_ALG_MODE = 3; //对称算法模式
////CUSTOM CERT OID////////////////////////////////
var CERT_OID_VERSION = 1; //证书版本号
var CERT_OID_SN = 2; //证书序列号
var CERT_OID_SIGNALG = 3; //证书签名算法
var CERT_OID_ISSUERNAME = 4; //证书颁发者
var CERT_OID_NOTBEFORE = 5; //证书生效日期
var CERT_OID_NOTAFTER = 6; //证书过期日期
var CERT_OID_PUBLICKEY = 7; //证书公钥
var CERT_OID_UNIQUEID = 8; //证书唯一标识
/////define object /////////////////////////////////
var g_objXML = new CXMLSignRule();
var oCert = new ActiveXObject("BJCASecCOM.Certificate");
var oCrypto = new ActiveXObject("BJCASecCOM.Crypto");
var oDevice = new ActiveXObject("BJCASecCOM.DeviceMgr");
var oUtil = new ActiveXObject("BJCASecCOM.Util");
var g_xmluserlist;
//Create ActiveX Object //////////////////////////
document.writeln("");
document.writeln("");
/////组件接口转换为脚本接口////////////////////////
/////Certificate
function importCert(sCertSrc, SrcType, sPwd) {
if (sPwd != null)
return oCert.importCert(sCertSrc, SrcType, sPwd);
else
return oCert.importCert(sCertSrc, SrcType);
}
function exportCert(DstType, sCertPath){
if (sCertPath != null)
return oCert.exportCert(DstType, sCertPath);
else
return oCert.exportCert(DstType);
}
function getBasicCertInfoByOID(OID) {
return oCert.getBasicCertInfoByOID(OID);
}
function getExtCertInfoByOID(sOID) {
return oCert.getExtCertInfoByOID(sOID);
}
function checkValidaty(sDate) {
if (sDate != null)
return oCert.checkValidaty(sDate);
else
return oCert.checkValidaty();
}
function validateCert(sCertChain, sCRL) {
if (sCRL != null)
return oCert.validateCert(sCertChain, sCRL);
else
return oCert.validateCert(sCertChain);
}
function modifyPFXPwd(sPFXPath, sOldPwd, sNewPwd) {
return oCert.modifyPFXPwd(sPFXPath, sOldPwd, sNewPwd);
}
/////Crypto
function setUserCfg(CfgFlag, sCfgValue, sExt1CfgValue, sExt2CfgValue) {
return oCrypto.setUserCfg(CfgFlag, sCfgValue, sExt1CfgValue, sExt2CfgValue);
}
function setAlgFlag() {
return oCrypto.setAlgFlag(AlgType, AlgFlag);
}
function signedDataByP7(sInData, sContainerName) {
if (sContainerName != null)
return oCrypto.signedDataByP7(sInData, sContainerName);
else
return oCrypto.signedDataByP7(sInData);
}
function verifySignedDataByP7(sInData) {
return oCrypto.verifySignedDataByP7(sInData);
}
function signedData(sInData, sContainerName) {
if (sContainerName != null)
return oCrypto.signedData(sInData, sContainerName);
else
return oCrypto.signedData(sInData);
}
function verifySignedData(sInData, sCert, sOriData) {
return oCrypto.verifySignedData(sInData, sCert, sOriData);
}
function envelopedData(sInData, flag, sContainerName) {
if (sContainerName != null)
return oCrypto.envelopedData(sInData, flag, sContainerName);
else
return oCrypto.envelopedData(sInData, flag);
}
function generateRandom(RandomLen) {
return oCrypto.generateRandom(RandomLen);
}
function getCertBasicInfo(sCert, OID) {
oCert.importCert(sCert, CERT_SRC_BASE64);
return oCert.getBasicCertInfoByOID(OID);
}
/////Device
function changeUserPin(sCSPName, sExtLib, sOldPin, sNewPin) {
return oDevice.changeUserPin(sCSPName, sExtLib, sOldPin, sNewPin);
}
function userLogin(sCSPName, sUserPin) {
return oDevice.userLogin(sCSPName, sUserPin);
}
function enumUserCertificates(sCSPName) {
return oDevice.enumUserCertificates(sCSPName);
}
function getKeyRetrys(sExtLib) {
return oDevice.getKeyRetrys(sExtLib);
}
/////Util
function EnumUsbKey()
{
USBKEY.EnumUsbKey();
}
function getUserList_pnp() {
return USBKEY.getUserList();
}
function getUserList() {
g_xmluserlist = oUtil.getUserList();
return g_xmluserlist;
}
function getUserInfoByContainer_pnp(sContainerName, TypeID) {
return USBKEY.getUserInfoByContainer(sContainerName, TypeID);
}
function getUserInfoByContainer(sContainerName, TypeID) {
return oUtil.getUserInfoByContainer(sContainerName, TypeID);
}
function base64EncodeString(sInData) {
return oUtil.base64EncodeString(sInData);
}
function base64EncodeFile(sFilePath) {
return oUtil.base64EncodeFile(sFilePath);
}
function getUserCert(strContainerName)
{
var UserCert = getExchCert(strContainerName);
return UserCert;
}
function getExchCert(strContainerName)
{
var strDeviceType = getUserInfoByContainer(strContainerName, CERT_XML_DEVICETYPE);
var KeyType = getUserInfoByContainer(strContainerName, CERT_XML_KEYTYPE);
if (strDeviceType == "BJSOFT") {
//P12软算法
var Cert = getUserInfoByContainer(strContainerName,CERT_XML_EXCHPATH);
importCert(Cert,CERT_SRC_FILE);
}
else if (strDeviceType == "BJCSP0001"){
//软CSP
var Cert = getUserInfoByContainer(strContainerName,CERT_XML_EXCHPATH);
importCert(Cert,CERT_SRC_FILE);
}
else {
//智能卡
//var strDevType = getUserInfoByContainer(strContainerName, CERT_XML_DEVICETYPE);
var strCSPName = getUserInfoByContainer_pnp(strContainerName, CERT_XML_DEVICEPROVIDER);
importCert(strContainerName, CERT_SRC_CONTAINER_ENC, strCSPName);
}
var UserCert = exportCert(CERT_DST_BASE64);
return UserCert;
}
function getSignCert(strContainerName)
{
var strDeviceType = getUserInfoByContainer(strContainerName, CERT_XML_DEVICETYPE);
var KeyType = getUserInfoByContainer(strContainerName, CERT_XML_KEYTYPE);
if (strDeviceType == "BJSOFT") {
//P12软算法
if (KeyType == 1) {
//单证书
var Cert = getUserInfoByContainer(strContainerName,CERT_XML_EXCHPATH);
importCert(Cert,CERT_SRC_FILE);
}
else if (KeyType == 2) {
//双证书
var Cert = getUserInfoByContainer(strContainerName,CERT_XML_SIGNPATH);
importCert(Cert,CERT_SRC_FILE);
}
else {
alert("配置文件错误1");
return false;
}
}
else if (strDeviceType == "BJCSP0001"){
//软CSP
if (KeyType == 1) {
//单证书
var Cert = getUserInfoByContainer(strContainerName,CERT_XML_EXCHPATH);
importCert(Cert,CERT_SRC_FILE);
}
else if (KeyType == 2) {
//双证书
var Cert = getUserInfoByContainer(strContainerName,CERT_XML_SIGNPATH);
importCert(Cert,CERT_SRC_FILE);
}
else {
alert("配置文件错误2");
return false;
}
}
else {
//智能卡
//var strDevType = getUserInfoByContainer(strContainerName, CERT_XML_DEVICETYPE);
var strCSPName = getUserInfoByContainer_pnp(strContainerName, CERT_XML_DEVICEPROVIDER);
KeyType = getUserInfoByContainer_pnp(strContainerName, CERT_XML_KEYTYPE);
if (KeyType == 1) {
//单证书
importCert(strContainerName, CERT_SRC_CONTAINER_ENC, strCSPName);
}
else if (KeyType == 2) {
//双证书
importCert(strContainerName, CERT_SRC_CONTAINER_SIGN, strCSPName);
}
else {
alert("配置文件错误3,KeyType="+KeyType+"strContainerName="+strContainerName);
return false;
}
}
var UserCert = exportCert(CERT_DST_BASE64);
return UserCert;
}
/*
Function: getCertDetail
Parameter: strContainerName容器名
ItemNo 细目类型
* 0证书PEM编码
* 1证书版本
* 2证书序列号
* 3证书签名算法
* 4证书发放者国家名
* 5证书发放者组织名
* 6证书发放者部门名
* 7证书发放者省州名
* 8证书发放者通用名
* 9证书发放者城市名
* 10证书发放者EMAIL地址
* 11证书有效期起始
* 12证书有效期截止
* 13用户国家名
* 14用户组织名
* 15用户部门名
* 16用户省州名
* 17用户通用名
* 18用户城市名
* 19用户EMAIL地址
* 20用户DER公钥值
* 21用户证书自定义级别
* 22证书UniqueID
* 23证书剩余有效期
*/
//Parse Cert /////////////////////////////////////
function getCertDetail(strContainerName, ItemNo)
{
//新版证书应用获取细目
var sCert = getUserCert(strContainerName);
switch(ItemNo)
{
case 0:
return sCert;
break;
case 8:
return getCertBasicInfo(sCert,4);
break;
case 11:
return getCertBasicInfo(sCert,5);
break;
case 12:
return getCertBasicInfo(sCert,6);
break;
case 13:
return getCertBasicInfo(sCert,42);
break;
case 14:
return getCertBasicInfo(sCert,45);
break;
case 15:
return getCertBasicInfo(sCert,46);
break;
case 16:
return getCertBasicInfo(sCert,44);
break;
case 17:
return getCertBasicInfo(sCert,41);
break;
case 18:
return getCertBasicInfo(sCert,43);
break;
case 20:
return getCertBasicInfo(sCert,7);
break;
case 22:
return getExtCertInfoByOID("2.16.840.1.113732.2");
break;
case 23:
return checkValidaty();
break;
default:
return getCertBasicInfo(sCert,ItemNo);
break;
}
}
/*
Function: getCertDetail_Key不需要安装注册从Key中获得证书详细信息
Parameter:
ItemNo 细目类型
strContainerName容器名
keyType key类型
* 0证书PEM编码
* 1证书版本
* 2证书序列号
* 3证书签名算法
* 4证书发放者国家名
* 5证书发放者组织名
* 6证书发放者部门名
* 7证书发放者省州名
* 8证书发放者通用名
* 9证书发放者城市名
* 10证书发放者EMAIL地址
* 11证书有效期起始
* 12证书有效期截止
* 13用户国家名
* 14用户组织名
* 15用户部门名
* 16用户省州名
* 17用户通用名
* 18用户城市名
* 19用户EMAIL地址
* 20用户DER公钥值
* 21用户证书自定义级别
* 22证书UniqueID
* 23证书剩余有效期
*/
//Parse Cert /////////////////////////////////////
function getCertDetail_Key(ItemNo,strContainerName,keyType)
{
//新版证书应用获取细目
if(keyType==null || keyType=="")
{
keyType = "M&W eKey XCSP";
}
importCert(strContainerName, CERT_SRC_CONTAINER_ENC, keyType);
switch(ItemNo)
{
case 0:
var sCert = exportCert(CERT_DST_BASE64);
return sCert;
break;
case 8:
return getBasicCertInfoByOID(4);
break;
case 11:
return getBasicCertInfoByOID(5);
break;
case 12:
return getBasicCertInfoByOID(6);
break;
case 13:
return getBasicCertInfoByOID(42);
break;
case 14:
return getBasicCertInfoByOID(45);
break;
case 15:
return getBasicCertInfoByOID(46);
break;
case 16:
return getBasicCertInfoByOID(44);
break;
case 17:
return getBasicCertInfoByOID(41);
break;
case 18:
return getBasicCertInfoByOID(43);
break;
case 20:
return getBasicCertInfoByOID(7);
break;
case 22:
return getExtCertInfoByOID("2.16.840.1.113732.2");
break;
case 23:
return checkValidaty();
break;
default:
return getBasicCertInfoByOID(ItemNo);
break;
}
}
/*
Function: getCertDetail_Key不需要安装注册从Key中获得证书详细信息
Parameter: ItemNo 细目类型
keyType key类型
* 0证书PEM编码
* 1证书版本
* 2证书序列号
* 3证书签名算法
* 4证书发放者国家名
* 5证书发放者组织名
* 6证书发放者部门名
* 7证书发放者省州名
* 8证书发放者通用名
* 9证书发放者城市名
* 10证书发放者EMAIL地址
* 11证书有效期起始
* 12证书有效期截止
* 13用户国家名
* 14用户组织名
* 15用户部门名
* 16用户省州名
* 17用户通用名
* 18用户城市名
* 19用户EMAIL地址
* 20用户DER公钥值
* 21用户证书自定义级别
* 22证书UniqueID
* 23证书剩余有效期
*/
//Parse Cert /////////////////////////////////////
function getCertDetail_Key(ItemNo, keyType)
{
//新版证书应用获取细目
var strTemp;
var strContainerName;
var strExpireTime;
var i;
var len;
var sCert;
if(keyType==null || keyType=="")
{
keyType = "M&W eKey XCSP";
}
strTemp = enumUserCertificates(keyType);
while (1) {
i=strTemp.indexOf("&&&");
if (i <= 0) {
break;
}
var strContainerNameTmp = strTemp.substring(0,i);
importCert(strContainerNameTmp, CERT_SRC_CONTAINER_ENC, keyType);
sCert = exportCert(CERT_DST_BASE64);
var strExpireTimeTmp = getCertBasicInfo(sCert,6);
if(strExpireTime == null)
{
strExpireTime = strExpireTimeTmp;
strContainerName = strContainerNameTmp;
}
else if(strExpireTime != null && strExpireTime < strExpireTimeTmp)
{
strExpireTime = strExpireTimeTmp;
strContainerName = strContainerNameTmp;
}
else
{
}
len = strTemp.length;
strTemp = strTemp.substring(i+3,len);
}
importCert(strContainerName, CERT_SRC_CONTAINER_ENC, keyType);
switch(ItemNo)
{
case 0:
sCert = exportCert(CERT_DST_BASE64);
return sCert;
break;
case 8:
return getBasicCertInfoByOID(4);
break;
case 11:
return getBasicCertInfoByOID(5);
break;
case 12:
return getBasicCertInfoByOID(6);
break;
case 13:
return getBasicCertInfoByOID(42);
break;
case 14:
return getBasicCertInfoByOID(45);
break;
case 15:
return getBasicCertInfoByOID(46);
break;
case 16:
return getBasicCertInfoByOID(44);
break;
case 17:
return getBasicCertInfoByOID(41);
break;
case 18:
return getBasicCertInfoByOID(43);
break;
case 20:
return getBasicCertInfoByOID(7);
break;
case 22:
return getExtCertInfoByOID("2.16.840.1.113732.2");
break;
case 23:
return checkValidaty();
break;
default:
return getBasicCertInfoByOID(ItemNo);
break;
}
}
function envelopedDecodeData(sInData, sContainerName)
{
var decryptData="";
var strDeviceType = getUserInfoByContainer(sContainerName, CERT_XML_DEVICETYPE);
if (strDeviceType == "BJSOFT") {
//P12软算法
var exchpfx = getUserInfoByContainer(sContainerName,CERT_XML_EXCHPFXPATH);
decryptData = envelopedData(sInData,ENVELOP_DEC,exchpfx);
}
else if (strDeviceType == "BJCSP0001"){
//软CSP
decryptData = envelopedData(sInData,ENVELOP_DEC,sContainerName);
}
else {
//智能卡
decryptData = envelopedData(sInData,ENVELOP_DEC,sContainerName);
}
return decryptData;
}
function verifyCertByTrustPool(sCert) {
//因接口设定原因,增加无用数据
var sTemp = "temp";
var sTrustType = null;
var ret = null;
importCert(sCert, 1);
var TrustCount = getUserInfoByContainer(sTemp, CERT_XML_CACOUNTS);
for (i=1; i<=TrustCount; i++) {
sTrustType = getUserInfoByContainer(i, CERT_XML_CANUMTYPE);
sTrustPath = getUserInfoByContainer(sTrustType, 20);
ret = validateCert(sTrustPath);
if (ret == 0)
{
break;
}
}
}
function changeUserPassword(strContainerName,oldPwd,newPwd)
{
var strP12Path = null;
var rv = 0;
var strDeviceType = getUserInfoByContainer(strContainerName, CERT_XML_DEVICETYPE);
var KeyType = getUserInfoByContainer(strContainerName, CERT_XML_KEYTYPE);
if (strDeviceType == "BJSOFT") {
//P12软算法
if (KeyType == 1) {
//单证书
strP12Path = getUserInfoByContainer(strContainerName, CERT_XML_EXCHPFXPATH);
rv = modifyPFXPwd(strP12Path, oldPwd, newPwd);
}
else if (KeyType == 2) {
//双证书
strP12Path = getUserInfoByContainer(strContainerName, CERT_XML_SIGNPFXPATH);
var strExchPath = getUserInfoByContainer(strContainerName, CERT_XML_EXCHPFXPATH);
var rvtmp = modifyPFXPwd(strP12Path, oldPwd, newPwd);
rv = modifyPFXPwd(strExchPath, oldPwd, newPwd);
}
else {
alert("配置文件错误4");
return -1;
}
setUserCfg(CRYPT_CFGTYPE_P12, strP12Path, newPwd, "");
}
else if (strDeviceType == "BJCSP0001"){
//软CSP
var strDevType = getUserInfoByContainer(strContainerName, CERT_XML_DEVICETYPE);
var strCSPName = getUserInfoByContainer(strDevType, CERT_XML_DEVICEPROVIDER);
if (KeyType == 1) {
//单证书
strP12Path = getUserInfoByContainer(strContainerName, CERT_XML_EXCHPFXPATH);
rv = modifyPFXPwd(strP12Path, oldPwd, newPwd);
}
else if (KeyType == 2) {
//双证书
strP12Path = getUserInfoByContainer(strContainerName, CERT_XML_SIGNPFXPATH);
var strExchPath = getUserInfoByContainer(strContainerName, CERT_XML_EXCHPFXPATH);
var rvtmp = modifyPFXPwd(strP12Path, oldPwd, newPwd);
rv = modifyPFXPwd(strExchPath, oldPwd, newPwd);
}
else {
alert("配置文件错误5");
return -1;
}
var strExtLib = strContainerName;
setUserCfg(CRYPT_CFGTYPE_CSP, strCSPName, strExtLib, newPwd);
}
else {
//智能卡
//alert("strContainerName:"+strContainerName);
//alert("getUserInfoByContainer_pnp,CERT_XML_DEVICEPROVIDER...");
var strCSPName = getUserInfoByContainer_pnp(strContainerName, CERT_XML_DEVICEPROVIDER);
//alert("getUserInfoByContainer_pnp,CERT_XML_DEVICEAFFIX...");
var strExtLib = getUserInfoByContainer_pnp(strContainerName, CERT_XML_DEVICEAFFIX);
if (strExtLib == null)
strExtLib = "Temp";
//alert("strCSPName:"+strCSPName+"strExtLib:"+strExtLib);
rv = changeUserPin(strCSPName, strExtLib, oldPwd,newPwd);
//alert(rv);
setUserCfg(CRYPT_CFGTYPE_CSP, strCSPName, strExtLib, newPwd);
}
return rv;
}
function Login(strFormName,strContainerName,strPin) {
var ret;
var objForm = eval(strFormName);
if (objForm == null) {
alert("Form Error");
return false;
}
if (strPin == null || strPin == "") {
alert("请输入Key的保护口令");
return false;
}
//Add a hidden item ...
var strSignItem = "";
if (objForm.UserSignedData == null) {
objForm.insertAdjacentHTML("BeforeEnd",strSignItem);
}
var strCertItem = "";
if (objForm.UserCert == null) {
objForm.insertAdjacentHTML("BeforeEnd",strCertItem);
}
var strContainerItem = "";
if (objForm.ContainerName == null) {
objForm.insertAdjacentHTML("BeforeEnd",strContainerItem);
}
var strP12Path = null;
var strDeviceType = getUserInfoByContainer(strContainerName, CERT_XML_DEVICETYPE);
var KeyType = getUserInfoByContainer(strContainerName, CERT_XML_KEYTYPE);
var strCAType = getUserInfoByContainer(strContainerName, CERT_XML_CATYPE);
if (strDeviceType == "BJSOFT") {
//P12软算法
if (KeyType == 1) {
//单证书
strP12Path = getUserInfoByContainer(strContainerName, CERT_XML_EXCHPFXPATH);
}
else if (KeyType == 2) {
//双证书
strP12Path = getUserInfoByContainer(strContainerName, CERT_XML_SIGNPFXPATH);
}
else {
alert("配置文件错误6");
return false;
}
if (importCert(strP12Path, CERT_SRC_PKCS12, strPin) != 0) {
alert("口令错误");
return false;
}
setUserCfg(CRYPT_CFGTYPE_P12, strP12Path, strPin, "");
var strClientSignedData = signedDataByP7(strServerRan);
}
else if (strDeviceType == "BJCSP0001"){
//软CSP
var strDevType = getUserInfoByContainer(strContainerName, CERT_XML_DEVICETYPE);
var strCSPName = getUserInfoByContainer(strDevType, CERT_XML_DEVICEPROVIDER);
if (KeyType == 1) {
//单证书
strP12Path = getUserInfoByContainer(strContainerName, CERT_XML_EXCHPFXPATH);
}
else if (KeyType == 2) {
//双证书
strP12Path = getUserInfoByContainer(strContainerName, CERT_XML_SIGNPFXPATH);
}
else {
alert("配置文件错误7");
return false;
}
if (importCert(strP12Path, CERT_SRC_PKCS12, strPin) != 0) {
alert("口令错误");
return false;
}
var strExtLib = strContainerName;
setUserCfg(CRYPT_CFGTYPE_CSP, strCSPName, strExtLib, strPin);
var strClientSignedData = signedDataByP7(strServerRan, strContainerName);
}
else {
//智能卡
//var strDevType = getUserInfoByContainer(strContainerName, CERT_XML_DEVICETYPE);
//var strCSPName = getUserInfoByContainer(strDevType, CERT_XML_DEVICEPROVIDER);
//var strExtLib = getUserInfoByContainer(strDevType, CERT_XML_DEVICEAFFIX);
var strCSPName = getUserInfoByContainer_pnp(strContainerName, CERT_XML_DEVICEPROVIDER);
var strExtLib = getUserInfoByContainer_pnp(strContainerName, CERT_XML_DEVICEAFFIX);
KeyType = getUserInfoByContainer_pnp(strContainerName, CERT_XML_KEYTYPE);
//alert("智能卡:");
//alert("strCSPName:"+strCSPName);
//alert("strExtLib:"+strExtLib);
// alert("strPin:"+strPin);
if (strExtLib == null)
strExtLib = "Temp";
ret = userLogin(strCSPName, strPin);
if (ret != 0 ){
var retryNum = getKeyRetrys(strExtLib);
switch (retryNum) {
case -1010:
alert("未正确插入智能卡");
return false;
break;
case -1011:
alert("智能卡操作失败");
return false;
break;
case 0:
alert("USBKey已锁死!");
return false;
default:
alert("口令错误,重试还剩下"+retryNum+"次");
return false;
break;
}
}
if (KeyType == 1) {
//单证书
if(importCert(strContainerName, CERT_SRC_CONTAINER_ENC, strCSPName) != 0){
alert("口令错误或未正确插入智能卡");
return false;
}
}
else if (KeyType == 2) {
//双证书
if(importCert(strContainerName, CERT_SRC_CONTAINER_SIGN, strCSPName)!= 0){
alert("口令错误或未正确插入智能卡");
return false;
}
}
else {
alert("配置文件错误8");
return false;
}
setUserCfg(CRYPT_CFGTYPE_CSP, strCSPName, strExtLib, strPin);
var strClientSignedData = signedDataByP7(strServerRan, strContainerName);
}
/*
if (verifySignedDataByP7(strServerSignedData) != 0)
{
alert("验证服务器认证信息错误!");
return false;
}
*/
objForm.UserSignedData.value = strClientSignedData;
objForm.UserCert.value = exportCert(CERT_DST_BASE64);
objForm.ContainerName.value = strContainerName;
var rv = checkValidaty();
var bValidDay = alertValidDay(rv);
return bValidDay;
}
function CheckEncCode(strContainerName,code)
{
var strCSPName = getUserInfoByContainer_pnp(strContainerName, CERT_XML_DEVICEPROVIDER);
var msg = "系统检测发现您的USBKey可能存在问题,不能进行在线更新,请去受理点办理更新业务。";
try
{
var rv = BjcaKeyCtrl.UpdateManPin(strCSPName,
"BJCA-UserKey",
code,
code);
if(rv=="success" || rv=="0" || rv=="succeed")
{
BjcaKeyCtrl.SetNewEnvsn(strCSPName, "BJCA-UserKey", strContainerName);
return true;
}
else
{
alert(msg);
return false;
}
}
catch(e)
{
alert(msg);
return false;
}
}
function alertValidDay(ret)
{
/*var ValidDay;
ValidDay = parseInt(ret);
if(parseInt(ret) > 365){
// alert("证书还未生效!");
//return false;
}
if (parseInt(ret) <= 60 && parseInt(ret) > 0) {
alert("您的证书还有" + ValidDay + "天过期,\n请您尽快到北京数字认证股份有限公司办理证书更新手续。");
}
if(parseInt(ret) <= -45)
{
alert("您的证书已过期 "+ -parseInt(ret) +" 天,超过了最后使用期限!\n请到北京数字认证股份有限公司办理证书更新手续。");
return false;
}
if(parseInt(ret) <= 0){
alert("您的证书已过期 "+ -parseInt(ret) +" 天,\n请尽快到北京数字认证股份有限公司办理证书更新手续。");
}*/
return true;
}
//文件签名 返回签名数据
function SignFile(sFileName,sContainerName)
{
return oCrypto.signFile(sFileName,sContainerName);
}
function verifySignFile(sFileName,sCert,SignData)
{
return oCrypto.verifySignFile(sFileName,sCert,SignData);
}
function signedDataXML(signdata,ContainerName)
{
return oCrypto.signedDataXML(signdata,ContainerName);
}
function verifySignXML(signxml)
{
return oCrypto.verifySignedDataXML(signxml);
}
function getxmldata(signxml,i)
{
return oCrypto.getXMLSignatureInfo(signxml,i);
}
function CXMLSignRule()
{
this.XMLHeader = " ";
this.XMLDoc = new ActiveXObject("Microsoft.XMLDOM");
this.XMLDoc.async = false;
this.XMLDoc.loadXML("");
}
function gFuncURLEncode(str)
{
//return str;
var str1 = str;
var i, c;
var ret = ""
var strSpecial = "!\"#$%&'()*+,/:;<=>?@[\]^`{|}~%";
for(i = 0; i < str1.length ;i++ ){
c=str1.charAt(i);
if(c==" ")
str1=str1.replace(" ","+");
else if(strSpecial.indexOf(c)!=-1)
{
var temp = "%"+str1.charCodeAt(i).toString(16);
str1 =str1.replace(c,temp);
i=i+temp.length - 1;
}
}
return str1;
}
function gFuncFormItem2XML(strTag, strType, strValue)
{
if (strTag == "")
{
return false;
}
strTag = gFuncURLEncode(strTag);
var strPath = "/SecXMSG";
var objNode = g_objXML.XMLDoc.selectSingleNode(strPath);
var objTemp = g_objXML.XMLDoc.createElement(strTag);
objNode.appendChild(objTemp);
objTemp.setAttribute("Type", strType);
var objNode = g_objXML.XMLDoc.selectSingleNode("/SecXMSG/"+ strTag);
objNode.text = strValue;
//var objCDATA = g_objXML.XMLDoc.createCDATASection(strValue);
//objTemp.appendChild(objCDATA);
return true;
}
function GetUsbKeyList(strListID, strCommon)
{
var strTemp;
var strTemp_pnp;
var strOption;
var len;
var strName;
var strUniqueID;
var objListID = eval(strListID);
EnumUsbKey();
strTemp_pnp = getUserList_pnp();
while (1) {
i=strTemp_pnp.indexOf("&&&");
if (i <= 0) {
break;
}
strOption = strTemp_pnp.substring(0,i);
strName = strOption.substring(0, strOption.indexOf("||"));
strUniqueID = strOption.substring(strOption.indexOf("||") + 2, strOption.length);
if (strCommon != strUniqueID && strUniqueID != "BJCA MSSP Container" && strUniqueID != "BJCA MSSP Container/BJCA MSSP Dev")
{
var objItem = new Option(strName,strUniqueID);
objListID.add(objItem);
}
len = strTemp_pnp.length;
strTemp_pnp = strTemp_pnp.substring(i+3,len);
}
g_xmluserlist="";
var objListID = null;
}
function ChangeUsbKeyList(strListID, strCommon) {
var strTemp;
var strTemp_pnp;
var strOption;
var len;
var strName;
var strUniqueID;
var objListID = eval(strListID);
var i;
var n = objListID.length;
for(i=0;i