/*++ Copyright (C) Microsoft Corporation, 1996 - 1999 Module Name: cspDirect Abstract: This header file provides direct linkage to a CSP, so it does not have to be in a separate DLL. This facilitates code generation and debugging. Author: Doug Barlow (dbarlow) 5/8/1996 Environment: Win32 Notes: ?Notes? --*/ #ifdef CSP_DIRECT #ifndef _CSPDIRECT_H_ #define _CSPDIRECT_H_ #ifdef __cplusplus extern "C" { #endif #define CSPBOOL BOOL WINAPI #undef CryptAcquireContext #ifdef UNICODE #define CryptAcquireContext CSPAcquireContextW #else #define CryptAcquireContext CSPAcquireContextA #endif #define CryptReleaseContext CSPReleaseContext #define CryptGenKey CSPGenKey #define CryptDeriveKey CSPDeriveKey #define CryptDestroyKey CSPDestroyKey #define CryptSetKeyParam CSPSetKeyParam #define CryptGetKeyParam CSPGetKeyParam #define CryptSetHashParam CSPSetHashParam #define CryptGetHashParam CSPGetHashParam #define CryptSetProvParam CSPSetProvParam #define CryptGetProvParam CSPGetProvParam #define CryptGenRandom CSPGenRandom #define CryptGetUserKey CSPGetUserKey #define CryptExportKey CSPExportKey #define CryptImportKey CSPImportKey #define CryptEncrypt CSPEncrypt #define CryptDecrypt CSPDecrypt #define CryptCreateHash CSPCreateHash #define CryptHashData CSPHashData #define CryptHashSessionKey CSPHashSessionKey // #define CryptGetHashValue CSPGetHashValue #define CryptDestroyHash CSPDestroyHash #undef CryptSignHash #ifdef UNICODE #define CryptSignHash CSPSignHashW #else #define CryptSignHash CSPSignHashA #endif #undef CryptVerifySignature #ifdef UNICODE #define CryptVerifySignature CSPVerifySignatureW #else #define CryptVerifySignature CSPVerifySignatureA #endif #undef CryptSetProvider #ifdef UNICODE #define CryptSetProvider CSPSetProviderW #else #define CryptSetProvider CSPSetProviderA #endif extern CSPBOOL CSPAcquireContextA( HCRYPTPROV *phProv, LPCSTR pszContainer, LPCSTR pszProvider, DWORD dwProvType, DWORD dwFlags); extern CSPBOOL CSPAcquireContextW( HCRYPTPROV *phProv, LPCWSTR pszContainer, LPCWSTR pszProvider, DWORD dwProvType, DWORD dwFlags); extern CSPBOOL CSPReleaseContext( HCRYPTPROV hProv, DWORD dwFlags); extern CSPBOOL CSPGenKey( HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYPTKEY *phKey); extern CSPBOOL CSPDeriveKey( HCRYPTPROV hProv, ALG_ID Algid, HCRYPTHASH hBaseData, DWORD dwFlags, HCRYPTKEY *phKey); extern CSPBOOL CSPDestroyKey( HCRYPTKEY hKey); extern CSPBOOL CSPSetKeyParam( HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData, DWORD dwFlags); extern CSPBOOL CSPGetKeyParam( HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags); extern CSPBOOL CSPSetHashParam( HCRYPTHASH hHash, DWORD dwParam, BYTE *pbData, DWORD dwFlags); extern CSPBOOL CSPGetHashParam( HCRYPTHASH hHash, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags); extern CSPBOOL CSPSetProvParam( HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData, DWORD dwFlags); extern CSPBOOL CSPGetProvParam( HCRYPTPROV hProv, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags); extern CSPBOOL CSPGenRandom( HCRYPTPROV hProv, DWORD dwLen, BYTE *pbBuffer); extern CSPBOOL CSPGetUserKey( HCRYPTPROV hProv, DWORD dwKeySpec, HCRYPTKEY *phUserKey); extern CSPBOOL CSPExportKey( HCRYPTKEY hKey, HCRYPTKEY hExpKey, DWORD dwBlobType, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen); extern CSPBOOL CSPImportKey( HCRYPTPROV hProv, CONST BYTE *pbData, DWORD dwDataLen, HCRYPTKEY hPubKey, DWORD dwFlags, HCRYPTKEY *phKey); extern CSPBOOL CSPEncrypt( HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen, DWORD dwBufLen); extern CSPBOOL CSPDecrypt( HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE *pbData, DWORD *pdwDataLen); extern CSPBOOL CSPCreateHash( HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey, DWORD dwFlags, HCRYPTHASH *phHash); extern CSPBOOL CSPHashData( HCRYPTHASH hHash, CONST BYTE *pbData, DWORD dwDataLen, DWORD dwFlags); extern CSPBOOL CSPHashSessionKey( HCRYPTHASH hHash, HCRYPTKEY hKey, DWORD dwFlags); /* extern CSPBOOL CSPGetHashValue( HCRYPTHASH hHash, DWORD dwFlags, BYTE *pbHash, DWORD *pdwHashLen); */ extern CSPBOOL CSPDestroyHash( HCRYPTHASH hHash); extern CSPBOOL CSPSignHashA( HCRYPTHASH hHash, DWORD dwKeySpec, LPCSTR sDescription, DWORD dwFlags, BYTE *pbSignature, DWORD *pdwSigLen); extern CSPBOOL CSPSignHashW( HCRYPTHASH hHash, DWORD dwKeySpec, LPCWSTR sDescription, DWORD dwFlags, BYTE *pbSignature, DWORD *pdwSigLen); extern CSPBOOL CSPVerifySignatureA( HCRYPTHASH hHash, CONST BYTE *pbSignature, DWORD dwSigLen, HCRYPTKEY hPubKey, LPCSTR sDescription, DWORD dwFlags); extern CSPBOOL CSPVerifySignatureW( HCRYPTHASH hHash, CONST BYTE *pbSignature, DWORD dwSigLen, HCRYPTKEY hPubKey, LPCWSTR sDescription, DWORD dwFlags); extern CSPBOOL CSPSetProviderA( LPCSTR pszProvName, DWORD dwProvType); extern CSPBOOL CSPSetProviderW( LPCWSTR pszProvName, DWORD dwProvType); // // CSP Entry points. // extern BOOL WINAPI CPAcquireContext( OUT HCRYPTPROV *phProv, LPCTSTR pszContainer, IN DWORD dwFlags, IN PVTableProvStruc pVTable); extern BOOL WINAPI CPAcquireContextEx( OUT HCRYPTPROV *phProv, LPCTSTR pszContainer, IN DWORD dwFlags, IN LPCVOID pvParams, IN PVTableProvStruc pVTable); extern BOOL WINAPI CPReleaseContext( IN HCRYPTPROV hProv, IN DWORD dwFlags); extern BOOL WINAPI CPGenKey( IN HCRYPTPROV hProv, IN ALG_ID Algid, IN DWORD dwFlags, OUT HCRYPTKEY *phKey); extern BOOL WINAPI CPDeriveKey( IN HCRYPTPROV hProv, IN ALG_ID Algid, IN HCRYPTHASH hHash, IN DWORD dwFlags, OUT HCRYPTKEY * phKey); extern BOOL WINAPI CPDestroyKey( IN HCRYPTPROV hProv, IN HCRYPTKEY hKey); extern BOOL WINAPI CPSetKeyParam( IN HCRYPTPROV hProv, IN HCRYPTKEY hKey, IN DWORD dwParam, IN BYTE *pbData, IN DWORD dwFlags); extern BOOL WINAPI CPGetKeyParam( IN HCRYPTPROV hProv, IN HCRYPTKEY hKey, IN DWORD dwParam, OUT BYTE *pbData, IN DWORD *pdwDataLen, IN DWORD dwFlags); extern BOOL WINAPI CPSetProvParam( IN HCRYPTPROV hProv, IN DWORD dwParam, IN BYTE *pbData, IN DWORD dwFlags); extern BOOL WINAPI CPGetProvParam( IN HCRYPTPROV hProv, IN DWORD dwParam, IN BYTE *pbData, IN OUT DWORD *pdwDataLen, IN DWORD dwFlags); extern BOOL WINAPI CPSetHashParam( IN HCRYPTPROV hProv, IN HCRYPTHASH hHash, IN DWORD dwParam, IN BYTE *pbData, IN DWORD dwFlags); extern BOOL WINAPI CPGetHashParam( IN HCRYPTPROV hProv, IN HCRYPTHASH hHash, IN DWORD dwParam, OUT BYTE *pbData, IN DWORD *pdwDataLen, IN DWORD dwFlags); extern BOOL WINAPI CPExportKey( IN HCRYPTPROV hProv, IN HCRYPTKEY hKey, IN HCRYPTKEY hPubKey, IN DWORD dwBlobType, IN DWORD dwFlags, OUT BYTE *pbData, IN OUT DWORD *pdwDataLen); extern BOOL WINAPI CPImportKey( IN HCRYPTPROV hProv, IN CONST BYTE *pbData, IN DWORD dwDataLen, IN HCRYPTKEY hPubKey, IN DWORD dwFlags, OUT HCRYPTKEY *phKey); extern BOOL WINAPI CPEncrypt( IN HCRYPTPROV hProv, IN HCRYPTKEY hKey, IN HCRYPTHASH hHash, IN BOOL Final, IN DWORD dwFlags, IN OUT BYTE *pbData, IN OUT DWORD *pdwDataLen, IN DWORD dwBufLen); extern BOOL WINAPI CPDecrypt( IN HCRYPTPROV hProv, IN HCRYPTKEY hKey, IN HCRYPTHASH hHash, IN BOOL Final, IN DWORD dwFlags, IN OUT BYTE *pbData, IN OUT DWORD *pdwDataLen); extern BOOL WINAPI CPCreateHash( IN HCRYPTPROV hProv, IN ALG_ID Algid, IN HCRYPTKEY hKey, IN DWORD dwFlags, OUT HCRYPTHASH *phHash); extern BOOL WINAPI CPHashData( IN HCRYPTPROV hProv, IN HCRYPTHASH hHash, IN CONST BYTE *pbData, IN DWORD dwDataLen, IN DWORD dwFlags); extern BOOL WINAPI CPHashSessionKey( IN HCRYPTPROV hProv, IN HCRYPTHASH hHash, IN HCRYPTKEY hKey, IN DWORD dwFlags); extern BOOL WINAPI CPSignHash( IN HCRYPTPROV hProv, IN HCRYPTHASH hHash, IN DWORD dwKeySpec, IN LPCTSTR sDescription, IN DWORD dwFlags, OUT BYTE *pbSignature, IN OUT DWORD *pdwSigLen); /* extern BOOL WINAPI CPGetHashValue( IN HCRYPTPROV g_hProv, IN HCRYPTHASH hHash, IN DWORD dwFlags, OUT BYTE *pbHash, IN OUT DWORD *pdwHashLen); */ extern BOOL WINAPI CPDestroyHash( IN HCRYPTPROV hProv, IN HCRYPTHASH hHash); extern BOOL WINAPI CPSignHash( IN HCRYPTPROV hProv, IN HCRYPTHASH hHash, IN DWORD dwKeySpec, IN LPCTSTR sDescription, IN DWORD dwFlags, OUT BYTE *pbSignature, IN OUT DWORD *pdwSigLen); extern BOOL WINAPI CPVerifySignature( IN HCRYPTPROV hProv, IN HCRYPTHASH hHash, IN CONST BYTE *pbSignature, IN DWORD dwSigLen, IN HCRYPTKEY hPubKey, IN LPCTSTR sDescription, IN DWORD dwFlags); extern BOOL WINAPI CPGenRandom( IN HCRYPTPROV hProv, IN DWORD dwLen, IN OUT BYTE *pbBuffer); extern BOOL WINAPI CPGetUserKey( IN HCRYPTPROV hProv, IN DWORD dwKeySpec, OUT HCRYPTKEY *phUserKey); #ifdef __cplusplus } #endif #endif #endif // _CSPDIRECT_H_