|
|
//+-----------------------------------------------------------------------
//
// 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
|