CryptVerifyMessageSignature 函式 (wincrypt.h)
CryptVerifyMessageSignature函式會驗證已簽署訊息的簽章。
此函式不應該用來驗證中斷連結訊息的簽章。 您應該使用 CryptVerifyDetachedMessageSignature 函式來驗證中斷連結訊息的簽章。
語法
BOOL CryptVerifyMessageSignature(
[in] PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
[in] DWORD dwSignerIndex,
[in] const BYTE *pbSignedBlob,
[in] DWORD cbSignedBlob,
[out] BYTE *pbDecoded,
[in, out] DWORD *pcbDecoded,
[out, optional] PCCERT_CONTEXT *ppSignerCert
);
參數
[in] pVerifyPara
包含驗證參數 之CRYPT_VERIFY_MESSAGE_PARA 結構的指標。
[in] dwSignerIndex
所需簽章的索引。 可以有多個簽章。 CryptVerifyMessageSignature 可以重複呼叫,每次遞增 dwSignerIndex 。 將第一個簽署者的此參數設定為零,或只有一個簽署者。 如果函式傳回 FALSE,而 GetLastError 傳回CRYPT_E_NO_SIGNER,則先前的呼叫會處理訊息的最後一個簽署者。
[in] pbSignedBlob
緩衝區的指標,其中包含已簽署的訊息。
[in] cbSignedBlob
帶正負號訊息緩衝區的大小,以位元組為單位。
[out] pbDecoded
要接收已解碼訊息之緩衝區的指標。
如果其他處理不需要解碼的訊息,或為記憶體配置目的設定訊息的大小,這個參數可以是 Null 。 如需詳細資訊,請參閱 擷取未知長度的資料。
[in, out] pcbDecoded
DWORD值的指標,指定pbDecoded緩衝區的大小,以位元組為單位。 當函式傳回時,這個 DWORD 會包含解碼訊息的大小,以位元組為單位。 如果此參數為 Null,將不會傳回解碼的訊息。
[out, optional] ppSignerCert
接收簽署者憑證 之CERT_CONTEXT 結構指標的位址。 當您完成使用此結構時,請將此指標傳遞至 CertFreeCertificateCoNtext 函式來釋放它。 如果不需要簽署者的憑證,這個參數可以是 Null 。
傳回值
如果函式成功,函式會傳回非零。 這不一定表示簽章已驗證。 在中斷連結的訊息案例中, 由其所指向的變數會 包含零。 在此情況下,此函式會傳回非零,但簽章未驗證。 若要驗證中斷連結訊息的簽章,請使用 CryptVerifyDetachedMessageSignature 函式。
如果函式失敗,則會傳回零。 如需擴充的錯誤資訊,請呼叫 GetLastError。
下表顯示 GetLastError 函式最常傳回的錯誤碼。
傳回碼 | 描述 |
---|---|
|
如果 pbDecoded 參數指定的緩衝區不夠大,無法保存傳回的資料,函式會設定ERROR_MORE_DATA程式碼,並將所需的緩衝區大小以位元組為單位儲存在 由ERROR_MORE_DATA coded指向的變數中。 |
|
不正確訊息和憑證編碼類型。 目前僅支援PKCS_7_ASN_ENCODING和X509_ASN_ENCODING_TYPE。 *pVerifyPara中的cbSize無效。 |
|
不是已簽署的密碼編譯訊息。 |
|
訊息沒有指定 dwSignerIndex的任何簽署者或簽署者。 |
|
訊息已使用未知或不支援的演算法進行雜湊處理和簽署。 |
|
未驗證訊息的簽章。 |
如果函式失敗, GetLastError 可能會傳回 抽象語法標記法 1 (ASN.1) 編碼/解碼錯誤。 如需這些錯誤的相關資訊,請參閱 ASN.1 編碼/解碼傳回值。
備註
針對已驗證的簽署者和訊息, ppSignerCert 會更新為簽署者的 CERT_CONTEXT 。 它必須透過呼叫 CertFreeCertificateCoNtext來釋出。 否則, ppSignerCert 會設定為 Null。
若為只包含憑證和 CRL的訊息, 則會設定為Null。
範例
如需使用此函式的範例,請參閱 範例 C 程式:簽署訊息和驗證訊息簽章。
規格需求
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | wincrypt.h |
程式庫 | Crypt32.lib |
Dll | Crypt32.dll |