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