// Copyright 2012 Nexenta Systems, Inc. All rights reserved.
// Copyright (C) 2002 Microsoft Corporation
// All rights reserved.
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS"
// WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
// OR IMPLIED, INCLUDING BUT NOT LIMITED
// TO THE IMPLIED WARRANTIES OF MERCHANTIBILITY
//
// Date - 10/08/2002
// Author - Sanj Surati
/////////////////////////////////////////////////////////////
//
// SPNEGOPARSE.H
//
// SPNEGO Token Parser Header File
//
// Contains the definitions required to properly parse a
// SPNEGO token using ASN.1 DER helpers.
//
/////////////////////////////////////////////////////////////
#ifndef __SPNEGOPARSE_H__
#define __SPNEGOPARSE_H__
// C++ Specific
#if defined(__cplusplus)
extern "C"
{
#endif
// Indicates if we copy data when creating a SPNEGO_TOKEN structure or not
#define SPNEGO_TOKEN_INTERNAL_COPYPTR 0
// Internal flag dictates whether or not we will free the binary data when
// the SPNEG_TOKEN structure is destroyed
//
// Each SPNEGO Token Type can be broken down into a
// maximum of 4 separate elements.
//
//
// Element offsets in the array
//
// INIT elements
#define SPNEGO_INIT_MECHTYPES_ELEMENT 0
// Response elements
#define SPNEGO_TARG_NEGRESULT_ELEMENT 0
//
// Defines an individual SPNEGO Token Element.
//
typedef struct SpnegoElement
{
// SPNEGO_TOKEN_ELEMENT_UNAVAILABLE or
// SPNEGO_TOKEN_ELEMENT_AVAILABLE
// Structure size in case we later choose to extend the structure
//
// Packages a SPNEGO Token Encoding. There are two types of
// encodings: NegTokenInit and NegTokenTarg. Each encoding can
// contain up to four distinct, optional elements.
//
typedef struct SpnegoToken
{
// SPNEGO_TOKEN_INIT or
// SPNEGO_TOKEN_TARG
} SPNEGO_TOKEN;
// Structure size in case we later choose to extend the structure
//
// Function definitions
//
unsigned char * pbTokenData, unsigned long ulTokenSize );
long* pnRemainingTokenLength, unsigned char** ppbFirstElement );
long nRemainingTokenLength );
unsigned char ucExpectedType,
int * piMechTypeIndex );
long* plTokenSize, long* plInternalLength );
long nMechTokenLen,
long nMechTokenMIC, long* pnTokenSize,
long* pnInternalTokenLength );
unsigned char ucContextFlags, unsigned char* pbMechToken,
unsigned long ulMechTokenLen, unsigned char* pbMechListMIC,
unsigned long ulMechListMICLen, unsigned char* pbTokenData,
long nTokenLength, long nInternalTokenLength );
unsigned long ulMechTokenLen, unsigned char* pbMechListMIC,
unsigned long ulMechListMICLen, unsigned char* pbTokenData,
long nTokenLength, long nInternalTokenLength );
int IsValidContextFlags( unsigned char ucContextFlags );
unsigned char* pbTokenData, unsigned long ulLength,
// C++ Specific
#if defined(__cplusplus)
}
#endif
#endif