windows-nt/Source/XPSP1/NT/ds/win32/ntcrypto/test/testsuit/utils.h
2020-09-26 16:20:57 +08:00

200 lines
5 KiB
C

//
// Utils.h
//
// 7/6/00 dangriff created
//
#ifndef __UTILS__H__
#define __UTILS__H__
#include <windows.h>
#include "cspstruc.h"
//
// Function: TestAlloc
// Purpose: Malloc and zero-ize the requested memory. Log an error
// if malloc fails.
//
BOOL TestAlloc(
OUT PBYTE *ppb,
IN DWORD cb,
PTESTCASE ptc);
//
// Function: PrintBytes
// Purpose: Display bytes to the console for debugging
//
void PrintBytes(LPWSTR pwszHdr, BYTE *pb, DWORD cbSize);
//
// Function: MkWStr
// Purpose: Convert the psz parameter into a Unicode string.
// Return the Unicode string.
//
LPWSTR MkWStr(LPSTR psz);
//
// -----------------------------
// System/Test Version Utilities
// -----------------------------
//
//
// Function: IsVersionCorrect
// Purpose: Check that the specified version information
// is at least as high a Rev as the system running this process.
//
// If the system is newer than the specified information, return FALSE.
// Otherwise, return TRUE.
//
/*
BOOL IsVersionCorrect(
IN DWORD dwMajorVersion,
IN DWORD dwMinorVersion,
IN DWORD dwServicePackMajor,
IN DWORD dwServicePackMinor);
*/
//
// -------------------------------------------------------
// ALGLIST
// A linked list structure for storing PP_ENUMALGS_EX data
// -------------------------------------------------------
//
//
// Function: BuildAlgList
// Purpose: Using the user-supplied hProv, call CryptGetProvParam repeatedly with
// the PP_ENUMALGS_EX flag until ERROR_NO_MORE_ITEMS is returned. For each
// algorithm returned, add a new ALGNODE to the pCSPInfo->pAlgNode list.
//
// Note that the string pointers in the ProvEnumalgsEx struct in each ALGNODE
// will be valid only until the CSP dll unloads.
//
BOOL BuildAlgList(
IN HCRYPTPROV hProv,
IN OUT PCSPINFO pCSPInfo);
//
// Function: PrintAlgList
// Purpose: Display the list of ALGNODE structs in pretty form.
//
void PrintAlgList(PALGNODE pAlgList);
//
// Function: AlgListIterate
// Purpose: Iterate through each item in pAlgList. Each list item is passed to the
// pfnFilter function. If the function returns true for that item, the item is passed
// to the pfnProc function.
//
// AlgListIterate returns TRUE if pfnProc returns TRUE for every item passed to it.
//
typedef BOOL (*PFN_ALGNODE_FILTER)(PALGNODE pAlgNode);
typedef BOOL (*PFN_ALGNODE_PROC)(PALGNODE pAlgNode, PTESTCASE ptc, PVOID pvProcData);
BOOL AlgListIterate(
IN PALGNODE pAlgList,
IN PFN_ALGNODE_FILTER pfnFilter,
IN PFN_ALGNODE_PROC pfnProc,
IN PVOID pvProcData,
IN PTESTCASE ptc);
//
// Function: HashAlgFilter
// Purpose: If pAlgNode represents a known hash algorithm, return
// TRUE, otherwise return FALSE. Mac algorithms are excluded
// from this set (return FALSE).
//
BOOL HashAlgFilter(PALGNODE pAlgNode);
//
// Function: MacAlgFilter
// Purpose: If pAlgNode represents a known Mac algorithm, return
// TRUE, otherwise return FALSE
//
BOOL MacAlgFilter(PALGNODE pAlgNode);
//
// Function: BlockCipherFilter
// Purpose: If pAlgNode represents a known block cipher algorithm,
// return TRUE, otherwise return FALSE.
//
BOOL BlockCipherFilter(PALGNODE pAlgNode);
//
// Function: DataEncryptFilter
// Purpose: If pAlgNode represents a known data encryption
// symmetric key algorithm, return TRUE, otherwise return FALSE.
//
BOOL DataEncryptFilter(PALGNODE pAlgNode);
//
// Function: AllEncryptionAlgsFilter
// Purpose: Same algorithm set as DataEncryptFilter above,
// with the addition of the RSA key-exchange alg.
//
BOOL AllEncryptionAlgsFilter(PALGNODE pAlgNode);
//
// Function: RSAAlgFilter
// Purpose: If pAlgNode represents an RSA algorithm, return
// TRUE, otherwise return FALSE
//
BOOL RSAAlgFilter(PALGNODE pAlgNode);
//
// ------------------------------------------------
// Test wrappers for creating crypto object handles
// ------------------------------------------------
//
//
// Function: CreateNewInteropContext
// Purpose: Create a new cryptographic context with the provided
// parameters. The context will be for the CSP specified by the
// user at the command line to be the interoperability-test
// provider.
//
BOOL CreateNewInteropContext(
OUT HCRYPTPROV *phProv,
IN LPWSTR pwszContainer,
IN DWORD dwFlags,
IN PTESTCASE ptc);
//
// Function: CreateNewContext
// Purpose: Call CryptAcquireContext with the provided parameters. If
// CRYPT_VERIFYCONTEXT is not specified in dwFlags, any existing
// key container named pwszContainer will be deleted first, and the CRYPT_NEWKEYSET
// flag will be used to re-create the container.
//
BOOL CreateNewContext(
OUT HCRYPTPROV *phProv,
IN LPWSTR pwszContainer,
IN DWORD dwFlags,
IN PTESTCASE ptc);
//
// Function: CreateNewKey
// Purpose: Call CryptGenKey with the provided parameters.
//
BOOL CreateNewKey(
IN HCRYPTPROV hProv,
IN ALG_ID Algid,
IN DWORD dwFlags,
OUT HCRYPTKEY *phKey,
IN PTESTCASE ptc);
//
// Function: CreateNewHash
// Purpose: Call CryptCreateHash with the provided parameters.
//
BOOL CreateNewHash(
IN HCRYPTPROV hProv,
IN ALG_ID Algid,
OUT HCRYPTHASH *phHash,
IN PTESTCASE ptc);
#endif