/*++ Copyright (c) 1997-2001 Microsoft Corporation Module Name: ah.h Abstract: Contains AH specific structures Author: Sanjay Anand (SanjayAn) 2-January-1997 ChunYe Environment: Kernel mode Revision History: --*/ #ifndef _AH_ #define _AH_ #define MD5DIGESTLEN 16 #define SHADIGESTLEN 20 #define AH_SIZE (sizeof(AH) + MD5DIGESTLEN * sizeof(UCHAR)) // // State buffers for the individual algorithms // typedef struct _AlgoState { union { // internal algo state MD5_CTX as_md5ctx; A_SHA_CTX as_shactx; }; PSA_TABLE_ENTRY as_sa; } ALGO_STATE, *PALGO_STATE; typedef NTSTATUS (*PALGO_INIT) ( PALGO_STATE pEntry, ULONG Index ); typedef NTSTATUS (*PALGO_UPDATE) ( PALGO_STATE State, PUCHAR Data, ULONG Length ); typedef NTSTATUS (*PALGO_FINISH) ( PALGO_STATE State, PUCHAR Data, ULONG Index ); // // Array of function ptrs for the AH authentication algorithms // typedef struct _auth_algorithm { PALGO_INIT init; // ptr to init fn for alg. PALGO_UPDATE update; // ptr to update fn for alg PALGO_FINISH finish; // ptr to finish fn for alg ULONG OutputLen; // Length (in u_int8s) of output // data. MUST be a multiple of 4 } AUTH_ALGO, *PAUTH_ALGO; #define NUM_AUTH_ALGOS (sizeof(auth_algorithms)/sizeof(AUTH_ALGO)-1) // // The IPSEC AH payload // typedef struct _AH { UCHAR ah_next; UCHAR ah_len; USHORT ah_reserved; tSPI ah_spi; ULONG ah_replay; } AH, *PAH; NTSTATUS IPSecCreateAH( IN PUCHAR pIPHeader, IN PVOID pData, IN PSA_TABLE_ENTRY pSA, IN ULONG Index, OUT PVOID *ppNewData, OUT PVOID *ppSCContext, OUT PULONG pExtraBytes, IN ULONG HdrSpace, IN BOOLEAN fSrcRoute, IN BOOLEAN fCryptoOnly ); NTSTATUS IPSecVerifyAH( IN PUCHAR *pIPHeader, IN PVOID pData, IN PSA_TABLE_ENTRY pSA, IN ULONG Index, OUT PULONG pExtraBytes, IN BOOLEAN fSrcRoute, IN BOOLEAN fCryptoDone, IN BOOLEAN fFastRcv ); NTSTATUS IPSecGenerateHash( IN PUCHAR pIPHeader, IN PVOID pData, IN PSA_TABLE_ENTRY pSA, IN PUCHAR pAHData, IN BOOLEAN fMuteDest, IN BOOLEAN fIncoming, IN PAUTH_ALGO pAlgo, IN ULONG Index ); #endif _AH_