Fungsi CryptMsgCalculateEncodedLength (wincrypt.h)

Fungsi CryptMsgCalculateEncodedLength menghitung jumlah maksimum byte yang diperlukan untuk pesan kriptografi yang dikodekan mengingat jenis pesan, parameter pengodean, dan panjang total data yang akan dikodekan. Perhatikan bahwa hasilnya akan selalu lebih besar dari atau sama dengan jumlah byte aktual yang diperlukan.

Sintaks

DWORD CryptMsgCalculateEncodedLength(
  [in]           DWORD      dwMsgEncodingType,
  [in]           DWORD      dwFlags,
  [in]           DWORD      dwMsgType,
  [in]           void const *pvMsgEncodeInfo,
  [in, optional] LPSTR      pszInnerContentObjID,
  [in]           DWORD      cbData
);

Parameter

[in] dwMsgEncodingType

Menentukan jenis pengodean yang digunakan. Selalu dapat diterima untuk menentukan jenis pengodean sertifikat dan pesan dengan menggabungkannya dengan operasi bitwise-OR seperti yang ditunjukkan dalam contoh berikut:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING

Jenis pengodean yang saat ini ditentukan adalah:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] dwFlags

Bendera yang saat ini ditentukan diperlihatkan dalam tabel berikut.

Nilai Makna
CMSG_BARE_CONTENT_FLAG
Menunjukkan bahwa output yang dialirkan tidak akan memiliki pembungkus ContentInfo luar (seperti yang didefinisikan oleh PKCS #7). Ini membuatnya cocok untuk dialirkan ke dalam pesan yang tertutup.
CMSG_DETACHED_FLAG
Menunjukkan bahwa ada data yang dicopot yang disediakan untuk panggilan berikutnya ke CryptMsgUpdate.
CMSG_CONTENTS_OCTETS_FLAG
Digunakan untuk menghitung ukuran pengodean DER pesan yang akan disarangkan di dalam pesan yang diselimuti. Ini sangat berguna ketika streaming sedang dilakukan.
CMSG_CMS_ENCAPSULATED_CONTENT_FLAG
Konten dalam tipe non-Data dienkapsulasi dalam STRING OCTET. Bendera ini berlaku untuk pesan Yang Ditandatangani dan Diselimuti.

[in] dwMsgType

Jenis pesan yang ditentukan saat ini diperlihatkan dalam tabel berikut ini.

Nilai Makna
CMSG_DATA
String oktet (BYTE).
CMSG_SIGNED

CMSG_SIGNED_ENCODE_INFO

CMSG_ENVELOPED

CMSG_ENVELOPED_ENCODE_INFO

CMSG_SIGNED_AND_ENVELOPED
Tidak diterapkan.
CMSG_HASHED

CMSG_HASHED_ENCODE_INFO

CMSG_ENCRYPTED
Tidak diterapkan.

[in] pvMsgEncodeInfo

Penunjuk ke data yang akan dikodekan. Jenis data yang diarahkan tergantung pada nilai dwMsgType. Untuk detailnya, lihat tabel dwMsgType .

[in, optional] pszInnerContentObjID

Saat memanggil CryptMsgCalculateEncodedLength dengan data yang disediakan untuk CryptMsgUpdate yang sudah dikodekan , pengidentifikasi objek yang sesuai diteruskan dalam pszInnerContentObjID. Jika pszInnerContentObjID adalah NULL, jenis konten dalam diasumsikan tidak telah dikodekan sebelumnya, dan dikodekan sebagai string oktet dan diberikan jenis CMSG_DATA.

Saat streaming digunakan, pszInnerContentObjID harus NULL atau szOID_RSA_data.

Pengidentifikasi objek algoritma berikut umumnya digunakan:

  • szOID_RSA_data
  • szOID_RSA_signedData
  • szOID_RSA_envelopedData
  • szOID_RSA_signEnvData
  • szOID_RSA_digestedData
  • szOID_RSA_encryptedData
  • SPC_INDIRECT_DATA_OBJID
Pengguna dapat menentukan penggunaan konten dalam baru. Pengguna harus memastikan bahwa pengirim dan penerima pesan menyetujui semantik yang terkait dengan pengidentifikasi objek.

[in] cbData

Ukuran, dalam byte, konten.

Nilai kembali

Mengembalikan panjang yang diperlukan untuk pesan kriptografi yang dikodekan. Panjang ini mungkin bukan panjang yang tepat tetapi tidak akan kurang dari panjang yang diperlukan. Nol dikembalikan jika fungsi gagal.

Untuk mengambil informasi kesalahan yang diperluas, gunakan fungsi GetLastError . Tabel berikut mencantumkan kode kesalahan yang paling sering dikembalikan.

Menampilkan kode Deskripsi
CRYPT_E_INVALID_MSG_TYPE
Tipe pesan tidak valid.
CRYPT_E_UNKNOWN_ALGO
Algoritma kriptografi tidak diketahui.
E_INVALIDARG
Satu atau beberapa argumen tidak valid.

Persyaratan

   
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

Lihat juga

CryptMsgOpenToEncode

Fungsi Pesan tingkat rendah

Fungsi Pesan yang Disederhanakan