Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Después de crear o importar una clave maestra , RSA/Schannel y Diffie-Hellman/Schannel informan al CSP del tipo de claves de cifrado masivo y claves MAC que se derivarán de la clave maestra. En el ejemplo siguiente se especifican estos algoritmos. El mismo código se usa para el cliente y el servidor.
#include <windows.h>
#include <stdio.h>
typedef struct _SCHANNEL_ALG
{
DWORD dwUse;
ALG_ID Algid;
DWORD cBits;
DWORD dwFlags;
DWORD dwReserved;
} SCHANNEL_ALG, *PSCHANNEL_ALG;
SCHANNEL_ALG Algorithm;
//--------------------------------------------------------------------
// Algorithms for the SCHANNEL_ALG structure
#define SCHANNEL_MAC_KEY 0x00000000
#define SCHANNEL_ENC_KEY 0x00000001
//--------------------------------------------------------------------
// dwFlags for the SCHANNEL_ALG structure
// This flag will be set when the SSL cipher suite is exportable
// outside the United States and Canada. The use of this flag notifies
// the CSP that it must perform the extra export steps when deriving
// the key.
#define INTERNATIONAL USAGE 0x00000001
void main()
{
//--------------------------------------------------------------------
// Specify the bulk encryption algorithm.
Algorithm.dwUse = SCHANNEL_ENC_KEY;
Algorithm.Algid = CALG_RC4; // or CALG_RC2, CALG_DES, and so on
Algorithm.cBits = 40; // or 64, 128, 192, and so on
if (!CryptSetKeyParam(
hMasterKey,
KP_SCHANNEL_ALG,
(PBYTE)&Algorithm,
0))
{
printf("Failed called to CryptSetKeyParam\n");
exit(1);
};
//--------------------------------------------------------------------
// Specify hash algorithm.
Algorithm.dwUse = SCHANNEL_MAC_KEY;
Algorithm.Algid = CALG_MD5; // or CALG_SHA, and so on
Algorithm.cBits = 128; // or 160...
if (!CryptSetKeyParam(
hMasterKey,
KP_SCHANNEL_ALG,
(PBYTE)&Algorithm,
0))
{
printf("Failed called to CryptSetKeyParam\n");
exit(1);
};
Nota
Un motor de protocolo Schannel no debe especificar algoritmos y tamaños de clave no admitidos por el CSP. Para obtener más información, vea Enumerar protocolos admitidos. Si se especifican algoritmos o tamaños de clave no admitidos, la función CSP debe producir un error y devolver el código de error NTE_BAD_DATA.