177 lines
5.1 KiB
C
177 lines
5.1 KiB
C
//+-----------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (c) Microsoft Corporation 2000
|
|
//
|
|
// File: user.h
|
|
//
|
|
// Contents: declarations, constants for UserMode context manager
|
|
//
|
|
//
|
|
// History: KDamour 13Apr00 Created
|
|
//
|
|
//------------------------------------------------------------------------
|
|
|
|
#ifndef NTDIGEST_USER_H
|
|
#define NTDIGEST_USER_H
|
|
|
|
#include "nonce.h"
|
|
|
|
#define DES_BLOCKSIZE 8
|
|
#define RC4_BLOCKSIZE 1
|
|
|
|
// For import of plain text keys
|
|
typedef struct _PLAINTEXTBLOB
|
|
{
|
|
BLOBHEADER Blob;
|
|
DWORD dwKeyLen;
|
|
CHAR bKey[MD5_HASH_BYTESIZE];
|
|
} PLAINTEXTBLOB;
|
|
|
|
// Initializes the context manager package
|
|
NTSTATUS UserCtxtHandlerInit(VOID);
|
|
|
|
// Add a Context into the Cntext List
|
|
NTSTATUS UserCtxtHandlerInsertCred(IN PDIGEST_USERCONTEXT pDigestCtxt);
|
|
|
|
// Initialize all the struct elements in a Context
|
|
NTSTATUS NTAPI UserCtxtInit(IN PDIGEST_USERCONTEXT pContext);
|
|
|
|
// Release memory utilized by the Context
|
|
NTSTATUS NTAPI UserCtxtFree(IN PDIGEST_USERCONTEXT pContext);
|
|
|
|
// Finf the security context by the security context handle
|
|
NTSTATUS NTAPI UserCtxtHandlerHandleToContext(IN ULONG_PTR ContextHandle, IN BOOLEAN RemoveContext,
|
|
OUT PDIGEST_USERCONTEXT *ppContext);
|
|
|
|
// Releases the Context by decreasing reference counter
|
|
NTSTATUS UserCtxtHandlerRelease(PDIGEST_USERCONTEXT pContext);
|
|
|
|
// Check to see if Context is within valid lifetime
|
|
BOOL UserCtxtHandlerTimeHasElapsed(PDIGEST_USERCONTEXT pContext);
|
|
|
|
// Creates a new DACL for the token granting the server and client
|
|
NTSTATUS SspCreateTokenDacl(HANDLE Token);
|
|
|
|
// From userapi.cxx
|
|
|
|
// SECURITY_STATUS SEC_ENTRY FreeContextBuffer(void SEC_FAR * pvContextBuffer);
|
|
|
|
NTSTATUS SspGetTokenUser(HANDLE Token, PTOKEN_USER * pTokenUser);
|
|
|
|
// Create a local context for a real context
|
|
NTSTATUS SspMapDigestContext(IN PDIGEST_CONTEXT pLsaContext,
|
|
IN PDIGEST_PARAMETER pDigest,
|
|
OUT PSecBuffer ContextData);
|
|
|
|
NTSTATUS NTAPI DigestUserProcessParameters(
|
|
IN OUT PDIGEST_USERCONTEXT pContext,
|
|
IN PDIGEST_PARAMETER pDigest,
|
|
OUT PSecBuffer pFirstOutputToken);
|
|
|
|
|
|
NTSTATUS NTAPI DigestUserHTTPHelper(
|
|
IN PDIGEST_USERCONTEXT pContext,
|
|
IN eSignSealOp Op,
|
|
IN OUT PSecBufferDesc pMessage,
|
|
IN ULONG MessageSeqNo
|
|
);
|
|
|
|
NTSTATUS NTAPI DigestUserSignHelper(
|
|
IN PDIGEST_USERCONTEXT pContext,
|
|
IN OUT PSecBufferDesc pMessage,
|
|
IN ULONG MessageSeqNo
|
|
);
|
|
|
|
NTSTATUS NTAPI DigestUserSealHelper(
|
|
IN PDIGEST_USERCONTEXT pContext,
|
|
IN OUT PSecBufferDesc pMessage,
|
|
IN ULONG MessageSeqNo
|
|
);
|
|
|
|
NTSTATUS NTAPI DigestUserUnsealHelper(
|
|
IN PDIGEST_USERCONTEXT pContext,
|
|
IN OUT PSecBufferDesc pMessage,
|
|
IN ULONG MessageSeqNo
|
|
);
|
|
|
|
NTSTATUS NTAPI DigestUserVerifyHelper(
|
|
IN PDIGEST_USERCONTEXT pContext,
|
|
IN OUT PSecBufferDesc pMessage,
|
|
IN ULONG MessageSeqNo
|
|
);
|
|
|
|
// Unpack the context from LSA mode into the User mode Context
|
|
NTSTATUS DigestUnpackContext(
|
|
IN PDIGEST_PACKED_USERCONTEXT pPackedUserContext,
|
|
OUT PDIGEST_USERCONTEXT pContext);
|
|
|
|
// Printout the fields present in usercontext pContext
|
|
NTSTATUS UserContextPrint(PDIGEST_USERCONTEXT pContext);
|
|
|
|
// Create a symmetric key with a given cleartext shared secret
|
|
NTSTATUS SEC_ENTRY CreateSymmetricKey(
|
|
IN ALG_ID Algid,
|
|
IN DWORD cbKey,
|
|
IN UCHAR *pbKey,
|
|
IN UCHAR *pbIV,
|
|
OUT HCRYPTKEY *phKey
|
|
);
|
|
|
|
// Encrypt data with the symmetric key - non-consecutive buffers
|
|
NTSTATUS SEC_ENTRY EncryptData2(
|
|
IN HCRYPTKEY hKey,
|
|
IN ULONG cbBlocklength,
|
|
IN ULONG cbData,
|
|
IN OUT UCHAR *pbData,
|
|
IN ULONG cbSignature,
|
|
IN OUT UCHAR *pbSignature
|
|
);
|
|
|
|
|
|
NTSTATUS SEC_ENTRY DecryptData(
|
|
IN HCRYPTKEY hKey,
|
|
IN ULONG cbData,
|
|
IN OUT UCHAR *pbData
|
|
);
|
|
|
|
// Calculate the HMAC block for SASL messaging
|
|
NTSTATUS
|
|
SEC_ENTRY
|
|
CalculateSASLHMAC(
|
|
IN PDIGEST_USERCONTEXT pContext,
|
|
IN BOOL fSign,
|
|
IN PSTRING pstrSignKeyConst,
|
|
IN DWORD dwSeqNum,
|
|
IN PBYTE pdata, // location of data to HMAC
|
|
IN ULONG cbdata, // How many bytes of data to process
|
|
OUT PSASL_MAC_BLOCK pMacBlock
|
|
);
|
|
|
|
// For encrypt (seal)/ decrypt (unseal) calculate the value of Kc RFC 2831 sect 2.4
|
|
NTSTATUS
|
|
SEC_ENTRY
|
|
CalculateKc(
|
|
IN PBYTE pbSessionKey,
|
|
IN USHORT cbHA1n,
|
|
IN PSTRING pstrSealKeyConst,
|
|
IN PBYTE pHashData
|
|
);
|
|
|
|
void
|
|
SetDESParity(
|
|
PBYTE pbKey,
|
|
DWORD cbKey
|
|
);
|
|
|
|
NTSTATUS
|
|
AddDESParity(
|
|
IN PBYTE pbSrcKey,
|
|
IN DWORD cbSrcKey,
|
|
OUT PBYTE pbDstKey,
|
|
OUT PDWORD pcbDstKey
|
|
);
|
|
|
|
#endif // DIGEST_USER_H
|