SChannel.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:21k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //+---------------------------------------------------------------------------
  2. //
  3. //  Microsoft Windows
  4. //  Copyright (C) Microsoft Corporation, 1992-1999.
  5. //
  6. //  File:       schannel.h
  7. //
  8. //  Contents:   Public Definitions for SCHANNEL Security Provider
  9. //
  10. //  Classes:
  11. //
  12. //  Functions:
  13. //
  14. //----------------------------------------------------------------------------
  15. #ifndef __SCHANNEL_H__
  16. #define __SCHANNEL_H__
  17. #if _MSC_VER > 1000
  18. #pragma once
  19. #endif
  20. #include <wincrypt.h>
  21. //
  22. // Security package names.
  23. //
  24. #define UNISP_NAME_A    "Microsoft Unified Security Protocol Provider"
  25. #define UNISP_NAME_W    L"Microsoft Unified Security Protocol Provider"
  26. #define SSL2SP_NAME_A    "Microsoft SSL 2.0"
  27. #define SSL2SP_NAME_W    L"Microsoft SSL 2.0"
  28. #define SSL3SP_NAME_A    "Microsoft SSL 3.0"
  29. #define SSL3SP_NAME_W    L"Microsoft SSL 3.0"
  30. #define TLS1SP_NAME_A    "Microsoft TLS 1.0"
  31. #define TLS1SP_NAME_W    L"Microsoft TLS 1.0"
  32. #define PCT1SP_NAME_A    "Microsoft PCT 1.0"
  33. #define PCT1SP_NAME_W    L"Microsoft PCT 1.0"
  34. #define SCHANNEL_NAME_A  "Schannel"
  35. #define SCHANNEL_NAME_W  L"Schannel"
  36. #ifdef UNICODE
  37. #define UNISP_NAME  UNISP_NAME_W
  38. #define PCT1SP_NAME  PCT1SP_NAME_W
  39. #define SSL2SP_NAME  SSL2SP_NAME_W
  40. #define SSL3SP_NAME  SSL3SP_NAME_W
  41. #define TLS1SP_NAME  TLS1SP_NAME_W
  42. #define SCHANNEL_NAME  SCHANNEL_NAME_W
  43. #else
  44. #define UNISP_NAME  UNISP_NAME_A
  45. #define PCT1SP_NAME  PCT1SP_NAME_A
  46. #define SSL2SP_NAME  SSL2SP_NAME_A
  47. #define SSL3SP_NAME  SSL3SP_NAME_A
  48. #define TLS1SP_NAME  TLS1SP_NAME_A
  49. #define SCHANNEL_NAME  SCHANNEL_NAME_A
  50. #endif
  51. //
  52. // RPC constants.
  53. //
  54. #define UNISP_RPC_ID    14
  55. //
  56. // QueryContextAttributes/QueryCredentialsAttribute extensions
  57. //
  58. #define SECPKG_ATTR_ISSUER_LIST          0x50   // (OBSOLETE) returns SecPkgContext_IssuerListInfo
  59. #define SECPKG_ATTR_REMOTE_CRED          0x51   // (OBSOLETE) returns SecPkgContext_RemoteCredentialInfo
  60. #define SECPKG_ATTR_LOCAL_CRED           0x52   // (OBSOLETE) returns SecPkgContext_LocalCredentialInfo
  61. #define SECPKG_ATTR_REMOTE_CERT_CONTEXT  0x53   // returns PCCERT_CONTEXT
  62. #define SECPKG_ATTR_LOCAL_CERT_CONTEXT   0x54   // returns PCCERT_CONTEXT
  63. #define SECPKG_ATTR_ROOT_STORE           0x55   // returns HCERTCONTEXT to the root store
  64. #define SECPKG_ATTR_SUPPORTED_ALGS       0x56   // returns SecPkgCred_SupportedAlgs
  65. #define SECPKG_ATTR_CIPHER_STRENGTHS     0x57   // returns SecPkgCred_CipherStrengths
  66. #define SECPKG_ATTR_SUPPORTED_PROTOCOLS  0x58   // returns SecPkgCred_SupportedProtocols
  67. #define SECPKG_ATTR_ISSUER_LIST_EX       0x59   // returns SecPkgContext_IssuerListInfoEx
  68. #define SECPKG_ATTR_CONNECTION_INFO      0x5a   // returns SecPkgContext_ConnectionInfo
  69. #define SECPKG_ATTR_EAP_KEY_BLOCK        0x5b   // returns SecPkgContext_EapKeyBlock
  70. #define SECPKG_ATTR_MAPPED_CRED_ATTR     0x5c   // returns SecPkgContext_MappedCredAttr
  71. // OBSOLETE - included here for backward compatibility only
  72. typedef struct _SecPkgContext_IssuerListInfo
  73. {
  74.     DWORD   cbIssuerList;
  75.     PBYTE   pIssuerList;
  76. } SecPkgContext_IssuerListInfo, *PSecPkgContext_IssuerListInfo;
  77. // OBSOLETE - included here for backward compatibility only
  78. typedef struct _SecPkgContext_RemoteCredentialInfo
  79. {
  80.     DWORD   cbCertificateChain;
  81.     PBYTE   pbCertificateChain;
  82.     DWORD   cCertificates;
  83.     DWORD   fFlags;
  84.     DWORD   dwBits;
  85. } SecPkgContext_RemoteCredentialInfo, *PSecPkgContext_RemoteCredentialInfo;
  86. typedef SecPkgContext_RemoteCredentialInfo SecPkgContext_RemoteCredenitalInfo, *PSecPkgContext_RemoteCredenitalInfo;
  87. #define RCRED_STATUS_NOCRED          0x00000000
  88. #define RCRED_CRED_EXISTS            0x00000001
  89. #define RCRED_STATUS_UNKNOWN_ISSUER  0x00000002
  90. // OBSOLETE - included here for backward compatibility only
  91. typedef struct _SecPkgContext_LocalCredentialInfo
  92. {
  93.     DWORD   cbCertificateChain;
  94.     PBYTE   pbCertificateChain;
  95.     DWORD   cCertificates;
  96.     DWORD   fFlags;
  97.     DWORD   dwBits;
  98. } SecPkgContext_LocalCredentialInfo, *PSecPkgContext_LocalCredentialInfo;
  99. typedef SecPkgContext_LocalCredentialInfo SecPkgContext_LocalCredenitalInfo, *PSecPkgContext_LocalCredenitalInfo;
  100. #define LCRED_STATUS_NOCRED          0x00000000
  101. #define LCRED_CRED_EXISTS            0x00000001
  102. #define LCRED_STATUS_UNKNOWN_ISSUER  0x00000002
  103. typedef struct _SecPkgCred_SupportedAlgs
  104. {
  105.     DWORD cSupportedAlgs;
  106.     ALG_ID *palgSupportedAlgs;
  107. } SecPkgCred_SupportedAlgs, *PSecPkgCred_SupportedAlgs;
  108. typedef struct _SecPkgCred_CipherStrengths
  109. {
  110.     DWORD       dwMinimumCipherStrength;
  111.     DWORD       dwMaximumCipherStrength;
  112. } SecPkgCred_CipherStrengths, *PSecPkgCred_CipherStrengths;
  113. typedef struct _SecPkgCred_SupportedProtocols
  114. {
  115.     DWORD       grbitProtocol;
  116. } SecPkgCred_SupportedProtocols, *PSecPkgCred_SupportedProtocols;
  117. typedef struct _SecPkgContext_IssuerListInfoEx
  118. {
  119.     PCERT_NAME_BLOB    aIssuers;
  120.     DWORD            cIssuers;
  121. } SecPkgContext_IssuerListInfoEx, *PSecPkgContext_IssuerListInfoEx;
  122. typedef struct _SecPkgContext_ConnectionInfo
  123. {
  124.     DWORD   dwProtocol;
  125.     ALG_ID  aiCipher;
  126.     DWORD   dwCipherStrength;
  127.     ALG_ID  aiHash;
  128.     DWORD   dwHashStrength;
  129.     ALG_ID  aiExch;
  130.     DWORD   dwExchStrength;
  131. } SecPkgContext_ConnectionInfo, *PSecPkgContext_ConnectionInfo;
  132. typedef struct _SecPkgContext_EapKeyBlock
  133. {
  134.     BYTE    rgbKeys[128];
  135.     BYTE    rgbIVs[64];
  136. } SecPkgContext_EapKeyBlock, *PSecPkgContext_EapKeyBlock;
  137. typedef struct _SecPkgContext_MappedCredAttr
  138. {
  139.     DWORD   dwAttribute;
  140.     PVOID   pvBuffer;
  141. } SecPkgContext_MappedCredAttr, *PSecPkgContext_MappedCredAttr;
  142. //
  143. // Schannel credentials data structure.
  144. //
  145. #define SCH_CRED_V1              0x00000001
  146. #define SCH_CRED_V2              0x00000002  // for legacy code
  147. #define SCH_CRED_VERSION         0x00000002  // for legacy code
  148. #define SCH_CRED_V3              0x00000003  // for legacy code
  149. #define SCHANNEL_CRED_VERSION    0x00000004
  150. struct _HMAPPER;
  151. typedef struct _SCHANNEL_CRED
  152. {
  153.     DWORD           dwVersion;      // always SCHANNEL_CRED_VERSION
  154.     DWORD           cCreds;
  155.     PCCERT_CONTEXT *paCred;
  156.     HCERTSTORE      hRootStore;
  157.     DWORD           cMappers;
  158.     struct _HMAPPER **aphMappers;
  159.     DWORD           cSupportedAlgs;
  160.     ALG_ID *        palgSupportedAlgs;
  161.     DWORD           grbitEnabledProtocols;
  162.     DWORD           dwMinimumCipherStrength;
  163.     DWORD           dwMaximumCipherStrength;
  164.     DWORD           dwSessionLifespan;
  165.     DWORD           dwFlags;
  166.     DWORD           reserved;
  167. } SCHANNEL_CRED, *PSCHANNEL_CRED;
  168. //+-------------------------------------------------------------------------
  169. // Flags for use with SCHANNEL_CRED
  170. //
  171. // SCH_CRED_NO_SYSTEM_MAPPER
  172. //      This flag is intended for use by server applications only. If this
  173. //      flag is set, then schannel does *not* attempt to map received client
  174. //      certificate chains to an NT user account using the built-in system
  175. //      certificate mapper.This flag is ignored by non-NT5 versions of
  176. //      schannel.
  177. //
  178. // SCH_CRED_NO_SERVERNAME_CHECK
  179. //      This flag is intended for use by client applications only. If this
  180. //      flag is set, then when schannel validates the received server
  181. //      certificate chain, is does *not* compare the passed in target name
  182. //      with the subject name embedded in the certificate. This flag is
  183. //      ignored by non-NT5 versions of schannel. This flag is also ignored
  184. //      if the SCH_CRED_MANUAL_CRED_VALIDATION flag is set.
  185. //
  186. // SCH_CRED_MANUAL_CRED_VALIDATION
  187. //      This flag is intended for use by client applications only. If this
  188. //      flag is set, then schannel will *not* automatically attempt to
  189. //      validate the received server certificate chain. This flag is
  190. //      ignored by non-NT5 versions of schannel, but all client applications
  191. //      that wish to validate the certificate chain themselves should
  192. //      specify this flag, so that there's at least a chance they'll run
  193. //      correctly on NT5.
  194. //
  195. // SCH_CRED_NO_DEFAULT_CREDS
  196. //      This flag is intended for use by client applications only. If this
  197. //      flag is set, and the server requests client authentication, then
  198. //      schannel will *not* attempt to automatically acquire a suitable
  199. //      default client certificate chain. This flag is ignored by non-NT5
  200. //      versions of schannel, but all client applications that wish to
  201. //      manually specify their certicate chains should specify this flag,
  202. //      so that there's at least a chance they'll run correctly on NT5.
  203. //
  204. // SCH_CRED_AUTO_CRED_VALIDATION
  205. //      This flag is the opposite of SCH_CRED_MANUAL_CRED_VALIDATION.
  206. //      Conservatively written client applications will always specify one
  207. //      flag or the other.
  208. //
  209. // SCH_CRED_USE_DEFAULT_CREDS
  210. //      This flag is the opposite of SCH_CRED_NO_DEFAULT_CREDS.
  211. //      Conservatively written client applications will always specify one
  212. //      flag or the other.
  213. //
  214. // SCH_CRED_REVOCATION_CHECK_END_CERT
  215. // SCH_CRED_REVOCATION_CHECK_CHAIN
  216. // SCH_CRED_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT
  217. //      These flags specify that when schannel automatically validates a
  218. //      received certificate chain, some or all of the certificates are to
  219. //      be checked for revocation. Only one of these flags may be specified.
  220. //      See the CertGetCertificateChain function. These flags are ignored by
  221. //      non-NT5 versions of schannel.
  222. //
  223. // SCH_CRED_IGNORE_NO_REVOCATION_CHECK
  224. // SCH_CRED_IGNORE_REVOCATION_OFFLINE
  225. //      These flags instruct schannel to ignore the
  226. //      CRYPT_E_NO_REVOCATION_CHECK and CRYPT_E_REVOCATION_OFFLINE errors
  227. //      respectively if they are encountered when attempting to check the
  228. //      revocation status of a received certificate chain. These flags are
  229. //      ignored if none of the above flags are set.
  230. //
  231. //+-------------------------------------------------------------------------
  232. #define SCH_CRED_NO_SYSTEM_MAPPER                    0x00000002
  233. #define SCH_CRED_NO_SERVERNAME_CHECK                 0x00000004
  234. #define SCH_CRED_MANUAL_CRED_VALIDATION              0x00000008
  235. #define SCH_CRED_NO_DEFAULT_CREDS                    0x00000010
  236. #define SCH_CRED_AUTO_CRED_VALIDATION                0x00000020
  237. #define SCH_CRED_USE_DEFAULT_CREDS                   0x00000040
  238. #define SCH_CRED_REVOCATION_CHECK_END_CERT           0x00000100
  239. #define SCH_CRED_REVOCATION_CHECK_CHAIN              0x00000200
  240. #define SCH_CRED_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x00000400
  241. #define SCH_CRED_IGNORE_NO_REVOCATION_CHECK          0x00000800
  242. #define SCH_CRED_IGNORE_REVOCATION_OFFLINE           0x00001000
  243. //
  244. //
  245. // ApplyControlToken PkgParams types
  246. //
  247. // These identifiers are the DWORD types
  248. // to be passed into ApplyControlToken
  249. // through a PkgParams buffer.
  250. #define SCHANNEL_RENEGOTIATE    0   // renegotiate a connection
  251. #define SCHANNEL_SHUTDOWN       1   // gracefully close down a connection
  252. #define SCHANNEL_ALERT          2   // build an error message
  253. // Alert token structure.
  254. typedef struct _SCHANNEL_ALERT_TOKEN
  255. {
  256.     DWORD   dwTokenType;            // SCHANNEL_ALERT
  257.     DWORD   dwAlertType;
  258.     DWORD   dwAlertNumber;
  259. } SCHANNEL_ALERT_TOKEN;
  260. // Alert types.
  261. #define TLS1_ALERT_WARNING              1
  262. #define TLS1_ALERT_FATAL                2
  263. // Alert messages.
  264. #define TLS1_ALERT_CLOSE_NOTIFY         0       // warning
  265. #define TLS1_ALERT_UNEXPECTED_MESSAGE   10      // error
  266. #define TLS1_ALERT_BAD_RECORD_MAC       20      // error
  267. #define TLS1_ALERT_DECRYPTION_FAILED    21      // error
  268. #define TLS1_ALERT_RECORD_OVERFLOW      22      // error
  269. #define TLS1_ALERT_DECOMPRESSION_FAIL   30      // error
  270. #define TLS1_ALERT_HANDSHAKE_FAILURE    40      // error
  271. #define TLS1_ALERT_BAD_CERTIFICATE      42      // warning or error
  272. #define TLS1_ALERT_UNSUPPORTED_CERT     43      // warning or error
  273. #define TLS1_ALERT_CERTIFICATE_REVOKED  44      // warning or error
  274. #define TLS1_ALERT_CERTIFICATE_EXPIRED  45      // warning or error
  275. #define TLS1_ALERT_CERTIFICATE_UNKNOWN  46      // warning or error
  276. #define TLS1_ALERT_ILLEGAL_PARAMETER    47      // error
  277. #define TLS1_ALERT_UNKNOWN_CA           48      // error
  278. #define TLS1_ALERT_ACCESS_DENIED        49      // error
  279. #define TLS1_ALERT_DECODE_ERROR         50      // error
  280. #define TLS1_ALERT_DECRYPT_ERROR        51      // error
  281. #define TLS1_ALERT_EXPORT_RESTRICTION   60      // error
  282. #define TLS1_ALERT_PROTOCOL_VERSION     70      // error
  283. #define TLS1_ALERT_INSUFFIENT_SECURITY  71      // error
  284. #define TLS1_ALERT_INTERNAL_ERROR       80      // error
  285. #define TLS1_ALERT_USER_CANCELED        90      // warning or error
  286. #define TLS1_ALERT_NO_RENEGOTIATATION   100     // warning
  287. //
  288. //
  289. // ADDITIONAL SCHANNEL CERTIFICATE PROPERTIES
  290. //
  291. //
  292. // This property specifies the DER private key data associated with this
  293. // certificate.  It is for use with legacy IIS style private keys.
  294. //
  295. // PBYTE
  296. //
  297. #define CERT_SCHANNEL_IIS_PRIVATE_KEY_PROP_ID  (CERT_FIRST_USER_PROP_ID + 0)
  298. // The password used to crack the private key associated with the certificate.
  299. // It is for use with legacy IIS style private keys.
  300. //
  301. // PBYTE
  302. #define CERT_SCHANNEL_IIS_PASSWORD_PROP_ID  (CERT_FIRST_USER_PROP_ID + 1)
  303. // This is the unique ID of a Server Gated Cryptography certificate associated
  304. // with this certificate.
  305. //
  306. // CRYPT_BIT_BLOB
  307. #define CERT_SCHANNEL_SGC_CERTIFICATE_PROP_ID  (CERT_FIRST_USER_PROP_ID + 2)
  308. //
  309. // Flags for identifying the various different protocols.
  310. //
  311. /* flag/identifiers for protocols we support */
  312. #define SP_PROT_PCT1_SERVER             0x00000001
  313. #define SP_PROT_PCT1_CLIENT             0x00000002
  314. #define SP_PROT_PCT1                    (SP_PROT_PCT1_SERVER | SP_PROT_PCT1_CLIENT)
  315. #define SP_PROT_SSL2_SERVER             0x00000004
  316. #define SP_PROT_SSL2_CLIENT             0x00000008
  317. #define SP_PROT_SSL2                    (SP_PROT_SSL2_SERVER | SP_PROT_SSL2_CLIENT)
  318. #define SP_PROT_SSL3_SERVER             0x00000010
  319. #define SP_PROT_SSL3_CLIENT             0x00000020
  320. #define SP_PROT_SSL3                    (SP_PROT_SSL3_SERVER | SP_PROT_SSL3_CLIENT)
  321. #define SP_PROT_TLS1_SERVER             0x00000040
  322. #define SP_PROT_TLS1_CLIENT             0x00000080
  323. #define SP_PROT_TLS1                    (SP_PROT_TLS1_SERVER | SP_PROT_TLS1_CLIENT)
  324. #define SP_PROT_SSL3TLS1_CLIENTS        (SP_PROT_TLS1_CLIENT | SP_PROT_SSL3_CLIENT)
  325. #define SP_PROT_SSL3TLS1_SERVERS        (SP_PROT_TLS1_SERVER | SP_PROT_SSL3_SERVER)
  326. #define SP_PROT_SSL3TLS1                (SP_PROT_SSL3 | SP_PROT_TLS1)
  327. #define SP_PROT_UNI_SERVER              0x40000000
  328. #define SP_PROT_UNI_CLIENT              0x80000000
  329. #define SP_PROT_UNI                     (SP_PROT_UNI_SERVER | SP_PROT_UNI_CLIENT)
  330. #define SP_PROT_ALL                     0xffffffff
  331. #define SP_PROT_NONE                    0
  332. #define SP_PROT_CLIENTS                 (SP_PROT_PCT1_CLIENT | SP_PROT_SSL2_CLIENT | SP_PROT_SSL3_CLIENT | SP_PROT_UNI_CLIENT | SP_PROT_TLS1_CLIENT)
  333. #define SP_PROT_SERVERS                 (SP_PROT_PCT1_SERVER | SP_PROT_SSL2_SERVER | SP_PROT_SSL3_SERVER | SP_PROT_UNI_SERVER | SP_PROT_TLS1_SERVER)
  334. //
  335. // Helper function used to flush the SSL session cache.
  336. //
  337. typedef BOOL
  338. (* SSL_EMPTY_CACHE_FN_A)(
  339.     LPSTR  pszTargetName,
  340.     DWORD  dwFlags);
  341. BOOL 
  342. SslEmptyCacheA(LPSTR  pszTargetName,
  343.                DWORD  dwFlags);
  344. typedef BOOL
  345. (* SSL_EMPTY_CACHE_FN_W)(
  346.     LPWSTR pszTargetName,
  347.     DWORD  dwFlags);
  348. BOOL 
  349. SslEmptyCacheW(LPWSTR pszTargetName,
  350.                DWORD  dwFlags);
  351. #ifdef UNICODE
  352. #define SSL_EMPTY_CACHE_FN SSL_EMPTY_CACHE_FN_W
  353. #define SslEmptyCache SslEmptyCacheW
  354. #else
  355. #define SSL_EMPTY_CACHE_FN SSL_EMPTY_CACHE_FN_A
  356. #define SslEmptyCache SslEmptyCacheA
  357. #endif
  358. //
  359. //
  360. //  Support for legacy applications
  361. //  NOTE: Do not use the following
  362. //  API's and structures for new code.
  363. //
  364. #define SSLOLD_NAME_A    "Microsoft SSL"
  365. #define SSLOLD_NAME_W    L"Microsoft SSL"
  366. #define PCTOLD_NAME_A    "Microsoft PCT"
  367. #define PCTOLD_NAME_W    L"Microsoft PCT"
  368. #ifdef UNICODE
  369. #define SSLOLD_NAME SSLOLD_NAME_W
  370. #define PCTOLD_NAME PCTOLD_NAME_W
  371. #else
  372. #define SSLOLD_NAME SSLOLD_NAME_A
  373. #define PCTOLD_NAME PCTOLD_NAME_A
  374. #endif
  375. #define NETWORK_DREP    0x00000000
  376. // Structures for compatability with the
  377. // NT 4.0 SP2 / IE 3.0 schannel interface, do
  378. // not use.
  379. typedef struct _SSL_CREDENTIAL_CERTIFICATE {
  380.     DWORD   cbPrivateKey;
  381.     PBYTE   pPrivateKey;
  382.     DWORD   cbCertificate;
  383.     PBYTE   pCertificate;
  384.     PSTR    pszPassword;
  385. } SSL_CREDENTIAL_CERTIFICATE, * PSSL_CREDENTIAL_CERTIFICATE;
  386. // Structures for use with the
  387. // NT 4.0 SP3 Schannel interface,
  388. // do not use.
  389. #define SCHANNEL_SECRET_TYPE_CAPI   0x00000001
  390. #define SCHANNEL_SECRET_PRIVKEY     0x00000002
  391. #define SCH_CRED_X509_CERTCHAIN     0x00000001
  392. #define SCH_CRED_X509_CAPI          0x00000002
  393. #define SCH_CRED_CERT_CONTEXT       0x00000003
  394. struct _HMAPPER;
  395. typedef struct _SCH_CRED
  396. {
  397.     DWORD     dwVersion;                // always SCH_CRED_VERSION.
  398.     DWORD     cCreds;                   // Number of credentials.
  399.     PVOID     *paSecret;                // Array of SCH_CRED_SECRET_* pointers
  400.     PVOID     *paPublic;                // Array of SCH_CRED_PUBLIC_* pointers
  401.     DWORD     cMappers;                 // Number of credential mappers.
  402.     struct _HMAPPER   **aphMappers;     // pointer to an array of pointers to credential mappers
  403. } SCH_CRED, * PSCH_CRED;
  404. // Structures for use with the
  405. // NT 4.0 SP3 Schannel interface,
  406. // do not use.
  407. typedef struct _SCH_CRED_SECRET_CAPI
  408. {
  409.     DWORD           dwType;      // SCHANNEL_SECRET_TYPE_CAPI
  410.     HCRYPTPROV      hProv;       // credential secret information.
  411. } SCH_CRED_SECRET_CAPI, * PSCH_CRED_SECRET_CAPI;
  412. // Structures for use with the
  413. // NT 4.0 SP3 Schannel interface,
  414. // do not use.
  415. typedef struct _SCH_CRED_SECRET_PRIVKEY
  416. {
  417.     DWORD           dwType;       // SCHANNEL_SECRET_PRIVKEY
  418.     PBYTE           pPrivateKey;   // Der encoded private key
  419.     DWORD           cbPrivateKey;
  420.     PSTR            pszPassword;  // Password to crack the private key.
  421. } SCH_CRED_SECRET_PRIVKEY, * PSCH_CRED_SECRET_PRIVKEY;
  422. // Structures for use with the
  423. // NT 4.0 SP3 Schannel interface,
  424. // do not use.
  425. typedef struct _SCH_CRED_PUBLIC_CERTCHAIN
  426. {
  427.     DWORD       dwType;
  428.     DWORD       cbCertChain;
  429.     PBYTE       pCertChain;
  430. } SCH_CRED_PUBLIC_CERTCHAIN, *PSCH_CRED_PUBLIC_CERTCHAIN;
  431. // Structures for use with the
  432. // NT 4.0 SP3 Schannel interface,
  433. // do not use.
  434. typedef struct _SCH_CRED_PUBLIC_CAPI
  435. {
  436.     DWORD           dwType;      // SCH_CRED_X509_CAPI
  437.     HCRYPTPROV      hProv;       // CryptoAPI handle (usually a token CSP)
  438. } SCH_CRED_PUBLIC_CAPI, * PSCH_CRED_PUBLIC_CAPI;
  439. // Structures needed for Pre NT4.0 SP2 calls.
  440. typedef struct _PctPublicKey
  441. {
  442.     DWORD Type;
  443.     DWORD cbKey;
  444.     UCHAR pKey[1];
  445. } PctPublicKey;
  446. typedef struct _X509Certificate {
  447.     DWORD           Version;
  448.     DWORD           SerialNumber[4];
  449.     ALG_ID          SignatureAlgorithm;
  450.     FILETIME        ValidFrom;
  451.     FILETIME        ValidUntil;
  452.     PSTR            pszIssuer;
  453.     PSTR            pszSubject;
  454.     PctPublicKey    *pPublicKey;
  455. } X509Certificate, * PX509Certificate;
  456. // Pre NT4.0 SP2 calls.  Call CAPI1 or CAPI2
  457. // to get the same functionality instead.
  458. BOOL
  459. SslGenerateKeyPair(
  460.     PSSL_CREDENTIAL_CERTIFICATE pCerts,
  461.     PSTR pszDN,
  462.     PSTR pszPassword,
  463.     DWORD Bits );
  464. // Pre NT4.0 SP2 calls.  Call CAPI1 or CAPI2
  465. // to get the same functionality instead.
  466. VOID
  467. SslGenerateRandomBits(
  468.     PUCHAR      pRandomData,
  469.     LONG        cRandomData
  470.     );
  471. // Pre NT4.0 SP2 calls.  Call CAPI1 or CAPI2
  472. // to get the same functionality instead.
  473. BOOL
  474. SslCrackCertificate(
  475.     PUCHAR              pbCertificate,
  476.     DWORD               cbCertificate,
  477.     DWORD               dwFlags,
  478.     PX509Certificate *  ppCertificate
  479.     );
  480. // Pre NT4.0 SP2 calls.  Call CAPI1 or CAPI2
  481. // to get the same functionality instead.
  482. VOID
  483. SslFreeCertificate(
  484.     PX509Certificate    pCertificate
  485.     );
  486. DWORD
  487. WINAPI
  488. SslGetMaximumKeySize(
  489.     DWORD   Reserved );
  490. BOOL
  491. SslGetDefaultIssuers(
  492.     PBYTE pbIssuers,
  493.     DWORD *pcbIssuers);
  494. #define SSL_CRACK_CERTIFICATE_NAME  TEXT("SslCrackCertificate")
  495. #define SSL_FREE_CERTIFICATE_NAME   TEXT("SslFreeCertificate")
  496. // Pre NT4.0 SP2 calls.  Call CAPI1 or CAPI2
  497. // to get the same functionality instead.
  498. typedef BOOL
  499. (WINAPI * SSL_CRACK_CERTIFICATE_FN)
  500. (
  501.     PUCHAR              pbCertificate,
  502.     DWORD               cbCertificate,
  503.     BOOL                VerifySignature,
  504.     PX509Certificate *  ppCertificate
  505. );
  506. // Pre NT4.0 SP2 calls.  Call CAPI1 or CAPI2
  507. // to get the same functionality instead.
  508. typedef VOID
  509. (WINAPI * SSL_FREE_CERTIFICATE_FN)
  510. (
  511.     PX509Certificate    pCertificate
  512. );
  513. #endif //__SCHANNEL_H__