/////////////////////////////////////////////////////////////////////////////////////////// // // Copyright 2000 Gemplus Canada Inc. // // Project: // Kenny (GPK CSP) // // Authors: // Thierry Tremblay // Francois Paradis // // Compiler: // Microsoft Visual C++ 6.0 - SP3 // Platform SDK - January 2000 // /////////////////////////////////////////////////////////////////////////////////////////// #ifndef KENNY_GPKCSP_H #define KENNY_GPKCSP_H #if defined(MS_BUILD) || defined(SHELL_TS) // Microsoft: Target Win2000 #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0500 #endif #else // Gemplus: Target Win95 / WINNT 4.0 #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0400 #endif #ifndef WINVER #define WINVER 0x400 #endif #endif #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include #include #include #include #include "gpkgui.h" #if !defined(CRYPT_IMPL_REMOVABLE) || !defined(NTE_SILENT_CONTEXT) #pragma message ("**************************************************************") #pragma message ("* *") #pragma message ("* You need to use the latest available Windows Platform SDK *") #pragma message ("* in order to compile this CSP. *") #pragma message ("* *") #pragma message ("* Make sure the include and library paths of the SDK are *") #pragma message ("* searched first (before your MSDEV paths). *") #pragma message ("* *") #pragma message ("**************************************************************") #error #endif #ifdef __cplusplus extern "C" { #endif /////////////////////////////////////////////////////////////////////////////////////////// // // Definitions // /////////////////////////////////////////////////////////////////////////////////////////// #ifdef _DEBUG extern void DBG_PRINT( const PTCHAR szFormat, ... ); extern DWORD dw1, dw2; #define DBG_TIME1 dw1 = GetTickCount(); #define DBG_TIME2 dw2 = GetTickCount(); #define DBG_DELTA dw2 - dw1 #else __inline void NeverCalled666KillKenny( const PTCHAR szFormat, ... ) {} #define DBG_PRINT if (1) {} else NeverCalled666KillKenny #define DBG_TIME1 #define DBG_TIME2 #define DBG_DELTA 0 #endif #define RETURN(r,s) { EndWait(); SetLastError(s); return(r); } #ifdef __cplusplus const DWORD GPP_SERIAL_NUMBER = 0xFFFF0001; const DWORD GPP_SESSION_RANDOM = 0xFFFF0002; const DWORD GPP_IMPORT_MECHANISM = 0xFFFF0003; const DWORD GPP_CHANGE_PIN = 0xFFFF0004; const DWORD GCRYPT_IMPORT_SECURE = 0xFFFF8001; const DWORD GCRYPT_IMPORT_PLAIN = 0xFFFF8002; #endif typedef struct TAG_Prov_Context { HCRYPTPROV hProv; SCARDHANDLE hCard; DWORD Flags; DWORD Slot; BOOL isContNameNullBlank; // [mv - 15/05/98] BOOL bCardTransactionOpened; // [FP] control the begin/end transaction when loading a RSA private key into the GPK card char szContainer[128]; BYTE keysetID; // If Legacy GPK4000, we use 0xFF as the keyset HCRYPTKEY hRSASign; HCRYPTKEY hRSAKEK; BOOL bGPK8000; // Card is a GPK8000 ? BOOL bGPK_ISO_DF; // Card has ISO 7816-5 compliant DF name BOOL bLegacyKeyset; // Use legacy keyset name in IADF int dataUnitSize; BOOL bDisconnected; } Prov_Context; /////////////////////////////////////////////////////////////////////////////////////////// // // Globals // /////////////////////////////////////////////////////////////////////////////////////////// extern BYTE KeyLenFile[MAX_REAL_KEY]; extern BYTE KeyLenChoice; extern DWORD ContainerStatus; extern TCHAR szKeyType[20]; extern TCHAR s1[MAX_STRING], s2[MAX_STRING], s3[MAX_STRING]; extern DWORD CspFlags; /////////////////////////////////////////////////////////////////////////////////////////// // // Wrappers for the CSP API // /////////////////////////////////////////////////////////////////////////////////////////// extern BOOL WINAPI MyCPAcquireContext( OUT HCRYPTPROV *phProv, IN LPCSTR szContainer, IN DWORD dwFlags, IN PVTableProvStruc pVTable); extern BOOL WINAPI MyCPAcquireContextW( OUT HCRYPTPROV *phProv, IN LPCWSTR szContainer, IN DWORD dwFlags, IN PVTableProvStrucW pVTable); extern BOOL WINAPI MyCPReleaseContext( IN HCRYPTPROV hProv, IN DWORD dwFlags); extern BOOL WINAPI MyCPGenKey( IN HCRYPTPROV hProv, IN ALG_ID Algid, IN DWORD dwFlags, OUT HCRYPTKEY *phKey); extern BOOL WINAPI MyCPDeriveKey( IN HCRYPTPROV hProv, IN ALG_ID Algid, IN HCRYPTHASH hHash, IN DWORD dwFlags, OUT HCRYPTKEY *phKey); extern BOOL WINAPI MyCPDestroyKey( IN HCRYPTPROV hProv, IN HCRYPTKEY hKey); extern BOOL WINAPI MyCPSetKeyParam( IN HCRYPTPROV hProv, IN HCRYPTKEY hKey, IN DWORD dwParam, IN CONST BYTE *pbData, IN DWORD dwFlags); extern BOOL WINAPI MyCPGetKeyParam( IN HCRYPTPROV hProv, IN HCRYPTKEY hKey, IN DWORD dwParam, OUT LPBYTE pbData, IN OUT LPDWORD pcbDataLen, IN DWORD dwFlags); extern BOOL WINAPI MyCPSetProvParam( IN HCRYPTPROV hProv, IN DWORD dwParam, IN CONST BYTE *pbData, IN DWORD dwFlags); extern BOOL WINAPI MyCPGetProvParam( IN HCRYPTPROV hProv, IN DWORD dwParam, OUT LPBYTE pbData, IN OUT LPDWORD pcbDataLen, IN DWORD dwFlags); extern BOOL WINAPI MyCPSetHashParam( IN HCRYPTPROV hProv, IN HCRYPTHASH hHash, IN DWORD dwParam, IN CONST BYTE *pbData, IN DWORD dwFlags); extern BOOL WINAPI MyCPGetHashParam( IN HCRYPTPROV hProv, IN HCRYPTHASH hHash, IN DWORD dwParam, OUT LPBYTE pbData, IN OUT LPDWORD pcbDataLen, IN DWORD dwFlags); extern BOOL WINAPI MyCPExportKey( IN HCRYPTPROV hProv, IN HCRYPTKEY hKey, IN HCRYPTKEY hPubKey, IN DWORD dwBlobType, IN DWORD dwFlags, OUT LPBYTE pbData, IN OUT LPDWORD pcbDataLen); extern BOOL WINAPI MyCPImportKey( IN HCRYPTPROV hProv, IN CONST BYTE *pbData, IN DWORD cbDataLen, IN HCRYPTKEY hPubKey, IN DWORD dwFlags, OUT HCRYPTKEY *phKey); extern BOOL WINAPI MyCPEncrypt( IN HCRYPTPROV hProv, IN HCRYPTKEY hKey, IN HCRYPTHASH hHash, IN BOOL fFinal, IN DWORD dwFlags, IN OUT LPBYTE pbData, IN OUT LPDWORD pcbDataLen, IN DWORD cbBufLen); extern BOOL WINAPI MyCPDecrypt( IN HCRYPTPROV hProv, IN HCRYPTKEY hKey, IN HCRYPTHASH hHash, IN BOOL fFinal, IN DWORD dwFlags, IN OUT LPBYTE pbData, IN OUT LPDWORD pcbDataLen); extern BOOL WINAPI MyCPCreateHash( IN HCRYPTPROV hProv, IN ALG_ID Algid, IN HCRYPTKEY hKey, IN DWORD dwFlags, OUT HCRYPTHASH *phHash); extern BOOL WINAPI MyCPHashData( IN HCRYPTPROV hProv, IN HCRYPTHASH hHash, IN CONST BYTE *pbData, IN DWORD cbDataLen, IN DWORD dwFlags); extern BOOL WINAPI MyCPHashSessionKey( IN HCRYPTPROV hProv, IN HCRYPTHASH hHash, IN HCRYPTKEY hKey, IN DWORD dwFlags); extern BOOL WINAPI MyCPSignHash( IN HCRYPTPROV hProv, IN HCRYPTHASH hHash, IN DWORD dwKeySpec, IN LPCWSTR szDescription, IN DWORD dwFlags, OUT LPBYTE pbSignature, IN OUT LPDWORD pcbSigLen); extern BOOL WINAPI MyCPDestroyHash( IN HCRYPTPROV hProv, IN HCRYPTHASH hHash); extern BOOL WINAPI MyCPVerifySignature( IN HCRYPTPROV hProv, IN HCRYPTHASH hHash, IN CONST BYTE *pbSignature, IN DWORD cbSigLen, IN HCRYPTKEY hPubKey, IN LPCWSTR szDescription, IN DWORD dwFlags); extern BOOL WINAPI MyCPGenRandom( IN HCRYPTPROV hProv, IN DWORD cbLen, OUT LPBYTE pbBuffer); extern BOOL WINAPI MyCPGetUserKey( IN HCRYPTPROV hProv, IN DWORD dwKeySpec, OUT HCRYPTKEY *phUserKey); extern BOOL WINAPI MyCPDuplicateHash( IN HCRYPTPROV hProv, IN HCRYPTHASH hHash, IN LPDWORD pdwReserved, IN DWORD dwFlags, OUT HCRYPTHASH *phHash); extern BOOL WINAPI MyCPDuplicateKey( IN HCRYPTPROV hProv, IN HCRYPTKEY hKey, IN LPDWORD pdwReserved, IN DWORD dwFlags, OUT HCRYPTKEY *phKey); #ifdef __cplusplus } #endif #endif