414 字
2 分鐘
[ChtICToken.js] func parseCertificate 取得憑證資訊 | 自然人憑證開發筆記
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(); }}