Enumeración de protocolos admitidos
Los protocolos y conjuntos de cifrado admitidos se pueden enumerar mediante llamadas a CryptGetProvParam con PP_ENUMALGS o PP_ENUMALGS_EX. El valor de PP_ENUMALGS_EX funciona como PP_ENUMALGS, pero devuelve una estructura PROV_ENUMALGS_EX que contiene información más amplia sobre los algoritmos admitidos por el proveedor.
Para obtener más información sobre las marcas de protocolo definidas y sus valores, vea Marcas de protocolo.
Dado que el miembro hCryptProv es el identificador de un contexto criptográfico abierto adquirido mediante CryptAcquireContext con su parámetro dwProvType establecido en PROV_RSA_SCHANNEL, en el ejemplo siguiente se enumeran los nombres de todos los algoritmos disponibles en el 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.
En la tabla siguiente se enumeran algunos algoritmos devueltos por un CSP de PROV_RSA_SCHANNEL doméstico típico. Tenga en cuenta que el CSP de este ejemplo no admite las MAC SSL2 SHA ni el cifrado SSL2 DES.
Identificador de algoritmo | Longitud mínima de clave | Longitud máxima de clave | Protocolos | Nombre del algoritmo |
---|---|---|---|---|
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" |
Para prepararse para enviar mensajes ClientHello o ServerHello, el motor de protocolo Schannel enumera los algoritmos y los tamaños de clave admitidos por el CSP y crea una lista internamente de conjuntos de cifrado admitidos.