Bagikan melalui


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.

Catatan Saat memproses data yang dikembalikan, aplikasi harus menggunakan ukuran aktual data yang dikembalikan. Ukuran aktual bisa sedikit lebih kecil dari ukuran buffer yang ditentukan pada input. (Pada input, ukuran buffer biasanya ditentukan cukup besar untuk memastikan bahwa data output terbesar yang mungkin akan pas di buffer.) Pada output, variabel yang diacu oleh parameter ini diperbarui untuk mencerminkan ukuran aktual data yang disalin ke buffer.
 

[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
ERROR_MORE_DATA
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.
E_INVALIDARG
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.
CRYPT_E_UNEXPECTED_MSG_TYPE
Bukan pesan kriptografi yang ditandatangani.
CRYPT_E_NO_SIGNER
Pesan tidak memiliki penanda tangan atau penanda tangan untuk dwSignerIndex yang ditentukan.
NTE_BAD_ALGID
Pesan di-hash dan ditandatangani dengan menggunakan algoritma yang tidak diketahui atau tidak didukung.
NTE_BAD_SIGNATURE
Tanda tangan pesan tidak diverifikasi.
 
Catatan Kesalahan dari fungsi yang disebut CryptCreateHash, CryptHashData, CryptVerifySignature, dan CryptImportKey dapat disebarluaskan ke fungsi ini.

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

Lihat juga

CryptSignMessage

CryptVerifyDetachedMessageSignature

Fungsi Pesan yang Disederhanakan