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.
312 lines
9.5 KiB
312 lines
9.5 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1995.
|
|
//
|
|
// File: msgs.h
|
|
//
|
|
// Contents:
|
|
//
|
|
// Classes:
|
|
//
|
|
// Functions:
|
|
//
|
|
// History: 8-02-95 RichardW Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#ifndef __MSGS_H__
|
|
#define __MSGS_H__
|
|
|
|
#include <pshpack1.h>
|
|
|
|
typedef struct _Ssl_Cipher_Tuple {
|
|
UCHAR C1;
|
|
UCHAR C2;
|
|
UCHAR C3;
|
|
} Ssl_Cipher_Tuple, * PSsl_Cipher_Tuple;
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
//
|
|
// 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)))
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
//
|
|
// Message Constants
|
|
//
|
|
///////////////////////////////////////////////////////////////////
|
|
|
|
#define SSL_CLIENT_VERSION 0x0002
|
|
#define SSL_SERVER_VERSION 0x0002
|
|
|
|
#define SSL_CLIENT_VERSION_MSB 0x00
|
|
#define SSL_CLIENT_VERSION_LSB 0x02
|
|
|
|
#define SSL_SERVER_VERSION_MSB 0x00
|
|
#define SSL_SERVER_VERSION_LSB 0x02
|
|
|
|
#define SSL_MT_ERROR 0
|
|
#define SSL_MT_CLIENT_HELLO 1
|
|
#define SSL_MT_CLIENT_MASTER_KEY 2
|
|
#define SSL_MT_CLIENT_FINISHED_V2 3
|
|
#define SSL_MT_SERVER_HELLO 4
|
|
#define SSL_MT_SERVER_VERIFY 5
|
|
#define SSL_MT_SERVER_FINISHED_V2 6
|
|
#define SSL_MT_REQUEST_CERTIFICATE 7
|
|
#define SSL_MT_CLIENT_CERTIFICATE 8
|
|
#define SSL_MT_CLIENT_DH_KEY 9
|
|
#define SSL_MT_CLIENT_SESSION_KEY 10
|
|
#define SSL_MT_CLIENT_FINISHED 11
|
|
#define SSL_MT_SERVER_FINISHED 12
|
|
|
|
#define SSL_PE_NO_CIPHER 0x0001
|
|
#define SSL_PE_NO_CERTIFICATE 0x0002
|
|
#define SSL_PE_BAD_CERTIFICATE 0x0004
|
|
#define SSL_PE_UNSUPPORTED_CERTIFICATE_TYPE 0x0006
|
|
|
|
|
|
#define SSL_CT_X509_CERTIFICATE 0x01
|
|
#define SSL_CT_PKCS7_CERTIFICATE 0x02
|
|
|
|
#if DBG
|
|
#define SSL_CT_DEBUG_CERT 0x80
|
|
#endif
|
|
|
|
#define SSL_MAX_CHALLENGE_LEN 32
|
|
#define SSL_SESSION_ID_LEN 16
|
|
#define SSL_MAX_CONNECTION_ID_LEN 32
|
|
#define SSL_MAC_LENGTH 16
|
|
#define MAX_CHALLENGE 32
|
|
|
|
|
|
#define SSL_CK_RC4_128_WITH_MD5 {(UCHAR) 0x01, (UCHAR) 0x00, (UCHAR) 0x80}
|
|
#define SSL_CK_RC4_128_EXPORT40_WITH_MD5 {(UCHAR) 0x02, (UCHAR) 0x00, (UCHAR) 0x80}
|
|
#define SSL_CK_RC2_128_CBC_WITH_MD5 {(UCHAR) 0x03, (UCHAR) 0x00, (UCHAR) 0x80}
|
|
#define SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5 {(UCHAR) 0x04, (UCHAR) 0x00, (UCHAR) 0x80}
|
|
#define SSL_CK_IDEA_128_CBC_WITH_MD5 {(UCHAR) 0x05, (UCHAR) 0x00, (UCHAR) 0x80}
|
|
#define SSL_CK_DES_64_CBC_WITH_MD5 {(UCHAR) 0x06, (UCHAR) 0x00, (UCHAR) 0x40}
|
|
#define SSL_CK_DES_192_EDE3_CBC_WITH_MD5 {(UCHAR) 0x07, (UCHAR) 0x00, (UCHAR) 0xC0}
|
|
#define SSL_CK_NULL_WITH_MD5 {(UCHAR) 0x00, (UCHAR) 0x00, (UCHAR) 0x00}
|
|
#define SSL_CK_DES_64_CBC_WITH_SHA {(UCHAR) 0x06, (UCHAR) 0x01, (UCHAR) 0x40}
|
|
#define SSL_CK_DES_192_EDE3_WITH_SHA {(UCHAR) 0x07, (UCHAR) 0x01, (UCHAR) 0xC0}
|
|
|
|
#define SSL_KEA_RSA {(UCHAR) 0x10, (UCHAR) 0x00, (UCHAR) 0x00}
|
|
#define SSL_KEA_RSA_TOKEN_WITH_DES {(UCHAR) 0x10, (UCHAR) 0x01, (UCHAR) 0x00}
|
|
#define SSL_KEA_RSA_TOKEN_WITH_DES_EDE3 {(UCHAR) 0x10, (UCHAR) 0x01, (UCHAR) 0x01}
|
|
#define SSL_KEA_RSA_TOKEN_WITH_RC4 {(UCHAR) 0x10, (UCHAR) 0x01, (UCHAR) 0x02}
|
|
#define SSL_KEA_DH {(UCHAR) 0x11, (UCHAR) 0x00, (UCHAR) 0x00}
|
|
#define SSL_KEA_DH_TOKEN_WITH_DES {(UCHAR) 0x11, (UCHAR) 0x01, (UCHAR) 0x00}
|
|
#define SSL_KEA_DH_TOKEN_WITH_DES_EDE3 {(UCHAR) 0x11, (UCHAR) 0x01, (UCHAR) 0x01}
|
|
#define SSL_KEA_DH_ANON {(UCHAR) 0x12, (UCHAR) 0x00, (UCHAR) 0x00}
|
|
|
|
#define CRYPTO_RC4_128 0x00010080
|
|
#define CRYPTO_RC4_40 0x00020080
|
|
#define CRYPTO_RC2_128 0x00030080
|
|
#define CRYPTO_RC2_40 0x00040080
|
|
#define CRYPTO_IDEA_128 0x00050080
|
|
#define CRYPTO_NULL 0x00000000
|
|
#define CRYPTO_DES_64 0x00060040
|
|
#define CRYPTO_3DES_192 0x000700C0
|
|
|
|
|
|
|
|
typedef struct _Ssl_Record_Header {
|
|
UCHAR Byte0;
|
|
UCHAR Byte1;
|
|
} Ssl_Record_Header, * PSsl_Record_Header;
|
|
|
|
typedef struct _Ssl_Record_Header_Ex {
|
|
UCHAR Byte0;
|
|
UCHAR Byte1;
|
|
UCHAR PaddingSize;
|
|
} Ssl_Record_Header_Ex, * PSsl_Record_Header_Ex;
|
|
|
|
typedef struct _Ssl_Message_Header {
|
|
Ssl_Record_Header Header;
|
|
UCHAR MacData[ SSL_MAC_LENGTH ];
|
|
} Ssl_Message_Header, * PSsl_Message_Header;
|
|
|
|
typedef struct _Ssl_Message_Header_Ex {
|
|
Ssl_Record_Header_Ex Header;
|
|
UCHAR MacData[ SSL_MAC_LENGTH ];
|
|
} Ssl_Message_Header_Ex, * PSsl_Message_Header_Ex;
|
|
|
|
|
|
typedef struct _Ssl_Error {
|
|
Ssl_Record_Header Header;
|
|
UCHAR MessageId;
|
|
UCHAR ErrorMsb;
|
|
UCHAR ErrorLsb;
|
|
} Ssl_Error, * PSsl_Error;
|
|
|
|
|
|
typedef struct _Ssl_Client_Hello {
|
|
Ssl_Record_Header Header;
|
|
UCHAR MessageId;
|
|
UCHAR VersionMsb;
|
|
UCHAR VersionLsb;
|
|
UCHAR CipherSpecsLenMsb;
|
|
UCHAR CipherSpecsLenLsb;
|
|
UCHAR SessionIdLenMsb;
|
|
UCHAR SessionIdLenLsb;
|
|
UCHAR ChallengeLenMsb;
|
|
UCHAR ChallengeLenLsb;
|
|
UCHAR VariantData[1];
|
|
} Ssl_Client_Hello, * PSsl_Client_Hello;
|
|
|
|
|
|
typedef struct _Ssl_Server_Hello {
|
|
Ssl_Record_Header Header;
|
|
UCHAR MessageId;
|
|
UCHAR SessionIdHit;
|
|
UCHAR CertificateType;
|
|
UCHAR ServerVersionMsb;
|
|
UCHAR ServerVersionLsb;
|
|
UCHAR CertificateLenMsb;
|
|
UCHAR CertificateLenLsb;
|
|
UCHAR CipherSpecsLenMsb;
|
|
UCHAR CipherSpecsLenLsb;
|
|
UCHAR ConnectionIdLenMsb;
|
|
UCHAR ConnectionIdLenLsb;
|
|
UCHAR VariantData[1];
|
|
} Ssl_Server_Hello, * PSsl_Server_Hello;
|
|
|
|
typedef struct _Ssl_Client_Master_Key {
|
|
Ssl_Record_Header Header;
|
|
UCHAR MessageId;
|
|
Ssl_Cipher_Tuple CipherKind;
|
|
UCHAR ClearKeyLenMsb;
|
|
UCHAR ClearKeyLenLsb;
|
|
UCHAR EncryptedKeyLenMsb;
|
|
UCHAR EncryptedKeyLenLsb;
|
|
UCHAR KeyArgLenMsb;
|
|
UCHAR KeyArgLenLsb;
|
|
UCHAR VariantData[1];
|
|
} Ssl_Client_Master_Key, * PSsl_Client_Master_Key;
|
|
|
|
|
|
typedef struct _Ssl_Server_Verify {
|
|
UCHAR MessageId;
|
|
UCHAR ChallengeData[MAX_CHALLENGE];
|
|
} Ssl_Server_Verify, * PSsl_Server_Verify;
|
|
|
|
typedef struct _Ssl_Client_Finished {
|
|
UCHAR MessageId;
|
|
UCHAR ConnectionId[SSL_MAX_CONNECTION_ID_LEN];
|
|
} Ssl_Client_Finished, * PSsl_Client_Finished;
|
|
|
|
typedef struct _Ssl_Server_Finished {
|
|
UCHAR MessageId;
|
|
UCHAR SessionId[SSL_SESSION_ID_LEN];
|
|
} Ssl_Server_Finished, * PSsl_Server_Finished;
|
|
|
|
|
|
|
|
#include <poppack.h>
|
|
|
|
////////////////////////////////////////////////////
|
|
//
|
|
// Expanded Form Messages:
|
|
//
|
|
////////////////////////////////////////////////////
|
|
|
|
typedef DWORD CipherSpec;
|
|
typedef DWORD * PCipherSpec;
|
|
|
|
#define MAX_SESSION_ID 32
|
|
typedef struct _SslSessionId {
|
|
DWORD cbSessionId;
|
|
UCHAR bSessionId[MAX_SESSION_ID];
|
|
} SslSessionId, * PSslSessionId;
|
|
|
|
typedef struct _SslChallenge {
|
|
DWORD cbChallenge;
|
|
UCHAR bChallenge[MAX_CHALLENGE];
|
|
} SslChallenge, * PSslChallenge;
|
|
|
|
typedef struct _Client_Hello {
|
|
DWORD cCipherSpecs;
|
|
CipherSpec * pCipherSpecs;
|
|
SslSessionId SessionId;
|
|
SslChallenge Challenge;
|
|
} Client_Hello, * PClient_Hello;
|
|
|
|
typedef struct _Server_Hello {
|
|
DWORD SessionIdHit;
|
|
DWORD CertificateType;
|
|
DWORD CertificateLength;
|
|
DWORD cCipherSpecs;
|
|
SslSessionId Connection;
|
|
PUCHAR pCertificate;
|
|
CipherSpec * pCipherSpecs;
|
|
} Server_Hello, * PServer_Hello;
|
|
|
|
#define MASTER_KEY_SIZE 16
|
|
#define ENCRYPTED_KEY_SIZE 272 // Allows for 2048 bit keys
|
|
|
|
typedef struct _Client_Master_Key {
|
|
CipherSpec CipherKind;
|
|
DWORD ClearKeyLen;
|
|
DWORD EncryptedKeyLen;
|
|
DWORD KeyArgLen;
|
|
UCHAR ClearKey[MASTER_KEY_SIZE];
|
|
UCHAR EncryptedKey[ENCRYPTED_KEY_SIZE];
|
|
UCHAR KeyArg[MASTER_KEY_SIZE];
|
|
} Client_Master_Key, * PClient_Master_Key;
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////
|
|
//
|
|
// Pickling Prototypes
|
|
//
|
|
///////////////////////////////////////////////////
|
|
|
|
BOOL
|
|
PackClientHello(
|
|
PClient_Hello pCanonical,
|
|
PSsl_Client_Hello * ppNetwork,
|
|
DWORD * pcbNetwork);
|
|
|
|
BOOL
|
|
UnpackClientHello(
|
|
BOOL SingleAlloc,
|
|
PSsl_Client_Hello pMessage,
|
|
DWORD cbMessage,
|
|
PClient_Hello * ppClient);
|
|
|
|
BOOL
|
|
PackServerHello(
|
|
PServer_Hello pCanonical,
|
|
PSsl_Server_Hello * ppNetwork,
|
|
DWORD * pcbNetwork);
|
|
|
|
BOOL
|
|
UnpackServerHello(
|
|
BOOL SingleAlloc,
|
|
PSsl_Server_Hello pMessage,
|
|
DWORD cbMessage,
|
|
PServer_Hello * ppServer);
|
|
|
|
BOOL
|
|
PackClientMasterKey(
|
|
PClient_Master_Key pCanonical,
|
|
PSsl_Client_Master_Key *ppNetwork,
|
|
DWORD * pcbNetwork);
|
|
|
|
BOOL
|
|
UnpackClientMasterKey(
|
|
PSsl_Client_Master_Key pMessage,
|
|
DWORD cbMessage,
|
|
PClient_Master_Key * ppClient);
|
|
|
|
#endif // __MSGS_H__
|