Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

223 lines
7.7 KiB

//+----------------------------------------------------------------------------
//
// File: cmsecure.h
//
// Module: CMSECURE.LIB
//
// Synopsis: This header describes the functionality available in the cmsecure
// library.
//
// Copyright (c) 1996-1999 Microsoft Corporation
//
// Author: henryt Created 05/21/97
//
//+----------------------------------------------------------------------------
#ifndef _CMSECURE_INC_
#define _CMSECURE_INC_
#include <windows.h>
//************************************************************************
// define's
//************************************************************************
//
// the encryption types that cmsecure currently supports
//
#define CMSECURE_ET_NOT_ENCRYPTED 0 // 0x0000
#define CMSECURE_ET_RC2 1 // 0x0001
#define CMSECURE_ET_STREAM_CIPHER 2 // 0x0002
#define CMSECURE_ET_CBC_CIPHER 3 // 0x0003
//
// Extended codes for UNICODE designation
// Note: The encryption logic will not know anything about these new codes
// they are designed for book-keeping by the calling modules, which will
// have to do the appropiate conversions based on the calling context/OS
//
#define CMSECURE_ET_NOT_ENCRYPTED_U 128 // 0x0080
#define CMSECURE_ET_RC2_U 129 // 0x0081
#define CMSECURE_ET_STREAM_CIPHER_U 130 // 0x0082
#define CMSECURE_ET_CBC_CIPHER_U 131 // 0x0083
#define CMSECURE_ET_MASK_U 128 // 0x0080
#define CMSECURE_ET_RANDOM_KEY_MASK 256 // 0x0100 uses a randomly generated key
#define CMSECURE_ET_USE_SECOND_RND_KEY 512 // 0x1000 uses the second blob key
//
// structures, typdef's
//
typedef LPVOID (*PFN_CMSECUREALLOC)(DWORD);
typedef void (*PFN_CMSECUREFREE)(LPVOID);
//
// externs
//
//
// function prototypes
//
/*
#ifdef __cplusplus
extern "C" {
#endif
*/
// cmsecure.cpp
BOOL
InitSecure(
BOOL fFastEncryption = FALSE // default is more secure
);
void
DeInitSecure(
void
);
BOOL
EncryptData(
IN LPBYTE pbData, // Data to be encrypted
IN DWORD dwDataLength, // Length of data in bytes
OUT LPBYTE *ppbEncryptedData, // Encrypted secret key will be stored here(memory will be allocated)
OUT LPDWORD pdwEncrytedBufferLen, // Length of this buffer
OUT LPDWORD pEncryptionType, // type of the encryption used
IN PFN_CMSECUREALLOC pfnAlloc, // memory allocator(if NULL, then the default is used.
// Win32 - HeapAlloc(GetProcessHeap(), ...)
IN PFN_CMSECUREFREE pfnFree, // memory deallocator(if NULL, then the default is used.
// Win32 - HeapFree(GetProcessHeap(), ...)
IN LPSTR pszUserKey // Registry key to store encrypted key for passwords
);
BOOL
DecryptData(
IN LPBYTE pbEncryptedData, // Encrypted data
IN DWORD dwEncrytedDataLen, // Length of encrypted data
OUT LPBYTE *ppbData, // Decrypted Data will be stored here(memory will be allocated)
OUT LPDWORD pdwDataBufferLength, // Length of the above buffer in bytes
IN DWORD dwEncryptionType, // encryption type for decryption
IN PFN_CMSECUREALLOC pfnAlloc, // memory allocator(if NULL, then the default is used.
// Win32 - HeapAlloc(GetProcessHeap(), ...)
IN PFN_CMSECUREFREE pfnFree, // memory deallocator(if NULL, then the default is used.
// Win32 - HeapFree(GetProcessHeap(), ...)
IN LPSTR pszUserKey // Registry key to store encrypted key for passwords
);
BOOL
EncryptString(
IN LPSTR pszToEncrypt, // String to be encrypted (Ansi)
IN LPSTR pszUserKey, // Key to use for Encryption
OUT LPBYTE * ppbEncryptedData, // Encrypted secret key will be stored here(memory will be allocated)
OUT LPDWORD pdwEncrytedBufferLen, // Length of this buffer
IN PFN_CMSECUREALLOC pfnAlloc, // memory allocator(if NULL, then the default is used.
// Win32 - HeapAlloc(GetProcessHeap(), ...)
IN PFN_CMSECUREFREE pfnFree // memory deallocator(if NULL, then the default is used.
// Win32 - HeapFree(GetProcessHeap(), ...)
);
BOOL
DecryptString(
IN LPBYTE pbEncryptedData, // Encrypted data
IN DWORD dwEncrytedDataLen, // Length of encrypted data
IN LPSTR pszUserKey, // Registry key to store encrypted key for passwords
OUT LPBYTE * ppbData, // Decrypted Data will be stored here
OUT LPDWORD pdwDataBufferLength, // Length of the above buffer in bytes
IN PFN_CMSECUREALLOC pfnAlloc, // memory allocator(if NULL, then the default is used.
// Win32 - HeapAlloc(GetProcessHeap(), ...)
IN PFN_CMSECUREFREE pfnFree // memory deallocator(if NULL, then the default is used.
// Win32 - HeapFree(GetProcessHeap(), ...)
);
//+---------------------------------------------------------------------------
//
// Function: AnsiToUnicodePcs
//
// Synopsis: Wrapper to encapsulate translating a standard crypt type value
// into its equivalent for UNICODE systems.
//
// Arguments: IN DWORD dwCrypt - The code to be converted
//
// Returns: Converted code
//
// History: nickball Created 06/02/99
//
//----------------------------------------------------------------------------
inline DWORD AnsiToUnicodePcs(IN DWORD dwCrypt)
{
return (dwCrypt | CMSECURE_ET_MASK_U);
}
//+---------------------------------------------------------------------------
//
// Function: UnicodeToAnsiPcs
//
// Synopsis: Wrapper to encapsulate translating a UNICODE crypt type value
// into its equivalent standard ANSI crypt type.
//
// Arguments: IN DWORD dwCrypt - The code to be converted
//
// Returns: Converted code
//
// History: nickball Created 06/02/99
//
//----------------------------------------------------------------------------
inline DWORD UnicodeToAnsiPcs(IN DWORD dwCrypt)
{
return (dwCrypt & (~CMSECURE_ET_MASK_U));
}
//+---------------------------------------------------------------------------
//
// Function: IsUnicodePcs
//
// Synopsis: Wrapper to encapsulate determining if a crypt type has UNICODE
// designation.
//
// Arguments: IN DWORD dwCrypt - The code to be converted
//
// Returns: TRUE if UNICODE designation
//
// History: nickball Created 06/02/99
//
//----------------------------------------------------------------------------
inline BOOL IsUnicodePcs(IN DWORD dwCrypt)
{
return (!!(dwCrypt & CMSECURE_ET_MASK_U)); // !! == (BOOL)
}
//+---------------------------------------------------------------------------
//
// Function: IsAnsiPcs
//
// Synopsis: Wrapper to encapsulate determining if a crypt type has Ansi
// designation.
//
// Arguments: IN DWORD dwCrypt - The code to be converted
//
// Returns: TRUE if Ansi designation
//
// History: nickball Created 06/02/99
//
//----------------------------------------------------------------------------
inline BOOL IsAnsiPcs(IN DWORD dwCrypt)
{
return (!(dwCrypt & CMSECURE_ET_MASK_U));
}
/*
#ifdef __cplusplus
}
#endif
*/
#endif // _CMSECURE_INC_