windows-nt/Source/XPSP1/NT/ds/security/passport/include/digest.h
2020-09-26 16:20:57 +08:00

314 lines
12 KiB
C

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
CDigestAuth.h
Abstract:
This class performs digest authentication MD5 calculations.
Author:
Darren L. Anderson (darrenan) 5-Aug-1998
Revision History:
5-Aug-1998 darrenan
Created.
--*/
#ifndef __DIGESTAUTH_H
#define __DIGESTAUTH_H
#include <windows.h>
#define DIGESTBUF_LEN 33
enum DIGEST_AUTH_NAMES
{
DIGEST_AUTH_USERNAME=0,
DIGEST_AUTH_REALM,
DIGEST_AUTH_NONCE,
DIGEST_AUTH_URI,
DIGEST_AUTH_RESPONSE,
DIGEST_AUTH_DIGEST,
DIGEST_AUTH_ALGORITHM,
DIGEST_AUTH_OPAQUE,
DIGEST_AUTH_CNONCE,
DIGEST_AUTH_QOP,
DIGEST_AUTH_NC,
DIGEST_AUTH_LAST
};
#ifdef __cplusplus
extern "C" {
#endif
VOID WINAPI
ToHex(
LPBYTE pSrc,
UINT cSrc,
LPSTR pDst
);
HRESULT WINAPI
DigestFromCreds(
IN LPCSTR pszAlgorithm,
IN LPCSTR pszUsername,
IN LPCSTR pszRealm,
IN LPCSTR pszPassword,
IN LPCSTR pszNonce,
IN LPCSTR pszNonceCount,
IN LPCSTR pszCNonce,
IN LPCSTR pszQOP,
IN LPCSTR pszMethod,
IN LPCSTR pszURI,
IN LPCSTR pszEntityDigest,
OUT LPSTR pszSessionKey,
OUT LPSTR pszResult
);
HRESULT WINAPI
DigestFromKey(
IN LPCSTR pszAlgorithm,
IN LPCSTR pszSessionKey,
IN LPCSTR pszNonce,
IN LPCSTR pszNonceCount,
IN LPCSTR pszCNonce,
IN LPCSTR pszQOP,
IN LPCSTR pszMethod,
IN LPCSTR pszURI,
IN LPCSTR pszEntityDigest,
OUT LPSTR pszResult
);
// Base64EncodeA and Base64EncodeW is provided for backward
// compatibility with the existing code only.
HRESULT WINAPI
Base64EncodeA(
const LPBYTE pSrc,
ULONG ulSrcSize,
LPSTR pszDst
);
HRESULT WINAPI
Base64EncodeW(
const LPBYTE pSrc,
ULONG ulSrcSize,
LPWSTR pszDst
);
/*
HRESULT WINAPI
Base64DecodeA(
LPCSTR pszSrc,
ULONG ulSrcSize,
LPBYTE pDst
);
HRESULT WINAPI
Base64DecodeW(
LPCWSTR pszSrc,
ULONG ulSrcSize,
LPBYTE pDst
);
*/
/////////////////////////////////////////////////////////////////////////////////////
typedef unsigned char Byte;
typedef long SInt32;
typedef unsigned long UInt32;
typedef unsigned char Boolean;
void WINAPI
Base64_DecodeBytes( // base-64 encode a series of blocks
const char *pSource, // the source (can be the same as the destination)
char *pTerminate, // the source termination characters
Byte *rDest, // the destination (can be the same as the source)
SInt32 *rDestSize); // the number of dest bytes
void WINAPI
UU_DecodeBytes( // uu decode a series of blocks
const char *pSource, // the source (can be the same as the destination)
char *pTerminate, // the source termination characters
Byte *rDest, // the destination (can be the same as the source)
SInt32 *rSize); // the number of source bytes
void WINAPI
MSUU_DecodeBytes( // ms uu decode a series of blocks
const char *pSource, // the source (can be the same as the destination)
char *pTerminate, // the source termination characters
Byte *rDest, // the destination (can be the same as the source)
SInt32 *rSize); // the number of source bytes
void WINAPI
SixBit_DecodeBytes( // six bit decode a series of blocks
const char *pSource, // the source (can be the same as the destination)
char *pTerminate, // the source termination characters
const Byte *pFromTable, // conversion table
Byte *rDest, // the destination (can be the same as the source)
SInt32 *rSize); // the number of source bytes
void WINAPI
Base64_DecodeStream( // base-64 decode a stream of bytes
Byte *pRemainder, // the remainder from a previous encode (returns any new remainder)
SInt32 *pRemainderSize, // the size of the remainder (returns new new remainder size)
const char *pSource, // the source
SInt32 pSourceSize, // the source size
Boolean pTerminate, // meaningless (for Base64_EncodeStream() compatibility)
Byte *rDest, // the destination
SInt32 *rDestSize); // returns the destination size
void WINAPI
UU_DecodeStream( // uu decode a stream of bytes
Byte *pRemainder, // the remainder from a previous encode (returns any new remainder)
SInt32 *pRemainderSize, // the size of the remainder (returns new new remainder size)
const char *pSource, // the source
SInt32 pSourceSize, // the source size
Boolean pTerminate, // meaningless (for Base64_EncodeStream() compatibility)
Byte *rDest, // the destination
SInt32 *rDestSize); // returns the destination size
void WINAPI
MSUU_DecodeStream( // ms uu decode a stream of bytes
Byte *pRemainder, // the remainder from a previous encode (returns any new remainder)
SInt32 *pRemainderSize, // the size of the remainder (returns new new remainder size)
const char *pSource, // the source
SInt32 pSourceSize, // the source size
Boolean pTerminate, // meaningless (for Base64_EncodeStream() compatibility)
Byte *rDest, // the destination
SInt32 *rDestSize); // returns the destination size
void WINAPI
SixBit_DecodeStream( // six bit decode a stream of bytes
Byte *pRemainder, // the remainder from a previous encode (returns any new remainder)
SInt32 *pRemainderSize, // the size of the remainder (returns new new remainder size)
const char *pSource, // the source
SInt32 pSourceSize, // the source size
Boolean pTerminate, // meaningless (for Base64_EncodeStream() compatibility)
const Byte *pFromTable, // conversion table
Byte *rDest, // the destination
SInt32 *rDestSize); // returns the destination size
void WINAPI
Base64_EncodeStream( // base-64 encode a stream of bytes
Byte *pRemainder, // the remainder from a previous encode (returns any new remainder)
SInt32 *pRemainderSize, // the size of the remainder (returns new new remainder size)
const Byte *pSource, // the source
SInt32 pSourceSize, // the source size
Boolean pTerminate, // terminate the stream
char *rDest, // the destination
SInt32 *rDestSize); // the destination size
void WINAPI
UU_EncodeStream( // uu encode a stream of bytes
Byte *pRemainder, // the remainder from a previous encode (returns any new remainder)
SInt32 *pRemainderSize, // the size of the remainder (returns new new remainder size)
const Byte *pSource, // the source
SInt32 pSourceSize, // the source size
Boolean pTerminate, // terminate the stream
char *rDest, // the destination
SInt32 *rDestSize); // the destination size
void WINAPI
MSUU_EncodeStream( // ms uu encode a stream of bytes
Byte *pRemainder, // the remainder from a previous encode (returns any new remainder)
SInt32 *pRemainderSize, // the size of the remainder (returns new new remainder size)
const Byte *pSource, // the source
SInt32 pSourceSize, // the source size
Boolean pTerminate, // terminate the stream
char *rDest, // the destination
SInt32 *rDestSize); // the destination size
void WINAPI
SixBit_EncodeStream( // six bit encode a stream of bytes
Byte *pRemainder, // the remainder from a previous encode (returns any new remainder)
SInt32 *pRemainderSize, // the size of the remainder (returns new new remainder size)
const Byte *pSource, // the source
SInt32 pSourceSize, // the source size
Boolean pTerminate, // terminate the stream
const char *pToTable, // conversion table
char *rDest, // the destination
SInt32 *rDestSize); // the destination size
void WINAPI
Base64_EncodeBytes( // base-64 encode a series of whole blocks
const Byte *pSource, // the source (can be the same as the destination)
SInt32 pSourceSize, // the number of source bytes
char *rDest, // the destination (can be the same as the source)
SInt32 *rDesteSize); // returns the dest size
void WINAPI
UU_EncodeBytes( // uu encode a series of whole blocks
const Byte *pSource, // the source (can be the same as the destination)
SInt32 pSourceSize, // the number of source bytes
char *rDest, // the destination (can be the same as the source)
SInt32 *rDesteSize); // returns the dest size
void WINAPI
MSUU_EncodeBytes( // ms uu encode a series of whole blocks
const Byte *pSource, // the source (can be the same as the destination)
SInt32 pSourceSize, // the number of source bytes
char *rDest, // the destination (can be the same as the source)
SInt32 *rDesteSize); // returns the dest size
void WINAPI
SixBit_EncodeBytes( // six bit encode a series of whole blocks
const Byte *pSource, // the source (can be the same as the destination)
SInt32 pSourceSize, // the number of source bytes
const char *pToTable, // conversion table
char *rDest, // the destination (can be the same as the source)
SInt32 *rDesteSize); // returns the dest size
extern const char cToBase64[66];
extern const Byte cFromBase64[257];
extern const char cToUU[66];
extern const Byte cFromUU[257];
extern const char cToMSUU[66];
extern const Byte cFromMSUU[257];
/////////////////////////////////////////////////////////////////////////////////////
HRESULT WINAPI
GenerateNonce(BYTE *pSrcStr,
long lSrcSize,
BYTE *pDestStr,
long *plDestSize);
HRESULT WINAPI
CheckNonce(BYTE* pNonce,
long lSrcSize,
long lTimeoutWindow = 300, // default to 5 minutes
long lCurTime = 0);
#if defined(UNICODE) || defined(_UNICODE)
#define Base64Encode Base64EncodeW
//#define Base64Decode Base64DecodeW
#else
#define Base64Encode Base64EncodeA
//#define Base64Decode Base64DecodeA
#endif
BOOL
ParseAuthorizationHeader(
LPSTR pszHeader,
LPSTR pValueTable[DIGEST_AUTH_LAST]
);
#ifdef __cplusplus
}
#endif
#endif // __DIGESTAUTH_H