Fungsi CryptMsgControl (wincrypt.h)
Fungsi CryptMsgControl melakukan operasi kontrol setelah pesan didekodekan oleh panggilan akhir ke fungsi CryptMsgUpdate . Operasi kontrol yang disediakan oleh fungsi ini digunakan untuk dekripsi, verifikasi tanda tangan dan hash, serta penambahan dan penghapusan sertifikat, daftar pencabutan sertifikat (CRL), penanda tangan, dan atribut yang tidak diautentikasi.
Perubahan penting yang memengaruhi penanganan pesan yang diselimuti telah dilakukan pada CryptoAPI untuk mendukung interoperabilitas email Secure/Multipurpose Internet Mail Extensions (S/MIME). Untuk informasi selengkapnya, lihat Keterangan untuk fungsi CryptMsgOpenToEncode .
Sintaks
BOOL CryptMsgControl(
[in] HCRYPTMSG hCryptMsg,
[in] DWORD dwFlags,
[in] DWORD dwCtrlType,
[in] void const *pvCtrlPara
);
Parameter
[in] hCryptMsg
Handel pesan kriptografi yang kontrolnya akan diterapkan.
[in] dwFlags
Nilai berikut didefinisikan ketika parameter dwCtrlType adalah salah satu dari berikut ini:
- CMSG_CTRL_DECRYPT
- CMSG_CTRL_KEY_TRANS_DECRYPT
- CMSG_CTRL_KEY_AGREE_DECRYPT
- CMSG_CTRL_MAIL_LIST_DECRYPT
Nilai | Makna |
---|---|
|
Handel ke penyedia kriptografi dirilis pada panggilan akhir ke fungsi CryptMsgClose . Handel ini tidak dirilis jika fungsi CryptMsgControl gagal. |
Jika parameter dwCtrlType tidak menentukan operasi dekripsi, atur nilai ini ke nol.
[in] dwCtrlType
Jenis operasi yang akan dilakukan. Jenis kontrol pesan yang ditentukan saat ini dan jenis struktur yang harus diteruskan ke parameter pvCtrlPara diperlihatkan dalam tabel berikut.
Nilai | Makna |
---|---|
|
BLOB yang berisi byte sertifikat atribut yang dikodekan. |
|
Struktur CRYPT_INTEGER_BLOB yang berisi byte sertifikat yang dikodekan untuk ditambahkan ke pesan. |
|
Struktur CMSG_CMS_SIGNER_INFO yang berisi informasi penanda tangan. Operasi ini berbeda dari CMSG_CTRL_ADD_SIGNER karena informasi penanda tangan berisi tanda tangan. |
|
BLOB yang berisi byte yang dikodekan dari CRL untuk ditambahkan ke pesan. |
|
Struktur CMSG_SIGNER_ENCODE_INFO yang berisi informasi penanda tangan yang akan ditambahkan ke pesan. |
|
Struktur CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA yang berisi indeks penanda tangan dan BLOB yang berisi informasi atribut yang tidak diautentikasi untuk ditambahkan ke pesan. |
|
Struktur CMSG_CTRL_DECRYPT_PARA digunakan untuk mendekripsi pesan untuk penerima transportasi kunci yang ditentukan. Nilai ini berlaku untuk penerima RSA. Operasi ini menentukan bahwa fungsi CryptMsgControl mencari indeks penerima untuk mendapatkan informasi penerima transportasi utama. Jika fungsi gagal, GetLastError akan mengembalikan CRYPT_E_INVALID_INDEX jika tidak ada penerima transportasi kunci yang ditemukan. |
|
Indeks sertifikat atribut yang akan dihapus. |
|
Indeks sertifikat yang akan dihapus dari pesan. |
|
Indeks CRL yang akan dihapus dari pesan. |
|
Indeks penanda tangan yang akan dihapus. |
|
Struktur CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA yang berisi indeks yang menentukan penanda tangan dan indeks yang menentukan atribut penanda tangan yang tidak diatomatiskan untuk dihapus. |
|
Struktur CERT_STRONG_SIGN_PARA digunakan untuk melakukan pemeriksaan tanda tangan yang kuat.
Untuk memeriksa tanda tangan yang kuat, tentukan jenis kontrol ini sebelum memanggil CryptMsgGetAndVerifySigner atau sebelum memanggil CryptMsgControl dengan jenis kontrol berikut diatur:
|
|
Struktur CMSG_CTRL_KEY_AGREE_DECRYPT_PARA digunakan untuk mendekripsi pesan untuk kunci sesi perjanjian kunci yang ditentukan. Perjanjian kunci digunakan dengan enkripsi/dekripsi Diffie-Hellman. |
|
Struktur CMSG_CTRL_KEY_TRANS_DECRYPT_PARA digunakan untuk mendekripsi pesan untuk penerima transportasi kunci yang ditentukan. Transportasi kunci digunakan dengan enkripsi/dekripsi RSA. |
|
Struktur CMSG_CTRL_MAIL_LIST_DECRYPT_PARA digunakan untuk mendekripsi pesan untuk penerima yang ditentukan menggunakan kunci enkripsi kunci (KEK) yang didistribusikan sebelumnya. |
|
Nilai ini tidak digunakan. |
|
Struktur CERT_INFO yang mengidentifikasi penanda tangan pesan yang tanda tangannya akan diverifikasi. |
|
Struktur CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA yang menentukan indeks penanda tangan dan kunci umum untuk memverifikasi tanda tangan pesan. Kunci umum penanda tangan dapat berupa struktur CERT_PUBLIC_KEY_INFO , konteks sertifikat, atau konteks rantai sertifikat. |
[in] pvCtrlPara
Penunjuk ke struktur yang ditentukan oleh nilai dwCtrlType.
nilai dwCtrlType | Makna |
---|---|
|
Pendekodean akan dilakukan seolah-olah konten yang dialirkan sedang didekripsi. Jika ada konten streaming terenkripsi yang telah terakumulasi sebelum panggilan ini, beberapa atau semua teks biasa yang dihasilkan dari dekripsi teks sandi diteruskan kembali ke aplikasi melalui fungsi panggilan balik yang ditentukan dalam panggilan ke fungsi CryptMsgOpenToDecode .
Catatan Saat mengalirkan pesan yang diselimuti, fungsi CryptMsgControl tidak dipanggil sampai polling untuk ketersediaan CMSG_ENVELOPE_ALGORITHM_PARAM berhasil. Jika polling tidak berhasil, hasil kesalahan. Untuk deskripsi polling tersebut, lihat fungsi CryptMsgOpenToDecode .
|
|
Hash yang dihitung dari konten pesan dibandingkan dengan hash yang terkandung dalam pesan. |
|
pvCtrlPara menunjuk ke struktur CMSG_SIGNER_ENCODE_INFO yang berisi informasi penanda tangan yang akan ditambahkan ke pesan. |
|
Setelah penghapusan dilakukan, indeks penanda tangan lain yang digunakan untuk pesan ini tidak lagi valid dan harus diperoleh kembali dengan memanggil fungsi CryptMsgGetParam . |
|
Setelah penghapusan dilakukan, indeks atribut lain yang tidak terautentikasi yang digunakan untuk penanda tangan ini tidak lagi valid dan harus diperoleh kembali dengan memanggil fungsi CryptMsgGetParam . |
|
Setelah penghapusan dilakukan, indeks sertifikat lain yang digunakan untuk pesan ini tidak lagi valid dan harus diperoleh kembali dengan memanggil fungsi CryptMsgGetParam . |
|
Setelah penghapusan dilakukan, indeks CRL lain yang digunakan untuk pesan ini tidak lagi valid dan perlu diperoleh kembali dengan memanggil fungsi CryptMsgGetParam . |
Mengembalikan nilai
Jika fungsi berhasil, nilai yang dikembalikan bukan nol.
Jika fungsi gagal, nilai yang dikembalikan adalah nol dan fungsi GetLastError mengembalikan kesalahan pengodean/pendekodean Abstract Syntax Notation One (ASN.1). Untuk informasi tentang kesalahan ini, lihat Nilai Pengembalian Pengodean/Pendekodean ASN.1.
Ketika pesan yang dialirkan, pesan yang diselimuti sedang didekodekan, kesalahan yang ditemui dalam fungsi panggilan balik yang ditentukan aplikasi yang ditentukan oleh parameter pStreamInfo dari
Fungsi CryptMsgOpenToDecode mungkin disebarluaskan ke fungsi CryptMsgControl . Jika ini terjadi, fungsi SetLastError tidak dipanggil oleh fungsi CryptMsgControl setelah fungsi panggilan balik kembali. Ini mempertahankan kesalahan apa pun yang ditemui di bawah kendali aplikasi. Ini adalah tanggung jawab fungsi panggilan balik (atau salah satu API yang dipanggilnya) untuk memanggil fungsi SetLastError jika terjadi kesalahan saat aplikasi memproses data yang dialirkan.
Kesalahan yang disebarkan mungkin ditemui dari fungsi berikut:
- CryptCreateHash
- CryptDecrypt
- CryptGetHashParam
- CryptGetUserKey
- CryptHashData
- CryptImportKey
- CryptSignHash
- CryptVerifySignature
Kode kesalahan berikut paling sering dikembalikan.
Menampilkan kode | Deskripsi |
---|---|
|
Isi pesan telah didekripsi. Kesalahan ini dapat dikembalikan jika parameter dwCtrlType diatur ke CMSG_CTRL_DECRYPT. |
|
Pesan tidak berisi atribut terautentikasi yang diharapkan. Kesalahan ini dapat dikembalikan jika parameter dwCtrlType diatur ke CMSG_CTRL_VERIFY_SIGNATURE. |
|
Terjadi kesalahan saat pengodean atau pendekodean. Kesalahan ini dapat dikembalikan jika parameter dwCtrlType diatur ke CMSG_CTRL_VERIFY_SIGNATURE. |
|
Tipe kontrol tidak valid. |
|
Nilai hash salah. |
|
Nilai indeks tidak valid. |
|
Tipe pesan tidak valid. |
|
Pengidentifikasi objek diformat dengan buruk. Kesalahan ini dapat dikembalikan jika parameter dwCtrlType diatur ke CMSG_CTRL_ADD_SIGNER. |
|
Pesan data yang diselimuti tidak berisi penerima yang ditentukan. Kesalahan ini dapat dikembalikan jika parameter dwCtrlType diatur ke CMSG_CTRL_DECRYPT. |
|
Penanda tangan yang ditentukan untuk pesan tidak ditemukan. Kesalahan ini dapat dikembalikan jika parameter dwCtrlType diatur ke CMSG_CTRL_VERIFY_SIGNATURE. |
|
Algoritma kriptografi tidak diketahui. |
|
Pesan tidak dikodekan seperti yang diharapkan. Kesalahan ini dapat dikembalikan jika parameter dwCtrlType diatur ke CMSG_CTRL_VERIFY_SIGNATURE. |
|
Satu atau beberapa argumen tidak valid. Kesalahan ini dapat dikembalikan jika parameter dwCtrlType diatur ke CMSG_CTRL_DECRYPT. |
|
Tidak tersedia cukup memori untuk menyelesaikan operasi. |
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows XP [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows Server 2003 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | wincrypt.h |
Pustaka | Crypt32.lib |
DLL | Crypt32.dll |