Fungsi CryptVerifyMessageSignature (wincrypt.h)
Fungsi CryptVerifyMessageSignature memverifikasi tanda tangan pesan yang ditandatangani.
Fungsi ini tidak boleh digunakan untuk memverifikasi tanda tangan pesan yang dilepas. Anda harus menggunakan fungsi CryptVerifyDetachedMessageSignature untuk memverifikasi tanda tangan pesan yang dilepaskan.
Sintaks
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
);
Parameter
[in] pVerifyPara
Penunjuk ke struktur CRYPT_VERIFY_MESSAGE_PARA yang berisi parameter verifikasi.
[in] dwSignerIndex
Indeks tanda tangan yang diinginkan. Mungkin ada lebih dari satu tanda tangan. CryptVerifyMessageSignature dapat dipanggil berulang kali, meningkatkan dwSignerIndex setiap kali. Atur parameter ini ke nol untuk penanda tangan pertama, atau jika hanya ada satu penanda tangan. Jika fungsi mengembalikan FALSE, dan GetLastError mengembalikan CRYPT_E_NO_SIGNER, panggilan sebelumnya memproses penanda tangan terakhir pesan.
[in] pbSignedBlob
Penunjuk ke buffer yang berisi pesan yang ditandatangani.
[in] cbSignedBlob
Ukuran, dalam byte, dari buffer pesan yang ditandatangani.
[out] pbDecoded
Penunjuk ke buffer untuk menerima pesan yang didekodekan.
Parameter ini dapat berupa NULL jika pesan yang didekodekan tidak diperlukan untuk pemrosesan tambahan atau untuk mengatur ukuran pesan untuk tujuan alokasi memori. Untuk informasi selengkapnya, lihat Mengambil Data Dengan Panjang Tidak Diketahui.
[in, out] pcbDecoded
Penunjuk ke nilai DWORD yang menentukan ukuran, dalam byte, dari buffer pbDecoded . Ketika fungsi kembali, DWORD ini berisi ukuran, dalam byte, dari pesan yang didekodekan. Pesan yang didekodekan tidak akan dikembalikan jika parameter ini NULL.
[out, optional] ppSignerCert
Alamat penunjuk struktur CERT_CONTEXT yang menerima sertifikat penanda tangan. Setelah Anda selesai menggunakan struktur ini, bebaskan dengan meneruskan pointer ini ke fungsi CertFreeCertificateContext . Parameter ini bisa null jika sertifikat penanda tangan tidak diperlukan.
Mengembalikan nilai
Jika fungsi berhasil, fungsi mengembalikan bukan nol. Ini tidak selalu berarti bahwa tanda tangan diverifikasi. Dalam kasus pesan yang dicopot, variabel yang ditunjukkan oleh pcbDecoded akan berisi nol. Dalam hal ini, fungsi ini akan mengembalikan bukan nol, tetapi tanda tangan tidak diverifikasi. Untuk memverifikasi tanda tangan pesan yang dilepas, gunakan fungsi CryptVerifyDetachedMessageSignature .
Jika fungsi gagal, fungsi akan mengembalikan nol. Untuk informasi kesalahan yang diperluas, hubungi GetLastError.
Tabel berikut menunjukkan kode kesalahan yang paling umum dikembalikan oleh fungsi GetLastError .
Menampilkan kode | Deskripsi |
---|---|
|
Jika buffer yang ditentukan oleh parameter pbDecoded tidak cukup besar untuk menyimpan data yang dikembalikan, fungsi mengatur kode ERROR_MORE_DATA, dan menyimpan ukuran buffer yang diperlukan, dalam byte, dalam variabel yang ditunjukkan oleh pcbDecoded. |
|
Jenis pengodean pesan dan sertifikat tidak valid. Saat ini hanya PKCS_7_ASN_ENCODING dan X509_ASN_ENCODING_TYPE yang didukung. cbSize tidak valid dalam *pVerifyPara. |
|
Bukan pesan kriptografi yang ditandatangani. |
|
Pesan tidak memiliki penanda tangan atau penanda tangan untuk dwSignerIndex yang ditentukan. |
|
Pesan di-hash dan ditandatangani dengan menggunakan algoritma yang tidak diketahui atau tidak didukung. |
|
Tanda tangan pesan tidak diverifikasi. |
Jika fungsi gagal, GetLastError dapat mengembalikan kesalahan pengodean/pendekodean Abstract Syntax Notation One (ASN.1). Untuk informasi tentang kesalahan ini, lihat Nilai Pengembalian Pengodean/Pendekodean ASN.1.
Keterangan
Untuk penanda tangan dan pesan terverifikasi, ppSignerCert diperbarui dengan CERT_CONTEXT penanda tangan. Ini harus dibebaskan dengan memanggil CertFreeCertificateContext. Jika tidak, ppSignerCert diatur ke NULL.
Untuk pesan yang hanya berisi sertifikat dan CRL, pcbDecoded diatur ke NULL.
Contoh
Untuk contoh yang menggunakan fungsi ini, lihat Contoh Program C: Menandatangani Pesan dan Memverifikasi Tanda Tangan Pesan.
Persyaratan
Klien minimum yang didukung | Windows XP [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2003 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | wincrypt.h |
Pustaka | Crypt32.lib |
DLL | Crypt32.dll |