//=============================================================================
//  MODULE: kerbGlob.h
//
//  Description:
//
//  Bloodhound Parser DLL for Kerberos Authentication Protocol
//
//  Modification History
//
//  Michael Webb & Kris Frost	Date: 06/04/99
//=============================================================================
#include <windows.h>
#include <string.h>
#include <bh.h>
#include <netmon.h>

//#define FORMAT_BUFFER_SIZE 80

//  Using a typedef enum instead of all the defines


typedef enum{
		KerberosSummary	= 0x00,
		KerberosIDSummary,
		KerberosClassTag,
		PCIdentifier,			
		ASN1UnivTag,				
		LengthSummary,			
		LengthFlag,				
		LengthBits,				
		LongLength1,				
		LongLength2,				
		ASNIdentifier,			
		UniversalTagID,			
		KdcReqTagID,				
		KdcReqSeq,				
		KdcReqSeqLength,			
		ASN1UnivTagSumID,		
		KdcContentsValue,		
		PaDataSummary,			
		PaDataSeq,				
		DispString,				
		KerberosIdentifier,		
		lblTagNumber,			
		KdcRepTagID,				
		KrbPrincipalNamelSet,	
		KrbPrincNameType,		
		KrbPrincipalNamelBitF,	
		KrbTicketID,				
		KrbTixApp1ID,			
		KrbErrTagID,				
		DispTimeID,				
		KrbErrTagSumID,			
		KrbTixAppSumID,			
		KrbTicketSumID,			
		KrbErrCodeID,			
		KrbMsgTypeID,			
		PadataTypeValID,			
		CipherTextDisp,			
		FragUdpID,				
		KdcReqBodyID,			
		KdcReqBodyBitF,			
		HostAddressesID,			
		HostAddressesBitF,		
		DispStringCliName,		
		DispStringRealmName,		
		DispStringServerName,	
		DispStringTixFlag,		
		DispStringExpDate,		
		DispStringPostDate,		
		DispStringRenewTill,		
		DispSumRandomNumber,		
		DispSumEtype,			
		DispStringAddresses,		
		DispSummary,				
		DispStringCliRealm,		
		DispProtocolVer,			
		DispKerbMsgType,			
		DispSumPreAuth,			
		DispSumReqBody,			
		DispSumKerbTix,			
		DispSumTixVer,			
		DispCipherText,			
		DispStringCliTime,		
		DispSumCuSec,			
		DispStringSrvTime,		
		DispSumSuSec,			
		DispSumKerbErr,			
		DispStringErrorText,		
		DispStringErrorData,		
		DispFlagKdcOptions,		
		DispStringServNameGS,	
		DispSumEtype2,			
		EncryptedDataTag,		
		EncryptedDataTagBitF,	
		KrbApReqID,				
		KrbApReqBitF,			
		DispApOptionsSum,		
		DispFlagApOptions,		
		DispSumTicket,			
		ApTicketID,				
		ApTicketBitF,			
		TicketStructID,			
		TicketStructBitF,		
		KerberosDefaultlbl,
		PaDataSummaryMulti,
		Certificatelbl,
		DispEncryptionOptions,
		MethodDataSummary,
		MethodDataBitF,
		DispReqAddInfo
};
		

// Global functions in kerbparser.c
LPBYTE EntryFrame(HFRAME, LPBYTE, DWORD);

// Used to breakdown and display padata fields
LPBYTE HandlePaData(HFRAME hFrame, LPBYTE TempFrame, int, DWORD TypeVal);
LPBYTE CalcMsgType(HFRAME, LPBYTE, int, DWORD TypeVal);
LPBYTE CalcLengthSummary(HFRAME, LPBYTE, int);
LPBYTE DefineValue(HFRAME, LPBYTE, int, DWORD);
LPBYTE DefinePrincipalName(HFRAME hFrame, LPBYTE TempFrame, int, DWORD TypeVal);
LPBYTE DispASNTypes(HFRAME, LPBYTE, int, DWORD, DWORD);
LPBYTE DispSeqOctets(HFRAME,LPBYTE, int, DWORD, DWORD);
LPBYTE DispHostAddresses(HFRAME, LPBYTE, int);
LPBYTE DispSum(HFRAME, LPBYTE, int ClassValue, int ClassValue2, int OffSet, DWORD TypeVal);
LPBYTE DispTopSum(HFRAME hFrame, LPBYTE TempFrame, int OffSet, DWORD TypeVal);
LPBYTE DefineKdcOptions(HFRAME, LPBYTE, int, DWORD);
LPBYTE DefineEtype(HFRAME hFrame, LPBYTE TempFrame, int OffSet, DWORD TypeVal, DWORD TypeVal2, DWORD TypeVal3);
LPBYTE HandleEncryptedData(HFRAME hFrame, LPBYTE TempFrame, int OffSet);
LPBYTE DispPadata(HFRAME hFrame, LPBYTE TempFrame, int OffSet, DWORD TypeVal);
LPBYTE HandleAPReq(HFRAME hFrame, LPBYTE TempFrame);
LPBYTE HandleTicket(HFRAME hFrame, LPBYTE TempFrame, int OffSet);

// Function to display Padata within e-data of Kerb-Error
LPBYTE HandlePadataKrbErr(HFRAME hFrame, LPBYTE TempFrame, int OffSet, DWORD TypeVal);

// Function to display Method-Data
LPBYTE HandleMethodData(HFRAME hFrame, LPBYTE TempFrame);

LPBYTE DispASNSum(HFRAME hFrame, LPBYTE TempFrame, int OffSet, DWORD TypeVal);
LPBYTE DispSumSec(HFRAME hFrame, LPBYTE TempFrame, int ClassValue, int ClassValue2, int OffSet, DWORD TypeVal);

// Displays e-data
LPBYTE DispEdata(HFRAME hFrame, LPBYTE TempFrame, int OffSet, DWORD TypeVal);

// Creating this function to change the format of GeneralizedTime
LPBYTE DispSumTime(HFRAME hFrame, LPBYTE TempFrame, int ClassValue, int OffSet, DWORD TypeVal);

// Created this function display the FQDN of sname at the top level
LPBYTE DispSumString(HFRAME hFrame, LPBYTE TempFrame, int ClassValue, int OffSet, DWORD TypeVal);

int CalcMsgLength(LPBYTE);
int CalcLenOctet(LPBYTE);


LPBYTE IncTempFrame(LPBYTE);

BYTE TempAsnMsg;