mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
285 lines
8.2 KiB
285 lines
8.2 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1995.
|
|
//
|
|
// File: msgs.h
|
|
//
|
|
// Contents:
|
|
//
|
|
// Classes:
|
|
//
|
|
// Functions:
|
|
//
|
|
// History: 8-02-95 RichardW Created
|
|
// 8-06-95 TerenceS Transformed into PCT version
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#ifndef __MSGS_H__
|
|
#define __MSGS_H__
|
|
|
|
#include <pshpack1.h>
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
//
|
|
// Useful Macros
|
|
//
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
#define LSBOF(x) ((UCHAR) (x & 0xFF))
|
|
#define MSBOF(x) ((UCHAR) ((x >> 8) & 0xFF) )
|
|
|
|
#define COMBINEBYTES(Msb, Lsb) ((DWORD) (((DWORD) (Msb) << 8) | (DWORD) (Lsb)))
|
|
|
|
// external representations of algorithm specs
|
|
|
|
typedef DWORD ExtCipherSpec, *PExtCipherSpec;
|
|
typedef WORD ExtHashSpec, *PExtHashSpec;
|
|
typedef WORD ExtCertSpec, *PExtCertSpec;
|
|
typedef WORD ExtExchSpec, *PExtExchSpec;
|
|
typedef WORD ExtSigSpec, *PExtSigSpec;
|
|
|
|
typedef struct _Pct_Record_Header {
|
|
UCHAR Byte0;
|
|
UCHAR Byte1;
|
|
} Pct_Record_Header, * PPct_Record_Header;
|
|
|
|
typedef struct _Pct_Record_Header_Ex {
|
|
UCHAR Byte0;
|
|
UCHAR Byte1;
|
|
UCHAR PaddingSize;
|
|
} Pct_Record_Header_Ex, * PPct_Record_Header_Ex;
|
|
|
|
|
|
typedef struct _Pct_Error {
|
|
Pct_Record_Header Header;
|
|
UCHAR MessageId;
|
|
UCHAR ErrorMsb;
|
|
UCHAR ErrorLsb;
|
|
UCHAR ErrorInfoMsb;
|
|
UCHAR ErrorInfoLsb;
|
|
UCHAR VariantData[1];
|
|
} Pct_Error, * PPct_Error;
|
|
|
|
|
|
typedef struct _Pct_Client_Hello {
|
|
Pct_Record_Header Header;
|
|
UCHAR MessageId;
|
|
UCHAR VersionMsb;
|
|
UCHAR VersionLsb;
|
|
UCHAR Pad;
|
|
UCHAR SessionIdData[PCT_SESSION_ID_SIZE];
|
|
UCHAR ChallengeData[PCT_CHALLENGE_SIZE];
|
|
UCHAR OffsetMsb;
|
|
UCHAR OffsetLsb;
|
|
UCHAR CipherSpecsLenMsb;
|
|
UCHAR CipherSpecsLenLsb;
|
|
UCHAR HashSpecsLenMsb;
|
|
UCHAR HashSpecsLenLsb;
|
|
UCHAR CertSpecsLenMsb;
|
|
UCHAR CertSpecsLenLsb;
|
|
UCHAR ExchSpecsLenMsb;
|
|
UCHAR ExchSpecsLenLsb;
|
|
UCHAR KeyArgLenMsb;
|
|
UCHAR KeyArgLenLsb;
|
|
UCHAR VariantData[1];
|
|
} Pct_Client_Hello, * PPct_Client_Hello;
|
|
|
|
|
|
typedef struct _Pct_Server_Hello {
|
|
Pct_Record_Header Header;
|
|
UCHAR MessageId;
|
|
UCHAR Pad;
|
|
UCHAR ServerVersionMsb;
|
|
UCHAR ServerVersionLsb;
|
|
UCHAR RestartSessionOK;
|
|
UCHAR ClientAuthReq;
|
|
ExtCipherSpec CipherSpecData;
|
|
ExtHashSpec HashSpecData;
|
|
ExtCertSpec CertSpecData;
|
|
ExtExchSpec ExchSpecData;
|
|
UCHAR ConnectionIdData[PCT_SESSION_ID_SIZE];
|
|
UCHAR CertificateLenMsb;
|
|
UCHAR CertificateLenLsb;
|
|
UCHAR CertSpecsLenMsb;
|
|
UCHAR CertSpecsLenLsb;
|
|
UCHAR ClientSigSpecsLenMsb;
|
|
UCHAR ClientSigSpecsLenLsb;
|
|
UCHAR ResponseLenMsb;
|
|
UCHAR ResponseLenLsb;
|
|
UCHAR VariantData[1];
|
|
} Pct_Server_Hello, * PPct_Server_Hello;
|
|
|
|
typedef struct _Pct_Client_Master_Key {
|
|
Pct_Record_Header Header;
|
|
UCHAR MessageId;
|
|
UCHAR Pad;
|
|
UCHAR ClientCertSpecsData[2];
|
|
UCHAR ClientSigSpecsData[2];
|
|
UCHAR ClearKeyLenMsb;
|
|
UCHAR ClearKeyLenLsb;
|
|
UCHAR EncryptedKeyLenMsb;
|
|
UCHAR EncryptedKeyLenLsb;
|
|
UCHAR KeyArgLenMsb;
|
|
UCHAR KeyArgLenLsb;
|
|
UCHAR VerifyPreludeLenMsb;
|
|
UCHAR VerifyPreludeLenLsb;
|
|
UCHAR ClientCertLenMsb;
|
|
UCHAR ClientCertLenLsb;
|
|
UCHAR ResponseLenMsb;
|
|
UCHAR ResponseLenLsb;
|
|
UCHAR VariantData[1];
|
|
} Pct_Client_Master_Key, * PPct_Client_Master_Key;
|
|
|
|
|
|
typedef struct _Pct_Server_Verify {
|
|
Pct_Record_Header Header;
|
|
UCHAR MessageId;
|
|
UCHAR Pad;
|
|
UCHAR SessionIdData[PCT_SESSION_ID_SIZE];
|
|
UCHAR ResponseLenMsb;
|
|
UCHAR ResponseLenLsb;
|
|
UCHAR VariantData[1];
|
|
} Pct_Server_Verify, * PPct_Server_Verify;
|
|
|
|
|
|
#include <poppack.h>
|
|
|
|
////////////////////////////////////////////////////
|
|
//
|
|
// Expanded Form Messages:
|
|
//
|
|
////////////////////////////////////////////////////
|
|
|
|
typedef struct _PctError {
|
|
DWORD Error;
|
|
DWORD ErrInfoLen;
|
|
BYTE *ErrInfo;
|
|
} PctError, *PPctError;
|
|
|
|
typedef struct _Client_Hello {
|
|
DWORD cCipherSpecs;
|
|
DWORD cHashSpecs;
|
|
DWORD cCertSpecs;
|
|
DWORD cExchSpecs;
|
|
DWORD cbKeyArgSize;
|
|
CipherSpec * pCipherSpecs;
|
|
HashSpec * pHashSpecs;
|
|
CertSpec * pCertSpecs;
|
|
ExchSpec * pExchSpecs;
|
|
PctSessionId SessionId;
|
|
PctChallenge Challenge;
|
|
PUCHAR pKeyArg;
|
|
} Client_Hello, * PClient_Hello;
|
|
|
|
|
|
typedef struct _Server_Hello {
|
|
DWORD RestartOk;
|
|
DWORD ClientAuthReq;
|
|
DWORD CertificateLen;
|
|
DWORD ResponseLen;
|
|
DWORD cSigSpecs;
|
|
DWORD cCertSpecs;
|
|
PctSessionId Connection;
|
|
UCHAR * pCertificate;
|
|
UCHAR Response[RESPONSE_SIZE];
|
|
CipherSpec SrvCipherSpec;
|
|
HashSpec SrvHashSpec;
|
|
CertSpec SrvCertSpec;
|
|
ExchSpec SrvExchSpec;
|
|
SigSpec * pClientSigSpecs;
|
|
CertSpec * pClientCertSpecs;
|
|
} Server_Hello, * PServer_Hello;
|
|
|
|
typedef struct _Client_Master_Key {
|
|
DWORD ClearKeyLen;
|
|
DWORD EncryptedKeyLen;
|
|
DWORD KeyArgLen;
|
|
DWORD VerifyPreludeLen;
|
|
DWORD ClientCertLen;
|
|
DWORD ResponseLen;
|
|
CertSpec * pClientCertSpec;
|
|
SigSpec * pClientSigSpec;
|
|
UCHAR ClearKey[MASTER_KEY_SIZE];
|
|
UCHAR EncryptedKey[ENCRYPTED_KEY_SIZE];
|
|
UCHAR KeyArg[MASTER_KEY_SIZE];
|
|
UCHAR ClientCert[CERT_SIZE];
|
|
UCHAR Response[PCT_SIGNATURE_SIZE];
|
|
UCHAR VerifyPrelude[RESPONSE_SIZE];
|
|
} Client_Master_Key, * PClient_Master_Key;
|
|
|
|
typedef struct _Server_Verify {
|
|
UCHAR SessionIdData[PCT_SESSION_ID_SIZE];
|
|
DWORD ResponseLen;
|
|
UCHAR Response[RESPONSE_SIZE];
|
|
} Server_Verify, * PServer_Verify;
|
|
|
|
///////////////////////////////////////////////////
|
|
//
|
|
// Pickling Prototypes
|
|
//
|
|
///////////////////////////////////////////////////
|
|
|
|
BOOL
|
|
PackClientHello(
|
|
PClient_Hello pCanonical,
|
|
PPct_Client_Hello * ppNetwork,
|
|
DWORD * pcbNetwork);
|
|
|
|
BOOL
|
|
UnpackClientHello(
|
|
BOOL SingleAlloc,
|
|
DWORD *ErrorInfo,
|
|
PPct_Client_Hello pMessage,
|
|
DWORD cbMessage,
|
|
PClient_Hello * ppClient);
|
|
|
|
BOOL
|
|
PackServerHello(
|
|
PServer_Hello pCanonical,
|
|
PPct_Server_Hello * ppNetwork,
|
|
DWORD * pcbNetwork);
|
|
|
|
BOOL
|
|
UnpackServerHello(
|
|
BOOL SingleAlloc,
|
|
DWORD *ErrorInfo,
|
|
PPct_Server_Hello pMessage,
|
|
DWORD cbMessage,
|
|
PServer_Hello * ppServer);
|
|
|
|
BOOL
|
|
PackClientMasterKey(
|
|
PClient_Master_Key pCanonical,
|
|
PPct_Client_Master_Key *ppNetwork,
|
|
DWORD * pcbNetwork);
|
|
|
|
BOOL
|
|
UnpackClientMasterKey(
|
|
DWORD *ErrorInfo,
|
|
PPct_Client_Master_Key pMessage,
|
|
DWORD cbMessage,
|
|
PClient_Master_Key * ppClient);
|
|
|
|
BOOL
|
|
PackServerVerify(
|
|
PServer_Verify pCanonical,
|
|
PPct_Server_Verify *ppNetwork,
|
|
DWORD * pcbNetwork);
|
|
|
|
BOOL
|
|
UnpackServerVerify(
|
|
BOOL SingleAlloc,
|
|
DWORD *ErrorInfo,
|
|
PPct_Server_Verify pMessage,
|
|
DWORD cbMessage,
|
|
PServer_Verify * ppServer);
|
|
|
|
BOOL
|
|
PackPctError(
|
|
PPctError pCanonical,
|
|
PPct_Error *ppNetwork,
|
|
DWORD * pcbNetwork);
|
|
|
|
#endif // __MSGS_H__
|