///////////////////////////////////////////////////////////////////////////// // FILE : schderiv.h // // DESCRIPTION : // // AUTHOR : // // HISTORY : // // Oct 9 1997 jeffspel Create // // // // Copyright (C) 1993 Microsoft Corporation All Rights Reserved // ///////////////////////////////////////////////////////////////////////////// #ifndef __SCHDERIV_H__ #define __SCHDERIV_H__ #ifdef __cplusplus extern "C" { #endif #define RC_KEYLEN 16 #define MAX_PREMASTER_LEN 512 // DH key must be <= 4096 bits #define MAX_RANDOM_LEN 256 #define TLS_MASTER_LEN 48 #define SSL3_MASTER_LEN 48 // definition of a Secure Channel hash structure typedef struct _SCH_KeyData { BYTE rgbPremaster[MAX_PREMASTER_LEN]; DWORD cbPremaster; BYTE rgbClientRandom[MAX_RANDOM_LEN]; DWORD cbClientRandom; BYTE rgbServerRandom[MAX_RANDOM_LEN]; DWORD cbServerRandom; ALG_ID EncAlgid; ALG_ID HashAlgid; DWORD cbEnc; DWORD cbEncMac; DWORD cbHash; DWORD cbIV; BOOL fFinished; BOOL dwFlags; } SCH_KEY, *PSCH_KEY; // definition of a Secure Channel hash structure typedef struct _SCH_HashData { ALG_ID ProtocolAlgid; ALG_ID EncAlgid; ALG_ID HashAlgid; DWORD cbEnc; DWORD cbEncMac; DWORD cbHash; DWORD cbIV; BYTE rgbClientRandom[MAX_RANDOM_LEN]; DWORD cbClientRandom; BYTE rgbServerRandom[MAX_RANDOM_LEN]; DWORD cbServerRandom; BYTE rgbFinal[MAX_RANDOM_LEN]; DWORD cbFinal; BOOL dwFlags; } SCH_HASH, *PSCH_HASH; // definition of a TLS1 PRF hash structure typedef struct _PRF_HashData { BYTE rgbLabel[MAX_RANDOM_LEN]; DWORD cbLabel; BYTE rgbSeed[MAX_RANDOM_LEN]; DWORD cbSeed; BYTE rgbMasterKey[TLS_MASTER_LEN]; } PRF_HASH; extern DWORD SCHSetKeyParam( IN Context_t *pContext, IN Key_t *pKey, IN DWORD dwParam, IN CONST BYTE *pbData); extern BOOL SCHGetKeyParam( Key_t *pKey, DWORD dwParam, PBYTE pbData); extern DWORD SChGenMasterKey( Key_t *pKey, PSCH_HASH pSChHash); extern DWORD SecureChannelDeriveKey( Hash_t *pHash, ALG_ID Algid, DWORD dwFlags, HCRYPTKEY *phKey); extern DWORD SetPRFHashParam( PRF_HASH *pPRFHash, DWORD dwParam, CONST BYTE *pbData); extern DWORD CalculatePRF( PRF_HASH *pPRFHash, BYTE *pbData, DWORD *pcbData); #ifdef __cplusplus } #endif #endif // __SCHDERIV_H__