2N/A/*
2N/A * // Copyright (C) 2002 Microsoft Corporation
2N/A * // All rights reserved.
2N/A * //
2N/A * // THIS CODE AND INFORMATION IS PROVIDED "AS IS"
2N/A * // WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
2N/A * // OR IMPLIED, INCLUDING BUT NOT LIMITED
2N/A * // TO THE IMPLIED WARRANTIES OF MERCHANTIBILITY
2N/A * // AND/OR FITNESS FOR A PARTICULAR PURPOSE.
2N/A * //
2N/A * // Date - 10/08/2002
2N/A * // Author - Sanj Surati
2N/A */
2N/A
2N/A/*
2N/A * SPNEGOPARSE.H
2N/A *
2N/A * SPNEGO Token Parser Header File
2N/A *
2N/A * Contains the definitions required to properly parse a
2N/A * SPNEGO token using ASN.1 DER helpers.
2N/A *
2N/A *
2N/A */
2N/A
2N/A#ifndef __SPNEGOPARSE_H__
2N/A#define __SPNEGOPARSE_H__
2N/A
2N/A/* C++ Specific */
2N/A#if defined(__cplusplus)
2N/Aextern "C"
2N/A{
2N/A#endif
2N/A
2N/A/* Indicates if we copy data when creating a SPNEGO_TOKEN structure or not */
2N/A#define SPNEGO_TOKEN_INTERNAL_COPYPTR 0
2N/A#define SPNEGO_TOKEN_INTERNAL_COPYDATA 0x1
2N/A
2N/A/*
2N/A * Internal flag dictates whether or not we will free the binary data when
2N/A * the SPNEG_TOKEN structure is destroyed
2N/A */
2N/A#define SPNEGO_TOKEN_INTERNAL_FLAG_FREEDATA 0x1
2N/A
2N/A/*
2N/A * Each SPNEGO Token Type can be broken down into a max of 4 separate elements.
2N/A */
2N/A
2N/A#define MAX_NUM_TOKEN_ELEMENTS 4
2N/A
2N/A/* Element offsets in the array */
2N/A
2N/A/* INIT elements */
2N/A#define SPNEGO_INIT_MECHTYPES_ELEMENT 0
2N/A#define SPNEGO_INIT_REQFLAGS_ELEMENT 1
2N/A#define SPNEGO_INIT_MECHTOKEN_ELEMENT 2
2N/A#define SPNEGO_INIT_MECHLISTMIC_ELEMENT 3
2N/A
2N/A/* Response elements */
2N/A#define SPNEGO_TARG_NEGRESULT_ELEMENT 0
2N/A#define SPNEGO_TARG_SUPPMECH_ELEMENT 1
2N/A#define SPNEGO_TARG_RESPTOKEN_ELEMENT 2
2N/A#define SPNEGO_TARG_MECHLISTMIC_ELEMENT 3
2N/A
2N/A/* Defines an individual SPNEGO Token Element. */
2N/A
2N/Atypedef struct SpnegoElement
2N/A{
2N/A size_t nStructSize; /* Size of the element structure */
2N/A int iElementPresent;
2N/A /* SPNEGO_TOKEN_ELEMENT_UNAVAILABLE or SPNEGO_TOKEN_ELEMENT_AVAILABLE */
2N/A SPNEGO_ELEMENT_TYPE eElementType; /* The Element Type */
2N/A unsigned char type; /* Data Type */
2N/A unsigned char *pbData; /* Points to actual Data */
2N/A unsigned long nDatalength; /* Actual Data Length */
2N/A} SPNEGO_ELEMENT;
2N/A
2N/A/* Structure size in case we later choose to extend the structure */
2N/A#define SPNEGO_ELEMENT_SIZE sizeof (SPNEGO_ELEMENT)
2N/A
2N/A/*
2N/A * Packages a SPNEGO Token Encoding. There are two types of
2N/A * encodings: NegTokenInit and NegTokenTarg. Each encoding can
2N/A * contain up to four distinct, optional elements.
2N/A */
2N/A
2N/Atypedef struct SpnegoToken
2N/A{
2N/A size_t nStructSize; /* Size of the Token structure */
2N/A unsigned long ulFlags; /* Internal Structure Flags, Reserved */
2N/A int ucTokenType;
2N/A /* SPNEGO_TOKEN_INIT or SPNEGO_TOKEN_TARG */
2N/A unsigned char *pbBinaryData; /* Points to binary token data */
2N/A unsigned long ulBinaryDataLen; /* Length of actual binary data */
2N/A int nNumElements; /* Number of elements */
2N/A SPNEGO_ELEMENT aElementArray [MAX_NUM_TOKEN_ELEMENTS]; /* elements */
2N/A} SPNEGO_TOKEN;
2N/A
2N/A/* Structure size in case we later choose to extend the structure */
2N/A#define SPNEGO_TOKEN_SIZE sizeof (SPNEGO_TOKEN)
2N/A
2N/A/* Function definitions */
2N/Avoid smbfs_FreeSpnegoToken(SPNEGO_TOKEN *);
2N/Aint smbfs_FindMechOIDInMechList(SPNEGO_ELEMENT *, SPNEGO_MECH_OID, int *);
2N/Aint smbfs_CalculateMinSpnegoInitTokenSize(long, long, SPNEGO_MECH_OID, int,
2N/A long *, long *);
2N/Aint smbfs_CalculateMinSpnegoTargTokenSize(SPNEGO_MECH_OID, SPNEGO_NEGRESULT,
2N/A long, long, long *, long *);
2N/Aint smbfs_CreateSpnegoInitToken(SPNEGO_MECH_OID, unsigned char, unsigned char *,
2N/A unsigned long, unsigned char *, unsigned long, unsigned char *, long, long);
2N/Aint smbfs_CreateSpnegoTargToken(SPNEGO_MECH_OID, SPNEGO_NEGRESULT,
2N/A unsigned char *, unsigned long, unsigned char *, unsigned long,
2N/A unsigned char *, long, long);
2N/Aint smbfs_IsValidMechOid(SPNEGO_MECH_OID);
2N/Aint smbfs_IsValidContextFlags(unsigned char);
2N/Aint smbfs_IsValidNegResult(SPNEGO_NEGRESULT);
2N/Aint smbfs_IsValidSpnegoToken(SPNEGO_TOKEN *);
2N/Aint smbfs_InitTokenFromBinary(unsigned char, unsigned long, unsigned char *,
2N/A unsigned long, SPNEGO_TOKEN **);
2N/A
2N/A/* C++ Specific */
2N/A#if defined(__cplusplus)
2N/A}
2N/A#endif
2N/A
2N/A#endif /* __SPNEGOPARSE_H__ */