Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Dopo aver creato o importato una chiave master , sia RSA/Schannel che Diffie-Hellman/Schannel informano il CSP del tipo di chiavi di crittografia bulk e chiavi MAC che verranno derivate dalla chiave master. Nell'esempio seguente vengono specificati questi algoritmi. Lo stesso codice viene usato sia per il client che per il server.
#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 motore di protocollo Schannel non deve specificare algoritmi e dimensioni delle chiavi non supportati dal provider di servizi di configurazione. Per altre informazioni, vedere Enumerazione dei protocolli supportati. Se vengono specificati algoritmi o dimensioni di chiave non supportati, la funzione CSP deve avere esito negativo e restituire il codice di errore NTE_BAD_DATA.