Blame winpr/libwinpr/sspi/NTLM/ntlm.h

Packit Service fa4841
/**
Packit Service fa4841
 * WinPR: Windows Portable Runtime
Packit Service fa4841
 * NTLM Security Package
Packit Service fa4841
 *
Packit Service fa4841
 * Copyright 2011-2014 Marc-Andre Moreau <marcandre.moreau@gmail.com>
Packit Service fa4841
 *
Packit Service fa4841
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit Service fa4841
 * you may not use this file except in compliance with the License.
Packit Service fa4841
 * You may obtain a copy of the License at
Packit Service fa4841
 *
Packit Service fa4841
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit Service fa4841
 *
Packit Service fa4841
 * Unless required by applicable law or agreed to in writing, software
Packit Service fa4841
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit Service fa4841
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit Service fa4841
 * See the License for the specific language governing permissions and
Packit Service fa4841
 * limitations under the License.
Packit Service fa4841
 */
Packit Service fa4841
Packit Service fa4841
#ifndef WINPR_SSPI_NTLM_PRIVATE_H
Packit Service fa4841
#define WINPR_SSPI_NTLM_PRIVATE_H
Packit Service fa4841
Packit Service fa4841
#include <winpr/sspi.h>
Packit Service fa4841
#include <winpr/windows.h>
Packit Service fa4841
Packit Service fa4841
#include <winpr/nt.h>
Packit Service fa4841
#include <winpr/crypto.h>
Packit Service fa4841
#include <winpr/ntlm.h>
Packit Service fa4841
Packit Service fa4841
#include "../sspi.h"
Packit Service fa4841
Packit Service fa4841
#define MESSAGE_TYPE_NEGOTIATE 1
Packit Service fa4841
#define MESSAGE_TYPE_CHALLENGE 2
Packit Service fa4841
#define MESSAGE_TYPE_AUTHENTICATE 3
Packit Service fa4841
Packit Service fa4841
#define NTLMSSP_NEGOTIATE_56 0x80000000                        /* W   (0) */
Packit Service fa4841
#define NTLMSSP_NEGOTIATE_KEY_EXCH 0x40000000                  /* V   (1) */
Packit Service fa4841
#define NTLMSSP_NEGOTIATE_128 0x20000000                       /* U   (2) */
Packit Service fa4841
#define NTLMSSP_RESERVED1 0x10000000                           /* r1  (3) */
Packit Service fa4841
#define NTLMSSP_RESERVED2 0x08000000                           /* r2  (4) */
Packit Service fa4841
#define NTLMSSP_RESERVED3 0x04000000                           /* r3  (5) */
Packit Service fa4841
#define NTLMSSP_NEGOTIATE_VERSION 0x02000000                   /* T   (6) */
Packit Service fa4841
#define NTLMSSP_RESERVED4 0x01000000                           /* r4  (7) */
Packit Service fa4841
#define NTLMSSP_NEGOTIATE_TARGET_INFO 0x00800000               /* S   (8) */
Packit Service fa4841
#define NTLMSSP_REQUEST_NON_NT_SESSION_KEY 0x00400000          /* R   (9) */
Packit Service fa4841
#define NTLMSSP_RESERVED5 0x00200000                           /* r5  (10) */
Packit Service fa4841
#define NTLMSSP_NEGOTIATE_IDENTIFY 0x00100000                  /* Q   (11) */
Packit Service fa4841
#define NTLMSSP_NEGOTIATE_EXTENDED_SESSION_SECURITY 0x00080000 /* P   (12) */
Packit Service fa4841
#define NTLMSSP_RESERVED6 0x00040000                           /* r6  (13) */
Packit Service fa4841
#define NTLMSSP_TARGET_TYPE_SERVER 0x00020000                  /* O   (14) */
Packit Service fa4841
#define NTLMSSP_TARGET_TYPE_DOMAIN 0x00010000                  /* N   (15) */
Packit Service fa4841
#define NTLMSSP_NEGOTIATE_ALWAYS_SIGN 0x00008000               /* M   (16) */
Packit Service fa4841
#define NTLMSSP_RESERVED7 0x00004000                           /* r7  (17) */
Packit Service fa4841
#define NTLMSSP_NEGOTIATE_WORKSTATION_SUPPLIED 0x00002000      /* L   (18) */
Packit Service fa4841
#define NTLMSSP_NEGOTIATE_DOMAIN_SUPPLIED 0x00001000           /* K   (19) */
Packit Service fa4841
#define NTLMSSP_NEGOTIATE_ANONYMOUS 0x00000800                 /* J   (20) */
Packit Service fa4841
#define NTLMSSP_RESERVED8 0x00000400                           /* r8  (21) */
Packit Service fa4841
#define NTLMSSP_NEGOTIATE_NTLM 0x00000200                      /* H   (22) */
Packit Service fa4841
#define NTLMSSP_RESERVED9 0x00000100                           /* r9  (23) */
Packit Service fa4841
#define NTLMSSP_NEGOTIATE_LM_KEY 0x00000080                    /* G   (24) */
Packit Service fa4841
#define NTLMSSP_NEGOTIATE_DATAGRAM 0x00000040                  /* F   (25) */
Packit Service fa4841
#define NTLMSSP_NEGOTIATE_SEAL 0x00000020                      /* E   (26) */
Packit Service fa4841
#define NTLMSSP_NEGOTIATE_SIGN 0x00000010                      /* D   (27) */
Packit Service fa4841
#define NTLMSSP_RESERVED10 0x00000008                          /* r10 (28) */
Packit Service fa4841
#define NTLMSSP_REQUEST_TARGET 0x00000004                      /* C   (29) */
Packit Service fa4841
#define NTLMSSP_NEGOTIATE_OEM 0x00000002                       /* B   (30) */
Packit Service fa4841
#define NTLMSSP_NEGOTIATE_UNICODE 0x00000001                   /* A   (31) */
Packit Service fa4841
Packit Service fa4841
enum _NTLM_STATE
Packit Service fa4841
{
Packit Service fa4841
	NTLM_STATE_INITIAL,
Packit Service fa4841
	NTLM_STATE_NEGOTIATE,
Packit Service fa4841
	NTLM_STATE_CHALLENGE,
Packit Service fa4841
	NTLM_STATE_AUTHENTICATE,
Packit Service fa4841
	NTLM_STATE_COMPLETION,
Packit Service fa4841
	NTLM_STATE_FINAL
Packit Service fa4841
};
Packit Service fa4841
typedef enum _NTLM_STATE NTLM_STATE;
Packit Service fa4841
Packit Service fa4841
enum _NTLM_AV_ID
Packit Service fa4841
{
Packit Service fa4841
	MsvAvEOL,
Packit Service fa4841
	MsvAvNbComputerName,
Packit Service fa4841
	MsvAvNbDomainName,
Packit Service fa4841
	MsvAvDnsComputerName,
Packit Service fa4841
	MsvAvDnsDomainName,
Packit Service fa4841
	MsvAvDnsTreeName,
Packit Service fa4841
	MsvAvFlags,
Packit Service fa4841
	MsvAvTimestamp,
Packit Service fa4841
	MsvAvSingleHost,
Packit Service fa4841
	MsvAvTargetName,
Packit Service fa4841
	MsvChannelBindings
Packit Service fa4841
};
Packit Service fa4841
typedef enum _NTLM_AV_ID NTLM_AV_ID;
Packit Service fa4841
Packit Service fa4841
struct _NTLM_AV_PAIR
Packit Service fa4841
{
Packit Service fa4841
	UINT16 AvId;
Packit Service fa4841
	UINT16 AvLen;
Packit Service fa4841
};
Packit Service fa4841
typedef struct _NTLM_AV_PAIR NTLM_AV_PAIR;
Packit Service fa4841
Packit Service fa4841
#define MSV_AV_FLAGS_AUTHENTICATION_CONSTRAINED 0x00000001
Packit Service fa4841
#define MSV_AV_FLAGS_MESSAGE_INTEGRITY_CHECK 0x00000002
Packit Service fa4841
#define MSV_AV_FLAGS_TARGET_SPN_UNTRUSTED_SOURCE 0x00000004
Packit Service fa4841
Packit Service fa4841
#define WINDOWS_MAJOR_VERSION_5 0x05
Packit Service fa4841
#define WINDOWS_MAJOR_VERSION_6 0x06
Packit Service fa4841
#define WINDOWS_MINOR_VERSION_0 0x00
Packit Service fa4841
#define WINDOWS_MINOR_VERSION_1 0x01
Packit Service fa4841
#define WINDOWS_MINOR_VERSION_2 0x02
Packit Service fa4841
#define NTLMSSP_REVISION_W2K3 0x0F
Packit Service fa4841
Packit Service fa4841
struct _NTLM_VERSION_INFO
Packit Service fa4841
{
Packit Service fa4841
	UINT8 ProductMajorVersion;
Packit Service fa4841
	UINT8 ProductMinorVersion;
Packit Service fa4841
	UINT16 ProductBuild;
Packit Service fa4841
	BYTE Reserved[3];
Packit Service fa4841
	UINT8 NTLMRevisionCurrent;
Packit Service fa4841
};
Packit Service fa4841
typedef struct _NTLM_VERSION_INFO NTLM_VERSION_INFO;
Packit Service fa4841
Packit Service fa4841
struct _NTLM_SINGLE_HOST_DATA
Packit Service fa4841
{
Packit Service fa4841
	UINT32 Size;
Packit Service fa4841
	UINT32 Z4;
Packit Service fa4841
	UINT32 DataPresent;
Packit Service fa4841
	UINT32 CustomData;
Packit Service fa4841
	BYTE MachineID[32];
Packit Service fa4841
};
Packit Service fa4841
typedef struct _NTLM_SINGLE_HOST_DATA NTLM_SINGLE_HOST_DATA;
Packit Service fa4841
Packit Service fa4841
struct _NTLM_RESPONSE
Packit Service fa4841
{
Packit Service fa4841
	BYTE Response[24];
Packit Service fa4841
};
Packit Service fa4841
typedef struct _NTLM_RESPONSE NTLM_RESPONSE;
Packit Service fa4841
Packit Service fa4841
struct _NTLMv2_CLIENT_CHALLENGE
Packit Service fa4841
{
Packit Service fa4841
	UINT8 RespType;
Packit Service fa4841
	UINT8 HiRespType;
Packit Service fa4841
	UINT16 Reserved1;
Packit Service fa4841
	UINT32 Reserved2;
Packit Service fa4841
	BYTE Timestamp[8];
Packit Service fa4841
	BYTE ClientChallenge[8];
Packit Service fa4841
	UINT32 Reserved3;
Packit Service fa4841
	NTLM_AV_PAIR* AvPairs;
Packit Service fa4841
	UINT32 cbAvPairs;
Packit Service fa4841
};
Packit Service fa4841
typedef struct _NTLMv2_CLIENT_CHALLENGE NTLMv2_CLIENT_CHALLENGE;
Packit Service fa4841
Packit Service fa4841
struct _NTLMv2_RESPONSE
Packit Service fa4841
{
Packit Service fa4841
	BYTE Response[16];
Packit Service fa4841
	NTLMv2_CLIENT_CHALLENGE Challenge;
Packit Service fa4841
};
Packit Service fa4841
typedef struct _NTLMv2_RESPONSE NTLMv2_RESPONSE;
Packit Service fa4841
Packit Service fa4841
struct _NTLM_MESSAGE_FIELDS
Packit Service fa4841
{
Packit Service fa4841
	UINT16 Len;
Packit Service fa4841
	UINT16 MaxLen;
Packit Service fa4841
	PBYTE Buffer;
Packit Service fa4841
	UINT32 BufferOffset;
Packit Service fa4841
};
Packit Service fa4841
typedef struct _NTLM_MESSAGE_FIELDS NTLM_MESSAGE_FIELDS;
Packit Service fa4841
Packit Service fa4841
struct _NTLM_MESSAGE_HEADER
Packit Service fa4841
{
Packit Service fa4841
	BYTE Signature[8];
Packit Service fa4841
	UINT32 MessageType;
Packit Service fa4841
};
Packit Service fa4841
typedef struct _NTLM_MESSAGE_HEADER NTLM_MESSAGE_HEADER;
Packit Service fa4841
Packit Service fa4841
struct _NTLM_NEGOTIATE_MESSAGE
Packit Service fa4841
{
Packit Service fa4841
	BYTE Signature[8];
Packit Service fa4841
	UINT32 MessageType;
Packit Service fa4841
	UINT32 NegotiateFlags;
Packit Service fa4841
	NTLM_VERSION_INFO Version;
Packit Service fa4841
	NTLM_MESSAGE_FIELDS DomainName;
Packit Service fa4841
	NTLM_MESSAGE_FIELDS Workstation;
Packit Service fa4841
};
Packit Service fa4841
typedef struct _NTLM_NEGOTIATE_MESSAGE NTLM_NEGOTIATE_MESSAGE;
Packit Service fa4841
Packit Service fa4841
struct _NTLM_CHALLENGE_MESSAGE
Packit Service fa4841
{
Packit Service fa4841
	BYTE Signature[8];
Packit Service fa4841
	UINT32 MessageType;
Packit Service fa4841
	UINT32 NegotiateFlags;
Packit Service fa4841
	BYTE ServerChallenge[8];
Packit Service fa4841
	BYTE Reserved[8];
Packit Service fa4841
	NTLM_VERSION_INFO Version;
Packit Service fa4841
	NTLM_MESSAGE_FIELDS TargetName;
Packit Service fa4841
	NTLM_MESSAGE_FIELDS TargetInfo;
Packit Service fa4841
};
Packit Service fa4841
typedef struct _NTLM_CHALLENGE_MESSAGE NTLM_CHALLENGE_MESSAGE;
Packit Service fa4841
Packit Service fa4841
struct _NTLM_AUTHENTICATE_MESSAGE
Packit Service fa4841
{
Packit Service fa4841
	BYTE Signature[8];
Packit Service fa4841
	UINT32 MessageType;
Packit Service fa4841
	UINT32 NegotiateFlags;
Packit Service fa4841
	NTLM_VERSION_INFO Version;
Packit Service fa4841
	NTLM_MESSAGE_FIELDS DomainName;
Packit Service fa4841
	NTLM_MESSAGE_FIELDS UserName;
Packit Service fa4841
	NTLM_MESSAGE_FIELDS Workstation;
Packit Service fa4841
	NTLM_MESSAGE_FIELDS LmChallengeResponse;
Packit Service fa4841
	NTLM_MESSAGE_FIELDS NtChallengeResponse;
Packit Service fa4841
	NTLM_MESSAGE_FIELDS EncryptedRandomSessionKey;
Packit Service fa4841
	BYTE MessageIntegrityCheck[16];
Packit Service fa4841
};
Packit Service fa4841
typedef struct _NTLM_AUTHENTICATE_MESSAGE NTLM_AUTHENTICATE_MESSAGE;
Packit Service fa4841
Packit Service fa4841
struct _NTLM_CONTEXT
Packit Service fa4841
{
Packit Service fa4841
	BOOL server;
Packit Service fa4841
	BOOL NTLMv2;
Packit Service fa4841
	BOOL UseMIC;
Packit Service fa4841
	NTLM_STATE state;
Packit Service fa4841
	int SendSeqNum;
Packit Service fa4841
	int RecvSeqNum;
Packit Service fa4841
	char* SamFile;
Packit Service fa4841
	BYTE NtlmHash[16];
Packit Service fa4841
	BYTE NtlmV2Hash[16];
Packit Service fa4841
	BYTE MachineID[32];
Packit Service fa4841
	BOOL SendVersionInfo;
Packit Service fa4841
	BOOL confidentiality;
Packit Service fa4841
	WINPR_RC4_CTX* SendRc4Seal;
Packit Service fa4841
	WINPR_RC4_CTX* RecvRc4Seal;
Packit Service fa4841
	BYTE* SendSigningKey;
Packit Service fa4841
	BYTE* RecvSigningKey;
Packit Service fa4841
	BYTE* SendSealingKey;
Packit Service fa4841
	BYTE* RecvSealingKey;
Packit Service fa4841
	UINT32 NegotiateFlags;
Packit Service fa4841
	BOOL UseSamFileDatabase;
Packit Service fa4841
	int LmCompatibilityLevel;
Packit Service fa4841
	int SuppressExtendedProtection;
Packit Service fa4841
	BOOL SendWorkstationName;
Packit Service fa4841
	UNICODE_STRING Workstation;
Packit Service fa4841
	UNICODE_STRING ServicePrincipalName;
Packit Service fa4841
	SSPI_CREDENTIALS* credentials;
Packit Service fa4841
	BYTE* ChannelBindingToken;
Packit Service fa4841
	BYTE ChannelBindingsHash[16];
Packit Service fa4841
	SecPkgContext_Bindings Bindings;
Packit Service fa4841
	BOOL SendSingleHostData;
Packit Service fa4841
	BOOL NegotiateKeyExchange;
Packit Service fa4841
	NTLM_SINGLE_HOST_DATA SingleHostData;
Packit Service fa4841
	NTLM_NEGOTIATE_MESSAGE NEGOTIATE_MESSAGE;
Packit Service fa4841
	NTLM_CHALLENGE_MESSAGE CHALLENGE_MESSAGE;
Packit Service fa4841
	NTLM_AUTHENTICATE_MESSAGE AUTHENTICATE_MESSAGE;
Packit Service fa4841
	UINT32 MessageIntegrityCheckOffset;
Packit Service fa4841
	SecBuffer NegotiateMessage;
Packit Service fa4841
	SecBuffer ChallengeMessage;
Packit Service fa4841
	SecBuffer AuthenticateMessage;
Packit Service fa4841
	SecBuffer ChallengeTargetInfo;
Packit Service fa4841
	SecBuffer AuthenticateTargetInfo;
Packit Service fa4841
	SecBuffer TargetName;
Packit Service fa4841
	SecBuffer NtChallengeResponse;
Packit Service fa4841
	SecBuffer LmChallengeResponse;
Packit Service fa4841
	NTLMv2_RESPONSE NTLMv2Response;
Packit Service fa4841
	BYTE NtProofString[16];
Packit Service fa4841
	BYTE Timestamp[8];
Packit Service fa4841
	BYTE ChallengeTimestamp[8];
Packit Service fa4841
	BYTE ServerChallenge[8];
Packit Service fa4841
	BYTE ClientChallenge[8];
Packit Service fa4841
	BYTE SessionBaseKey[16];
Packit Service fa4841
	BYTE KeyExchangeKey[16];
Packit Service fa4841
	BYTE RandomSessionKey[16];
Packit Service fa4841
	BYTE ExportedSessionKey[16];
Packit Service fa4841
	BYTE EncryptedRandomSessionKey[16];
Packit Service fa4841
	BYTE ClientSigningKey[16];
Packit Service fa4841
	BYTE ClientSealingKey[16];
Packit Service fa4841
	BYTE ServerSigningKey[16];
Packit Service fa4841
	BYTE ServerSealingKey[16];
Packit Service fa4841
	psPeerComputeNtlmHash HashCallback;
Packit Service fa4841
	void* HashCallbackArg;
Packit Service fa4841
};
Packit Service fa4841
typedef struct _NTLM_CONTEXT NTLM_CONTEXT;
Packit Service fa4841
Packit Service fa4841
SECURITY_STATUS ntlm_computeProofValue(NTLM_CONTEXT* ntlm, SecBuffer* ntproof);
Packit Service fa4841
SECURITY_STATUS ntlm_computeMicValue(NTLM_CONTEXT* ntlm, SecBuffer* micvalue);
Packit Service fa4841
Packit Service fa4841
#ifdef WITH_DEBUG_NLA
Packit Service fa4841
#define WITH_DEBUG_NTLM
Packit Service fa4841
#endif
Packit Service fa4841
Packit Service fa4841
#endif /* FREERDP_SSPI_NTLM_PRIVATE_H */