414 字
2 分鐘
[ChtICToken.js] func parseCertificate 取得憑證資訊 | 自然人憑證開發筆記
2024-01-08
無標籤

ChtICToken.js 中透過 parseCertificate 取得憑證資訊#

首頁 > 系列文 > 自然人憑證開發筆記

ChtICToken.js 版本:R1.0.0.57


parseCertificate(index, RevFun, keyidb64)#

parseCertificate 用於取得憑證資訊,原理與 getB64Certificate 大致相同,參數也一樣。以下為 parseCertificate 原始碼。

  • index 必填憑證選擇
    ▶ 選項:0 代表從 keyidb64 找到對應 id 的憑證,1 代表簽章憑證,2 代表加密憑證
  • RevFun 必填
    Callback Function
  • keyidb64 選填
    當 index=0,用來選擇憑證的 id,採用 Base64 格式

Response#

Callback funtion 中以 getICToken() 取得以下內容

{
"SmrtCrdID": ["TP03200302000000"],
"SlotID": ["InfoThink USB Reader 0"],
"SlotName": [],
"ActvSltID": ["0"],
"OldPIN": "",
"NewPIN": "",
"UID": "",
"CrdSys": "",
"KpMsg": "",
"exDynamicCreateFileInput": "",
"exDynamicReleaseFileInput": "",
"TBS": "TBS",
"TbsEncoding": "base64",
"HashAlgorithm": "SAH256",
"PIN": "",
"FUN": "GetUserCert",
"SType": "PKCS1",
"RetObj": {
"RCode": "0",
"RMsg": "",
"NotAfterYear": "2032",
"NotAfterMonth": "12",
"NotAfterDate": "5",
"NotBeforeYear": "2002",
"NotBeforeMonth": "12",
"NotBeforeDate": "5",
"Subject": "C=TW,O=Government Root Certification Authority",
"CertSN": "1F9D595AD72FC20644A5800869E35EF6",
"IssuerDN": "C=TW,O=Government Root Certification Authority",
"KeyUsage": "undefined",
"SubjectID": "undefined",
"CardRank": "undefined"
}
}

原始碼#

ICToken.prototype.parseCertificate = function (
index,
RevFun,
keyidb64,
keyseqid
) {
if (typeof keyidb64 === "undefined") keyidb64 = "__NotExistedTag__";
if (typeof keyseqid === "undefined") keyseqid = "__NotExistedTag__";
UsrPrsCrt(index, RevFun, keyidb64, keyseqid);
};
function UsrPrsCrt(index, UrRevFUN, keyidb64, keyseqid) {
if (typeof keyidb64 === "undefined") keyidb64 = "__NotExistedTag__";
if (typeof keyseqid === "undefined") keyseqid = "__NotExistedTag__";
var l_iRetCode = 0;
var l_CertInfo = "";
var l_vExp;
var l_vRetData;
var l_vTemp;
var l_vRMsg;
l_vRMsg = "";
InToken.FUN = "GetUserCert";
GARevFun.FUN = "PrsCrt";
GARevFun.Para = index;
GARevFun.keyidb64 = keyidb64;
GARevFun.keyseqid = keyseqid;
//GARevFun.PopTout=900000;
GARevFun.UrFUN = UrRevFUN;
switch (index) {
case 0:
l_vExp = reg(GARevFun.keyidb64);
break;
case 1:
l_vExp = /^digitalSignature$/i;
break;
case 2:
l_vExp = /keyEncipherment|dataEncipherment/i;
break;
case 99:
l_vExp = reg(GARevFun.keyseqid);
break;
default:
l_iRetCode = 3800;
l_vRMsg = rMsg(l_iRetCode, "");
break;
}
if (UrRevFUN == null) {
l_iRetCode = 3802;
l_vRMsg = rMsg(l_iRetCode, "");
alert("輸入參數錯誤或不足");
}
if (checkGoodDay() == false) {
l_iRetCode = 3801;
l_vRMsg = rMsg(l_iRetCode, "");
}
if (l_iRetCode == 0) {
SendData(
"http://localhost:61161/pkcs11info?withcert=true",
"http://localhost:61161/ChtPopupForm",
"IC卡讀取中",
Gbjct.PppFrmStyle,
PrsCrt,
UrRevFUN
);
} else {
l_vRetData = '{"RCode":"' + l_iRetCode + '","RMsg":"' + l_vRMsg + '"}';
InToken.RetObj = JSON.parse(l_vRetData);
if (UrRevFUN && typeof UrRevFUN === "function") UrRevFUN();
}
}