Bagikan melalui


Fungsi CryptVerifySignatureA (wincrypt.h)

Penting API ini tidak digunakan lagi. Perangkat lunak baru dan yang sudah ada harus mulai menggunakan Cryptography Next Generation API. Microsoft dapat menghapus API ini dalam rilis mendatang.
 
Fungsi CryptVerifySignature memverifikasi tanda tangan objek hash.

Sebelum memanggil fungsi ini, CryptCreateHash harus dipanggil untuk membuat handel objek hash. CryptHashData atau CryptHashSessionKey kemudian digunakan untuk menambahkan kunci data atau sesi ke objek hash.

Setelah CryptVerifySignature selesai, hanya CryptDestroyHash yang dapat dipanggil dengan menggunakan handel hHash .

Sintaks

BOOL CryptVerifySignatureA(
  [in] HCRYPTHASH hHash,
  [in] const BYTE *pbSignature,
  [in] DWORD      dwSigLen,
  [in] HCRYPTKEY  hPubKey,
  [in] LPCSTR     szDescription,
  [in] DWORD      dwFlags
);

Parameter

[in] hHash

Handel ke objek hash untuk diverifikasi.

[in] pbSignature

Alamat data tanda tangan yang akan diverifikasi.

[in] dwSigLen

Jumlah byte dalam data tanda tangan pbSignature .

[in] hPubKey

Handel ke kunci publik yang akan digunakan untuk mengautentikasi tanda tangan. Kunci publik ini harus termasuk dalam pasangan kunci yang awalnya digunakan untuk membuat tanda tangan digital.

[in] szDescription

Parameter ini tidak boleh lagi digunakan dan harus diatur ke NULL untuk mencegah kerentanan keamanan. Namun, masih didukung untuk kompatibilitas mundur di Penyedia Kriptografi Dasar Microsoft.

[in] dwFlags

Nilai bendera berikut ditentukan.

Nilai Makna
CRYPT_NOHASHOID
0x00000001
Bendera ini digunakan dengan penyedia RSA. Saat memverifikasi tanda tangan, pengidentifikasi objek hash (OID) tidak diharapkan ada atau diperiksa. Jika bendera ini tidak diatur, hash OID dalam tanda tangan default diverifikasi seperti yang ditentukan dalam definisi DigestInfo di PKCS #7.
CRYPT_TYPE2_FORMAT
0x00000002
Bendera ini tidak digunakan.
CRYPT_X931_FORMAT
0x00000004
Gunakan dukungan X.931 untuk versi RSA (rDSA) yang mematuhi FIPS 186-2.

Nilai kembali

Jika fungsi berhasil, nilai yang dikembalikan adalah TRUE.

Jika fungsi gagal, nilai yang dikembalikan adalah FALSE. Untuk informasi kesalahan yang diperluas, hubungi GetLastError.

Kode kesalahan yang diawali oleh "NTE" dihasilkan oleh CSP tertentu yang Anda gunakan. Beberapa kemungkinan kode kesalahan mengikuti.

Menampilkan kode Deskripsi
ERROR_INVALID_HANDLE
Salah satu parameter menentukan handel yang tidak valid.
ERROR_INVALID_PARAMETER
Salah satu parameter berisi nilai yang tidak valid. Ini paling sering merupakan pointer yang tidak valid.
NTE_BAD_FLAGS
Parameter dwFlags bukan nol.
NTE_BAD_HASH
Objek hash yang ditentukan oleh parameter hHash tidak valid.
NTE_BAD_KEY
Parameter hPubKey tidak berisi handel ke kunci publik yang valid.
NTE_BAD_SIGNATURE
Tanda tangan tidak valid. Ini mungkin karena data itu sendiri telah berubah, string deskripsi tidak cocok, atau kunci publik yang salah ditentukan oleh hPubKey.

Kesalahan ini juga dapat dikembalikan jika algoritma hashing atau tanda tangan tidak cocok dengan yang digunakan untuk membuat tanda tangan.

NTE_BAD_UID
Konteks penyedia layanan kriptografi (CSP) yang ditentukan ketika objek hash dibuat tidak dapat ditemukan.
NTE_NO_MEMORY
CSP kehabisan memori selama operasi.

Keterangan

Fungsi CryptVerifySignature menyelesaikan hash. Setelah panggilan ini, tidak ada lagi data yang dapat ditambahkan ke hash. Panggilan tambahan ke CryptHashData atau CryptHashSessionKey gagal. Setelah aplikasi selesai dengan hash, CryptDestroyHash harus dipanggil untuk menghancurkan objek hash.

Jika Anda membuat tanda tangan dengan menggunakan API .NET Framework dan mencoba memverifikasinya dengan menggunakan fungsi CryptVerifySignature, fungsi akan gagal dan GetLastError akan mengembalikan NTE_BAD_SIGNATURE. Ini karena pesanan byte yang berbeda antara API Win32 asli dan API .NET Framework.

API kriptografi asli menggunakan urutan byte little-endian sementara API .NET Framework menggunakan urutan byte big-endian. Jika Anda memverifikasi tanda tangan yang dihasilkan dengan menggunakan API .NET Framework, Anda harus menukar urutan byte tanda tangan sebelum memanggil fungsi CryptVerifySignature untuk memverifikasi tanda tangan.

Contoh

Untuk contoh yang menggunakan fungsi CryptVerifySignature , lihat Contoh Program C: Menandatangani Hash dan Memverifikasi Tanda Tangan Hash.

Catatan

Header wincrypt.h mendefinisikan CryptVerifySignature sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta praprosesor UNICODE. Mencampur penggunaan alias encoding-netral dengan kode yang tidak mengodekan-netral dapat menyebabkan ketidakcocokan yang mengakibatkan kesalahan kompilasi atau runtime. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.

Persyaratan

Persyaratan Nilai
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 Advapi32.lib
DLL Advapi32.dll

Lihat juga

CryptCreateHash

CryptDestroyHash

CryptHashData

CryptHashSessionKey

CryptSignHash

Fungsi Hash dan Tanda Tangan Digital