Fungsi CryptSignAndEncodeCertificate (wincrypt.h)

Fungsi CryptSignAndEncodeCertificate mengodekan dan menandatangani sertifikat, daftar pencabutan sertifikat (CRL), daftar kepercayaan sertifikat (CTL), atau permintaan sertifikat.

Fungsi ini melakukan operasi berikut:

  • Memanggil CryptEncodeObject menggunakan lpszStructType untuk mengodekan informasi "yang akan ditandatangani".
  • Memanggil CryptSignCertificate untuk menandatangani informasi yang dikodekan ini.
  • Memanggil CryptEncodeObject lagi, dengan lpszStructType diatur ke X509_CERT, untuk mengodekan lebih lanjut informasi yang ditandatangani dan dikodekan yang dihasilkan.

Sintaks

BOOL CryptSignAndEncodeCertificate(
  [in]      BCRYPT_KEY_HANDLE           hBCryptKey,
  [in]      DWORD                       dwKeySpec,
  [in]      DWORD                       dwCertEncodingType,
  [in]      LPCSTR                      lpszStructType,
  [in]      const void                  *pvStructInfo,
  [in]      PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
  [in]      const void                  *pvHashAuxInfo,
  [out]     BYTE                        *pbEncoded,
  [in, out] DWORD                       *pcbEncoded
);

Parameter

[in] hBCryptKey

Handel penyedia layanan kriptografi (CSP) untuk melakukan tanda tangan. Handel ini adalah handel HCRYPTPROV yang telah dibuat dengan menggunakan fungsi CryptAcquireContext atau handel NCRYPT_KEY_HANDLE yang telah dibuat dengan menggunakan fungsi NCryptOpenKey . Aplikasi baru harus selalu meneruskan penanganan NCRYPT_KEY_HANDLE CSP CNG.

[in] dwKeySpec

Mengidentifikasi kunci privat yang akan digunakan dari kontainer penyedia. Ini harus menjadi salah satu nilai berikut. Parameter ini diabaikan jika kunci CNG diteruskan dalam parameter hCryptProvOrNCryptKey .

Nilai Makna
AT_KEYEXCHANGE
Gunakan kunci pertukaran kunci.
AT_SIGNATURE
Gunakan kunci tanda tangan digital.

[in] dwCertEncodingType

Menentukan jenis pengodean yang digunakan. Ini bisa menjadi nilai berikut.

Nilai Makna
X509_ASN_ENCODING
Menentukan pengodean sertifikat X.509 .

[in] lpszStructType

Penunjuk ke string ANSI yang dihentikan null yang berisi jenis data yang akan dikodekan dan ditandatangani. Konstanta lpszStructType yang telah ditentukan sebelumnya berikut digunakan dengan operasi pengodean.

Nilai Makna
X509_CERT_CRL_TO_BE_SIGNED
pvStructInfo adalah alamat struktur CRL_INFO .
X509_CERT_REQUEST_TO_BE_SIGNED
pvStructInfo adalah alamat struktur CERT_REQUEST_INFO .
X509_CERT_TO_BE_SIGNED
pvStructInfo adalah alamat struktur CERT_INFO .
X509_KEYGEN_REQUEST_TO_BE_SIGNED
pvStructInfo adalah alamat struktur CERT_KEYGEN_REQUEST_INFO .

[in] pvStructInfo

Alamat struktur yang berisi data yang akan ditandatangani dan dikodekan. Format struktur ini ditentukan oleh parameter lpszStructType .

[in] pSignatureAlgorithm

Penunjuk ke struktur CRYPT_ALGORITHM_IDENTIFIER yang berisi pengidentifikasi objek (OID) algoritma tanda tangan dan parameter tambahan apa pun yang diperlukan. Fungsi ini menggunakan OID algoritma berikut:

  • szOID_RSA_MD5RSA
  • szOID_RSA_SHA1RSA
  • szOID_X957_SHA1DSA
Jika algoritma tanda tangan adalah algoritma hash , tanda tangan hanya berisi oktet hash yang tidak terenkripsi. Kunci privat tidak digunakan untuk mengenkripsi hash. dwKeySpec tidak digunakan dan hCryptProvOrNCryptKey dapat berupa NULL jika CSP default yang sesuai dapat digunakan untuk hashing.

[in] pvHashAuxInfo

Dicadangkan. Harus NULL.

[out] pbEncoded

Penunjuk ke buffer untuk menerima output yang ditandatangani dan dikodekan.

Parameter ini bisa NULL untuk mengatur ukuran informasi ini untuk tujuan alokasi memori. Untuk informasi selengkapnya, lihat Mengambil Data Dengan Panjang Tidak Diketahui.

[in, out] pcbEncoded

Penunjuk ke DWORD yang berisi ukuran, dalam byte, dari buffer yang diacu oleh parameter pbEncoded . Saat fungsi kembali, DWORD berisi jumlah byte yang disimpan atau disimpan dalam buffer.

Catatan Saat memproses data yang dikembalikan dalam buffer, aplikasi perlu 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.
 

Mengembalikan nilai

Jika fungsi berhasil, nilai yang dikembalikan bukan nol (TRUE).

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

Catatan Kesalahan dari fungsi yang disebut CryptCreateHash, CryptSignHash dan CryptHashData mungkin disebarluaskan ke fungsi ini.
 
Kemungkinan kode kesalahan termasuk, tetapi tidak terbatas pada, berikut ini.
Menampilkan kode Deskripsi
ERROR_MORE_DATA
Jika buffer yang ditentukan oleh parameter pbEncoded tidak cukup besar untuk menyimpan data yang dikembalikan, fungsi mengatur kode ERROR_MORE_DATA dan menyimpan ukuran buffer yang diperlukan, dalam byte, ke dalam variabel yang ditunjukkan oleh pcbEncoded.
ERROR_FILE_NOT_FOUND
Tipe pengodean sertifikat tidak valid. Saat ini hanya X509_ASN_ENCODING yang didukung.
NTE_BAD_ALGID
OID algoritma tanda tangan tidak memetakan ke algoritma hash yang diketahui atau didukung.
CRYPT_E_BAD_ENCODE
Terjadi kesalahan saat pengodean atau pendekodean. Penyebab paling mungkin dari kesalahan ini adalah inisialisasi bidang yang tidak tepat dalam struktur yang ditujukkan oleh pvStructInfo.
 

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.

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 Crypt32.lib
DLL Crypt32.dll

Lihat juga

CryptSignCertificate

Fungsi Manajemen Data