//HCAFrame and HCAObjName var hcaframeId = "hcaframe"; var hcaObjectId = "myobj"; //GPKIFrame and GPKIObjectName var gkpiframeId = "gpkiframe"; var gkpiObjectId = "fsgpkicrypt"; //FSCAPFrame and FSCObjectName var fscframeId = "fscframe"; var fscObjectId = "cenroll"; //國民(自然人) var CERT_TYPE_MOICA_E = 'MOICA'; //商號//公司//分公司 var CERT_TYPE_MOEACA_E = 'MOEACA'; //政府機關//政府單位 var CERT_TYPE_GCA_E = 'GCA'; //學校//社團法人//財團法人 var CERT_TYPE_XCA_E = 'XCA'; // 醫事人員//醫事機構 var CERT_TYPE_HCA_E = 'HCA'; var CERT_TYPE_VERISIGN_E = 'VeriSign'; var CERT_TYPE_TWCA_E = 'TWCA'; var DEFAULT_ENCODE = 'UTF-8'; var DEFAULT_ENCODE_CODE = 65001; //憑證filter var FS_KU_DIGITAL_SIGNATURE = 0x0080 ; //選擇方式 var FSCAPI_FLAG_SELCERT_MANUAL = 0x00000001; var FSCAPI_FLAG_SELCERT_AUTO = 0x00000002; //簽章結果,包含簽章結果,錯誤代碼,卡別及錯誤描述 function signResult(errorCode,signature,cardNo,description,attributeCert){ this.signature = signature; this.errorCode = errorCode; //this.serialNo = serialNo; this.cardNo= cardNo; this.description = description; //附屬憑證 this.attributeCert = attributeCert; } //憑證資訊 function CertInfo(errorCode,certContent,certSubject,cardType,cardHolderRank,issuerSubject,serialNo,startTime,endTime,description,attributeCert){ //錯誤代碼 this.errorCode = errorCode; //錯誤描述 this.description = description; //憑證內容 this.certContent = certContent; //憑證主旨 this.certSubject = certSubject; //卡別 this.cardType = cardType; //憑證主附 this.cardHolderRank=cardHolderRank; //發行者之主旨 this.issuerSubject = issuerSubject; //憑證序號 this.serialNo = serialNo; //憑證起始日 this.startTime = startTime; //憑證有效日 this.endTime = endTime; //附屬憑證 this.attributeCert = attributeCert; } //transfer CertType function transferCertType(cert_type,flag) { var FS_RTN_CERT_TYPE_UNKNOWN = 70 ; // UNKNOWN TYPE var FS_CERT_TYPE_1 = 101 ; // 國民 var FS_CERT_TYPE_2 = 102 ; // 政府機關 var FS_CERT_TYPE_3 = 103 ; // 政府單位 var FS_CERT_TYPE_4 = 104 ; // 學校 var FS_CERT_TYPE_5 = 105 ; // 公司 var FS_CERT_TYPE_6 = 106 ; // 社團法人 var FS_CERT_TYPE_7 = 107 ; // 財團法人 var FS_CERT_TYPE_8 = 108 ; // 商號 var FS_CERT_TYPE_9 = 109 ; // 分公司 var FS_CERT_TYPE_10 = 110 ; // ServerAP var FS_CERT_TYPE_11 = 111 ; // 醫事人員, HCA var FS_CERT_TYPE_12 = 112 ; // 醫事機構, HCA var FS_CERT_TYPE_111 = 1 ; // 醫事人員, HCA var FS_CERT_TYPE_121 = 0 ; // 醫事機構, HCA var FS_CERT_TYPE_13 = 113 ; // 自由職業事務所, XCA var FS_CERT_TYPE_14 = 114 ; // 其他組織或團體, XCA var CERT_TYPE_MOICA_C = '自然人憑證'; var CERT_TYPE_MOEACA_C = '工商憑證'; var CERT_TYPE_GCA_C = '政府憑證'; var CERT_TYPE_XCA_C = '組織及團體憑證'; var CERT_TYPE_VERISIGN_C = 'VeriSign'; var CERT_TYPE_TWCA_C = '台網憑證'; var CERT_TYPE_HCA_C = '醫事憑證'; switch(cert_type) { case FS_CERT_TYPE_1: return (flag=='tw') ? CERT_TYPE_MOICA_C : CERT_TYPE_MOICA_E; //國民(自然人) case FS_CERT_TYPE_2: return (flag=='tw') ? CERT_TYPE_GCA_C : CERT_TYPE_GCA_E; //政府機關 case FS_CERT_TYPE_3: return (flag=='tw') ? CERT_TYPE_GCA_C : CERT_TYPE_GCA_E; //政府單位 case FS_CERT_TYPE_4: return (flag=='tw') ? CERT_TYPE_XCA_C : CERT_TYPE_XCA_E; //學校 case FS_CERT_TYPE_5: return (flag=='tw') ? CERT_TYPE_MOEACA_C : CERT_TYPE_MOEACA_E; //公司 case FS_CERT_TYPE_6: return (flag=='tw') ? CERT_TYPE_XCA_C : CERT_TYPE_XCA_E; //社團法人 case FS_CERT_TYPE_7: return (flag=='tw') ? CERT_TYPE_XCA_C : CERT_TYPE_XCA_E; //財團法人 case FS_CERT_TYPE_8: return (flag=='tw') ? CERT_TYPE_MOEACA_C : CERT_TYPE_MOEACA_E; //商號 case FS_CERT_TYPE_9: return (flag=='tw') ? CERT_TYPE_MOEACA_C : CERT_TYPE_MOEACA_E; //分公司 case FS_CERT_TYPE_10: return (flag=='tw') ? "ServerAP" : ServerAP; case FS_CERT_TYPE_11: return (flag=='tw') ? CERT_TYPE_HCA_C : CERT_TYPE_HCA_E;//醫事人員 case FS_CERT_TYPE_12: return (flag=='tw') ? CERT_TYPE_HCA_C : CERT_TYPE_HCA_E;// 醫事機構 case FS_CERT_TYPE_111: return (flag=='tw') ? CERT_TYPE_HCA_C : CERT_TYPE_HCA_E;//醫事人員 case FS_CERT_TYPE_121: return (flag=='tw') ? CERT_TYPE_HCA_C : CERT_TYPE_HCA_E;// 醫事機構 case FS_CERT_TYPE_13: return (flag=='tw') ? CERT_TYPE_XCA_C : CERT_TYPE_XCA_E;//自由職業事務所 case FS_CERT_TYPE_14: return (flag=='tw') ? CERT_TYPE_XCA_C : CERT_TYPE_XCA_E;//其他組織或團體 case FS_RTN_CERT_TYPE_UNKNOWN: return (flag=='tw') ? "Unknown" : "Unknown"; case 0: return ""; default: return cert_type; } } function installerror() { alert('安裝ActiveX元件失敗或IE安全性設定不允許執行ActiceX元件'); } function signDataByFSC(bindata,errorDesciptionLocale){ var result = new signResult(); isInstallActiveX(fscframeId,result); if(result.errorCode!=0){ return result; } fscobj = getFSCObj(); //代表UTF-8 fscobj.SetCodePage(DEFAULT_ENCODE_CODE); locale =transferLocale(errorDesciptionLocale); //var signature =fscobj.FSCAPISign(bindata,'',FSCAPI_FLAG_SELCERT_MANUAL,FS_KU_DIGITAL_SIGNATURE); //var issurer="CN = TWCA Financial User CA\nOU = User CA\nO = TWCA\nC = TW"; //var issurer="CN=TWCA Financial User CA\nOU=User CA\nO=TWCA\nC=TW"; //var issure="OU=政府測試憑證管理中心\nO=行政院\nC=TW"; var issure=""; var subject = ''; var csp = ""; var pin = ""; //Add by Abigalf For SHA2 at 2013/04/15 // signature = fscobj.FSCAPISignEx2(bindata, DEFAULT_ENCODE, subject, issure, csp, pin, FSCAPI_FLAG_SELCERT_MANUAL,FS_KU_DIGITAL_SIGNATURE); var CG_ALGOR_SHA256 = 0x04; signature = fscobj.CAPISign(bindata, DEFAULT_ENCODE, subject, issure, csp, pin, FSCAPI_FLAG_SELCERT_MANUAL, CG_ALGOR_SHA256, FS_KU_DIGITAL_SIGNATURE); result.signature=signature; result.errorCode=fscobj.GetErrorCode(); result.description=transferErrorCodeToDescription(fscobj.GetErrorCode(),locale); return result; } function signDataByFSCPFX(pfxFilePath,pwd,bindata,errorDesciptionLocale){ var result = new signResult(); isInstallActiveX(fscframeId,result); if(result.errorCode!=0){ return result; } fscobj = getFSCObj(); //代表UTF-8 fscobj.SetCodePage(DEFAULT_ENCODE_CODE); locale =transferLocale(errorDesciptionLocale); //alert("pfxFilePath-->"+pfxFilePath); //alert("pwd-->"+pwd); //alert("bindata-->"+bindata); //var signature =fscobj.FSCAPI_PFXSign(pfxFilePath,pwd,bindata,1,4); //var signature =fscobj.FSCAPI_PFXSign(pfxFilePath,pwd,bindata,0x00000001,0x0004); //var signature =fscobj.FSCAPI_PFXSign(pfxFilePath,pwd,bindata,0x00000002,1); //Add by Abigalf For SHA2 at 2013/04/15 //var signature =fscobj.FSCAPI_PFXSign(pfxFilePath,pwd,bindata,FSCAPI_FLAG_SELCERT_AUTO,FS_KU_DIGITAL_SIGNATURE); var CG_ALGOR_SHA256 = 0x04; var signature = fscobj.CAPI_PFXSign(pfxFilePath, pwd, bindata, FSCAPI_FLAG_SELCERT_AUTO, CG_ALGOR_SHA256, FS_KU_DIGITAL_SIGNATURE); //var signature =fscobj.FSCAPI_PFXPureSign(pfxFilePath,pwd,bindata,0x00000001,0x00020000,0x0004); //var signature =fscobj.FSCAPI_PFXSign(pfxFilePath,pwd,bindata,0x00000001,0x0004); result.signature=signature; result.errorCode=fscobj.GetErrorCode(); result.description=transferHCAErrorToDescription(fscobj.GetErrorCode(),locale); return result; } function signDataByHCA(bindata,pwd,oriCardNo,errorDesciptionLocale){ var result = new signResult(); isInstallActiveX(hcaframeId,result); if(result.errorCode!=0){ return result; } hcaobj = getHCAObj(); locale =transferLocale(errorDesciptionLocale); //Get CardNo cardNo = hcaobj.FSHCA_GetCardSN(); result.cardNo = cardNo; result.errorCode=hcaobj.FSHCA_GetErrorCode(); if(result.errorCode!=0){ result.description=transferHCAErrorToDescription(result.errorCode,locale); return result; } if(oriCardNo!=undefined && oriCardNo !=null && oriCardNo !=''){ if(cardNo!=oriCardNo){ result.errorCode='Card has changed.(CardNo not match)'; result.description='Card has changed.(CardNo not match)'; return result; } } var readers = hcaobj.FSHCA_GetReaderNames(0); if(readers==null){ result.errorCode='reader no found'; return result; } var this_readername = readers.toArray()[0]; //代表UTF-8 hcaobj.SetCodePage(DEFAULT_ENCODE_CODE); //密碼直接帶入 //var signature ; //if(pwd!=undefined && pwd !=null){ //signature = hcaobj.FSHCA_SignByReader(this_readername,pwd,bindata,0); //}else{ //signature = hcaobj.FSHCA_SignByReader(this_readername,'',bindata,0); //} //Add by Abigalf For SHA2 at 2013/04/15 var CG_ALGOR_SHA256 = 0x04; var signature ; if(pwd!=undefined && pwd !=null){ signature = hcaobj.HCA_SignByReader(this_readername, pwd, bindata, 0, CG_ALGOR_SHA256); }else{ signature = hcaobj.HCA_SignByReader(this_readername, '', bindata, 0, CG_ALGOR_SHA256); } result.signature=signature; result.errorCode=hcaobj.FSHCA_GetErrorCode(); result.description=transferHCAErrorToDescription(result.errorCode,locale); return result; } function transferHCAErrorToDescription(errorCode,locale){ return transferErrorCodeToDescription(errorCode,locale);; } function transferGPKIErrorToDescription(errorCode,locale){ return transferErrorCodeToDescription(errorCode,locale); } function transferErrorCodeToDescription(errno, flag){ /* ---------------------------------------------------------------------- */ /* * Active X error code define */ //PKCS#11 var FSP11_RTN_OK = 0; var FSP11_RTN_CANCEL = 9001; var FSP11_RTN_HOST_MEMORY = 9002; var FSP11_RTN_SLOT_ID_INVALID = 9003; var FSP11_RTN_GENERAL_ERROR = 9004; var FSP11_RTN_FUNCTION_FAILED = 9005; var FSP11_RTN_ARGUMENTS_BAD = 9006; var FSP11_RTN_NO_EVENT = 9007; var FSP11_RTN_NEED_TO_CREATE_THREADS = 9008; var FSP11_RTN_CANT_LOCK = 9009; var FSP11_RTN_ATTRIBUTE_READ_ONLY = 9010; var FSP11_RTN_ATTRIBUTE_SENSITIVE = 9011; var FSP11_RTN_ATTRIBUTE_TYPE_INVALID = 9012; var FSP11_RTN_ATTRIBUTE_VALUE_INVALID = 9013; var FSP11_RTN_DATA_INVALID = 9014; var FSP11_RTN_DATA_LEN_RANGE = 9015; var FSP11_RTN_DEVICE_ERROR = 9016; var FSP11_RTN_DEVICE_MEMORY = 9017; var FSP11_RTN_DEVICE_REMOVED = 9018; var FSP11_RTN_ENCRYPTED_DATA_INVALID = 9019; var FSP11_RTN_ENCRYPTED_DATA_LEN_RANGE = 9020; var FSP11_RTN_FUNCTION_CANCELED = 9021; var FSP11_RTN_FUNCTION_NOT_PARALLEL = 9022; var FSP11_RTN_FUNCTION_NOT_SUPPORTED = 9023; var FSP11_RTN_KEY_HANDLE_INVALID = 9024; var FSP11_RTN_KEY_SIZE_RANGE = 9025; var FSP11_RTN_KEY_TYPE_INCONSISTENT = 9026; var FSP11_RTN_KEY_NOT_NEEDED = 9027; var FSP11_RTN_KEY_CHANGED = 9028; var FSP11_RTN_KEY_NEEDED = 9029; var FSP11_RTN_KEY_INDIGESTIBLE = 9030; var FSP11_RTN_KEY_FUNCTION_NOT_PERMITTED = 9031; var FSP11_RTN_KEY_NOT_WRAPPABLE = 9032; var FSP11_RTN_KEY_UNEXTRACTABLE = 9033; var FSP11_RTN_MECHANISM_INVALID = 9034; var FSP11_RTN_MECHANISM_PARAM_INVALID = 9035; var FSP11_RTN_OBJECT_HANDLE_INVALID = 9036; var FSP11_RTN_OPERATION_ACTIVE = 9037; var FSP11_RTN_OPERATION_NOT_INITIALIZED = 9038; var FSP11_RTN_PIN_INCORRECT = 9039; var FSP11_RTN_PIN_INVALID = 9040; var FSP11_RTN_PIN_LEN_RANGE = 9041; var FSP11_RTN_PIN_EXPIRED = 9042; var FSP11_RTN_PIN_LOCKED = 9043; var FSP11_RTN_SESSION_CLOSED = 9044; var FSP11_RTN_SESSION_COUNT = 9045; var FSP11_RTN_SESSION_HANDLE_INVALID = 9046; var FSP11_RTN_SESSION_PARALLEL_NOT_SUPPORTED = 9047; var FSP11_RTN_SESSION_READ_ONLY = 9048; var FSP11_RTN_SESSION_EXISTS = 9049; var FSP11_RTN_SESSION_READ_ONLY_EXISTS = 9050; var FSP11_RTN_SESSION_READ_WRITE_SO_EXISTS = 9051; var FSP11_RTN_SIGNATURE_INVALID = 9052; var FSP11_RTN_SIGNATURE_LEN_RANGE = 9053; var FSP11_RTN_TEMPLATE_INCOMPLETE = 9054; var FSP11_RTN_TEMPLATE_INCONSISTENT = 9055; var FSP11_RTN_TOKEN_NOT_PRESENT = 9056; var FSP11_RTN_TOKEN_NOT_RECOGNIZED = 9057; var FSP11_RTN_TOKEN_WRITE_PROTECTED = 9058; var FSP11_RTN_UNWRAPPING_KEY_HANDLE_INVALID = 9059; var FSP11_RTN_UNWRAPPING_KEY_SIZE_RANGE = 9060; var FSP11_RTN_UNWRAPPING_KEY_TYPE_INCONSISTENT = 9061; var FSP11_RTN_USER_ALREADY_LOGGED_IN = 9062; var FSP11_RTN_USER_NOT_LOGGED_IN = 9063; var FSP11_RTN_USER_PIN_NOT_INITIALIZED = 9064; var FSP11_RTN_USER_TYPE_INVALID = 9065; var FSP11_RTN_USER_ANOTHER_ALREADY_LOGGED_IN = 9066; var FSP11_RTN_USER_TOO_MANY_TYPES = 9067; var FSP11_RTN_WRAPPED_KEY_INVALID = 9068; var FSP11_RTN_WRAPPED_KEY_LEN_RANGE = 9069; var FSP11_RTN_WRAPPING_KEY_HANDLE_INVALID = 9070; var FSP11_RTN_WRAPPING_KEY_SIZE_RANGE = 9071; var FSP11_RTN_WRAPPING_KEY_TYPE_INCONSISTENT = 9072; var FSP11_RTN_RANDOM_SEED_NOT_SUPPORTED = 9073; var FSP11_RTN_RANDOM_NO_RNG = 9074; var FSP11_RTN_BUFFER_TOO_SMALL = 9075; var FSP11_RTN_SAVED_STATE_INVALID = 9076; var FSP11_RTN_INFORMATION_SENSITIVE = 9077; var FSP11_RTN_STATE_UNSAVEABLE = 9078; var FSP11_RTN_CRYPTOKI_NOT_INITIALIZED = 9079; var FSP11_RTN_CRYPTOKI_ALREADY_INITIALIZED = 9080; var FSP11_RTN_MUTEX_BAD = 9081; var FSP11_RTN_MUTEX_NOT_LOCKED = 9082; var FSP11_RTN_VENDOR_DEFINED = 9083; var FSP11_RTN_MEMORY_ALLOCATE_FAIL = 5002; var FSP11_RTN_OBJECT_NOT_EXIST = 9100; var FSP11_RTN_OBJECT_EXIST = 9101; var FSP11_RTN_OBJECT_HAS_PROBLEM = 9102; var FSP11_RTN_LOAD_LIBRARY_FAIL = 9110; var FSP11_RTN_LIBRARY_NOT_LOAD = 9111; var FSP11_RTN_SLOT_NOT_FOUND = 9112; var FSP11_RTN_FORCE_USER_CHANGE_PIN = 9990; var FSP11_RTN_UNKNOW_ERROR = 9999; //openSSL var FS_RTN_SUCCESS = 0; var FS_RTN_ERROR = 5001; var FS_RTN_MEMALLOC_ERROR = 5002; var FS_RTN_BUFFER_TOO_SMALL = 5003; var FS_RTN_FUNCTION_UNSUPPORT = 5004; var FS_RTN_INVALID_PARAM = 5005; var FS_RTN_INVALID_HANDLE = 5006; var FS_RTN_LIB_EXPIRE = 5007; var FS_RTN_BASE64_ERROR = 5008; var FS_RTN_CERT_NOT_FOUND = 5010; var FS_RTN_CERT_EXPIRED = 5011; var FS_RTN_CERT_NOT_YET_VALID = 5012; var FS_RTN_CERT_EXPIRE_OR_NOT_YET_USE = 5013; var FS_RTN_CERT_DENIED = 5014; var FS_RTN_CERT_NOISSUER = 5015; var FS_RTN_CERT_BAD_SIGNATURE = 5016; var FS_RTN_CERT_INVALID_KEYUSAGE = 5017; var FS_RTN_CERT_REVOKED = 5020; var FS_RTN_CERT_UNSPECIFIED = 5020; var FS_RTN_CERT_KEY_COMPROMISED = 5021; var FS_RTN_CERT_CA_COMPROMISED = 5022; var FS_RTN_CERT_AFFILIATION_CHANGED = 5023; var FS_RTN_CERT_SUPERSEDED = 5024; var FS_RTN_CERT_CESSATION = 5025; var FS_RTN_CERT_HOLD = 5026; var FS_RTN_CERT_REMOVEFROMCRL = 5028; var FS_RTN_CRL_EXPIRED = 5030; var FS_RTN_CRL_NOT_YET_VALID = 5031; var FS_RTN_CRL_NOT_FOUND = 5032; var FS_RTN_CRL_BAD_SIGNATURE = 5034; var FS_RTN_GET_DIGEST_ERROR = 5035; var FS_RTN_BAD_SIGNATURE = 5036; var FS_RTN_BAD_CONTENT = 5037; var FS_RTN_INVALID_CERT = 5040; var FS_RTN_INVALID_CRL = 5041; var FS_RTN_INVALID_PKCS7 = 5042; var FS_RTN_INVALID_KEY = 5043; var FS_RTN_INVALID_CERTREQ = 5044; var FS_RTN_INVALID_FORMAT = 5045; var FS_RTN_INVALID_PKCS12 = 5046; var FS_RTN_OBJ_NOT_FOUND = 5050; var FS_RTN_PKCS7_NO_CONTENT = 5051; var FS_RTN_PKCS7_NO_CERTIFICATE = 5052; var FS_RTN_PKCS7_NO_SIGNERINFO = 5053; var FS_RTN_UNMATCH_CERT_KEY = 5060; var FS_RTN_SIGN_ERROR = 5061; var FS_RTN_VERIFY_ERROR = 5062; var FS_RTN_ENCRYPT_ERROR = 5063; var FS_RTN_DECRYPT_ERROR = 5064; var FS_RTN_GENKEY_ERROR = 5065; var FS_RTN_OPERATION_CANCELED = 5070; var FS_RTN_PASSWD_INVALID = 5071; var FS_RTN_PKCS12_NO_AUTHSAFES = 5091; var FS_RTN_PKCS12_DECODE_BAG_ERROR = 5092; var FS_RTN_PKCS12_DECRYPT_ERROR = 5093; var FS_RTN_PKCS12_GETKEY_ERROR = 5094; var FS_RTN_PKCS12_GETCERT_ERROR = 5095; var FS_RTN_INVALID_STATE = 5100; var FS_RTN_OUT_OF_RANGE = 5101; //CAPI var FS_RTN_ERROR = 5001; var FS_RTN_MEMALLOC_ERROR = 5002; var FS_RTN_BUFFER_TOO_SMALL = 5003; var FS_RTN_FUNCTION_UNSUPPORT = 5004; var FS_RTN_INVALID_PARAM = 5005; var FS_RTN_INVALID_HANDLE = 5006; var FS_RTN_LIB_EXPIRE = 5007; var FS_RTN_BASE64_ERROR = 5008; var FS_RTN_CERT_NOT_FOUND = 5010; var FS_RTN_CERT_EXPIRED = 5011; var FS_RTN_CERT_NOT_YET_VALID = 5012; var FS_RTN_CERT_EXPIRE_OR_NOT_YET_USE = 5013; var FS_RTN_CERT_DENIED = 5014; var FS_RTN_CERT_NOISSUER = 5015; var FS_RTN_CERT_BAD_SIGNATURE = 5016; var FS_RTN_CERT_INVALID_KEYUSAGE = 5017; var FS_RTN_CERT_REVOKED = 5020; var FS_RTN_CERT_UNSPECIFIED = 5020; var FS_RTN_CERT_KEY_COMPROMISED = 5021; var FS_RTN_CERT_CA_COMPROMISED = 5022; var FS_RTN_CERT_AFFILIATION_CHANGED = 5023; var FS_RTN_CERT_SUPERSEDED = 5024; var FS_RTN_CERT_CESSATION = 5025; var FS_RTN_CERT_HOLD = 5026; var FS_RTN_CERT_REMOVEFROMCRL = 5028; var FS_RTN_CRL_EXPIRED = 5030; var FS_RTN_CRL_NOT_YET_VALID = 5031; var FS_RTN_CRL_NOT_FOUND = 5032; var FS_RTN_CRL_BAD_SIGNATURE = 5034; var FS_RTN_GET_DIGEST_ERROR = 5035; var FS_RTN_BAD_SIGNATURE = 5036; var FS_RTN_BAD_CONTENT = 5037; var FS_RTN_INVALID_CERT = 5040; var FS_RTN_INVALID_CRL = 5041; var FS_RTN_INVALID_PKCS7 = 5042; var FS_RTN_INVALID_KEY = 5043; var FS_RTN_INVALID_CERTREQ = 5044; var FS_RTN_INVALID_FORMAT = 5045; var FS_RTN_INVALID_PKCS12 = 5046; var FS_RTN_OBJ_NOT_FOUND = 5050; var FS_RTN_PKCS7_NO_CONTENT = 5051; var FS_RTN_PKCS7_NO_CERTIFICATE = 5052; var FS_RTN_PKCS7_NO_SIGNERINFO = 5053; var FS_RTN_UNMATCH_CERT_KEY = 5060; var FS_RTN_SIGN_ERROR = 5061; var FS_RTN_VERIFY_ERROR = 5062; var FS_RTN_ENCRYPT_ERROR = 5063; var FS_RTN_DECRYPT_ERROR = 5064; var FS_RTN_GENKEY_ERROR = 5065; var FS_RTN_DELETE_USR_CERT_ERROR = 5066; var FS_RTN_UNICODE_ERROR = 5901; var FS_RTN_OPERATION_CANCELED = 5070; var FS_RTN_PASSWD_INVALID = 5071; var FS_RTN_XMLPARSE_ERROR = 5080; var FS_RTN_XMLTAG_NOTFOUND = 5081; var FS_RTN_FILE_NOT_FOUND = 5902; var FS_RTN_PATH_NOT_FOUND = 5903; var FS_RTN_BAD_NETPATH = 5904; var FS_RTN_LOGON_FAILURE = 5905; var FS_RTN_ACCESS_DENIED = 5906; //XML var FSXML_RTN_SUCCESS = 0; var FSXML_RTN_ERROR = 7701; var FSXML_RTN_INVALID_ALGORITHM = 7704; var FSXML_RTN_CRYPT_FAIL = 7705; var FSXML_RTN_INCORRECT_SIGNATURE = 7706; var FSXML_RTN_INCORRECT_REFERENCE = 7707; var FSXML_RTN_C14N_FAIL = 7708; var FSXML_RTN_TRANSFORM_FAIL = 7709; var FSXML_RTN_RESOLVER_FAIL = 7710; var FSXML_RTN_NO_SIGNATURE = 7711; var FSXML_RTN_PARSER_ERROR = 7712; var FSXML_RTN_URI_NOT_EXIST = 7713; var FSXML_RTN_X509DATA_MISMATCH = 7714; var FSXML_RTN_ERROR_XML_DOC = 7715; var FSXML_RTN_INVALID_PARAM = 7716; var FSXML_RTN_INVALID_C14N_ALG = 7717; var FSXML_RTN_INVALID_SIGNATURE_ALG = 7718; var FSXML_RTN_INVALID_DIGEST_ALG = 7719; var FSXML_RTN_INVALID_ENCRYPTION_ALG = 7720; var FSXML_RTN_INVALID_ENCRYPTION_PARM = 7721; var FSXML_RTN_INVALID_RETRIEVAL_TYPE = 7722; var FSXML_RTN_NO_ENCRYPTEDKEY = 7723; var FSXML_RTN_NO_ENCRYPTEDDATA = 7724; var FSXML_RTN_NO_CIPHERVALUE = 7725; var FSXML_RTN_LOSE_TRANSPORTKEY = 7726; //HCA var FSCARD_RTN_CONNECT_FAIL = 3001; var FSCARD_RTN_SELECT_APPLET_FAIL = 3002; var FSCARD_RTN_ESTABLISH_CONTEXT_FAIL = 3003; var FSCARD_RTN_CARD_STATUS_ERROR = 3004; var FSCARD_RTN_CARD_ABSENT = 3005; var FSCARD_RTN_TRANSMIT_ERROR = 3006; var FSCARD_RTN_GET_DATA_ERROR = 3007; var FSCARD_RTN_LOGIN_FAIL = 3008; var FSCARD_RTN_READERS_BUFFER_FAIL = 3009; var FSCARD_RTN_GET_READERS_FAIL = 3010; var FSCARD_RTN_NO_READER = 3011; var FSCARD_RTN_MEMALLOC_ERROR = 3012; var FSCARD_RTN_LIST_READERS_ERROR = 3013; var FSCARD_RTN_CHAR2WCHAR_ERROR = 3014; var FSCARD_RTN_WCHAR2CHAR_ERROR = 3015; var FSCARD_RTN_INVALID_PARAM = 3016; var FSCARD_RTN_LIB_EXPIRE = 3017; var FSCARD_RTN_GEN_PKCS7_FAIL = 3018; var FSCARD_RTN_DATA_HASH_ERROR = 3019; var FSCARD_RTN_PIN_LENGTH_ERROR = 3020; var FSCARD_RTN_PIN_LOCK = 3021; var FSCARD_RTN_UNKNOWN_PROTOCOL = 3022; var FSCARD_RTN_UNKNOWN_STATE = 3023; var FSCARD_RTN_FUNCTION_UNSUPPORT = 3024; var FSCARD_RTN_OPERATION_CANCELED = 3025; var FSCARD_RTN_GET_PASSWD_FAIL = 3026; var FSCARD_RTN_DATA_ENCODE_FAIL = 3027; var FSCARD_RTN_UNICODE_ERROR = 3028; var FSCARD_RTN_ICONV_OPEN_FAIL = 3029; var FSCARD_RTN_TRANSFORM_FAIL = 3030; var FSHCACS_RTN_LOAD_LIBRARY_FAIL = 3031; var FSHCACS_RTN_LIBRARY_NOT_LOAD = 3032; var FSCARD_RTN_UNKNOWN_ERROR = 3999; //SCARD var FS_RTN_SCARD_ESTABLISH_CONTEXT_ERROR = 10; var FS_RTN_SCARD_LIST_READERS_ERROR = 11; var FS_RTN_SCARD_GET_STATUS_ERROR = 12; var FS_RTN_SCARD_INVALID_STATUS = 13; var FS_RTN_SCARD_CARD_ABSENT = 14; var FS_RTN_SCARD_WCHAR2CHAR_ERROR = 15; var FS_RTN_SCARD_CHAR2WCHAR_ERROR = 16; var FS_RTN_SCARD_REMOVED_CARD_ERROR = 17; var FS_RTN_SCARD_RESET_CARD_ERROR = 18; var FS_RTN_SCARD_NOT_TRANSACTED_ERROR = 19; var FS_RTN_SCARD_NOT_TRANSMIT_FAILED = 20; var FS_RTN_SCARD_ISO7816_ERROR = 21; var FS_RTN_SCARD_FILE_NOT_FOUND = 22; var FS_RTN_FISC_PIN_ERROR = 30; var FS_RTN_FISC_PIN_LOCK = 31; var FS_RTN_FISC_PIN_WRONGLENGTH = 32; var FS_RTN_FISC_PIN_WRONGFORMAT = 33; switch (errno) { case 0: return (flag=='tw') ? "執行完成" : "operation success"; //勿用"成功"字眼,會fail /* * FSCrypt/FSCAPI common return */ case FS_RTN_ERROR : return (flag=='tw') ? "一般性錯誤" : "general error"; case FS_RTN_MEMALLOC_ERROR : return (flag=='tw') ? "配置記憶體發生錯誤" : "Memory Allocation Error"; case FS_RTN_BUFFER_TOO_SMALL: return (flag=='tw') ? "記憶體緩衝區太小" : "Buffer too small"; case FS_RTN_FUNCTION_UNSUPPORT : return (flag=='tw') ? "未支援函式" : "function not support"; case FS_RTN_INVALID_PARAM: return (flag=='tw') ? "錯誤的參數" : "Invalid parameter"; case FS_RTN_INVALID_HANDLE: return (flag=='tw') ? "無效的handle" : "Invalid handle"; case FS_RTN_LIB_EXPIRE: return (flag=='tw') ? "試用版函式庫已過期" : "Trial Version Library is expired"; case FS_RTN_BASE64_ERROR: return (flag=='tw') ? "Base64編碼解碼錯誤" : "Base64 Encoding/Decoding Error"; case FS_RTN_CERT_NOT_FOUND: return (flag=='tw') ? "找不到憑證" : "certificate not found in MS CryptoAPI Database"; case FS_RTN_CERT_EXPIRED: return (flag=='tw') ? "憑證已過期" : "Certicate Expired"; case FS_RTN_CERT_NOT_YET_VALID: return (flag=='tw') ? "憑證時間尚未合法" : "Certificate can not be used now"; case FS_RTN_CERT_EXPIRE_OR_NOT_YET_USE: return (flag=='tw') ? "憑證可能過期或無法使用" : "Some certificates are expired, some can not be used now"; case FS_RTN_CERT_DENIED : return (flag=='tw') ? "憑證主旨錯誤" : "Certificate subject not match"; case FS_RTN_CERT_NOISSUER: return (flag=='tw') ? "無法找到憑證發行者" : "Unable to find certificate issuer"; case FS_RTN_CERT_BAD_SIGNATURE: return (flag=='tw') ? "憑證上的簽章值是錯誤的" : "Certificate signature is invalid"; case FS_RTN_CERT_INVALID_KEYUSAGE: return (flag=='tw') ? "無效的憑證用途(加解密、簽驗章)" : "Invalid ertificate keyusage"; case FS_RTN_CERT_REVOKED: return (flag=='tw') ? "憑證已撤銷" : "Certificate is revoked"; case FS_RTN_CERT_KEY_COMPROMISED: return (flag=='tw') ? "憑證已撤銷(金鑰洩露)" : "Certificate is revoked(key compromised)"; case FS_RTN_CERT_CA_COMPROMISED: return (flag=='tw') ? "憑證已撤銷(CA compromised)" : "Certificate is revoked(CA compromised)"; case FS_RTN_CERT_AFFILIATION_CHANGED: return (flag=='tw') ? "憑證已撤銷(聯盟已變更)" : "Certificate is revoked(affiliation changed)"; case FS_RTN_CERT_SUPERSEDED: return (flag=='tw') ? "憑證已撤銷(已取代)" : "Certificate is revoked(superseded)"; case FS_RTN_CERT_CESSATION: return (flag=='tw') ? "憑證已撤銷(已停止)" : "Certificate is revoked(cessation)"; case FS_RTN_CERT_HOLD: return (flag=='tw') ? "憑證保留或暫禁" : "Certificate is revoked(hold)"; case FS_RTN_CERT_REMOVEFROMCRL: return (flag=='tw') ? "憑證己撤銷(凍結)" : "Certificate is revoked(hold)"; case FS_RTN_CRL_EXPIRED: return (flag=='tw') ? "CRL 已過期" : "CRL expired"; case FS_RTN_CRL_NOT_YET_VALID: return (flag=='tw') ? "CRL 尚未有效" : "CRL not yet valid"; case FS_RTN_CRL_NOT_FOUND: return (flag=='tw') ? "無法找到CRL" : "CRL not found"; case FS_RTN_CRL_BAD_SIGNATURE: return (flag=='tw') ? "CRL上的簽章值無效" : "CRL signature invalid"; case FS_RTN_GET_DIGEST_ERROR: return (flag=='tw') ? "取得摘要值錯誤" : "Get Digest error"; case FS_RTN_BAD_SIGNATURE: return (flag=='tw') ? "不合法的簽章" : "Invalid data signature"; case FS_RTN_BAD_CONTENT: return (flag=='tw') ? "內容錯誤" : "Content not match"; case FS_RTN_INVALID_CERT: return (flag=='tw') ? "憑證格式錯誤" : "Incorrect Certificate format"; case FS_RTN_INVALID_CRL: return (flag=='tw') ? "CRL 格式錯誤" : "Incorrect CRL format"; case FS_RTN_INVALID_PKCS7: return (flag=='tw') ? "錯誤的PKCS7格式" : "Incorrect PKCS7 format"; case FS_RTN_INVALID_KEY: return (flag=='tw') ? "金鑰的格式錯誤" : "Incorrect KEY format"; case FS_RTN_INVALID_CERTREQ: return (flag=='tw') ? "不合法的憑證請求檔格式(PKCS10)" : "Incorrect PKCS10 format"; case FS_RTN_INVALID_FORMAT: return (flag=='tw') ? "無效的格式" : "Incorrect format"; case FS_RTN_INVALID_PKCS12: return (flag=='tw') ? "無效的PKCS12格式" : "Invalid PKCS12"; case FS_RTN_OBJ_NOT_FOUND: return (flag=='tw') ? "找不到指定物件" : "Object No found"; case FS_RTN_PKCS7_NO_CONTENT: return (flag=='tw') ? "簽章值中無原文" : "No content in PkCS7 Signature"; case FS_RTN_PKCS7_NO_CERTIFICATE: return (flag=='tw') ? "簽章值中無憑證" : "No certificate in PkCS7 Signature"; case FS_RTN_PKCS7_NO_SIGNERINFO: return (flag=='tw') ? "簽章值中無SignerInfo" : "No SignerInfo in PkCS7 Signature"; case FS_RTN_UNMATCH_CERT_KEY: return (flag=='tw') ? "憑證與私密金鑰並非成對" : "Certificate/PrivateKey not match"; case FS_RTN_SIGN_ERROR: return (flag=='tw') ? "簽章失敗" : "Sign error"; case FS_RTN_VERIFY_ERROR: return (flag=='tw') ? "驗章失敗" : "Verify error"; case FS_RTN_ENCRYPT_ERROR: return (flag=='tw') ? "加密失敗" : "Encrypt error"; case FS_RTN_DECRYPT_ERROR: return (flag=='tw') ? "解密失敗" : "Decrypt error"; case FS_RTN_GENKEY_ERROR: return (flag=='tw') ? "產生金鑰失敗" : "Generate key error"; case FS_RTN_OPERATION_CANCELED: return (flag=='tw') ? "取消操作" : "Operation Cancel"; case FS_RTN_PASSWD_INVALID: return (flag=='tw') ? "密碼不正確" : "Invalid Password"; case FS_RTN_PKCS12_NO_AUTHSAFES: return (flag=='tw') ? "PKCS12不正確" : "Invalid PCKS12"; case FS_RTN_PKCS12_DECODE_BAG_ERROR: return (flag=='tw') ? "PKCS12解碼失敗" : "Decode PCKS12 Error"; case FS_RTN_PKCS12_DECRYPT_ERROR: return (flag=='tw') ? "PKCS12解密失敗" : "Derypt PCKS12 Error"; case FS_RTN_PKCS12_GETKEY_ERROR: return (flag=='tw') ? "PKCS12取得金鑰失敗" : "PCKS12 Get Key Error"; case FS_RTN_PKCS12_GETCERT_ERROR: return (flag=='tw') ? "PKCS12取得憑證失敗" : "PCKS12 Get Cert Error"; case FS_RTN_INVALID_STATE: return (flag=='tw') ? "無效狀態" : "Invalid State"; case FS_RTN_OUT_OF_RANGE: return (flag=='tw') ? "超出範圍" : "Out of range"; /* * FSCAPI Only */ case FS_RTN_FILE_NOT_FOUND: return (flag=='tw') ? "找不到指定檔案" : "File Not Found"; case FS_RTN_PATH_NOT_FOUND: return (flag=='tw') ? "找不到指定路徑" : "Path Not Found"; case FS_RTN_BAD_NETPATH: return (flag=='tw') ? "找不到指定網路路徑" : "Network path was not found"; case FS_RTN_LOGON_FAILURE: return (flag=='tw') ? "使用者登入帳號或密碼錯誤" : "Unknown logon user name or bad password"; case FS_RTN_ACCESS_DENIED: return (flag=='tw') ? "沒有權限存取" : "Access Denied, no right"; /* * HCA Only */ case FSCARD_RTN_CONNECT_FAIL: return (flag=='tw') ? "連結卡片失敗" : "Connect Card Fail."; case FSCARD_RTN_SELECT_APPLET_FAIL: return (flag=='tw') ? "非指定之卡片" : "Not Assigned Card ."; case FSCARD_RTN_ESTABLISH_CONTEXT_FAIL: return (flag=='tw') ? "建立卡片物件失敗" : "FSCARD_RTN_ESTABLISH_CONTEXT_FAIL"; case FSCARD_RTN_CARD_STATUS_ERROR: return (flag=='tw') ? "卡片狀態不正確" : "FSCARD_RTN_CARD_STATUS_ERROR"; case FSCARD_RTN_CARD_ABSENT: return (flag=='tw') ? "卡片不存在" : "FSCARD_RTN_CARD_ABSENT"; case FSCARD_RTN_TRANSMIT_ERROR: return (flag=='tw') ? "資料轉譯錯誤" : "FSCARD_RTN_TRANSMIT_ERROR"; case FSCARD_RTN_GET_DATA_ERROR: return (flag=='tw') ? "無法取得資料" : "FSCARD_RTN_GET_DATA_ERROR"; case FSCARD_RTN_LOGIN_FAIL: return (flag=='tw') ? "密碼登入卡片失敗" : "FSCARD_RTN_LOGIN_FAIL"; case FSCARD_RTN_READERS_BUFFER_FAIL: return (flag=='tw') ? "讀卡機空間不足" : "FSCARD_RTN_READERS_BUFFER_FAIL"; case FSCARD_RTN_GET_READERS_FAIL: return (flag=='tw') ? "無法取得讀卡機" : "FSCARD_RTN_GET_READERS_FAIL"; case FSCARD_RTN_NO_READER: return (flag=='tw') ? "未接上任何讀卡機" : "FSCARD_RTN_NO_READER"; case FSCARD_RTN_MEMALLOC_ERROR: return (flag=='tw') ? "記憶體配置錯誤" : "FSCARD_RTN_MEMALLOC_ERROR"; case FSCARD_RTN_LIST_READERS_ERROR: return (flag=='tw') ? "列舉讀卡機失敗" : "FSCARD_RTN_LIST_READERS_ERROR"; case FSCARD_RTN_CHAR2WCHAR_ERROR: return (flag=='tw') ? "寫出字元失敗" : "FSCARD_RTN_CHAR2WCHAR_ERROR"; case FSCARD_RTN_WCHAR2CHAR_ERROR: return (flag=='tw') ? "讀入字元失敗" : "FSCARD_RTN_WCHAR2CHAR_ERROR"; case FSCARD_RTN_INVALID_PARAM: return (flag=='tw') ? "無效的參數" : "FSCARD_RTN_INVALID_PARAM"; case FSCARD_RTN_LIB_EXPIRE: return (flag=='tw') ? "函式庫已過期" : "FSCARD_RTN_LIB_EXPIRE"; case FSCARD_RTN_GEN_PKCS7_FAIL: return (flag=='tw') ? "無法產生PKCS7格式資料" : "FSCARD_RTN_GEN_PKCS7_FAIL"; case FSCARD_RTN_DATA_HASH_ERROR: return (flag=='tw') ? "雜湊失敗" : "FSCARD_RTN_DATA_HASH_ERROR"; case FSCARD_RTN_PIN_LENGTH_ERROR: return (flag=='tw') ? "PIN 碼長度不正確" : "FSCARD_RTN_PIN_LENGTH_ERROR"; case FSCARD_RTN_PIN_LOCK: return (flag=='tw') ? "卡片已經鎖卡" : "FSCARD_RTN_PIN_LOCK"; case FSCARD_RTN_UNKNOWN_PROTOCOL: return (flag=='tw') ? "未知的溝通協定" : "FSCARD_RTN_UNKNOWN_PROTOCOL"; case FSCARD_RTN_UNKNOWN_STATE: return (flag=='tw') ? "未知的卡片狀態" : "FSCARD_RTN_UNKNOWN_STATE"; case FSCARD_RTN_FUNCTION_UNSUPPORT: return (flag=='tw') ? "功能未支援" : "FSCARD_RTN_FUNCTION_UNSUPPORT"; case FSCARD_RTN_OPERATION_CANCELED: return (flag=='tw') ? "操作取消" : "FSCARD_RTN_OPERATION_CANCELED"; case FSCARD_RTN_GET_PASSWD_FAIL: return (flag=='tw') ? "取得密碼失敗" : "FSCARD_RTN_GET_PASSWD_FAIL"; case FSCARD_RTN_DATA_ENCODE_FAIL: return (flag=='tw') ? "資料編碼失敗" : "FSCARD_RTN_DATA_ENCODE_FAIL"; case FSCARD_RTN_UNICODE_ERROR: return (flag=='tw') ? "轉換Unicode失敗" : "FSCARD_RTN_UNICODE_ERROR"; case FSCARD_RTN_ICONV_OPEN_FAIL: return (flag=='tw') ? "開啟iconv轉碼失敗" : "FSCARD_RTN_ICONV_OPEN_FAIL"; case FSCARD_RTN_TRANSFORM_FAIL: return (flag=='tw') ? "轉換編碼失敗" : "FSCARD_RTN_TRANSFORM_FAIL"; case FSHCACS_RTN_LOAD_LIBRARY_FAIL: return (flag=='tw') ? "載入函式庫失敗" : "FSHCACS_RTN_LOAD_LIBRARY_FAIL"; case FSHCACS_RTN_LIBRARY_NOT_LOAD: return (flag=='tw') ? "函式庫未載入" : "FSHCACS_RTN_LIBRARY_NOT_LOAD"; case FSCARD_RTN_UNKNOWN_ERROR: return (flag=='tw') ? "一般錯誤" : "FSCARD_RTN_UNKNOWN_ERROR"; /* * FSP11 Only */ case FSP11_RTN_CANCEL: return (flag=='tw') ? "PKCS#11 取消操作" : "PKCS#11 FSP11_RTN_CANCEL"; case FSP11_RTN_HOST_MEMORY: return (flag=='tw') ? "PKCS#11 記憶體不足" : "PKCS#11 Insufficient memory"; case FSP11_RTN_SLOT_ID_INVALID: return (flag=='tw') ? "PKCS#11 指定的Slot是無效的" : "PKCS#11 Specified slot ID is not valid"; case FSP11_RTN_GENERAL_ERROR: return (flag=='tw') ? "PKCS#11 一般性錯誤" : "PKCS#11 GENERAL_ERROR maybe unrecoverable error has occurred"; case FSP11_RTN_FUNCTION_FAILED: return (flag=='tw') ? "PKCS#11 要求的函式無法執行" : "PKCS#11 Requested function could not be performed"; case FSP11_RTN_ARGUMENTS_BAD: return (flag=='tw') ? "PKCS#11 錯誤的參數" : "PKCS#11 Invalid arguments"; case FSP11_RTN_NO_EVENT: return (flag=='tw') ? "PKCS#11 FSP11_RTN_NO_EVENT" : "PKCS#11 FSP11_RTN_NO_EVENT"; case FSP11_RTN_NEED_TO_CREATE_THREADS: return (flag=='tw') ? "PKCS#11 FSP11_RTN_NEED_TO_CREATE_THREADS" : "PKCS#11 FSP11_RTN_NEED_TO_CREATE_THREADS"; case FSP11_RTN_CANT_LOCK: return (flag=='tw') ? "PKCS#11 FSP11_RTN_CANT_LOCK" : "PKCS#11 FSP11_RTN_CANT_LOCK"; case FSP11_RTN_ATTRIBUTE_READ_ONLY: return (flag=='tw') ? "PKCS#11 FSP11_RTN_ATTRIBUTE_READ_ONLY" : "PKCS#11 FSP11_RTN_ATTRIBUTE_READ_ONLY"; case FSP11_RTN_ATTRIBUTE_SENSITIVE: return (flag=='tw') ? "PKCS#11 FSP11_RTN_ATTRIBUTE_SENSITIVE" : "PKCS#11 FSP11_RTN_ATTRIBUTE_SENSITIVE"; case FSP11_RTN_ATTRIBUTE_TYPE_INVALID: return (flag=='tw') ? "PKCS#11 FSP11_RTN_ATTRIBUTE_TYPE_INVALID" : "PKCS#11 FSP11_RTN_ATTRIBUTE_TYPE_INVALID"; case FSP11_RTN_ATTRIBUTE_VALUE_INVALID: return (flag=='tw') ? "PKCS#11 FSP11_RTN_ATTRIBUTE_VALUE_INVALID" : "PKCS#11 FSP11_RTN_ATTRIBUTE_VALUE_INVALID"; case FSP11_RTN_DATA_INVALID: return (flag=='tw') ? "PKCS#11 FSP11_RTN_DATA_INVALID" : "PKCS#11 FSP11_RTN_DATA_INVALID"; case FSP11_RTN_DATA_LEN_RANGE: return (flag=='tw') ? "PKCS#11 FSP11_RTN_DATA_LEN_RANGE" : "PKCS#11 FSP11_RTN_DATA_LEN_RANGE"; case FSP11_RTN_DEVICE_ERROR: return "FSP11_RTN_DEVICE_ERROR"; case FSP11_RTN_DEVICE_MEMORY: return (flag=='tw') ? "PKCS#11 Token的記憶體不足" : "PKCS#11 token does not have sufficient memory"; case FSP11_RTN_DEVICE_REMOVED: return "FSP11_RTN_DEVICE_REMOVED"; case FSP11_RTN_ENCRYPTED_DATA_INVALID: return "FSP11_RTN_ENCRYPTED_DATA_INVALID"; case FSP11_RTN_ENCRYPTED_DATA_LEN_RANGE: return "FSP11_RTN_ENCRYPTED_DATA_LEN_RANGE"; case FSP11_RTN_FUNCTION_CANCELED: return "FSP11_RTN_FUNCTION_CANCELED"; case FSP11_RTN_FUNCTION_NOT_PARALLEL: return "FSP11_RTN_FUNCTION_NOT_PARALLEL"; case FSP11_RTN_FUNCTION_NOT_SUPPORTED: return "FSP11_RTN_FUNCTION_NOT_SUPPORTED"; case FSP11_RTN_KEY_HANDLE_INVALID: return "FSP11_RTN_KEY_HANDLE_INVALID"; case FSP11_RTN_KEY_SIZE_RANGE: return "FSP11_RTN_KEY_SIZE_RANGE"; case FSP11_RTN_KEY_TYPE_INCONSISTENT: return "FSP11_RTN_KEY_TYPE_INCONSISTENT"; case FSP11_RTN_KEY_NOT_NEEDED: return "FSP11_RTN_KEY_NOT_NEEDED"; case FSP11_RTN_KEY_CHANGED: return "FSP11_RTN_KEY_CHANGED"; case FSP11_RTN_KEY_NEEDED: return "FSP11_RTN_KEY_NEEDED"; case FSP11_RTN_KEY_INDIGESTIBLE: return "FSP11_RTN_KEY_INDIGESTIBLE"; case FSP11_RTN_KEY_FUNCTION_NOT_PERMITTED: return "FSP11_RTN_KEY_FUNCTION_NOT_PERMITTED"; case FSP11_RTN_KEY_NOT_WRAPPABLE: return "FSP11_RTN_KEY_NOT_WRAPPABLE"; case FSP11_RTN_KEY_UNEXTRACTABLE: return "FSP11_RTN_KEY_UNEXTRACTABLE"; case FSP11_RTN_MECHANISM_INVALID: return "FSP11_RTN_MECHANISM_INVALID"; case FSP11_RTN_MECHANISM_PARAM_INVALID: return "FSP11_RTN_MECHANISM_PARAM_INVALID"; case FSP11_RTN_OBJECT_HANDLE_INVALID: return (flag=='tw') ? "PKCS#11 物件的 Handle 不正確" : "PKCS#11 specified object handle is not valid"; case FSP11_RTN_OPERATION_ACTIVE: return "FSP11_RTN_OPERATION_ACTIVE"; case FSP11_RTN_OPERATION_NOT_INITIALIZED: return "FSP11_RTN_OPERATION_NOT_INITIALIZED"; case FSP11_RTN_PIN_INCORRECT: return (flag=='tw') ? "PKCS#11 密碼不正確" : "PKCS#11 specified PIN is incorrect"; case FSP11_RTN_PIN_INVALID: return (flag=='tw') ? "PKCS#11 密碼中有不合法的字元" : "PKCS#11 specified PIN has invalid characters"; case FSP11_RTN_PIN_LEN_RANGE: return (flag=='tw') ? "PKCS#11 密碼長度不正確" : "PKCS#11 specified PIN is too long or too short"; case FSP11_RTN_PIN_EXPIRED: return (flag=='tw') ? "PKCS#11 密碼已經過期" : "PKCS#11 specified PIN has expired"; case FSP11_RTN_PIN_LOCKED: return (flag=='tw') ? "PKCS#11 密碼已經鎖住" : "PKCS#11 PIN is locked"; case FSP11_RTN_SESSION_CLOSED: return "FSP11_RTN_SESSION_CLOSED"; case FSP11_RTN_SESSION_COUNT: return "FSP11_RTN_SESSION_COUNT"; case FSP11_RTN_SESSION_HANDLE_INVALID: return "FSP11_RTN_SESSION_HANDLE_INVALID"; case FSP11_RTN_SESSION_PARALLEL_NOT_SUPPORTED: return "FSP11_RTN_SESSION_PARALLEL_NOT_SUPPORTED"; case FSP11_RTN_SESSION_READ_ONLY: return "FSP11_RTN_SESSION_READ_ONLY"; case FSP11_RTN_SESSION_EXISTS: return "FSP11_RTN_SESSION_EXISTS"; case FSP11_RTN_SESSION_READ_ONLY_EXISTS: return "FSP11_RTN_SESSION_READ_ONLY_EXISTS"; case FSP11_RTN_SESSION_READ_WRITE_SO_EXISTS: return "FSP11_RTN_SESSION_READ_WRITE_SO_EXISTS"; case FSP11_RTN_SIGNATURE_INVALID: return "FSP11_RTN_SIGNATURE_INVALID"; case FSP11_RTN_SIGNATURE_LEN_RANGE: return "FSP11_RTN_SIGNATURE_LEN_RANGE"; case FSP11_RTN_TEMPLATE_INCOMPLETE: return "FSP11_RTN_TEMPLATE_INCOMPLETE"; case FSP11_RTN_TEMPLATE_INCONSISTENT: return "FSP11_RTN_TEMPLATE_INCONSISTENT"; case FSP11_RTN_TOKEN_NOT_PRESENT: return (flag=='tw') ? "找不到卡片,您可能尚未將卡片插入讀卡機內或卡片類別錯誤" : "PKCS#11 token was not present"; case FSP11_RTN_TOKEN_NOT_RECOGNIZED: return (flag=='tw') ? "PKCS#11 函式庫無法辨識 Token" : "PKCS#11 does not recognize the token in the slot"; case FSP11_RTN_TOKEN_WRITE_PROTECTED: return "FSP11_RTN_TOKEN_WRITE_PROTECTED"; case FSP11_RTN_UNWRAPPING_KEY_HANDLE_INVALID: return "FSP11_RTN_UNWRAPPING_KEY_HANDLE_INVALID"; case FSP11_RTN_UNWRAPPING_KEY_SIZE_RANGE: return "FSP11_RTN_UNWRAPPING_KEY_SIZE_RANGE"; case FSP11_RTN_UNWRAPPING_KEY_TYPE_INCONSISTENT: return "FSP11_RTN_UNWRAPPING_KEY_TYPE_INCONSISTENT"; case FSP11_RTN_USER_ALREADY_LOGGED_IN: return (flag=='tw') ? "PKCS#11 使用者已登入" : "PKCS#11 user is already logged in"; case FSP11_RTN_USER_NOT_LOGGED_IN: return (flag=='tw') ? "PKCS#11 使用者未登入" : "PKCS#11 user is not logged in"; case FSP11_RTN_USER_PIN_NOT_INITIALIZED: return "FSP11_RTN_USER_PIN_NOT_INITIALIZED"; case FSP11_RTN_USER_TYPE_INVALID: return "FSP11_RTN_USER_TYPE_INVALID"; case FSP11_RTN_USER_ANOTHER_ALREADY_LOGGED_IN: return "FSP11_RTN_USER_ANOTHER_ALREADY_LOGGED_IN"; case FSP11_RTN_USER_TOO_MANY_TYPES: return "FSP11_RTN_USER_TOO_MANY_TYPES"; case FSP11_RTN_WRAPPED_KEY_INVALID: return "FSP11_RTN_WRAPPED_KEY_INVALID"; case FSP11_RTN_WRAPPED_KEY_LEN_RANGE: return "FSP11_RTN_WRAPPED_KEY_LEN_RANGE"; case FSP11_RTN_WRAPPING_KEY_HANDLE_INVALID: return "FSP11_RTN_WRAPPING_KEY_HANDLE_INVALID"; case FSP11_RTN_WRAPPING_KEY_SIZE_RANGE: return "FSP11_RTN_WRAPPING_KEY_SIZE_RANGE"; case FSP11_RTN_WRAPPING_KEY_TYPE_INCONSISTENT: return "FSP11_RTN_WRAPPING_KEY_TYPE_INCONSISTENT"; case FSP11_RTN_RANDOM_SEED_NOT_SUPPORTED: return "FSP11_RTN_RANDOM_SEED_NOT_SUPPORTED"; case FSP11_RTN_RANDOM_NO_RNG: return "FSP11_RTN_RANDOM_NO_RNG"; case FSP11_RTN_BUFFER_TOO_SMALL: return (flag=='tw') ? "PKCS#11 記憶體緩衝區太小" : "PKCS#11 Buffer too small"; case FSP11_RTN_SAVED_STATE_INVALID: return "FSP11_RTN_SAVED_STATE_INVALID"; case FSP11_RTN_INFORMATION_SENSITIVE: return "FSP11_RTN_INFORMATION_SENSITIVE"; case FSP11_RTN_STATE_UNSAVEABLE: return "FSP11_RTN_STATE_UNSAVEABLE"; case FSP11_RTN_CRYPTOKI_NOT_INITIALIZED: return (flag=='tw') ? "PKCS#11 Cryptoki 函式庫尚未初始化過" : "PKCS#11 Cryptoki library has not yet been initialized"; case FSP11_RTN_CRYPTOKI_ALREADY_INITIALIZED: return (flag=='tw') ? "PKCS#11 Cryptoki 函式庫已經初始化過" : "PKCS#11 Cryptoki library has already been initialized"; case FSP11_RTN_MUTEX_BAD: return "FSP11_RTN_MUTEX_BAD"; case FSP11_RTN_MUTEX_NOT_LOCKED: return "FSP11_RTN_MUTEX_NOT_LOCKED"; case FSP11_RTN_VENDOR_DEFINED: return (flag=='tw') ? "PKCS#11 CKR_VENDOR_DEFINED" : "PKCS#11 CKR_VENDOR_DEFINED"; case FSP11_RTN_OBJECT_NOT_EXIST: return (flag=='tw') ? "PKCS#11 指定物件不存在" : "PKCS#11 specified object is not existed"; case FSP11_RTN_OBJECT_EXIST: return (flag=='tw') ? "PKCS#11 指定物件已存在" : "PKCS#11 specified object is already existed"; case FSP11_RTN_OBJECT_HAS_PROBLEM: return (flag=='tw') ? "PKCS#11 相同物件超過一個" : "PKCS#11 more than two objects existed"; case FSP11_RTN_LOAD_LIBRARY_FAIL: return (flag=='tw') ? "PKCS#11 載入函式庫失敗" : "PKCS#11 load library fail"; case FSP11_RTN_LIBRARY_NOT_LOAD: return "FSP11_RTN_LIBRARY_NOT_LOAD"; case FSP11_RTN_SLOT_NOT_FOUND: return "FSP11_RTN_SLOT_NOT_FOUND"; /* * FSXML Only */ case FSXML_RTN_ERROR: return (flag=='tw') ? "一般性錯誤" : "general error"; case FSXML_RTN_INVALID_ALGORITHM: return (flag=='tw') ? "錯誤的演算法" : "Invalid algorithm"; case FSXML_RTN_CRYPT_FAIL: return (flag=='tw') ? "執行的演算法失敗" : "Crypto operation fail"; case FSXML_RTN_INCORRECT_SIGNATURE: return (flag=='tw') ? "XML 簽章值錯誤" : "Incorrect XML signature"; case FSXML_RTN_INCORRECT_REFERENCE: return (flag=='tw') ? "XML 指定參考的摘要值錯誤" : "Incorrect XML reference's digest value"; case FSXML_RTN_C14N_FAIL: return (flag=='tw') ? "C14N 錯誤" : "C14N Error"; case FSXML_RTN_TRANSFORM_FAIL: return (flag=='tw') ? "執行 Transform 演算法失敗" : "Transform algorithm Error"; case FSXML_RTN_RESOLVER_FAIL: return (flag=='tw') ? "執行 resolver 失敗" : "Resolver Error"; case FSXML_RTN_NO_SIGNATURE: return (flag=='tw') ? "找不到簽章植" : "Signature not found"; case FSXML_RTN_PARSER_ERROR: return (flag=='tw') ? "解析XML文件時發生錯誤" : "Parse xml document error"; case FSXML_RTN_URI_NOT_EXIST: return (flag=='tw') ? "URI所指向的文件不存在或為空值" : "specified URI is not existed"; case FSXML_RTN_X509DATA_MISMATCH: return (flag=='tw') ? "憑證內容與的記載不符合" : "cert is not equal with "; case FSXML_RTN_ERROR_XML_DOC: return (flag=='tw') ? "XML文件錯誤或格式錯誤" : "Incorrect XML document format"; case FSXML_RTN_INVALID_PARAM: return (flag=='tw') ? "參數不正確" : "Incorrect parameter"; case FSXML_RTN_INVALID_C14N_ALG: return (flag=='tw') ? "不支援此C14N演算法" : "Incorrect C14N Algorithm"; case FSXML_RTN_INVALID_SIGNATURE_ALG: return (flag=='tw') ? "不支援此簽章演算法" : "Incorrect Signature Algorithm"; case FSXML_RTN_INVALID_DIGEST_ALG: return (flag=='tw') ? "不支援此摘要演算法" : "Incorrect Digest Algorithm"; /* * FSSCUtils */ case FS_RTN_SCARD_FILE_NOT_FOUND: return (flag=='tw') ? "卡片上的指定檔案不存在" : "Specific FILE on Smart Card is absent"; case FS_RTN_SCARD_CARD_ABSENT: return (flag=='tw') ? "卡片不存在" : "Smart Card is absent"; case FS_RTN_FISC_PIN_ERROR: return (flag=='tw') ? "晶片金融卡密碼錯誤" : "FISCII PIN Error"; case FS_RTN_FISC_PIN_LOCK: return (flag=='tw') ? "晶片金融卡密碼鎖卡" : "FISCII PIN Locked"; case FS_RTN_FISC_PIN_WRONGLENGTH: return (flag=='tw') ? "晶片金融卡密碼長度不正確" : "FISCII PIN length is invalid"; case FS_RTN_FISC_PIN_WRONGFORMAT: return (flag=='tw') ? "晶片金融卡密碼格式不正確" : "FISCII PIN format is invalid"; default: return "unknown specific error message"; } return 0; } function getPGKISignCertInfo(errorDesciptionLocale,pwd,isGetAttr){ var certInfo = new CertInfo(); isInstallActiveX(gkpiframeId,certInfo); if(certInfo.errorCode!=0){ //certInfo.errorCode='activeX installed failed'; return certInfo; } // 只列舉 GPKI 卡片中的簽章憑證 locale =transferLocale(errorDesciptionLocale); var t1 = 0; var t2 = 0; gpkiobj = getGPKIObj(); //alert("here2"); //gpkiobj.FSGPKI_SetReaderSlot(0,0); var certs = gpkiobj.FSGPKI_EnumCerts(FS_KU_DIGITAL_SIGNATURE); certInfo.errorCode = gpkiobj.get_lastError(); //alert("here1"); if(certs==null){ certInfo.description= transferGPKIErrorToDescription(certInfo.errorCode,locale); return certInfo; } //只抓第一張 var x509certs = certs.toArray(); var strX509Cert = x509certs[0]; certInfo.certContent=strX509Cert; certInfo.cardType=transferCertType(gpkiobj.GPKI_GetCertType(strX509Cert , 0),locale ); certInfo.cardHolderRank=gpkiobj.GPKI_GetCardHolderRank(strX509Cert , 0) ; certInfo.certSubject=gpkiobj.FSCAPICertGetSubject(strX509Cert , 0) ; certInfo.serialNo=gpkiobj.FSXCAPICertGetSerialNumber(strX509Cert , 0 ); certInfo.startTime=gpkiobj.FSCAPICertGetNotBefore(strX509Cert , 0 ); certInfo.endTime=gpkiobj.FSCAPICertGetNotAfter(strX509Cert , 0 ); //alert("end"); //alert("here1"); if(isGetAttr!=undefined && isGetAttr=="true" && pwd!=undefined && pwd!=""){ certInfo.attributeCert = gpkiobj.FSGPKI_GetAttributeCert("", pwd, 0); } return certInfo } /* * 醫事人員卡 - 取得卡中 X.509 憑證與解析 */ function getHCASignCertInfo(errorDesciptionLocale) { var certInfo = new CertInfo(); isInstallActiveX(hcaframeId,certInfo); if(certInfo.errorCode!=0){ return certInfo; } hcaobj = getHCAObj(); locale =transferLocale(errorDesciptionLocale); // Get User Certificate var pincode = ""; var readers = hcaobj.FSHCA_GetReaderNames(0); if(readers==null){ certInfo.errorCode='reader no found'; return result; } var this_readername = readers.toArray()[0]; cert = hcaobj.FSHCA_GetCertificateByReader(this_readername, pincode , 0); certInfo.certContent = cert; certInfo.errorCode = hcaobj.FSHCA_GetErrorCode(); if( certInfo.errorCode != 0) { certInfo.description = transferHCAErrorToDescription(certInfo.errorCode,locale); return certInfo; } // 取得卡別cardType certInfo.cardType = transferCertType(hcaobj.FSHCA_GetCardType(this_readername),locale); if( certInfo.errorCode != 0) { certInfo.description = transferHCAErrorToDescription(certInfo.errorCode,locale); return certInfo; } // Get Cert Serial Number certInfo.serialNo = hcaobj.FSHCA_GetCertSerialNumber(cert , 0 ); certInfo.errorCode = hcaobj.FSHCA_GetErrorCode(); if( certInfo.errorCode != 0) { certInfo.description = transferHCAErrorToDescription(certInfo.errorCode,locale); return certInfo; } // Get Cert Subject certInfo.certSubject = hcaobj.FSHCA_GetCertSubject(cert , 0 ); certInfo.errorCode = hcaobj.FSHCA_GetErrorCode(); if( certInfo.errorCode != 0) { certInfo.description = transferHCAErrorToDescription(certInfo.errorCode,locale); return certInfo; } //憑證取得發行者主旨 certInfo.issuerSubject = hcaobj.FSHCA_GetCertIssuer(cert , 0 ); certInfo.errorCode = hcaobj.FSHCA_GetErrorCode(); if( certInfo.errorCode != 0) { certInfo.description = transferHCAErrorToDescription(certInfo.errorCode,locale); return certInfo; } //憑證取得有效時間 certInfo.startTime = hcaobj.FSHCA_GetCertNotBefore(cert , 0 ); certInfo.endTime = hcaobj.FSHCA_GetCertNotAfter(cert , 0 ); certInfo.errorCode = hcaobj.FSHCA_GetErrorCode(); if( certInfo.errorCode != 0) { certInfo.description = transferHCAErrorToDescription(certInfo.errorCode,locale); return certInfo; } return certInfo; } /* * 待處理 */ function getPFXSignCertInfo(pfxFilePath,errorDesciptionLocale) { var certInfo = new CertInfo(); isInstallActiveX(fscframeId,certInfo); if(certInfo.errorCode!=0){ return certInfo; } fscobj = getFSCObj(); locale =transferLocale(errorDesciptionLocale); fscobj.SetCodePage(DEFAULT_ENCODE_CODE); cert = fscobj.FSCAPI_ReadFile(pfxFilePath,0); certs = fscobj.FSXCAPIGetCertsEx('','',0,0); alert(certs[0]); // Get User Certificate certInfo.certContent = cert; certInfo.errorCode = fscobj.GetErrorCode(); if( certInfo.errorCode != 0) { certInfo.description = transferHCAErrorToDescription(certInfo.errorCode,locale); return certInfo; } // 取得卡別cardType //certInfo.cardType = transferCertType(fscobj.FSHCA_GetCardType(this_readername),locale); //if( certInfo.errorCode != 0) { //certInfo.description = transferHCAErrorToDescription(certInfo.errorCode,locale); //return certInfo; //} // Get Cert Serial Number alert("cert:"+cert); certInfo.serialNo = fscobj.FSXCAPICertGetSerialNumber(cert , 0 ); certInfo.errorCode = fscobj.GetErrorCode(); alert("serialNo:"+certInfo.errorCode); if( certInfo.errorCode != 0) { certInfo.description = transferHCAErrorToDescription(certInfo.errorCode,locale); return certInfo; } // Get Cert Subject certInfo.certSubject = fscobj.FSCAPICertGetSubject(cert , 0 ); certInfo.errorCode = fscobj.GetErrorCode(); alert("certSubject:"+certInfo.errorCode); if( certInfo.errorCode != 0) { certInfo.description = transferHCAErrorToDescription(certInfo.errorCode,locale); return certInfo; } //憑證取得發行者主旨 certInfo.issuerSubject = fscobj.FSCAPICertGetIssuer(cert , 0 ); certInfo.errorCode = fscobj.GetErrorCode(); alert("issuerSubject:"+certInfo.errorCode); if( certInfo.errorCode != 0) { certInfo.description = transferHCAErrorToDescription(certInfo.errorCode,locale); return certInfo; } //憑證取得有效時間 certInfo.startTime = hcaobj.FSCAPICertGetNotBefore(cert , 0 ); certInfo.endTime = hcaobj.FSCAPICertGetNotAfter(cert , 0 ); certInfo.errorCode = hcaobj.GetErrorCode(); if( certInfo.errorCode != 0) { certInfo.description = transferHCAErrorToDescription(certInfo.errorCode,locale); return certInfo; } return certInfo; } function transferLocale(inputLocale){ locale = 'en'; if(inputLocale!=null && inputLocale=='tw' ){ locale = 'tw'; } return locale; } function signDataByGPKI(bindata,pwd,oriCardNo,encoding,errorDesciptionLocale, getAttr){ var result = new signResult(); isInstallActiveX(gkpiframeId,result); if(result.errorCode!=0){ return result; } gpkiobj = getGPKIObj(); //Add by Abigalf For SHA2 at 2013/02/25 gpkiobj.SetCodePage(DEFAULT_ENCODE_CODE); // 代表UTF-8 locale =transferLocale(errorDesciptionLocale); //Get cardNo cardNo = gpkiobj.FSGPKI_GetSerialNumber(); result.cardNo = cardNo; result.errorCode=gpkiobj.get_lastError(); if(result.errorCode!=0){ result.description = transferGPKIErrorToDescription(result.errorCode,locale); return result; } if(oriCardNo!=undefined && oriCardNo !=null && oriCardNo !=''){ if(cardNo!=oriCardNo){ result.errorCode='Card has changed.(cardNo not match)'; result.description='Card has changed.(cardNo not match)'; return result; } } //Modify by Jiunhau.ye to set the encoding //signature = gpkiobj.FSGPKI_SignData('',bindata,0); finalEncoding=encoding; if(encoding==null || encoding==""){ finalEncoding=DEFAULT_ENCODE; } // if(pwd!=undefined && pwd !=null){ // signature = gpkiobj.FSGPKI_SignDataEx2(pwd,bindata,finalEncoding,0); // }else{ // signature = gpkiobj.FSGPKI_SignDataEx2('',bindata,finalEncoding,0); // } //Add by Abigalf For SHA2 at 2013/02/25 var CG_ALGOR_SHA256 = 0x04; if(pwd!=undefined && pwd !=null){ signature = gpkiobj.FSGPKI_SignDataEx2(pwd,bindata,0,CG_ALGOR_SHA256); }else{ signature = gpkiobj.FSGPKI_SignDataEx2('',bindata,0,CG_ALGOR_SHA256); } result.errorCode=gpkiobj.get_lastError(); result.description = transferGPKIErrorToDescription(result.errorCode,locale); result.signature=signature; if(getAttr!=undefined && getAttr=="true" && pwd!=undefined){ result.attributeCert= gpkiobj.FSGPKI_GetAttributeCert("", pwd, 0); } return result; } function getHCAObj(){ return getActiveXObjFromFrame(hcaframeId,hcaObjectId);; } function getGPKIObj(){ return getActiveXObjFromFrame(gkpiframeId,gkpiObjectId); } function getFSCObj(){ return getActiveXObjFromFrame(fscframeId,fscObjectId);; } function getActiveXObjFromFrame(frmName,objName){ var iframe1 = document.getElementById(frmName); var innerDoc = (iframe1.contentDocument) ? iframe1.contentDocument : iframe1.contentWindow.document; result=innerDoc.getElementById(objName); return result; } function isInstallActiveX(frmName,result){ result.errorCode = 0; if(typeof(window.ActiveXObject)==="undefined"){ try { var plugin = new ActiveXObject("Microsoft.XMLDOM"); } catch(e) { result.errorCode=-100; result.description="瀏覽器不支援ActiveX,建議使用IE瀏覽器"; return result; } }else { //alert("ActiveX Object supported"); } frameInnerDoc=getInnerDoc(frmName); var checkInstallValue = frameInnerDoc.getElementById("isInstalledForm").isInstalled.value; if(checkInstallValue=='false'){ result.errorCode=-200; result.description="安裝ActiveX元件失敗或IE安全性設定不允許執行ActiceX元件"; } return result; } function getInnerDoc(frmName){ var iframe1 = document.getElementById(frmName); var innerDoc = (iframe1.contentDocument) ? iframe1.contentDocument : iframe1.contentWindow.document; return innerDoc; }