臺灣疫苗接種或開立藥品紀錄上傳實作指引
0.1.0 - ci-build

臺灣疫苗接種或開立藥品紀錄上傳實作指引 - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

元件使用說明

相關程式版本

程式名稱 版本 型態 說明
1 CGP11CryptATL.dll 1.6.8.2250 COM 元件 簽章/取憑證/加解密的 32 位元元件
2 CGP11CryptATLx64.dll 1.6.8.2250 COM 元件 簽章/取憑證/加解密的 64 位元元件
3 CGVAATL.dll 5.1.2.8010 COM 元件 驗章 32 位元元件
4 CGVAATLx64.dll 5.1.2.8010 COM 元件 驗章 64 位元元件
5 CGP11CryptJNI.jar 1.2.15.7260 jar JavaJNI 元件
6 CGP11CryptJNI.dll 1.2.15.7260 dll JavaJNI 元件(需放在 path 目錄下)

注意事項: 請確保在安裝檔、執行檔以及COM元件時都使用Administrator執行。這將確保您具有足夠的權限來順利進行安裝和執行,並能夠避免任何潛在的問題。

Server環境設定須知

COM 元件註冊使用元件

  1. CGP11CryptATL.dll(32 位元或 64 位元)(疾管署端/檢驗機構端用到)
  2. CGVAATL.dll(32 位元或 64 位元)(疾管署端用到)

註冊方式

步驟一、用系統管理員權限開啟 cmd 視窗

步驟二、將以上元件放在 C:\Windows 目錄

步驟三、在 cmd 視窗,輸入 regsvr32 CGP11CryptATL.dll 或 regsvr32 CGP11CryptATLx64.dll

步驟四、在 cmd 視窗,輸入 regsvr32 CGVAATL.dll 或 regsvr32 CGVAATLx64.dll

Visual Studio 加入元件參考

選擇二個元件 CGP11CryptATLLib 和 CGVAATLLib,並在屬性的內嵌 interop 型別改為 False。

Visual Studio加入元件參考 Visual Studio加入元件參考


Visual Studio 組態管理員

若參考的是 32 位元元件,請在組態管理員新增 x86 平台,並指定 x86 平台。若參考的是 64 位元元件,請在組態管理員新增 x64 平台,並指定 x64 平台。

Visual Studio加入元件參考


JavaJNI 使用元件

CGP11CryptJNI.dll(32 位元或 64 位元)(檢驗機構端用到)請根據作業系統的位元版本,決定放 32 或 64 位元 dll,放在 C:\Windows

CGP11CryptJNI.jar


CGP11CryptATL元件API

CGP11CryptATL 參數符號

Common Flags

參數符號 對應值
CG_FLAG_DETACHMSG 0x00004000
CG_ALGOR_SHA256 0x04


Key Generation Flags

參數符號 對應值
CG_KU_NON_REPUDIATION 0x0040


CryptParsePKCS12

函式宣告 int CryptParsePKCS12 (string pfxpath, string bpass, string bkeypass);
函式說明 解析 PFX 格式之憑證檔
參數
  • pfxpath: [in] PFX 檔案路徑
  • bpass: [in] PFX 的密碼
  • strKeyPass: [in] 金鑰密碼
    解開私鑰的密碼。若私鑰為未加密過的 key,則此欄位應為 NULL。
回傳值 執行結果。
錯誤訊息處理 呼叫 GetErrorCode 回傳錯誤代碼。
其他回傳值 請參考 ErrorCode。
參考


P12Sign

函式宣告 string P12Sign(string pfxpath, string password, string data, int iFlags, int iKeyUsage, int iHashFlag);
函式說明 取 PFX 憑證中的金鑰作簽章
參數
  • pfxpath: [in] PFX 路徑
  • password: [in] PFX 保護密碼
  • data: [in] 欲簽章的資料
  • iFlags: [in] 簽章參數。
    附加憑證選項:
    (預設:加入簽章憑證)
    - CG_FLAG_CERT_NOATTACH: 不加入憑證
    - CG_FLAG_CERT_ATTACHALL: 加入憑證路徑上的所有憑證
    簽章原始訊息選項:
    (預設:加入原始訊息)
    - CG_FLAG_DETACHMSG: 不加入簽章原始訊息
    不同選項的參數值可以 bit-wise OR 組合使用,但同一選項內的參數值不可同時使用。
  • iKeyUsage: [in] 金鑰使用方式
    - CG_KU_DIGITAL_SIGNATURE
    - CG_KU_NON_REPUDIATION
    - CG_KU_KEY_ENCIPHERMENT
    - CG_KU_DATA_ENCIPHERMENT
    - CG_KU_KEY_AGREEMENT
    - CG_KU_KEY_CERT_SIGN
    - CG_KU_CRL_SIGN
    - CG_KU_ENCIPHER_ONLY
    - CG_KU_DECIPHER_ONLY
    不同選項的參數值可以 bit-wise OR 組合使用,但同一選項內的參數值不可同時使用,預設值為不指定。
  • iHashFlag: [in] 指定待簽資料所使用的雜湊演算法
    預設填 0 為 CG_ALGOR_SHA1
    - CG_ALGOR_MD5: 0x01
    - CG_ALGOR_SHA1 : 0x02
    - CG_ALGOR_SHA256: 0x04
    - CG_ALGOR_SHA384: 0x05
    - CG_ALGOR_SHA512: 0x06
回傳值 簽章值
錯誤訊息處理 呼叫 GetErrorCode 回傳錯誤代碼。
CG_RTN_SUCCESS: 成功
其他回傳值請參考 ErrorCode。
參考


CGCrypt_CertGetSubjectDirectoryAttrs

函式宣告 String CGCrypt_CertGetSubjectDirectoryAttrs (string sCert, string sOID, int iFlags);
函式說明 根據 OID 取得憑證擴充欄位資訊。
參數
  • sCert: [in] base64 格式的 X509 憑證。
  • sOID: [in] oid 字串。
  • iFlags: [in] 保留參數,填 0。
回傳值 憑證擴充欄位資訊
錯誤訊息處理 呼叫 GetErrorCode 回傳錯誤代碼。
其他回傳值請參考 ErrorCode。
參考


CGP11CryptJNI 元件 API

P12Sign

函式宣告 String P12Sign(String pfxpath, String password, byte[] data, int iFlags, int iKeyUsage, int iHashFlag);
函式說明 取 PFX 憑證中的金鑰作簽章
參數
  • pfxpath: [in] PFX 路徑
  • password: [in] PFX 保護密碼
  • data: [in] 欲簽章的資料
  • iFlags: [in] 簽章參數。
    附加憑證選項:(預設:加入簽章憑證)
    - CG_FLAG_CERT_NOATTACH: 不加入憑證
    - CG_FLAG_CERT_ATTACHALL: 加入憑證路徑上的所有憑證
    原始訊息選項:(預設:加入原始訊息)
    - CG_FLAG_DETACHMSG: 不加入簽章原始訊息
    不同選項的參數值可以 bit-wise OR 組合使用,但同一選項內的參數值不可同時使用。
  • iKeyUsage: [in] 金鑰使用方式
    - CG_KU_DIGITAL_SIGNATURE
    - CG_KU_NON_REPUDIATION
    - CG_KU_KEY_ENCIPHERMENT
    - CG_KU_DATA_ENCIPHERMENT
    - CG_KU_KEY_AGREEMENT
    - CG_KU_KEY_CERT_SIGN
    - CG_KU_CRL_SIGN
    - CG_KU_ENCIPHER_ONLY
    - CG_KU_DECIPHER_ONLY
    不同選項的參數值可以 bit-wise OR 組合使用,但同一選項內的參數值不可同時使用,預設值為不指定。
  • iHashFlag: [in] 指定待簽資料所使用的雜湊演算法。
    預設填 0 為 CG_ALGOR_SHA1
    - CG_ALGOR_MD5: 0x01
    - CG_ALGOR_SHA1: 0x02
    - CG_ALGOR_SHA256: 0x04
    - CG_ALGOR_SHA384: 0x05
    - CG_ALGOR_SHA512: 0x06
回傳值 簽章值
錯誤訊息處理 呼叫 GetErrorCode 回傳錯誤代碼。
其他回傳值請參考 ErrorCode。
參考


CryptParsePKCS12

函式宣告 int CryptParsePKCS12(BSTR pfxpath, BSTR bpass, BSTR bkeypass);
函式說明 解析 PFX 格式之憑證檔
參數 pfxpath: [in] PFX 檔案路徑
bpass: [in] PFX 的密碼
bkeypass: [in] 金鑰密碼
解開私鑰的密碼。若私鑰為未加密過的 key,則此欄位應為 NULL。
回傳值 執行結果
錯誤訊息處理 回傳值請參考 ErrorCode。
參考


錯誤碼列表

錯誤訊息代碼 錯誤訊息提示 說明
0 CG_RTN_SUCCESS 成功
5001 CG_RTN_ERROR 一般錯誤
5002 CG_RTN_MEMALLOC_ERROR 配置記憶體發生錯誤
5003 CG_RTN_BUFFER_TOO_SMALL 空間不足
5004 CG_RTN_FUNCTION_UNSUPPORT 未支援功能
5005 CG_RTN_INVALID_PARAM 錯誤的參數
5006 CG_RTN_INVALID_HANDLE 錯誤的 handle
5007 CG_RTN_LIB_EXPIRE 試用版期限已過
5008 CG_RTN_BASE64_ERROR Base64 編碼錯誤
5010 CG_RTN_CERT_NOT_FOUND 無法在 MS CryptoAPI Database 中找到指定憑證
5011 CG_RTN_CERT_EXPIRED 憑證已過期
5012 CG_RTN_CERT_NOT_YET_VALID 憑證尚未合法,無法使用
5013 CG_RTN_CERT_EXPIRE_OR_NOT_YET_USE 憑證可能過期或無法使用
5014 CG_RTN_CERT_DENIED 憑證主旨錯誤
5015 CG_RTN_CERT_NOISSUER 無法找到憑證發行者
5016 CG_RTN_CERT_BAD_SIGNATURE 不合法的憑證簽章
5017 CG_RTN_CERT_INVALID_KEYUSAGE 憑證用途(加解密,簽驗章)不合適
5020 CG_RTN_CERT_REVOKED 憑證已撤銷
5021 CG_RTN_CERT_KEY_COMPROMISED 憑證已撤銷(金鑰洩露)
5022 CG_RTN_CERT_CA_COMPROMISED 憑證已撤銷(CA compromised)
5023 CG_RTN_CERT_AFFILIATION_CHANGED 憑證已撤銷(聯盟已變更)
5024 CG_RTN_CERT_SUPERSEDED 憑證已撤銷(已取代)
5025 CG_RTN_CERT_CESSATION 憑證
5026 CG_RTN_CERT_HOLD 憑證保留或暫禁
5028 CG_RTN_CERT_REMOVEFROMCRL
5030 CG_RTN_CRL_EXPIRED CRL 已過期
5031 CG_RTN_CRL_NOT_YET_VALID 不合法的 CRL
5032 CG_RTN_CRL_NOT_FOUND 無法找到 CRL
5034 CG_RTN_CRL_BAD_SIGNATURE CRL 簽章值不合法
5035 CG_RTN_GET_DIGEST_ERROR Digest 錯誤
5036 CG_RTN_BAD_SIGNATURE 不合法的簽章
5037 CG_RTN_BAD_CONTENT 內容錯誤
5038 CG_RTN_BAD_CAPTCHA 錯誤的驗證碼
5040 CG_RTN_INVALID_CERT 憑證格式錯誤
5041 CG_RTN_INVALID_CRL CRL 格式錯誤
5042 CG_RTN_INVALID_PKCS7 錯誤的 PKCS7 格式
5043 CG_RTN_INVALID_KEY Key 的格式錯誤
5044 CG_RTN_INVALID_CERTREQ 不合法的 PKCS10 格式
5045 CG_RTN_INVALID_FORMAT 不合適的格式
5046 CG_RTN_INVALID_PKCS12 不合法的 PKCS12 格式
5050 CG_RTN_OBJ_NOT_FOUND 找不到物件
5051 CG_RTN_PKCS7_NO_CONTENT PKCS7 不存在原文
5052 CG_RTN_PKCS7_NO_CERTIFICATE PKCS7 不存在憑證
5053 CG_RTN_PKCS7_NO_SIGNERINFO PKCS7 不存在 SINGERINFO
5060 CG_RTN_UNMATCH_CERT_KEY 錯誤的憑證或金鑰
5061 CG_RTN_SIGN_ERROR 簽章失敗
5062 CG_RTN_VERIFY_ERROR 驗章失敗
5063 CG_RTN_ENCRYPT_ERROR 加密失敗
5064 CG_RTN_DECRYPT_ERROR 解密失敗
5065 CG_RTN_GENKEY_ERROR 產生金鑰失敗
5066 CG_RTN_DELETE_USR_CERT_ERROR 刪除使用者憑證錯誤
5067 CG_RTN_BAD_ALGID 錯誤的演算法
5070 CG_RTN_OPERATION_CANCELED 操作已關閉
5071 CG_RTN_PASSWD_INVALID 密碼錯誤
5072 CG_RTN_SCARD_BLOCKED 卡片鎖卡
5073 CG_RTN_REPLUG_TIMEOUT 拔插逾時
5074 CG_RTN_DEVICE_DISABLED 裝置已停用
5080 CG_RTN_XMLPARSE_ERROR 無法剖析 XML 文件
5081 CG_RTN_XMLTAG_NOTFOUND 無法在 XML 中找到指定的標籤名稱
5901 CG_RTN_UNICODE_ERROR 轉型失敗
5902 CG_RTN_FILE_NOT_FOUND 找不到檔案
5903 CG_RTN_PATH_NOT_FOUND 不存在的路徑
5904 CG_RTN_BAD_NETPATH 不存在的網路路徑
5905 CG_RTN_LOGON_FAILURE 登入失敗
5906 CG_RTN_ACCESS_DENIED 不符權限
5909 CG_RTN_BAD_PASSWD 錯誤的密碼
5504 CG_RTN_SOCKET_RECV_ERROR
5505 CG_RTN_SOCKET_CLOSED
9001 CGP11_RTN_CANCEL 中斷
9002 CGP11_RTN_HOST_MEMORY 記憶體錯誤
9003 CGP11_RTN_SLOT_ID_INVALID Slot Id 不存在
9004 CGP11_RTN_GENERAL_ERROR 一般錯誤
9005 CGP11_RTN_FUNCTION_FAILED 函數失敗
9006 CGP11_RTN_ARGUMENTS_BAD
9007 CGP11_RTN_NO_EVENT
9008 CGP11_RTN_NEED_TO_CREATE_THREADS
9009 CGP11_RTN_CANT_LOCK
9010 CGP11_RTN_ATTRIBUTE_READ_ONLY
9011 CGP11_RTN_ATTRIBUTE_SENSITIVE
9012 CGP11_RTN_ATTRIBUTE_TYPE_INVALID
9013 CGP11_RTN_ATTRIBUTE_VALUE_INVALID
9014 CGP11_RTN_DATA_INVALID
9015 CGP11_RTN_DATA_LEN_RANGE
9016 CGP11_RTN_DEVICE_ERROR 裝置不存在
9017 CGP11_RTN_DEVICE_MEMORY
9018 CGP11_RTN_DEVICE_REMOVED 裝置已拔除
9019 CGP11_RTN_ENCRYPTED_DATA_INVALID
9020 CGP11_RTN_ENCRYPTED_DATA_LEN_RANGE 被加密資料長度錯誤
9021 CGP11_RTN_FUNCTION_CANCELED
9022 CGP11_RTN_FUNCTION_NOT_PARALLEL
9023 CGP11_RTN_FUNCTION_NOT_SUPPORTED
9024 CGP11_RTN_KEY_HANDLE_INVALID 指定的金鑰不存在
9025 FCGP11_RTN_KEY_SIZE_RANGE
9026 CGP11_RTN_KEY_TYPE_INCONSISTENT
9027 CGP11_RTN_KEY_NOT_NEEDED
9028 CGP11_RTN_KEY_CHANGED
9029 CGP11_RTN_KEY_NEEDED
9030 CGP11_RTN_KEY_INDIGESTIBLE
9031 CGP11_RTN_KEY_FUNCTION_NOT_PERMITTED
9032 CGP11_RTN_KEY_NOT_WRAPPABLE
9033 CGP11_RTN_KEY_UNEXTRACTABLE
9034 CGP11_RTN_MECHANISM_INVALID 指定的機制不存在
9035 CGP11_RTN_MECHANISM_PARAM_INVALID
9036 CGP11_RTN_OBJECT_HANDLE_INVALID 指定的物件不存在
9037 CGP11_RTN_OPERATION_ACTIVE
9038 CGP11_RTN_OPERATION_NOT_INITIALIZED
9039 CGP11_RTN_PIN_INCORRECT PIN 碼錯誤
9040 CGP11_RTN_PIN_INVALID Pkcs#11 PIN 碼未設定
9041 CGP11_RTN_PIN_LEN_RANGE PIN 碼錯誤
9042 CGP11_RTN_PIN_EXPIRED
9043 CGP11_RTN_PIN_LOCKED PIN 碼錯誤次數超過裝置設定次數
9044 CGP11_RTN_SESSION_CLOSED 與裝置的連線結束
9045 CGP11_RTN_SESSION_COUNT 與裝置的連線次數
9046 CGP11_RTN_SESSION_HANDLE_INVALID 指定的連線不存在
9047 CGP11_RTN_SESSION_PARALLEL_NOT_SUPPORTED
9048 CGP11_RTN_SESSION_READ_ONLY
9049 CGP11_RTN_SESSION_EXISTS 指定的連線已存在
9050 CGP11_RTN_SESSION_READ_ONLY_EXISTS
9051 CGP11_RTN_SESSION_READ_WRITE_EXISTS
9052 CGP11_RTN_SIGNATURE_INVALID
9053 CGP11_RTN_SIGNATURE_LEN_RANGE
9054 CGP11_RTN_TEMPLATE_INCOMPLETE
9055 CGP11_RTN_TEMPLATE_INCONSISTENT
9056 CGP11_RTN_TOKEN_NOT_PRESENT 裝置不存在
9057 CGP11_RTN_TOKEN_NOT_RECOGNIZED
9058 CGP11_RTN_TOKEN_WRITE_PROTECTED 對裝置作寫的動作時所使用的權限錯誤,可能是 SO Pin 錯誤或指定的裝置不可寫入
9059 CGP11_RTN_UNWRAPPING_KEY_HANDLE_INVALID
9060 CGP11_RTN_UNWRAPPING_KEY_SIZE_RANGE
9061 CGP11_RTN_UNWRAPPING_KEY_TYPE_INCONSISTENT
9062 CGP11_RTN_USER_ALREADY_LOGGED_IN 已登入裝置
9063 CGP11_RTN_USER_NOT_LOGGED_IN 未登入裝置
9064 CGP11_RTN_USER_PIN_NOT_INITIALIZED
9065 CGP11_RTN_USER_TYPE_INVALID
9066 CGP11_RTN_USER_ANOTHER_ALREADY_LOGGED_IN
9067 CGP11_RTN_USER_TOO_MANY_TYPES
9068 CGP11_RTN_WRAPPED_KEY_INVALID
9069 CGP11_RTN_WRAPPED_KEY_LEN_RANGE
9070 CGP11_RTN_WRAPPING_KEY_HANDLE_INVALID
9071 CGP11_RTN_WRAPPING_KEY_SIZE_RANGE
9072 CGP11_RTN_WRAPPING_KEY_TYPE_INCONSISTENT
9073 CGP11_RTN_RANDOM_SEED_NOT_SUPPORTED
9074 CGP11_RTN_RANDOM_NO_RNG
9075 CGP11_RTN_BUFFER_TOO_SMALL 緩衝區不夠
9076 CGP11_RTN_SAVED_STATE_INVALID
9077 CGP11_RTN_INFORMATION_SENSITIVE
9078 CGP11_RTN_STATE_UNSAVEABLE
9079 CGP11_RTN_CRYPTOKI_NOT_INITIALIZED
9080 CGP11_RTN_CRYPTOKI_ALREADY_INITIALIZED
9081 CGP11_RTN_MUTEX_BAD
9082 CGP11_RTN_MUTEX_NOT_LOCKED
9083 CGP11_RTN_VENDOR_DEFINED
9100 CGP11_RTN_OBJECT_NOT_EXIST 指定的物件不存在
9101 CGP11_RTN_OBJECT_EXIST 指定的物件已存在
9102 CGP11_RTN_OBJECT_HAS_PROBLEM 裝置中有兩個相同的物件
9110 CGP11_RTN_LOAD_LIBRARY_FAIL
9111 CGP11_RTN_LIBRARY_NOT_LOAD
9999 CGP11_RTN_UNKNOW_ERROR

CGVAATL 元件 API

VA_ServerAddURL

VA_ServerAddURL(CGVAAccount, CGVAPass, CGVAURL, LogMsg)
函式說明 連接並登入位於 CGVAURL 的 VA Server
參數
  • CGVAAccount:有權限使用 VA Server 帳號。
  • CGVAPass:VA Server 帳號的密碼。
  • CGVAURL:VA Server 位址。
  • LogMsg:訊息欄位,用以存放要記錄的訊息(例如IP)或說明資訊。預設值為空字串。
回傳值 0 代表連線成功,非 0 就代表連線失敗。
錯誤訊息處理 失敗,請使用 錯誤! 找不到參照來源。取得系統回傳訊息。


setRtnFields()

void setRtnFields(string fields)
函式說明 設定要 VA 回傳的參數。
參數 fields:要回傳的參數,參數之間用","分隔開。
可指定下列值 subject, serial, cert, signeddata, userid, issuer, notbefore, notafter, certhash, extraid, cardtype, cardrank, transid, translogid。
回傳值


VA_VerifySign

int VA_VerifySign(string sSignature, string sData, int iBinary, int date, string sUserId)
函式說明 憑證登入驗章,身份認證程序:
1. 檢查憑證是否為應用程式認可的 CA 所發行。
2. 驗證認證訊息的簽章值是否正確。
3. 驗證 CR Token 是否存在系統中。
4. 檢查憑證有效性(時間及 CRL)。(option)
5. 檢查該帳號與憑證是否已在 VA 註冊過。(option)
6. 儲存登入紀錄(LoginLog) (option)。
參數 sSignature:簽章值。
sData:簽章原文。若為空字串,則程式自動驗證簽章內之(字串)原文,並回傳原文。
iBinary:預設為 0,若為 1 表示原文為二位元資料經 base64 編碼過。
date:要驗簽章的時間,要驗過往簽章時使用。
sUserId:使用者 ID。當有些系統必須輸入 ID 來搜尋使用者憑證時使用。
回傳值 0 成功
成功後,若有設定 setRtnFields() 回傳值,可使用 VA_GetCert() 取得憑證
錯誤訊息處理 若失敗請使用 VA_GetErrorMsg() 取得錯誤訊息


VA_GetErrorMsg

string VA_GetErrorMsg(int iType)
函式說明 取得系統回傳訊息說明。
參數 iType:訊息種類。可不傳此參數,預設值為伺服器訊息。CHINESE_ERROR_MSG:中文訊息,ENGLISH_ERROR_MSG:英文訊息。SERVLET_ERROR_MSG:伺服器訊息(英文)。可用”|” 同時顯示中文訊 息+伺服器訊息,或英文訊息+伺服器訊息。
回傳值 訊息說明。
備註 必須先使用其他函式成功後,才能使用本函式。


錯誤碼列表

代碼 中文訊息 英文訊息
0 成功。 Success!
5001 一般錯誤。 General error!
5002 配置記憶體發生錯誤。 Memory Allocation Error!
5003 記憶體緩衝區太小。 Buffer too small.
5004 未支援函式。 Function not support.
5005 錯誤的參數。 Invalid parameter!
5006 無效的 handle。 Invalid handle
5007 試用版期限已過。 TrialVersion Library is expired!
5008 Base64 編碼錯誤。 Base64 Encoding Error
5010 無法在 MS CryptoAPI Database 中找到指定憑證。 Certificate not found in MS CryptoAPI Database!
5011 憑證已過期。 Certificate is expired!
5012 憑證尚未合法,無法使用。 Certificate can not be used now!
5013 憑證可能過期或無法使用。 Some certificates are expired, some can not be used now!
5014 憑證主旨錯誤。 Certificate subject not match!
5015 無法找到憑證發行者。 Unable to find certificate issuer!
5016 不合法的憑證簽章。 Certificate signature is invalid!
5017 憑證用途(加解密或簽驗章)不合適。 Invalid certificate key usage!
5020 憑證已撤銷。 Certificate is revoked!
5021 憑證已撤銷(金鑰洩露)。 Certificate is revoked (key compromised)
5022 憑證已撤銷(CA compromised)。 Certificate is revoked (CA compromised)
5023 憑證已撤銷(聯盟已變更)。 Certificate is revoked (affiliation changed)
5024 憑證已撤銷(已取代)。 Certificate is revoked (superseded)
5025 憑證已撤銷(已停止)。 Certificate is revoked (cessation)
5026 憑證保留或暫禁。 Certificate is revoked (hold)
5028 憑證己撤銷(凍結)。 Certificate is revoked (hold)
5030 CRL 已過期。 CRL expired
5031 不合法的 CRL。 CRL not yet valid
5032 無法找到 CRL。 CRL not found
5034 CRL 簽章值無效。 CRL signature invalid
5035 Digest 錯誤。 Get Digest error
5036 不合法的簽章。 Invalid data signature
5037 內容錯誤。 Content not match
5040 憑證格式錯誤。 Incorrect Certificate format
5041 CRL 格式錯誤。 Incorrect CRL format
5042 錯誤的 PKCS7 格式。 Incorrect PKCS7
5043 Key 的格式錯誤。 Incorrect KEY format
5044 不合法的 PKCS10 格式。 Incorrect PKCS10
5045 無效的格式。 Incorrect format
5046 無效的 PKCS12。 Invalid PKCS12
5050 找不到物件。 Object No found
5051 無內容於 PKCS7 資料中。 (PKCS7) No content
5052 無憑證於 PKCS7 資料中。 (PKCS7) No certificate
5053 無簽章資料於 PKCS7 資料中。 (PKCS7) No signerinfo
5060 錯誤的憑證或金鑰。 Certificate/PrivateKey not match
5061 簽章失敗。 Sign error
5062 驗章失敗。 Verify error
5063 加密失敗。 Encrypt error
5064 解密失敗。 Decrypt error
5065 產生金鑰失敗。 Generate key error
5070 取消操作。 Operation Cancel
5071 密碼不正確。 Password Invalid
5080 無法剖析 XML 文件。 (XML) Parse error
5081 無法在 XML 中,找到指定的標籤名稱。 (XML) Tag not found
5100 無效狀態。 Invalid State
5101 超出範圍。 Out Of Range
5201 開啟 store 錯誤。 Open store error
5202 產生 chain 錯誤。 Create chain error
5203 Crypt context 錯誤。 Crypt context error
5204 沒有私密金鑰。 no private key
5205 不可匯出。 unexportable
5206 不可存取 store。 Store accessdeny
5401 CRL 沒有發行者。 CRL no issure
5410 OCSP 沒有簽章值。 OCSP no signature
5411 OCSP 沒有簽署者憑證。 OCSP no signcert
5412 OCSP 沒有原始資料。 OCSP no data
5413 不支援的 OCSP 回應。 unsupport response
5414 無效的 OCSP 回應。 OCSP invalid response
5415 沒有對應的 OCSP 憑證編號。 OCSP no match certid
5416 未知的 OCSP 憑證狀態。 OCSP cert status unknown
5417 無效的 OCSP 回應編號。 OCSP invalid respid
5418 無效的 OCSP 回應。 OCSP invalid respnonce
5420 無效的 OCSP 請求。 OCSP rspstatus invalid request
5421 OCSP 內部錯誤。 OCSP rspstatus internal error
5422 OCSP 忙碌中,請稍後重試。 OCSP rspstatus trylater
5423 OCSP 請求需要簽章。 OCSP rspstatus sigrequired
5424 未被授權的 OCSP 請求。 OCSP rspstatus unauthorized
5425 未知的 OCSP 狀態。 OCSP rspstatus unknown
5500 Socket 錯誤。 Socket error
5501 Socket 未知的主機。 Socket unkown host
5502 Socket 連結錯誤。 Socket connect error
5503 Socket 傳送錯誤。 Socket send error
5504 Socket 接收錯誤。 Socket recv error
5505 Socket 已關閉。 Socket closed
7706 XML 簽章值錯誤。 Incorrect xml signature
7707 XML 指定參考的摘要值錯誤。 Incorrect xml referenceTs digest value
7711 無法找到此 ID 所指的 XML 簽章, ID 錯誤或 XML 簽章不存在。 CanTt find XMLSignature with this ID
7712 解析 XML 文件時發生錯誤。 Parse xml document error
7713 URI 所指向的文件不存在或為空值。 Specified uri is not existed
7716 XML 參數不正確。 XML Incorrect parameter
26004 送至 Servlet 的參數缺少或不正確。 Illeagle argument
26006 Servlet 無法連結。 Unable to connect to Servlet
26008 Servlet 沒有回傳任何資料。 Servlet returns no data
26007 Servlet 回傳資料型態或回傳格式錯誤。 Servlet returns invalid data/type/format
66001 一般性錯誤。 General Error
66003 不合法的參數。 ILLEGALE ARGUMENT
66007 應用程式無法使用此函式。 User has no permission of this function.
66008 簽章原文已過期, 請重整網頁以取得新的簽章原文。 Challenge-Response token expired
66101 Servlet 服務已經啟動,正常執行中。 Servlet already running
66102 Servlet 服務未啟動。 Servlet not start
66105 使用者的密碼不正確。 User password not correct
66201 使用者的帳號已刪除。 User account is deleted
66202 登入失敗次數太多,使用者的帳號已凍結。 User account is freezed
66203 使用者的帳號不存在 User acount not exit
66204 帳號已存在。 ACCOUNT_ALREADY_EXIST
66205 使用者未登入。 User not login
66216 未信任的 CA,請將該 CA 加入信任清單中。 Untrusted CA, add this CA to the trusted list
66302 請求服務的 IP 未被授權。 Unallowed IP
66303 請求服務的 IP 未被授權。 Unallowed IP
66306 序號控管錯誤。 Sequence check fail
66315 備份檔的設定無效。 Backup setting is invalid
66401 連結資料庫失敗。 DATABASE_FAIL
66402 資料庫內沒有找到符合的使用者資料。 No user data in database
66501 憑證已過期或憑證已註銷 CERT_STATE_EXPIRED
66503 憑證己撤銷。 Certificate is revoked
66504 憑證撤銷中。 Certificate is revoking
66505 憑證己暫禁。 Certificate is suspended
66506 憑證暫禁中。 Certificate is suspending
66513 無效憑證的狀態。 Invalid certificate state
66520 憑證的格式錯誤。 Invalid certificate
66521 該憑證不存在系統中。 certificate is not exist in system
66522 憑證簽章有問題。 CERT_BAD_SIGNATURE
66601 回傳訊息格式錯誤。 Return MSG FORMAT ERROR
66710 PKCS7 格式錯誤。 PKCS7_FORMAT_ERROR
66720 簽章原文錯誤。 VERIFY_BAD_CONTENT
66725 無法找到對應的金鑰。 UNMATCH_CERT_PRIKEY
66801 此憑證未登記於該使用者 ID。 This Certificate is not registered with this UserID
66802 此憑證已登記於其他使用者 ID。 The Certificate was registered with other UserID
66804 憑證已存在。 Certificate is exist


檢驗機構端程式

//CGP11 元件初始
objCGP11CryptATL = new CGP11CryptATLLib.CGP11Crypt();
//解析軟憑pfx檔案
int iRtn = objCGP11CryptATL.CryptParsePKCS12(textPfxFilePath.Text, textPfxPassword.Text, textPfxPassword.Tesxt);
//檢查憑證有效性
if (iRtn == 0)
{
  //取得憑證
  sCert = objCGP11CryptATL.GetRtnCertificate();
  HospitalSignatureTextBoxText = sCert;
  //取得數位簽章值
  int CG_FLAG_DETACHMSG = 0x00004000;
  int CG_KU_NON_REPUDIATION = 0x0040;
  int CG_ALGOR_SHA256 = 0x04;
  signature = objCGP11CryptATL.P12Sign(textPfxFilePath.Text, textPfxPassword.Text, DownloadtextBox.Text, CG_FLAG_DETACHMSG, CG_KU_NON_REPUDIATION, CG_ALGOR_SHA256);
  //取得軟憑的私鑰
  sPrivateKey = objCGP11CryptATL.GetRtnPrivateKey(); 
  //使用憑證加密資料
  int CG_ALGOR_AES_256 = 0x07;
  encryptDownloadTextBox.Text = objCGP11CryptATL.CryptCertEncrypt(sCert, DownloadtextBox.Text, CG_ALGOR_AES_256, 0);
}  

署端
va = new CGVAATLLib.VAATLClass();
//CGP11 元件初始
objCGP11CryptATL = new CGP11CryptATLLib.CGP11Crypt();
//連接認證伺服器
            int rtn = va.VA_ServerAddURL(CGVAAccount, CGVAPass, CGVAURL, "SoftwareCert API Login");
//取得憑證的檢驗機構代碼
va.setRtnFields("cert");
rtn = va.VA_VerifySign(sCert, "", 0, 0, "");
HospitalCertTextBox.Text = va.VA_GetCert();
hospitalCodetextBox.Text = objCGP11CryptATL.CGCrypt_CertGetSubjectDirectoryAttrs(sCert, "2.16.886.1.100.2.111", 0);
//取得錯誤訊息
msg = va.VA_GetErrorMsg(va.CG_CHINESE_ERROR_MSG() | va.CG_SERVLET_ERROR_MSG());
//解密資料
//設定codepage
//objCGP11CryptATL.SetCodePage(65001);
objCGP11CryptATL.SetCodePage(950);
decryptTextBox.Text = objCGP11CryptATL.CryptCertDecrypt(sCert, sPrivateKey, textPfxPassword.Text, encryptDownloadTextBox2.Text, 0, 0);
int rtn = objCGP11CryptATL.GetErrorCode();

//使用憑證加密資料
int CG_ALGOR_AES_256 = 0x07;
encryptDownloadTextBox.Text = objCGP11CryptATL.CryptCertEncrypt(sCert, DownloadtextBox.Text, CG_ALGOR_AES_256, 0);

檢驗機構端解密收到資料
//設定codepage
//objCGP11CryptATL.SetCodePage(65001);
objCGP11CryptATL.SetCodePage(950);
decryptTextBox.Text = objCGP11CryptATL.CryptCertDecrypt(sCert, sPrivateKey, textPfxPassword.Text, encryptDownloadTextBox2.Text, 0, 0);

int rtn = objCGP11CryptATL.GetErrorCode();