Home | History | Annotate | Download | only in include
      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 #ifndef __SCHANNEL_H__
      7 #define __SCHANNEL_H__
      8 
      9 #include <_mingw_unicode.h>
     10 #include <wincrypt.h>
     11 
     12 #define UNISP_NAME_A "Microsoft Unified Security Protocol Provider"
     13 #define UNISP_NAME_W L"Microsoft Unified Security Protocol Provider"
     14 
     15 #define SSL2SP_NAME_A "Microsoft SSL 2.0"
     16 #define SSL2SP_NAME_W L"Microsoft SSL 2.0"
     17 
     18 #define SSL3SP_NAME_A "Microsoft SSL 3.0"
     19 #define SSL3SP_NAME_W L"Microsoft SSL 3.0"
     20 
     21 #define TLS1SP_NAME_A "Microsoft TLS 1.0"
     22 #define TLS1SP_NAME_W L"Microsoft TLS 1.0"
     23 
     24 #define PCT1SP_NAME_A "Microsoft PCT 1.0"
     25 #define PCT1SP_NAME_W L"Microsoft PCT 1.0"
     26 
     27 #define SCHANNEL_NAME_A "Schannel"
     28 #define SCHANNEL_NAME_W L"Schannel"
     29 
     30 #define UNISP_NAME __MINGW_NAME_UAW(UNISP_NAME)
     31 #define PCT1SP_NAME __MINGW_NAME_UAW(PCT1SP_NAME)
     32 #define SSL2SP_NAME __MINGW_NAME_UAW(SSL2SP_NAME)
     33 #define SSL3SP_NAME __MINGW_NAME_UAW(SSL3SP_NAME)
     34 #define TLS1SP_NAME __MINGW_NAME_UAW(TLS1SP_NAME)
     35 #define SCHANNEL_NAME __MINGW_NAME_UAW(SCHANNEL_NAME)
     36 
     37 #define UNISP_RPC_ID 14
     38 
     39 #define SECPKG_ATTR_ISSUER_LIST 0x50
     40 #define SECPKG_ATTR_REMOTE_CRED 0x51
     41 #define SECPKG_ATTR_LOCAL_CRED 0x52
     42 #define SECPKG_ATTR_REMOTE_CERT_CONTEXT 0x53
     43 #define SECPKG_ATTR_LOCAL_CERT_CONTEXT 0x54
     44 #define SECPKG_ATTR_ROOT_STORE 0x55
     45 #define SECPKG_ATTR_SUPPORTED_ALGS 0x56
     46 #define SECPKG_ATTR_CIPHER_STRENGTHS 0x57
     47 #define SECPKG_ATTR_SUPPORTED_PROTOCOLS 0x58
     48 #define SECPKG_ATTR_ISSUER_LIST_EX 0x59
     49 #define SECPKG_ATTR_CONNECTION_INFO 0x5a
     50 #define SECPKG_ATTR_EAP_KEY_BLOCK 0x5b
     51 #define SECPKG_ATTR_MAPPED_CRED_ATTR 0x5c
     52 #define SECPKG_ATTR_SESSION_INFO 0x5d
     53 #define SECPKG_ATTR_APP_DATA 0x5e
     54 
     55 typedef struct _SecPkgContext_IssuerListInfo {
     56   DWORD cbIssuerList;
     57   PBYTE pIssuerList;
     58 } SecPkgContext_IssuerListInfo,*PSecPkgContext_IssuerListInfo;
     59 
     60 typedef struct _SecPkgContext_RemoteCredentialInfo {
     61   DWORD cbCertificateChain;
     62   PBYTE pbCertificateChain;
     63   DWORD cCertificates;
     64   DWORD fFlags;
     65   DWORD dwBits;
     66 } SecPkgContext_RemoteCredentialInfo,*PSecPkgContext_RemoteCredentialInfo;
     67 
     68 typedef SecPkgContext_RemoteCredentialInfo SecPkgContext_RemoteCredenitalInfo,*PSecPkgContext_RemoteCredenitalInfo;
     69 
     70 #define RCRED_STATUS_NOCRED 0x00000000
     71 #define RCRED_CRED_EXISTS 0x00000001
     72 #define RCRED_STATUS_UNKNOWN_ISSUER 0x00000002
     73 
     74 typedef struct _SecPkgContext_LocalCredentialInfo {
     75   DWORD cbCertificateChain;
     76   PBYTE pbCertificateChain;
     77   DWORD cCertificates;
     78   DWORD fFlags;
     79   DWORD dwBits;
     80 } SecPkgContext_LocalCredentialInfo,*PSecPkgContext_LocalCredentialInfo;
     81 
     82 typedef SecPkgContext_LocalCredentialInfo SecPkgContext_LocalCredenitalInfo,*PSecPkgContext_LocalCredenitalInfo;
     83 
     84 #define LCRED_STATUS_NOCRED 0x00000000
     85 #define LCRED_CRED_EXISTS 0x00000001
     86 #define LCRED_STATUS_UNKNOWN_ISSUER 0x00000002
     87 
     88 typedef struct _SecPkgCred_SupportedAlgs {
     89   DWORD cSupportedAlgs;
     90   ALG_ID *palgSupportedAlgs;
     91 } SecPkgCred_SupportedAlgs,*PSecPkgCred_SupportedAlgs;
     92 
     93 typedef struct _SecPkgCred_CipherStrengths {
     94   DWORD dwMinimumCipherStrength;
     95   DWORD dwMaximumCipherStrength;
     96 } SecPkgCred_CipherStrengths,*PSecPkgCred_CipherStrengths;
     97 
     98 typedef struct _SecPkgCred_SupportedProtocols {
     99   DWORD grbitProtocol;
    100 } SecPkgCred_SupportedProtocols,*PSecPkgCred_SupportedProtocols;
    101 
    102 typedef struct _SecPkgContext_IssuerListInfoEx {
    103   PCERT_NAME_BLOB aIssuers;
    104   DWORD cIssuers;
    105 } SecPkgContext_IssuerListInfoEx,*PSecPkgContext_IssuerListInfoEx;
    106 
    107 typedef struct _SecPkgContext_ConnectionInfo {
    108   DWORD dwProtocol;
    109   ALG_ID aiCipher;
    110   DWORD dwCipherStrength;
    111   ALG_ID aiHash;
    112   DWORD dwHashStrength;
    113   ALG_ID aiExch;
    114   DWORD dwExchStrength;
    115 } SecPkgContext_ConnectionInfo,*PSecPkgContext_ConnectionInfo;
    116 
    117 typedef struct _SecPkgContext_EapKeyBlock {
    118   BYTE rgbKeys[128];
    119   BYTE rgbIVs[64];
    120 } SecPkgContext_EapKeyBlock,*PSecPkgContext_EapKeyBlock;
    121 
    122 typedef struct _SecPkgContext_MappedCredAttr {
    123   DWORD dwAttribute;
    124   PVOID pvBuffer;
    125 } SecPkgContext_MappedCredAttr,*PSecPkgContext_MappedCredAttr;
    126 
    127 #define SSL_SESSION_RECONNECT 1
    128 
    129 typedef struct _SecPkgContext_SessionInfo {
    130   DWORD dwFlags;
    131   DWORD cbSessionId;
    132   BYTE rgbSessionId[32];
    133 } SecPkgContext_SessionInfo,*PSecPkgContext_SessionInfo;
    134 
    135 typedef struct _SecPkgContext_SessionAppData {
    136   DWORD dwFlags;
    137   DWORD cbAppData;
    138   PBYTE pbAppData;
    139 } SecPkgContext_SessionAppData,*PSecPkgContext_SessionAppData;
    140 
    141 #define SCH_CRED_V1 0x00000001
    142 #define SCH_CRED_V2 0x00000002
    143 #define SCH_CRED_VERSION 0x00000002
    144 #define SCH_CRED_V3 0x00000003
    145 #define SCHANNEL_CRED_VERSION 0x00000004
    146 
    147 struct _HMAPPER;
    148 
    149 typedef struct _SCHANNEL_CRED {
    150   DWORD dwVersion;
    151   DWORD cCreds;
    152   PCCERT_CONTEXT *paCred;
    153   HCERTSTORE hRootStore;
    154   DWORD cMappers;
    155   struct _HMAPPER **aphMappers;
    156   DWORD cSupportedAlgs;
    157   ALG_ID *palgSupportedAlgs;
    158   DWORD grbitEnabledProtocols;
    159   DWORD dwMinimumCipherStrength;
    160   DWORD dwMaximumCipherStrength;
    161   DWORD dwSessionLifespan;
    162   DWORD dwFlags;
    163   DWORD dwCredFormat;
    164 } SCHANNEL_CRED,*PSCHANNEL_CRED;
    165 
    166 #define SCH_CRED_FORMAT_CERT_HASH 0x00000001
    167 
    168 #define SCH_CRED_MAX_SUPPORTED_ALGS 256
    169 #define SCH_CRED_MAX_SUPPORTED_CERTS 100
    170 
    171 typedef struct _SCHANNEL_CERT_HASH {
    172   DWORD dwLength;
    173   DWORD dwFlags;
    174   HCRYPTPROV hProv;
    175   BYTE ShaHash[20];
    176 } SCHANNEL_CERT_HASH,*PSCHANNEL_CERT_HASH;
    177 
    178 #define SCH_MACHINE_CERT_HASH 0x00000001
    179 
    180 #define SCH_CRED_NO_SYSTEM_MAPPER 0x00000002
    181 #define SCH_CRED_NO_SERVERNAME_CHECK 0x00000004
    182 #define SCH_CRED_MANUAL_CRED_VALIDATION 0x00000008
    183 #define SCH_CRED_NO_DEFAULT_CREDS 0x00000010
    184 #define SCH_CRED_AUTO_CRED_VALIDATION 0x00000020
    185 #define SCH_CRED_USE_DEFAULT_CREDS 0x00000040
    186 #define SCH_CRED_DISABLE_RECONNECTS 0x00000080
    187 
    188 #define SCH_CRED_REVOCATION_CHECK_END_CERT 0x00000100
    189 #define SCH_CRED_REVOCATION_CHECK_CHAIN 0x00000200
    190 #define SCH_CRED_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x00000400
    191 #define SCH_CRED_IGNORE_NO_REVOCATION_CHECK 0x00000800
    192 #define SCH_CRED_IGNORE_REVOCATION_OFFLINE 0x00001000
    193 #define SCH_CRED_REVOCATION_CHECK_CACHE_ONLY 0x00004000
    194 
    195 #define SCH_CRED_CACHE_ONLY_URL_RETRIEVAL 0x00008000
    196 
    197 #define SCHANNEL_RENEGOTIATE 0
    198 #define SCHANNEL_SHUTDOWN 1
    199 #define SCHANNEL_ALERT 2
    200 #define SCHANNEL_SESSION 3
    201 
    202 typedef struct _SCHANNEL_ALERT_TOKEN {
    203   DWORD dwTokenType;
    204   DWORD dwAlertType;
    205   DWORD dwAlertNumber;
    206 } SCHANNEL_ALERT_TOKEN;
    207 
    208 #define TLS1_ALERT_WARNING 1
    209 #define TLS1_ALERT_FATAL 2
    210 
    211 #define TLS1_ALERT_CLOSE_NOTIFY 0
    212 #define TLS1_ALERT_UNEXPECTED_MESSAGE 10
    213 #define TLS1_ALERT_BAD_RECORD_MAC 20
    214 #define TLS1_ALERT_DECRYPTION_FAILED 21
    215 #define TLS1_ALERT_RECORD_OVERFLOW 22
    216 #define TLS1_ALERT_DECOMPRESSION_FAIL 30
    217 #define TLS1_ALERT_HANDSHAKE_FAILURE 40
    218 #define TLS1_ALERT_BAD_CERTIFICATE 42
    219 #define TLS1_ALERT_UNSUPPORTED_CERT 43
    220 #define TLS1_ALERT_CERTIFICATE_REVOKED 44
    221 #define TLS1_ALERT_CERTIFICATE_EXPIRED 45
    222 #define TLS1_ALERT_CERTIFICATE_UNKNOWN 46
    223 #define TLS1_ALERT_ILLEGAL_PARAMETER 47
    224 #define TLS1_ALERT_UNKNOWN_CA 48
    225 #define TLS1_ALERT_ACCESS_DENIED 49
    226 #define TLS1_ALERT_DECODE_ERROR 50
    227 #define TLS1_ALERT_DECRYPT_ERROR 51
    228 #define TLS1_ALERT_EXPORT_RESTRICTION 60
    229 #define TLS1_ALERT_PROTOCOL_VERSION 70
    230 #define TLS1_ALERT_INSUFFIENT_SECURITY 71
    231 #define TLS1_ALERT_INTERNAL_ERROR 80
    232 #define TLS1_ALERT_USER_CANCELED 90
    233 #define TLS1_ALERT_NO_RENEGOTIATATION 100
    234 
    235 #define SSL_SESSION_ENABLE_RECONNECTS 1
    236 #define SSL_SESSION_DISABLE_RECONNECTS 2
    237 
    238 typedef struct _SCHANNEL_SESSION_TOKEN {
    239   DWORD dwTokenType;
    240   DWORD dwFlags;
    241 } SCHANNEL_SESSION_TOKEN;
    242 
    243 #define CERT_SCHANNEL_IIS_PRIVATE_KEY_PROP_ID (CERT_FIRST_USER_PROP_ID + 0)
    244 #define CERT_SCHANNEL_IIS_PASSWORD_PROP_ID (CERT_FIRST_USER_PROP_ID + 1)
    245 #define CERT_SCHANNEL_SGC_CERTIFICATE_PROP_ID (CERT_FIRST_USER_PROP_ID + 2)
    246 
    247 #define SP_PROT_PCT1_SERVER 0x00000001
    248 #define SP_PROT_PCT1_CLIENT 0x00000002
    249 #define SP_PROT_PCT1 (SP_PROT_PCT1_SERVER | SP_PROT_PCT1_CLIENT)
    250 
    251 #define SP_PROT_SSL2_SERVER 0x00000004
    252 #define SP_PROT_SSL2_CLIENT 0x00000008
    253 #define SP_PROT_SSL2 (SP_PROT_SSL2_SERVER | SP_PROT_SSL2_CLIENT)
    254 
    255 #define SP_PROT_SSL3_SERVER 0x00000010
    256 #define SP_PROT_SSL3_CLIENT 0x00000020
    257 #define SP_PROT_SSL3 (SP_PROT_SSL3_SERVER | SP_PROT_SSL3_CLIENT)
    258 
    259 #define SP_PROT_TLS1_SERVER 0x00000040
    260 #define SP_PROT_TLS1_CLIENT 0x00000080
    261 #define SP_PROT_TLS1 (SP_PROT_TLS1_SERVER | SP_PROT_TLS1_CLIENT)
    262 
    263 #define SP_PROT_SSL3TLS1_CLIENTS (SP_PROT_TLS1_CLIENT | SP_PROT_SSL3_CLIENT)
    264 #define SP_PROT_SSL3TLS1_SERVERS (SP_PROT_TLS1_SERVER | SP_PROT_SSL3_SERVER)
    265 #define SP_PROT_SSL3TLS1 (SP_PROT_SSL3 | SP_PROT_TLS1)
    266 
    267 #define SP_PROT_UNI_SERVER 0x40000000
    268 #define SP_PROT_UNI_CLIENT 0x80000000
    269 #define SP_PROT_UNI (SP_PROT_UNI_SERVER | SP_PROT_UNI_CLIENT)
    270 
    271 #define SP_PROT_ALL 0xffffffff
    272 #define SP_PROT_NONE 0
    273 #define SP_PROT_CLIENTS (SP_PROT_PCT1_CLIENT | SP_PROT_SSL2_CLIENT | SP_PROT_SSL3_CLIENT | SP_PROT_UNI_CLIENT | SP_PROT_TLS1_CLIENT)
    274 #define SP_PROT_SERVERS (SP_PROT_PCT1_SERVER | SP_PROT_SSL2_SERVER | SP_PROT_SSL3_SERVER | SP_PROT_UNI_SERVER | SP_PROT_TLS1_SERVER)
    275 
    276 typedef WINBOOL (*SSL_EMPTY_CACHE_FN_A)(LPSTR pszTargetName,DWORD dwFlags);
    277 
    278 WINBOOL SslEmptyCacheA(LPSTR pszTargetName,DWORD dwFlags);
    279 
    280 typedef WINBOOL (*SSL_EMPTY_CACHE_FN_W)(LPWSTR pszTargetName,DWORD dwFlags);
    281 
    282 WINBOOL SslEmptyCacheW(LPWSTR pszTargetName,DWORD dwFlags);
    283 
    284 #define SSL_EMPTY_CACHE_FN __MINGW_NAME_UAW(SSL_EMPTY_CACHE_FN)
    285 #define SslEmptyCache __MINGW_NAME_AW(SslEmptyCache)
    286 
    287 typedef struct _SSL_CREDENTIAL_CERTIFICATE {
    288   DWORD cbPrivateKey;
    289   PBYTE pPrivateKey;
    290   DWORD cbCertificate;
    291   PBYTE pCertificate;
    292   PSTR pszPassword;
    293 } SSL_CREDENTIAL_CERTIFICATE,*PSSL_CREDENTIAL_CERTIFICATE;
    294 
    295 #define SCHANNEL_SECRET_TYPE_CAPI 0x00000001
    296 #define SCHANNEL_SECRET_PRIVKEY 0x00000002
    297 #define SCH_CRED_X509_CERTCHAIN 0x00000001
    298 #define SCH_CRED_X509_CAPI 0x00000002
    299 #define SCH_CRED_CERT_CONTEXT 0x00000003
    300 
    301 struct _HMAPPER;
    302 typedef struct _SCH_CRED {
    303   DWORD dwVersion;
    304   DWORD cCreds;
    305   PVOID *paSecret;
    306   PVOID *paPublic;
    307   DWORD cMappers;
    308   struct _HMAPPER **aphMappers;
    309 } SCH_CRED,*PSCH_CRED;
    310 
    311 typedef struct _SCH_CRED_SECRET_CAPI {
    312   DWORD dwType;
    313   HCRYPTPROV hProv;
    314 } SCH_CRED_SECRET_CAPI,*PSCH_CRED_SECRET_CAPI;
    315 
    316 typedef struct _SCH_CRED_SECRET_PRIVKEY {
    317   DWORD dwType;
    318   PBYTE pPrivateKey;
    319   DWORD cbPrivateKey;
    320   PSTR pszPassword;
    321 } SCH_CRED_SECRET_PRIVKEY,*PSCH_CRED_SECRET_PRIVKEY;
    322 
    323 typedef struct _SCH_CRED_PUBLIC_CERTCHAIN {
    324   DWORD dwType;
    325   DWORD cbCertChain;
    326   PBYTE pCertChain;
    327 } SCH_CRED_PUBLIC_CERTCHAIN,*PSCH_CRED_PUBLIC_CERTCHAIN;
    328 
    329 typedef struct _SCH_CRED_PUBLIC_CAPI {
    330   DWORD dwType;
    331   HCRYPTPROV hProv;
    332 } SCH_CRED_PUBLIC_CAPI,*PSCH_CRED_PUBLIC_CAPI;
    333 
    334 typedef struct _PctPublicKey {
    335   DWORD Type;
    336   DWORD cbKey;
    337   UCHAR pKey[1];
    338 } PctPublicKey;
    339 
    340 typedef struct _X509Certificate {
    341   DWORD Version;
    342   DWORD SerialNumber[4];
    343   ALG_ID SignatureAlgorithm;
    344   FILETIME ValidFrom;
    345   FILETIME ValidUntil;
    346   PSTR pszIssuer;
    347   PSTR pszSubject;
    348   PctPublicKey *pPublicKey;
    349 } X509Certificate,*PX509Certificate;
    350 
    351 WINBOOL SslGenerateKeyPair(PSSL_CREDENTIAL_CERTIFICATE pCerts,PSTR pszDN,PSTR pszPassword,DWORD Bits);
    352 VOID SslGenerateRandomBits(PUCHAR pRandomData,LONG cRandomData);
    353 WINBOOL SslCrackCertificate(PUCHAR pbCertificate,DWORD cbCertificate,DWORD dwFlags,PX509Certificate *ppCertificate);
    354 VOID SslFreeCertificate(PX509Certificate pCertificate);
    355 DWORD WINAPI SslGetMaximumKeySize(DWORD Reserved);
    356 WINBOOL SslGetDefaultIssuers(PBYTE pbIssuers,DWORD *pcbIssuers);
    357 
    358 #define SSL_CRACK_CERTIFICATE_NAME TEXT("SslCrackCertificate")
    359 #define SSL_FREE_CERTIFICATE_NAME TEXT("SslFreeCertificate")
    360 
    361 typedef WINBOOL (WINAPI *SSL_CRACK_CERTIFICATE_FN)(PUCHAR pbCertificate,DWORD cbCertificate,WINBOOL VerifySignature,PX509Certificate *ppCertificate);
    362 typedef VOID (WINAPI *SSL_FREE_CERTIFICATE_FN)(PX509Certificate pCertificate);
    363 
    364 #if (_WIN32_WINNT >= 0x0600)
    365 typedef struct _SecPkgContext_EapPrfInfo {
    366   DWORD dwVersion;
    367   DWORD cbPrfData;
    368 } SecPkgContext_EapPrfInfo, *PSecPkgContext_EapPrfInfo;
    369 #endif /*(_WIN32_WINNT >= 0x0600)*/
    370 #if (_WIN32_WINNT >= 0x0601)
    371 typedef struct _SecPkgContext_SupportedSignatures {
    372   WORD cSignatureAndHashAlgorithms;
    373   WORD *pSignatureAndHashAlgorithms;
    374 } SecPkgContext_SupportedSignatures, *PSecPkgContext_SupportedSignatures;
    375 #endif /*(_WIN32_WINNT >= 0x0601)*/
    376 #endif
    377