home *** CD-ROM | disk | FTP | other *** search
/ Chip 1997 April / Chip_1997-04_cd.bin / prezent / cb / data.z / WINCRYPT.H < prev    next >
C/C++ Source or Header  |  1997-01-16  |  13KB  |  562 lines

  1. //+---------------------------------------------------------------------------
  2. //
  3. //  Microsoft Windows
  4. //  Copyright (C) Microsoft Corporation, 1992 - 1996.
  5. //
  6. //  File:       wincrypt.h
  7. //
  8. //  Contents:   Cryptographic API Prototypes and Definitions
  9. //
  10. //----------------------------------------------------------------------------
  11.  
  12. #ifndef __WINCRYPT_H__
  13. #define __WINCRYPT_H__
  14.  
  15. #if(_WIN32_WINNT >= 0x0400)
  16.  
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20.  
  21. #ifdef __BORLANDC__
  22.   #include <pshpack8.h>
  23. #endif
  24.  
  25. //
  26. // Algorithm IDs and Flags
  27. //
  28.  
  29. // ALG_ID crackers
  30. #define GET_ALG_CLASS(x)                (x & (7 << 13))
  31. #define GET_ALG_TYPE(x)                 (x & (15 << 9))
  32. #define GET_ALG_SID(x)                  (x & (511))
  33.  
  34. // Algorithm classes
  35. #define ALG_CLASS_ANY                   (0)
  36. #define ALG_CLASS_SIGNATURE             (1 << 13)
  37. #define ALG_CLASS_MSG_ENCRYPT           (2 << 13)
  38. #define ALG_CLASS_DATA_ENCRYPT          (3 << 13)
  39. #define ALG_CLASS_HASH                  (4 << 13)
  40. #define ALG_CLASS_KEY_EXCHANGE          (5 << 13)
  41.  
  42. // Algorithm types
  43. #define ALG_TYPE_ANY                    (0)
  44. #define ALG_TYPE_DSS                    (1 << 9)
  45. #define ALG_TYPE_RSA                    (2 << 9)
  46. #define ALG_TYPE_BLOCK                  (3 << 9)
  47. #define ALG_TYPE_STREAM                 (4 << 9)
  48.  
  49. // Generic sub-ids
  50. #define ALG_SID_ANY                     (0)
  51.  
  52. // Some RSA sub-ids
  53. #define ALG_SID_RSA_ANY                 0
  54. #define ALG_SID_RSA_PKCS                1
  55. #define ALG_SID_RSA_MSATWORK            2
  56. #define ALG_SID_RSA_ENTRUST             3
  57. #define ALG_SID_RSA_PGP                 4
  58.  
  59. // Some DSS sub-ids
  60. //
  61. #define ALG_SID_DSS_ANY                 0
  62. #define ALG_SID_DSS_PKCS                1
  63. #define ALG_SID_DSS_DMS                 2
  64.  
  65. // Block cipher sub ids
  66. // DES sub_ids
  67. #define ALG_SID_DES                     1
  68. #define ALG_SID_3DES            3
  69. #define ALG_SID_DESX            4
  70. #define ALG_SID_IDEA            5
  71. #define ALG_SID_CAST            6
  72. #define ALG_SID_SAFERSK64        7
  73. #define ALD_SID_SAFERSK128        8
  74.  
  75. // KP_MODE
  76. #define CRYPT_MODE_CBCI            6    // ANSI CBC Interleaved
  77. #define CRYPT_MODE_CFBP            7    // ANSI CFB Pipelined
  78. #define CRYPT_MODE_OFBP            8    // ANSI OFB Pipelined
  79. #define CRYPT_MODE_CBCOFM        9    // ANSI CBC + OF Masking
  80. #define CRYPT_MODE_CBCOFMI        10    // ANSI CBC + OFM Interleaved
  81.  
  82. // RC2 sub-ids
  83. #define ALG_SID_RC2                     2
  84.  
  85. // Stream cipher sub-ids
  86. #define ALG_SID_RC4                     1
  87. #define ALG_SID_SEAL                    2
  88.  
  89. // Hash sub ids
  90. #define ALG_SID_MD2                     1
  91. #define ALG_SID_MD4                     2
  92. #define ALG_SID_MD5                     3
  93. #define ALG_SID_SHA                     4
  94. #define ALG_SID_MAC                     5
  95. #define ALG_SID_RIPEMD            6
  96. #define ALG_SID_RIPEMD160        7
  97. #define ALG_SID_SSL3SHAMD5        8
  98.  
  99.  
  100. // Our silly example sub-id
  101. #define ALG_SID_EXAMPLE                 80
  102.  
  103. #ifndef ALGIDDEF
  104. #define ALGIDDEF
  105. typedef unsigned int ALG_ID;
  106. #endif
  107.  
  108. // algorithm identifier definitions
  109. #define CALG_MD2        (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD2)
  110. #define CALG_MD4        (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD4)
  111. #define CALG_MD5        (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD5)
  112. #define CALG_SHA        (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA)
  113. #define CALG_MAC        (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MAC)
  114. #define CALG_RSA_SIGN   (ALG_CLASS_SIGNATURE | ALG_TYPE_RSA | ALG_SID_RSA_ANY)
  115. #define CALG_DSS_SIGN   (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_DSS_ANY)
  116. #define CALG_RSA_KEYX   (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_RSA|ALG_SID_RSA_ANY)
  117. #define CALG_DES        (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_DES)
  118. #define CALG_RC2        (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_RC2)
  119. #define CALG_RC4        (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_RC4)
  120. #define CALG_SEAL       (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_STREAM|ALG_SID_SEAL)
  121.  
  122. typedef struct _VTableProvStruc {
  123.     DWORD   Version;
  124.     FARPROC FuncVerifyImage;
  125.     FARPROC FuncReturnhWnd;
  126. } VTableProvStruc, *PVTableProvStruc;
  127.  
  128. typedef unsigned long HCRYPTPROV;
  129. typedef unsigned long HCRYPTKEY;
  130. typedef unsigned long HCRYPTHASH;
  131.  
  132. // dwFlags definitions for CryptAquireContext
  133. #define CRYPT_VERIFYCONTEXT     0xF0000000
  134. #define CRYPT_NEWKEYSET         0x8
  135. #define CRYPT_DELETEKEYSET      0x10
  136.  
  137. // dwFlag definitions for CryptGenKey
  138. #define CRYPT_EXPORTABLE        0x00000001
  139. #define CRYPT_USER_PROTECTED    0x00000002
  140. #define CRYPT_CREATE_SALT       0x00000004
  141. #define CRYPT_UPDATE_KEY        0x00000008
  142.  
  143. // exported key blob definitions
  144. #define SIMPLEBLOB              0x1
  145. #define PUBLICKEYBLOB           0x6
  146. #define PRIVATEKEYBLOB          0x7
  147.  
  148. #define AT_KEYEXCHANGE          1
  149. #define AT_SIGNATURE            2
  150.  
  151. #define CRYPT_USERDATA          1
  152.  
  153. // dwParam
  154. #define KP_IV                   1       // Initialization vector
  155. #define KP_SALT                 2       // Salt value
  156. #define KP_PADDING              3       // Padding values
  157. #define KP_MODE                 4       // Mode of the cipher
  158. #define KP_MODE_BITS            5       // Number of bits to feedback
  159. #define KP_PERMISSIONS          6       // Key permissions DWORD
  160. #define KP_ALGID                7       // Key algorithm
  161. #define KP_BLOCKLEN             8       // Block size of the cipher
  162.  
  163. // KP_PADDING
  164. #define PKCS5_PADDING           1       // PKCS 5 (sec 6.2) padding method
  165.  
  166. // KP_MODE
  167. #define CRYPT_MODE_CBC          1       // Cipher block chaining
  168. #define CRYPT_MODE_ECB          2       // Electronic code book
  169. #define CRYPT_MODE_OFB          3       // Output feedback mode
  170. #define CRYPT_MODE_CFB          4       // Cipher feedback mode
  171. #define CRYPT_MODE_CTS          5       // Ciphertext stealing mode
  172.  
  173. // KP_PERMISSIONS
  174. #define CRYPT_ENCRYPT           0x0001  // Allow encryption
  175. #define CRYPT_DECRYPT           0x0002  // Allow decryption
  176. #define CRYPT_EXPORT            0x0004  // Allow key to be exported
  177. #define CRYPT_READ              0x0008  // Allow parameters to be read
  178. #define CRYPT_WRITE             0x0010  // Allow parameters to be set
  179. #define CRYPT_MAC               0x0020  // Allow MACs to be used with key
  180.  
  181. #define HP_ALGID                0x0001  // Hash algorithm
  182. #define HP_HASHVAL              0x0002  // Hash value
  183. #define HP_HASHSIZE             0x0004  // Hash value size
  184.  
  185.  
  186. #define CRYPT_FAILED            FALSE
  187. #define CRYPT_SUCCEED           TRUE
  188.  
  189. #define RCRYPT_SUCCEEDED(rt)     ((rt) == CRYPT_SUCCEED)
  190. #define RCRYPT_FAILED(rt)        ((rt) == CRYPT_FAILED)
  191.  
  192. //
  193. // CryptGetProvParam
  194. //
  195. #define PP_ENUMALGS             1
  196. #define PP_ENUMCONTAINERS       2
  197. #define PP_IMPTYPE              3
  198. #define PP_NAME                 4
  199. #define PP_VERSION              5
  200. #define PP_CONTAINER            6
  201.  
  202. #define CRYPT_FIRST             1
  203. #define CRYPT_NEXT              2
  204.  
  205. #define CRYPT_IMPL_HARDWARE     1
  206. #define CRYPT_IMPL_SOFTWARE     2
  207. #define CRYPT_IMPL_MIXED        3
  208. #define CRYPT_IMPL_UNKNOWN      4
  209.  
  210. //
  211. // CryptSetProvParam
  212. //
  213. #define PP_CLIENT_HWND          1
  214.  
  215. #define PROV_RSA_FULL           1
  216. #define PROV_RSA_SIG            2
  217. #define PROV_DSS                3
  218. #define PROV_FORTEZZA           4
  219. #define PROV_MS_EXCHANGE        5
  220. #define PROV_SSL                6
  221.  
  222. //
  223. //STT defined Providers
  224. //
  225. #define PROV_STT_MER                    7
  226. #define PROV_STT_ACQ                    8
  227. #define PROV_STT_BRND                   9
  228. #define PROV_STT_ROOT                   10
  229. #define PROV_STT_ISS                    11
  230.  
  231.  
  232. #define MS_DEF_PROV_A       "Microsoft Base Cryptographic Provider v1.0"
  233. #define MS_DEF_PROV_W       L"Microsoft Base Cryptographic Provider v1.0"
  234. #ifdef UNICODE
  235. #define MS_DEF_PROV         MS_DEF_PROV_W
  236. #else
  237. #define MS_DEF_PROV         MS_DEF_PROV_A
  238. #endif
  239.  
  240. #define MAXUIDLEN               64
  241.  
  242. #define CUR_BLOB_VERSION        2
  243.  
  244. typedef struct _PROV_ENUMALGS {
  245.     ALG_ID    aiAlgid;
  246.     DWORD     dwBitLen;
  247.     DWORD     dwNameLen;
  248.     CHAR      szName[20];
  249. } PROV_ENUMALGS;
  250.  
  251.  
  252. typedef struct _PUBLICKEYSTRUC {
  253.         BYTE    bType;
  254.         BYTE    bVersion;
  255.         WORD    reserved;
  256.         ALG_ID  aiKeyAlg;
  257. } PUBLICKEYSTRUC;
  258.  
  259. typedef struct _RSAPUBKEY {
  260.         DWORD   magic;                  // Has to be RSA1
  261.         DWORD   bitlen;                 // # of bits in modulus
  262.         DWORD   pubexp;                 // public exponent
  263.                                         // Modulus data follows
  264. } RSAPUBKEY;
  265.  
  266.  
  267.  
  268. WINADVAPI
  269. BOOL
  270. WINAPI
  271. CryptAcquireContextA(
  272.     HCRYPTPROV *phProv,
  273.     LPCSTR pszContainer,
  274.     LPCSTR pszProvider,
  275.     DWORD dwProvType,
  276.     DWORD dwFlags);
  277. WINADVAPI
  278. BOOL
  279. WINAPI
  280. CryptAcquireContextW(
  281.     HCRYPTPROV *phProv,
  282.     LPCWSTR pszContainer,
  283.     LPCWSTR pszProvider,
  284.     DWORD dwProvType,
  285.     DWORD dwFlags);
  286. #ifdef UNICODE
  287. #define CryptAcquireContext  CryptAcquireContextW
  288. #else
  289. #define CryptAcquireContext  CryptAcquireContextA
  290. #endif // !UNICODE
  291.  
  292.  
  293. WINADVAPI
  294. BOOL
  295. WINAPI
  296. CryptReleaseContext(
  297.     HCRYPTPROV hProv,
  298.     DWORD dwFlags);
  299.  
  300.  
  301. WINADVAPI
  302. BOOL
  303. WINAPI
  304. CryptGenKey(
  305.     HCRYPTPROV hProv,
  306.     ALG_ID Algid,
  307.     DWORD dwFlags,
  308.     HCRYPTKEY *phKey);
  309.  
  310. WINADVAPI
  311. BOOL
  312. WINAPI
  313. CryptDeriveKey(
  314.     HCRYPTPROV hProv,
  315.     ALG_ID Algid,
  316.     HCRYPTHASH hBaseData,
  317.     DWORD dwFlags,
  318.     HCRYPTKEY *phKey);
  319.  
  320.  
  321. WINADVAPI
  322. BOOL
  323. WINAPI
  324. CryptDestroyKey(
  325.     HCRYPTKEY hKey);
  326.  
  327. WINADVAPI
  328. BOOL
  329. WINAPI
  330. CryptSetKeyParam(
  331.     HCRYPTKEY hKey,
  332.     DWORD dwParam,
  333.     BYTE *pbData,
  334.     DWORD dwFlags);
  335.  
  336. WINADVAPI
  337. BOOL
  338. WINAPI
  339. CryptGetKeyParam(
  340.     HCRYPTKEY hKey,
  341.     DWORD dwParam,
  342.     BYTE *pbData,
  343.     DWORD *pdwDataLen,
  344.     DWORD dwFlags);
  345.  
  346. WINADVAPI
  347. BOOL
  348. WINAPI
  349. CryptSetHashParam(
  350.     HCRYPTHASH hHash,
  351.     DWORD dwParam,
  352.     BYTE *pbData,
  353.     DWORD dwFlags);
  354.  
  355. WINADVAPI
  356. BOOL
  357. WINAPI
  358. CryptGetHashParam(
  359.     HCRYPTHASH hHash,
  360.     DWORD dwParam,
  361.     BYTE *pbData,
  362.     DWORD *pdwDataLen,
  363.     DWORD dwFlags);
  364.  
  365. WINADVAPI
  366. BOOL
  367. WINAPI
  368. CryptSetProvParam(
  369.     HCRYPTPROV hProv,
  370.     DWORD dwParam,
  371.     BYTE *pbData,
  372.     DWORD dwFlags);
  373.  
  374. WINADVAPI
  375. BOOL
  376. WINAPI
  377. CryptGetProvParam(
  378.     HCRYPTPROV hProv,
  379.     DWORD dwParam,
  380.     BYTE *pbData,
  381.     DWORD *pdwDataLen,
  382.     DWORD dwFlags);
  383.  
  384. WINADVAPI
  385. BOOL
  386. WINAPI
  387. CryptGenRandom(
  388.     HCRYPTPROV hProv,
  389.     DWORD dwLen,
  390.     BYTE *pbBuffer);
  391.  
  392. WINADVAPI
  393. BOOL
  394. WINAPI
  395. CryptGetUserKey(
  396.     HCRYPTPROV hProv,
  397.     DWORD dwKeySpec,
  398.     HCRYPTKEY *phUserKey);
  399.  
  400. WINADVAPI
  401. BOOL
  402. WINAPI
  403. CryptExportKey(
  404.     HCRYPTKEY hKey,
  405.     HCRYPTKEY hExpKey,
  406.     DWORD dwBlobType,
  407.     DWORD dwFlags,
  408.     BYTE *pbData,
  409.     DWORD *pdwDataLen);
  410.  
  411. WINADVAPI
  412. BOOL
  413. WINAPI
  414. CryptImportKey(
  415.     HCRYPTPROV hProv,
  416.     CONST BYTE *pbData,
  417.     DWORD dwDataLen,
  418.     HCRYPTKEY hPubKey,
  419.     DWORD dwFlags,
  420.     HCRYPTKEY *phKey);
  421.  
  422. WINADVAPI
  423. BOOL
  424. WINAPI
  425. CryptEncrypt(
  426.     HCRYPTKEY hKey,
  427.     HCRYPTHASH hHash,
  428.     BOOL Final,
  429.     DWORD dwFlags,
  430.     BYTE *pbData,
  431.     DWORD *pdwDataLen,
  432.     DWORD dwBufLen);
  433.  
  434. WINADVAPI
  435. BOOL
  436. WINAPI
  437. CryptDecrypt(
  438.     HCRYPTKEY hKey,
  439.     HCRYPTHASH hHash,
  440.     BOOL Final,
  441.     DWORD dwFlags,
  442.     BYTE *pbData,
  443.     DWORD *pdwDataLen);
  444.  
  445. WINADVAPI
  446. BOOL
  447. WINAPI
  448. CryptCreateHash(
  449.     HCRYPTPROV hProv,
  450.     ALG_ID Algid,
  451.     HCRYPTKEY hKey,
  452.     DWORD dwFlags,
  453.     HCRYPTHASH *phHash);
  454.  
  455. WINADVAPI
  456. BOOL
  457. WINAPI
  458. CryptHashData(
  459.     HCRYPTHASH hHash,
  460.     CONST BYTE *pbData,
  461.     DWORD dwDataLen,
  462.     DWORD dwFlags);
  463.  
  464. WINADVAPI
  465. BOOL
  466. WINAPI
  467. CryptHashSessionKey(
  468.     HCRYPTHASH hHash,
  469.     HCRYPTKEY hKey,
  470.     DWORD dwFlags);
  471.  
  472. WINADVAPI
  473. BOOL
  474. WINAPI
  475. CryptDestroyHash(
  476.     HCRYPTHASH hHash);
  477.  
  478. WINADVAPI
  479. BOOL
  480. WINAPI
  481. CryptSignHashA(
  482.     HCRYPTHASH hHash,
  483.     DWORD dwKeySpec,
  484.     LPCSTR sDescription,
  485.     DWORD dwFlags,
  486.     BYTE *pbSignature,
  487.     DWORD *pdwSigLen);
  488. WINADVAPI
  489. BOOL
  490. WINAPI
  491. CryptSignHashW(
  492.     HCRYPTHASH hHash,
  493.     DWORD dwKeySpec,
  494.     LPCWSTR sDescription,
  495.     DWORD dwFlags,
  496.     BYTE *pbSignature,
  497.     DWORD *pdwSigLen);
  498. #ifdef UNICODE
  499. #define CryptSignHash  CryptSignHashW
  500. #else
  501. #define CryptSignHash  CryptSignHashA
  502. #endif // !UNICODE
  503.  
  504. WINADVAPI
  505. BOOL
  506. WINAPI
  507. CryptVerifySignatureA(
  508.     HCRYPTHASH hHash,
  509.     CONST BYTE *pbSignature,
  510.     DWORD dwSigLen,
  511.     HCRYPTKEY hPubKey,
  512.     LPCSTR sDescription,
  513.     DWORD dwFlags);
  514. WINADVAPI
  515. BOOL
  516. WINAPI
  517. CryptVerifySignatureW(
  518.     HCRYPTHASH hHash,
  519.     CONST BYTE *pbSignature,
  520.     DWORD dwSigLen,
  521.     HCRYPTKEY hPubKey,
  522.     LPCWSTR sDescription,
  523.     DWORD dwFlags);
  524. #ifdef UNICODE
  525. #define CryptVerifySignature  CryptVerifySignatureW
  526. #else
  527. #define CryptVerifySignature  CryptVerifySignatureA
  528. #endif // !UNICODE
  529.  
  530. WINADVAPI
  531. BOOL
  532. WINAPI
  533. CryptSetProviderA(
  534.     LPCSTR pszProvName,
  535.     DWORD dwProvType);
  536. WINADVAPI
  537. BOOL
  538. WINAPI
  539. CryptSetProviderW(
  540.     LPCWSTR pszProvName,
  541.     DWORD dwProvType);
  542. #ifdef UNICODE
  543. #define CryptSetProvider  CryptSetProviderW
  544. #else
  545. #define CryptSetProvider  CryptSetProviderA
  546. #endif // !UNICODE
  547.  
  548.  
  549.  
  550. #ifdef __BORLANDC__
  551.   #include <poppack.h>
  552. #endif
  553.  
  554.  
  555. #ifdef __cplusplus
  556. }       // Balance extern "C" above
  557. #endif
  558.  
  559. #endif /* _WIN32_WINNT >= 0x0400 */
  560.  
  561. #endif // __WINCRYPT_H__
  562.