#ifndef _WINCRYPT_H #define _WINCRYPT_H #ifdef __cplusplus extern "C" { #endif #define MS_DEF_PROV_A "Microsoft Base Cryptographic Provider v1.0" #define MS_DEF_PROV_W L"Microsoft Base Cryptographic Provider v1.0" #define GET_ALG_CLASS(x) (x&57344) #define GET_ALG_TYPE(x) (x&7680) #define GET_ALG_SID(x) (x&511) #define ALG_CLASS_ANY 0 #define ALG_CLASS_SIGNATURE 8192 #define ALG_CLASS_MSG_ENCRYPT 16384 #define ALG_CLASS_DATA_ENCRYPT 24576 #define ALG_CLASS_HASH 32768 #define ALG_CLASS_KEY_EXCHANGE 40960 #define ALG_TYPE_ANY 0 #define ALG_TYPE_DSS 512 #define ALG_TYPE_RSA 1024 #define ALG_TYPE_BLOCK 1536 #define ALG_TYPE_STREAM 2048 #define ALG_SID_ANY 0 #define ALG_SID_RSA_ANY 0 #define ALG_SID_RSA_PKCS 1 #define ALG_SID_RSA_MSATWORK 2 #define ALG_SID_RSA_ENTRUST 3 #define ALG_SID_RSA_PGP 4 #define ALG_SID_DSS_ANY 0 #define ALG_SID_DSS_PKCS 1 #define ALG_SID_DSS_DMS 2 #define ALG_SID_DES 1 #define ALG_SID_RC2 2 #define ALG_SID_RC4 1 #define ALG_SID_SEAL 2 #define ALG_SID_MD2 1 #define ALG_SID_MD4 2 #define ALG_SID_MD5 3 #define ALG_SID_SHA 4 #define ALG_SID_MAC 5 #define ALG_SID_EXAMPLE 80 #define CALG_MD2 (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_MD2) #define CALG_MD4 (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_MD4) #define CALG_MD5 (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_MD5) #define CALG_SHA (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_SHA) #define CALG_MAC (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_MAC) #define CALG_RSA_SIGN (ALG_CLASS_SIGNATURE|ALG_TYPE_RSA|ALG_SID_RSA_ANY) #define CALG_DSS_SIGN (ALG_CLASS_SIGNATURE|ALG_TYPE_DSS|ALG_SID_DSS_ANY) #define CALG_RSA_KEYX (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_RSA|ALG_SID_RSA_ANY) #define CALG_DES (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_DES) #define CALG_RC2 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_RC2) #define CALG_RC4 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_RC4) #define CALG_SEAL (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_SEAL) #define CRYPT_VERIFYCONTEXT 0xF0000000 #define CRYPT_NEWKEYSET 8 #define CRYPT_DELETEKEYSET 16 #define CRYPT_MACHINE_KEYSET 32 #define CRYPT_EXPORTABLE 1 #define CRYPT_USER_PROTECTED 2 #define CRYPT_CREATE_SALT 4 #define CRYPT_UPDATE_KEY 8 #define SIMPLEBLOB 1 #define PUBLICKEYBLOB 6 #define AT_KEYEXCHANGE 1 #define AT_SIGNATURE 2 #define CRYPT_USERDATA 1 #define KP_IV 1 #define KP_SALT 2 #define KP_PADDING 3 #define KP_MODE 4 #define KP_MODE_BITS 5 #define KP_PERMISSIONS 6 #define KP_ALGID 7 #define KP_BLOCKLEN 8 #define PKCS5_PADDING 1 #define CRYPT_MODE_CBC 1 #define CRYPT_MODE_ECB 2 #define CRYPT_MODE_OFB 3 #define CRYPT_MODE_CFB 4 #define CRYPT_MODE_CTS 5 #define CRYPT_ENCRYPT 1 #define CRYPT_DECRYPT 2 #define CRYPT_EXPORT 4 #define CRYPT_READ 8 #define CRYPT_WRITE 16 #define CRYPT_MAC 32 #define HP_ALGID 1 #define HP_HASHVAL 2 #define HP_HASHSIZE 4 #define CRYPT_FAILED FALSE #define CRYPT_SUCCEED TRUE #define RCRYPT_SUCCEEDED(r) ((r)==CRYPT_SUCCEED) #define RCRYPT_FAILED(r) ((r)==CRYPT_FAILED) #define PP_ENUMALGS 1 #define PP_ENUMCONTAINERS 2 #define PP_IMPTYPE 3 #define PP_NAME 4 #define PP_VERSION 5 #define PP_CONTAINER 6 #define CRYPT_FIRST 1 #define CRYPT_NEXT 2 #define CRYPT_IMPL_HARDWARE 1 #define CRYPT_IMPL_SOFTWARE 2 #define CRYPT_IMPL_MIXED 3 #define CRYPT_IMPL_UNKNOWN 4 #define PROV_RSA_FULL 1 #define PROV_RSA_SIG 2 #define PROV_DSS 3 #define PROV_FORTEZZA 4 #define PROV_MS_MAIL 5 #define PROV_SSL 6 #define PROV_STT_MER 7 #define PROV_STT_ACQ 8 #define PROV_STT_BRND 9 #define PROV_STT_ROOT 10 #define PROV_STT_ISS 11 #define MAXUIDLEN 64 #define CUR_BLOB_VERSION 2 typedef UINT ALG_ID; typedef struct _VTableProvStruc {FARPROC FuncVerifyImage;} VTableProvStruc,*PVTableProvStruc; typedef ULONG HCRYPTPROV; typedef ULONG HCRYPTKEY; typedef ULONG HCRYPTHASH; typedef struct _PROV_ENUMALGS { ALG_ID aiAlgid; DWORD dwBitLen; DWORD dwNameLen; CHAR szName[20]; } PROV_ENUMALGS; typedef struct _PUBLICKEYSTRUC { BYTE bType; BYTE bVersion; WORD reserved; ALG_ID aiKeyAlg; } PUBLICKEYSTRUC; typedef struct _RSAPUBKEY { DWORD magic; DWORD bitlen; DWORD pubexp; } RSAPUBKEY; BOOL WINAPI CryptAcquireContextA(HCRYPTPROV*,LPCSTR,LPCSTR,DWORD,DWORD); BOOL WINAPI CryptAcquireContextW(HCRYPTPROV*,LPCWSTR,LPCWSTR,DWORD,DWORD); BOOL WINAPI CryptReleaseContext(HCRYPTPROV,DWORD); BOOL WINAPI CryptGenKey(HCRYPTPROV,ALG_ID,DWORD,HCRYPTKEY*); BOOL WINAPI CryptDeriveKey(HCRYPTPROV,ALG_ID,HCRYPTHASH,DWORD,HCRYPTKEY*); BOOL WINAPI CryptDestroyKey(HCRYPTKEY); BOOL WINAPI CryptSetKeyParam(HCRYPTKEY,DWORD,PBYTE,DWORD); BOOL WINAPI CryptGetKeyParam(HCRYPTKEY,DWORD,PBYTE,PDWORD,DWORD); BOOL WINAPI CryptSetHashParam(HCRYPTHASH,DWORD,PBYTE,DWORD); BOOL WINAPI CryptGetHashParam(HCRYPTHASH,DWORD,PBYTE,PDWORD,DWORD); BOOL WINAPI CryptSetProvParam(HCRYPTPROV,DWORD,PBYTE,DWORD); BOOL WINAPI CryptGetProvParam(HCRYPTPROV,DWORD,PBYTE,PDWORD,DWORD); BOOL WINAPI CryptGenRandom(HCRYPTPROV,DWORD,PBYTE); BOOL WINAPI CryptGetUserKey(HCRYPTPROV,DWORD,HCRYPTKEY*); BOOL WINAPI CryptExportKey(HCRYPTKEY,HCRYPTKEY,DWORD,DWORD,PBYTE,PDWORD); BOOL WINAPI CryptImportKey(HCRYPTPROV,PBYTE,DWORD,HCRYPTKEY,DWORD,HCRYPTKEY*); BOOL WINAPI CryptEncrypt(HCRYPTKEY,HCRYPTHASH,BOOL,DWORD,PBYTE,PDWORD,DWORD); BOOL WINAPI CryptDecrypt(HCRYPTKEY,HCRYPTHASH,BOOL,DWORD,PBYTE,PDWORD); BOOL WINAPI CryptCreateHash(HCRYPTPROV,ALG_ID,HCRYPTKEY,DWORD,HCRYPTHASH*); BOOL WINAPI CryptHashData(HCRYPTHASH,PBYTE,DWORD,DWORD); BOOL WINAPI CryptHashSessionKey(HCRYPTHASH,HCRYPTKEY,DWORD); BOOL WINAPI CryptGetHashValue(HCRYPTHASH,DWORD,PBYTE,PDWORD); BOOL WINAPI CryptDestroyHash(HCRYPTHASH); BOOL WINAPI CryptSignHashA(HCRYPTHASH,DWORD,LPCSTR,DWORD,PBYTE,PDWORD); BOOL WINAPI CryptSignHashW(HCRYPTHASH,DWORD,LPCWSTR,DWORD,PBYTE,PDWORD); BOOL WINAPI CryptVerifySignatureA(HCRYPTHASH,PBYTE,DWORD,HCRYPTKEY,LPCSTR,DWORD); BOOL WINAPI CryptVerifySignatureW(HCRYPTHASH,PBYTE,DWORD,HCRYPTKEY,LPCWSTR,DWORD); BOOL WINAPI CryptSetProviderA(LPCSTR,DWORD); BOOL WINAPI CryptSetProviderW(LPCWSTR,DWORD); #ifdef UNICODE #define CryptAcquireContext CryptAcquireContextW #define CryptSignHash CryptSignHashW #define CryptVerifySignature CryptVerifySignatureW #define CryptSetProvider CryptSetProviderW #define MS_DEF_PROV MS_DEF_PROV_W #else #define CryptAcquireContext CryptAcquireContextA #define CryptSignHash CryptSignHashA #define CryptVerifySignature CryptVerifySignatureA #define CryptSetProvider CryptSetProviderA #define MS_DEF_PROV MS_DEF_PROV_A #endif #ifdef __cplusplus } #endif #endif