Menghitung Protokol yang Didukung
Protokol dan cipher suite yang didukung dapat dicantumkan dengan panggilan ke CryptGetProvParam dengan PP_ENUMALGS atau PP_ENUMALGS_EX. Nilai PP_ENUMALGS_EX berfungsi seperti PP_ENUMALGS tetapi mengembalikan struktur PROV_ENUMALGS_EX yang menyimpan informasi yang lebih luas tentang algoritma yang didukung oleh penyedia.
Untuk informasi selengkapnya tentang bendera protokol yang ditentukan dan nilainya, lihat Bendera Protokol.
Mengingat bahwa anggota hCryptProv adalah handel dari konteks kriptografi terbuka yang diperoleh dengan menggunakan CryptAcquireContext dengan parameter dwProvType-nya diatur ke PROV_RSA_SCHANNEL, contoh berikut mencantumkan nama semua algoritma yang tersedia di CSP.
PROV_ENUMALGS_EX EnumAlgs; // Structure to hold information on
// a supported algorithm
DWORD dFlag = CRYPT_FIRST; // Flag indicating that the first
// supported algorithm is to be
// enumerated. Changed to 0 after the
// first call to the function.
cbData = sizeof(PROV_ENUMALGS_EX);
while( CryptGetProvParam(
hCryptProv, // handle to an open cryptographic provider
PP_ENUMALGS_EX,
(BYTE *)&EnumAlgs, // information on the next algorithm
&cbData, // number of bytes in the PROV_ENUMALGS_EX
dFlag)) // flag to indicate whether this is a first or
// subsequent algorithm supported by the
// CSP.
{
printf("Supported Algorithm name %s\n", EnumAlgs.szName);
dFlag = CRYPT_NEXT; // Set to CRYPT_NEXT after the first call,
} // end of while loop. When all of the supported algorithms have
// been enumerated, the function returns FALSE.
Tabel berikut mencantumkan beberapa algoritma yang dikembalikan oleh CSP PROV_RSA_SCHANNEL domestik biasa. Perhatikan bahwa tidak ada MAC SSL2 SHA atau enkripsi DES SSL2 yang didukung oleh CSP dalam contoh ini.
Pengidentifikasi algoritma | Panjang kunci minimum | Panjang kunci maksimum | Protokol | Nama algoritma |
---|---|---|---|---|
CALG_RSA_KEYX | 512 | 2048 | 0x0007 | "RSA_KEYX" |
CALG_MD5 | 128 | 128 | 0x0007 | "MD5" |
CALG_SHA | 160 | 160 | 0x0005 | "SHA" |
CALG_RC4 | 40 | 128 | 0x0007 | "RC4" |
CALG_DES | 56 | 56 | 0x0005 | "DES" |
Untuk bersiap mengirim pesan ClientHello atau ServerHello, mesin protokol Schannel menghitung algoritma dan ukuran kunci yang didukung oleh CSP dan membangun daftar suite sandi yang didukung secara internal.