/base/Windows/Inc/WinCrypt.h
# · C Header · 16033 lines · 6243 code · 1680 blank · 8110 comment · 19 complexity · a72a15fd90017887e75ef0fd62f33083 MD5 · raw file
Large files are truncated click here to view the full file
- //+---------------------------------------------------------------------------
- //
- // Microsoft Windows
- // Copyright (C) Microsoft Corporation, 1992-1999.
- //
- // File: wincrypt.h
- //
- // Contents: Cryptographic API Prototypes and Definitions
- //
- //----------------------------------------------------------------------------
-
- #ifndef __WINCRYPT_H__
- #define __WINCRYPT_H__
-
- #if defined (_MSC_VER)
-
- #if ( _MSC_VER >= 800 )
- #if _MSC_VER >= 1200
- #pragma warning(push)
- #endif
- #pragma warning(disable:4201) /* Nameless struct/union */
- #endif
-
- #if (_MSC_VER > 1020)
- #pragma once
- #endif
-
- #endif
-
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #ifndef _HRESULT_DEFINED
- #define _HRESULT_DEFINED
- typedef LONG HRESULT;
-
- #endif // !_HRESULT_DEFINED
-
- #ifndef WINADVAPI
- #define WINADVAPI
- #endif
-
- #ifndef WINAPI
- #define WINAPI __stdcall
- #endif
-
- #ifndef CALLBACK
- #define CALLBACK __stdcall
- #endif
-
- #ifndef DECLSPEC_IMPORT
- #define DECLSPEC_IMPORT
- #endif
-
- #ifndef CONST
- #define CONST const
- #endif
-
- #ifndef IN
- #define IN
- #endif
-
- #ifndef OUT
- #define OUT
- #endif
-
- #ifndef OPTIONAL
- #define OPTIONAL
- #endif
-
- #if !defined(_CRYPT32_)
- #define WINCRYPT32API DECLSPEC_IMPORT
- #else
- #define WINCRYPT32API
- #endif
-
- #if !defined(_CRYPT32STRING_)
- # define WINCRYPT32STRINGAPI WINCRYPT32API
- #else
- # define WINCRYPT32STRINGAPI
- #endif
-
- //
- // Algorithm IDs and Flags
- //
-
- // ALG_ID crackers
- #define GET_ALG_CLASS(x) (x & (7 << 13))
- #define GET_ALG_TYPE(x) (x & (15 << 9))
- #define GET_ALG_SID(x) (x & (511))
-
- // Algorithm classes
- #define ALG_CLASS_ANY (0)
- #define ALG_CLASS_SIGNATURE (1 << 13)
- #define ALG_CLASS_MSG_ENCRYPT (2 << 13)
- #define ALG_CLASS_DATA_ENCRYPT (3 << 13)
- #define ALG_CLASS_HASH (4 << 13)
- #define ALG_CLASS_KEY_EXCHANGE (5 << 13)
- #define ALG_CLASS_ALL (7 << 13)
-
- // Algorithm types
- #define ALG_TYPE_ANY (0)
- #define ALG_TYPE_DSS (1 << 9)
- #define ALG_TYPE_RSA (2 << 9)
- #define ALG_TYPE_BLOCK (3 << 9)
- #define ALG_TYPE_STREAM (4 << 9)
- #define ALG_TYPE_DH (5 << 9)
- #define ALG_TYPE_SECURECHANNEL (6 << 9)
-
- // Generic sub-ids
- #define ALG_SID_ANY (0)
-
- // Some RSA sub-ids
- #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
-
- // Some DSS sub-ids
- //
- #define ALG_SID_DSS_ANY 0
- #define ALG_SID_DSS_PKCS 1
- #define ALG_SID_DSS_DMS 2
-
- // Block cipher sub ids
- // DES sub_ids
- #define ALG_SID_DES 1
- #define ALG_SID_3DES 3
- #define ALG_SID_DESX 4
- #define ALG_SID_IDEA 5
- #define ALG_SID_CAST 6
- #define ALG_SID_SAFERSK64 7
- #define ALG_SID_SAFERSK128 8
- #define ALG_SID_3DES_112 9
- #define ALG_SID_CYLINK_MEK 12
- #define ALG_SID_RC5 13
- #define ALG_SID_AES_128 14
- #define ALG_SID_AES_192 15
- #define ALG_SID_AES_256 16
- #define ALG_SID_AES 17
-
- // Fortezza sub-ids
- #define ALG_SID_SKIPJACK 10
- #define ALG_SID_TEK 11
-
- // KP_MODE
- #define CRYPT_MODE_CBCI 6 // ANSI CBC Interleaved
- #define CRYPT_MODE_CFBP 7 // ANSI CFB Pipelined
- #define CRYPT_MODE_OFBP 8 // ANSI OFB Pipelined
- #define CRYPT_MODE_CBCOFM 9 // ANSI CBC + OF Masking
- #define CRYPT_MODE_CBCOFMI 10 // ANSI CBC + OFM Interleaved
-
- // RC2 sub-ids
- #define ALG_SID_RC2 2
-
- // Stream cipher sub-ids
- #define ALG_SID_RC4 1
- #define ALG_SID_SEAL 2
-
- // Diffie-Hellman sub-ids
- #define ALG_SID_DH_SANDF 1
- #define ALG_SID_DH_EPHEM 2
- #define ALG_SID_AGREED_KEY_ANY 3
- #define ALG_SID_KEA 4
-
- // Hash sub ids
- #define ALG_SID_MD2 1
- #define ALG_SID_MD4 2
- #define ALG_SID_MD5 3
- #define ALG_SID_SHA 4
- #define ALG_SID_SHA1 4
- #define ALG_SID_MAC 5
- #define ALG_SID_RIPEMD 6
- #define ALG_SID_RIPEMD160 7
- #define ALG_SID_SSL3SHAMD5 8
- #define ALG_SID_HMAC 9
- #define ALG_SID_TLS1PRF 10
- #define ALG_SID_HASH_REPLACE_OWF 11
- #define ALG_SID_SHA_256 12
- #define ALG_SID_SHA_384 13
- #define ALG_SID_SHA_512 14
-
- // secure channel sub ids
- #define ALG_SID_SSL3_MASTER 1
- #define ALG_SID_SCHANNEL_MASTER_HASH 2
- #define ALG_SID_SCHANNEL_MAC_KEY 3
- #define ALG_SID_PCT1_MASTER 4
- #define ALG_SID_SSL2_MASTER 5
- #define ALG_SID_TLS1_MASTER 6
- #define ALG_SID_SCHANNEL_ENC_KEY 7
-
- // Our silly example sub-id
- #define ALG_SID_EXAMPLE 80
-
- #ifndef ALGIDDEF
- #define ALGIDDEF
- typedef unsigned int ALG_ID;
- #endif
-
- // algorithm identifier definitions
- #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_SHA1 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA1)
- #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_NO_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_ANY | ALG_SID_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_3DES_112 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_3DES_112)
- #define CALG_3DES (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_3DES)
- #define CALG_DESX (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_DESX)
- #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 CALG_DH_SF (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_DH|ALG_SID_DH_SANDF)
- #define CALG_DH_EPHEM (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_DH|ALG_SID_DH_EPHEM)
- #define CALG_AGREEDKEY_ANY (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_DH|ALG_SID_AGREED_KEY_ANY)
- #define CALG_KEA_KEYX (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_DH|ALG_SID_KEA)
- #define CALG_HUGHES_MD5 (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_ANY|ALG_SID_MD5)
- #define CALG_SKIPJACK (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_SKIPJACK)
- #define CALG_TEK (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_TEK)
- #define CALG_CYLINK_MEK (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_CYLINK_MEK)
- #define CALG_SSL3_SHAMD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SSL3SHAMD5)
- #define CALG_SSL3_MASTER (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SSL3_MASTER)
- #define CALG_SCHANNEL_MASTER_HASH (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SCHANNEL_MASTER_HASH)
- #define CALG_SCHANNEL_MAC_KEY (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SCHANNEL_MAC_KEY)
- #define CALG_SCHANNEL_ENC_KEY (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SCHANNEL_ENC_KEY)
- #define CALG_PCT1_MASTER (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_PCT1_MASTER)
- #define CALG_SSL2_MASTER (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_SSL2_MASTER)
- #define CALG_TLS1_MASTER (ALG_CLASS_MSG_ENCRYPT|ALG_TYPE_SECURECHANNEL|ALG_SID_TLS1_MASTER)
- #define CALG_RC5 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_RC5)
- #define CALG_HMAC (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HMAC)
- #define CALG_TLS1PRF (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_TLS1PRF)
- #define CALG_HASH_REPLACE_OWF (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HASH_REPLACE_OWF)
- #define CALG_AES_128 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES_128)
- #define CALG_AES_192 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES_192)
- #define CALG_AES_256 (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES_256)
- #define CALG_AES (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_AES)
- #define CALG_SHA_256 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_256)
- #define CALG_SHA_384 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_384)
- #define CALG_SHA_512 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_512)
-
- typedef ULONG_PTR HCRYPTPROV;
- typedef ULONG_PTR HCRYPTKEY;
- typedef ULONG_PTR HCRYPTHASH;
-
- // dwFlags definitions for CryptAcquireContext
- #define CRYPT_VERIFYCONTEXT 0xF0000000
- #define CRYPT_NEWKEYSET 0x00000008
- #define CRYPT_DELETEKEYSET 0x00000010
- #define CRYPT_MACHINE_KEYSET 0x00000020
- #define CRYPT_SILENT 0x00000040
-
- // dwFlag definitions for CryptGenKey
- #define CRYPT_EXPORTABLE 0x00000001
- #define CRYPT_USER_PROTECTED 0x00000002
- #define CRYPT_CREATE_SALT 0x00000004
- #define CRYPT_UPDATE_KEY 0x00000008
- #define CRYPT_NO_SALT 0x00000010
- #define CRYPT_PREGEN 0x00000040
- #define CRYPT_RECIPIENT 0x00000010
- #define CRYPT_INITIATOR 0x00000040
- #define CRYPT_ONLINE 0x00000080
- #define CRYPT_SF 0x00000100
- #define CRYPT_CREATE_IV 0x00000200
- #define CRYPT_KEK 0x00000400
- #define CRYPT_DATA_KEY 0x00000800
- #define CRYPT_VOLATILE 0x00001000
- #define CRYPT_SGCKEY 0x00002000
- #define CRYPT_ARCHIVABLE 0x00004000
-
- #define RSA1024BIT_KEY 0x04000000
-
- // dwFlags definitions for CryptDeriveKey
- #define CRYPT_SERVER 0x00000400
-
- #define KEY_LENGTH_MASK 0xFFFF0000
-
- // dwFlag definitions for CryptExportKey
- #define CRYPT_Y_ONLY 0x00000001
- #define CRYPT_SSL2_FALLBACK 0x00000002
- #define CRYPT_DESTROYKEY 0x00000004
- #define CRYPT_OAEP 0x00000040 // used with RSA encryptions/decryptions
- // CryptExportKey, CryptImportKey,
- // CryptEncrypt and CryptDecrypt
-
- #define CRYPT_BLOB_VER3 0x00000080 // export version 3 of a blob type
- #define CRYPT_IPSEC_HMAC_KEY 0x00000100 // CryptImportKey only
-
- // dwFlags definitions for CryptDecrypt
- // See also CRYPT_OAEP, above.
- // Note, the following flag is not supported for CryptEncrypt
- #define CRYPT_DECRYPT_RSA_NO_PADDING_CHECK 0x00000020
-
- // dwFlags definitions for CryptCreateHash
- #define CRYPT_SECRETDIGEST 0x00000001
-
- // dwFlags definitions for CryptHashData
- #define CRYPT_OWF_REPL_LM_HASH 0x00000001 // this is only for the OWF replacement CSP
-
- // dwFlags definitions for CryptHashSessionKey
- #define CRYPT_LITTLE_ENDIAN 0x00000001
-
- // dwFlags definitions for CryptSignHash and CryptVerifySignature
- #define CRYPT_NOHASHOID 0x00000001
- #define CRYPT_TYPE2_FORMAT 0x00000002
- #define CRYPT_X931_FORMAT 0x00000004
-
- // dwFlag definitions for CryptSetProviderEx and CryptGetDefaultProvider
- #define CRYPT_MACHINE_DEFAULT 0x00000001
- #define CRYPT_USER_DEFAULT 0x00000002
- #define CRYPT_DELETE_DEFAULT 0x00000004
-
- // exported key blob definitions
- #define SIMPLEBLOB 0x1
- #define PUBLICKEYBLOB 0x6
- #define PRIVATEKEYBLOB 0x7
- #define PLAINTEXTKEYBLOB 0x8
- #define OPAQUEKEYBLOB 0x9
- #define PUBLICKEYBLOBEX 0xA
- #define SYMMETRICWRAPKEYBLOB 0xB
-
- #define AT_KEYEXCHANGE 1
- #define AT_SIGNATURE 2
-
- #define CRYPT_USERDATA 1
-
- // dwParam
- #define KP_IV 1 // Initialization vector
- #define KP_SALT 2 // Salt value
- #define KP_PADDING 3 // Padding values
- #define KP_MODE 4 // Mode of the cipher
- #define KP_MODE_BITS 5 // Number of bits to feedback
- #define KP_PERMISSIONS 6 // Key permissions DWORD
- #define KP_ALGID 7 // Key algorithm
- #define KP_BLOCKLEN 8 // Block size of the cipher
- #define KP_KEYLEN 9 // Length of key in bits
- #define KP_SALT_EX 10 // Length of salt in bytes
- #define KP_P 11 // DSS/Diffie-Hellman P value
- #define KP_G 12 // DSS/Diffie-Hellman G value
- #define KP_Q 13 // DSS Q value
- #define KP_X 14 // Diffie-Hellman X value
- #define KP_Y 15 // Y value
- #define KP_RA 16 // Fortezza RA value
- #define KP_RB 17 // Fortezza RB value
- #define KP_INFO 18 // for putting information into an RSA envelope
- #define KP_EFFECTIVE_KEYLEN 19 // setting and getting RC2 effective key length
- #define KP_SCHANNEL_ALG 20 // for setting the Secure Channel algorithms
- #define KP_CLIENT_RANDOM 21 // for setting the Secure Channel client random data
- #define KP_SERVER_RANDOM 22 // for setting the Secure Channel server random data
- #define KP_RP 23
- #define KP_PRECOMP_MD5 24
- #define KP_PRECOMP_SHA 25
- #define KP_CERTIFICATE 26 // for setting Secure Channel certificate data (PCT1)
- #define KP_CLEAR_KEY 27 // for setting Secure Channel clear key data (PCT1)
- #define KP_PUB_EX_LEN 28
- #define KP_PUB_EX_VAL 29
- #define KP_KEYVAL 30
- #define KP_ADMIN_PIN 31
- #define KP_KEYEXCHANGE_PIN 32
- #define KP_SIGNATURE_PIN 33
- #define KP_PREHASH 34
- #define KP_ROUNDS 35
- #define KP_OAEP_PARAMS 36 // for setting OAEP params on RSA keys
- #define KP_CMS_KEY_INFO 37
- #define KP_CMS_DH_KEY_INFO 38
- #define KP_PUB_PARAMS 39 // for setting public parameters
- #define KP_VERIFY_PARAMS 40 // for verifying DSA and DH parameters
- #define KP_HIGHEST_VERSION 41 // for TLS protocol version setting
- #define KP_GET_USE_COUNT 42 // for use with PP_CRYPT_COUNT_KEY_USE contexts
-
- // KP_PADDING
- #define PKCS5_PADDING 1 // PKCS 5 (sec 6.2) padding method
- #define RANDOM_PADDING 2
- #define ZERO_PADDING 3
-
- // KP_MODE
- #define CRYPT_MODE_CBC 1 // Cipher block chaining
- #define CRYPT_MODE_ECB 2 // Electronic code book
- #define CRYPT_MODE_OFB 3 // Output feedback mode
- #define CRYPT_MODE_CFB 4 // Cipher feedback mode
- #define CRYPT_MODE_CTS 5 // Ciphertext stealing mode
-
- // KP_PERMISSIONS
- #define CRYPT_ENCRYPT 0x0001 // Allow encryption
- #define CRYPT_DECRYPT 0x0002 // Allow decryption
- #define CRYPT_EXPORT 0x0004 // Allow key to be exported
- #define CRYPT_READ 0x0008 // Allow parameters to be read
- #define CRYPT_WRITE 0x0010 // Allow parameters to be set
- #define CRYPT_MAC 0x0020 // Allow MACs to be used with key
- #define CRYPT_EXPORT_KEY 0x0040 // Allow key to be used for exporting keys
- #define CRYPT_IMPORT_KEY 0x0080 // Allow key to be used for importing keys
- #define CRYPT_ARCHIVE 0x0100 // Allow key to be exported at creation only
-
- #define HP_ALGID 0x0001 // Hash algorithm
- #define HP_HASHVAL 0x0002 // Hash value
- #define HP_HASHSIZE 0x0004 // Hash value size
- #define HP_HMAC_INFO 0x0005 // information for creating an HMAC
- #define HP_TLS1PRF_LABEL 0x0006 // label for TLS1 PRF
- #define HP_TLS1PRF_SEED 0x0007 // seed for TLS1 PRF
-
- #define CRYPT_FAILED FALSE
- #define CRYPT_SUCCEED TRUE
-
- #define RCRYPT_SUCCEEDED(rt) ((rt) == CRYPT_SUCCEED)
- #define RCRYPT_FAILED(rt) ((rt) == CRYPT_FAILED)
-
- //
- // CryptGetProvParam
- //
- #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 PP_CHANGE_PASSWORD 7
- #define PP_KEYSET_SEC_DESCR 8 // get/set security descriptor of keyset
- #define PP_CERTCHAIN 9 // for retrieving certificates from tokens
- #define PP_KEY_TYPE_SUBTYPE 10
- #define PP_PROVTYPE 16
- #define PP_KEYSTORAGE 17
- #define PP_APPLI_CERT 18
- #define PP_SYM_KEYSIZE 19
- #define PP_SESSION_KEYSIZE 20
- #define PP_UI_PROMPT 21
- #define PP_ENUMALGS_EX 22
- #define PP_ENUMMANDROOTS 25
- #define PP_ENUMELECTROOTS 26
- #define PP_KEYSET_TYPE 27
- #define PP_ADMIN_PIN 31
- #define PP_KEYEXCHANGE_PIN 32
- #define PP_SIGNATURE_PIN 33
- #define PP_SIG_KEYSIZE_INC 34
- #define PP_KEYX_KEYSIZE_INC 35
- #define PP_UNIQUE_CONTAINER 36
- #define PP_SGC_INFO 37
- #define PP_USE_HARDWARE_RNG 38
- #define PP_KEYSPEC 39
- #define PP_ENUMEX_SIGNING_PROT 40
- #define PP_CRYPT_COUNT_KEY_USE 41
-
- #define CRYPT_FIRST 1
- #define CRYPT_NEXT 2
- #define CRYPT_SGC_ENUM 4
-
- #define CRYPT_IMPL_HARDWARE 1
- #define CRYPT_IMPL_SOFTWARE 2
- #define CRYPT_IMPL_MIXED 3
- #define CRYPT_IMPL_UNKNOWN 4
- #define CRYPT_IMPL_REMOVABLE 8
-
- // key storage flags
- #define CRYPT_SEC_DESCR 0x00000001
- #define CRYPT_PSTORE 0x00000002
- #define CRYPT_UI_PROMPT 0x00000004
-
- // protocol flags
- #define CRYPT_FLAG_PCT1 0x0001
- #define CRYPT_FLAG_SSL2 0x0002
- #define CRYPT_FLAG_SSL3 0x0004
- #define CRYPT_FLAG_TLS1 0x0008
- #define CRYPT_FLAG_IPSEC 0x0010
- #define CRYPT_FLAG_SIGNING 0x0020
-
- // SGC flags
- #define CRYPT_SGC 0x0001
- #define CRYPT_FASTSGC 0x0002
-
- //
- // CryptSetProvParam
- //
- #define PP_CLIENT_HWND 1
- #define PP_CONTEXT_INFO 11
- #define PP_KEYEXCHANGE_KEYSIZE 12
- #define PP_SIGNATURE_KEYSIZE 13
- #define PP_KEYEXCHANGE_ALG 14
- #define PP_SIGNATURE_ALG 15
- #define PP_DELETEKEY 24
-
- #define PROV_RSA_FULL 1
- #define PROV_RSA_SIG 2
- #define PROV_DSS 3
- #define PROV_FORTEZZA 4
- #define PROV_MS_EXCHANGE 5
- #define PROV_SSL 6
- #define PROV_RSA_SCHANNEL 12
- #define PROV_DSS_DH 13
- #define PROV_EC_ECDSA_SIG 14
- #define PROV_EC_ECNRA_SIG 15
- #define PROV_EC_ECDSA_FULL 16
- #define PROV_EC_ECNRA_FULL 17
- #define PROV_DH_SCHANNEL 18
- #define PROV_SPYRUS_LYNKS 20
- #define PROV_RNG 21
- #define PROV_INTEL_SEC 22
- #define PROV_REPLACE_OWF 23
- #define PROV_RSA_AES 24
-
-
- //
- // Provider friendly names
- //
- #define MS_DEF_PROV_A "Microsoft Base Cryptographic Provider v1.0"
- #define MS_DEF_PROV_W L"Microsoft Base Cryptographic Provider v1.0"
- #ifdef UNICODE
- #define MS_DEF_PROV MS_DEF_PROV_W
- #else
- #define MS_DEF_PROV MS_DEF_PROV_A
- #endif
-
- #define MS_ENHANCED_PROV_A "Microsoft Enhanced Cryptographic Provider v1.0"
- #define MS_ENHANCED_PROV_W L"Microsoft Enhanced Cryptographic Provider v1.0"
- #ifdef UNICODE
- #define MS_ENHANCED_PROV MS_ENHANCED_PROV_W
- #else
- #define MS_ENHANCED_PROV MS_ENHANCED_PROV_A
- #endif
-
- #define MS_STRONG_PROV_A "Microsoft Strong Cryptographic Provider"
- #define MS_STRONG_PROV_W L"Microsoft Strong Cryptographic Provider"
- #ifdef UNICODE
- #define MS_STRONG_PROV MS_STRONG_PROV_W
- #else
- #define MS_STRONG_PROV MS_STRONG_PROV_A
- #endif
-
- #define MS_DEF_RSA_SIG_PROV_A "Microsoft RSA Signature Cryptographic Provider"
- #define MS_DEF_RSA_SIG_PROV_W L"Microsoft RSA Signature Cryptographic Provider"
- #ifdef UNICODE
- #define MS_DEF_RSA_SIG_PROV MS_DEF_RSA_SIG_PROV_W
- #else
- #define MS_DEF_RSA_SIG_PROV MS_DEF_RSA_SIG_PROV_A
- #endif
-
- #define MS_DEF_RSA_SCHANNEL_PROV_A "Microsoft RSA SChannel Cryptographic Provider"
- #define MS_DEF_RSA_SCHANNEL_PROV_W L"Microsoft RSA SChannel Cryptographic Provider"
- #ifdef UNICODE
- #define MS_DEF_RSA_SCHANNEL_PROV MS_DEF_RSA_SCHANNEL_PROV_W
- #else
- #define MS_DEF_RSA_SCHANNEL_PROV MS_DEF_RSA_SCHANNEL_PROV_A
- #endif
-
- #define MS_DEF_DSS_PROV_A "Microsoft Base DSS Cryptographic Provider"
- #define MS_DEF_DSS_PROV_W L"Microsoft Base DSS Cryptographic Provider"
- #ifdef UNICODE
- #define MS_DEF_DSS_PROV MS_DEF_DSS_PROV_W
- #else
- #define MS_DEF_DSS_PROV MS_DEF_DSS_PROV_A
- #endif
-
- #define MS_DEF_DSS_DH_PROV_A "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
- #define MS_DEF_DSS_DH_PROV_W L"Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
- #ifdef UNICODE
- #define MS_DEF_DSS_DH_PROV MS_DEF_DSS_DH_PROV_W
- #else
- #define MS_DEF_DSS_DH_PROV MS_DEF_DSS_DH_PROV_A
- #endif
-
- #define MS_ENH_DSS_DH_PROV_A "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
- #define MS_ENH_DSS_DH_PROV_W L"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
- #ifdef UNICODE
- #define MS_ENH_DSS_DH_PROV MS_ENH_DSS_DH_PROV_W
- #else
- #define MS_ENH_DSS_DH_PROV MS_ENH_DSS_DH_PROV_A
- #endif
-
- #define MS_DEF_DH_SCHANNEL_PROV_A "Microsoft DH SChannel Cryptographic Provider"
- #define MS_DEF_DH_SCHANNEL_PROV_W L"Microsoft DH SChannel Cryptographic Provider"
- #ifdef UNICODE
- #define MS_DEF_DH_SCHANNEL_PROV MS_DEF_DH_SCHANNEL_PROV_W
- #else
- #define MS_DEF_DH_SCHANNEL_PROV MS_DEF_DH_SCHANNEL_PROV_A
- #endif
-
- #define MS_SCARD_PROV_A "Microsoft Base Smart Card Crypto Provider"
- #define MS_SCARD_PROV_W L"Microsoft Base Smart Card Crypto Provider"
- #ifdef UNICODE
- #define MS_SCARD_PROV MS_SCARD_PROV_W
- #else
- #define MS_SCARD_PROV MS_SCARD_PROV_A
- #endif
-
- #define MS_ENH_RSA_AES_PROV_A "Microsoft Enhanced RSA and AES Cryptographic Provider"
- #define MS_ENH_RSA_AES_PROV_W L"Microsoft Enhanced RSA and AES Cryptographic Provider"
- #ifdef UNICODE
- #define MS_ENH_RSA_AES_PROV MS_ENH_RSA_AES_PROV_W
- #else
- #define MS_ENH_RSA_AES_PROV MS_ENH_RSA_AES_PROV_A
- #endif
-
- #define MAXUIDLEN 64
-
- // Exponentiation Offload Reg Location
- #define EXPO_OFFLOAD_REG_VALUE "ExpoOffload"
- #define EXPO_OFFLOAD_FUNC_NAME "OffloadModExpo"
-
- //
- // Registry key in which the following private key-related
- // values are created.
- //
- #define szKEY_CRYPTOAPI_PRIVATE_KEY_OPTIONS \
- "Software\\Policies\\Microsoft\\Cryptography"
-
- //
- // Registry value for controlling Data Protection API (DPAPI) UI settings.
- //
- #define szFORCE_KEY_PROTECTION "ForceKeyProtection"
-
- #define dwFORCE_KEY_PROTECTION_DISABLED 0x0
- #define dwFORCE_KEY_PROTECTION_USER_SELECT 0x1
- #define dwFORCE_KEY_PROTECTION_HIGH 0x2
-
- //
- // Registry values for enabling and controlling the caching (and timeout)
- // of private keys. This feature is useful only for UI-protected private
- // keys.
- //
- // Note that in Windows 2000 and later, private keys, once read from storage,
- // are cached in the associated HCRYPTPROV structure for subsequent use.
- //
- // In .NET Server and XP SP1, new key caching behavior is available. Keys
- // that have been read from storage and cached may now be considered "stale"
- // if a period of time has elapsed since the key was last used. This forces
- // the key to be re-read from storage (which will make the DPAPI UI appear
- // again).
- //
- // To enable the new behavior, create the registry DWORD value
- // szKEY_CACHE_ENABLED and set it to 1. The registry DWORD value
- // szKEY_CACHE_SECONDS must also be created and set to the number of seconds
- // that a cached private key may still be considered usable.
- //
- #define szKEY_CACHE_ENABLED "CachePrivateKeys"
- #define szKEY_CACHE_SECONDS "PrivateKeyLifetimeSeconds"
-
- #define CUR_BLOB_VERSION 2
-
- // structure for use with CryptSetKeyParam for CMS keys
- // DO NOT USE THIS STRUCTURE!!!!!
- typedef struct _CMS_KEY_INFO {
- DWORD dwVersion; // sizeof(CMS_KEY_INFO)
- ALG_ID Algid; // algorithmm id for the key to be converted
- BYTE *pbOID; // pointer to OID to hash in with Z
- DWORD cbOID; // length of OID to hash in with Z
- } CMS_KEY_INFO, *PCMS_KEY_INFO;
-
- // structure for use with CryptSetHashParam with CALG_HMAC
- typedef struct _HMAC_Info {
- ALG_ID HashAlgid;
- BYTE *pbInnerString;
- DWORD cbInnerString;
- BYTE *pbOuterString;
- DWORD cbOuterString;
- } HMAC_INFO, *PHMAC_INFO;
-
- // structure for use with CryptSetKeyParam with KP_SCHANNEL_ALG
- typedef struct _SCHANNEL_ALG {
- DWORD dwUse;
- ALG_ID Algid;
- DWORD cBits;
- DWORD dwFlags;
- DWORD dwReserved;
- } SCHANNEL_ALG, *PSCHANNEL_ALG;
-
- // uses of algortihms for SCHANNEL_ALG structure
- #define SCHANNEL_MAC_KEY 0x00000000
- #define SCHANNEL_ENC_KEY 0x00000001
-
- // uses of dwFlags SCHANNEL_ALG structure
- #define INTERNATIONAL_USAGE 0x00000001
-
- typedef struct _PROV_ENUMALGS {
- ALG_ID aiAlgid;
- DWORD dwBitLen;
- DWORD dwNameLen;
- CHAR szName[20];
- } PROV_ENUMALGS;
-
- typedef struct _PROV_ENUMALGS_EX {
- ALG_ID aiAlgid;
- DWORD dwDefaultLen;
- DWORD dwMinLen;
- DWORD dwMaxLen;
- DWORD dwProtocols;
- DWORD dwNameLen;
- CHAR szName[20];
- DWORD dwLongNameLen;
- CHAR szLongName[40];
- } PROV_ENUMALGS_EX;
-
- typedef struct _PUBLICKEYSTRUC {
- BYTE bType;
- BYTE bVersion;
- WORD reserved;
- ALG_ID aiKeyAlg;
- } BLOBHEADER, PUBLICKEYSTRUC;
-
- typedef struct _RSAPUBKEY {
- DWORD magic; // Has to be RSA1
- DWORD bitlen; // # of bits in modulus
- DWORD pubexp; // public exponent
- // Modulus data follows
- } RSAPUBKEY;
-
- typedef struct _PUBKEY {
- DWORD magic;
- DWORD bitlen; // # of bits in modulus
- } DHPUBKEY, DSSPUBKEY, KEAPUBKEY, TEKPUBKEY;
-
- typedef struct _DSSSEED {
- DWORD counter;
- BYTE seed[20];
- } DSSSEED;
-
- typedef struct _PUBKEYVER3 {
- DWORD magic;
- DWORD bitlenP; // # of bits in prime modulus
- DWORD bitlenQ; // # of bits in prime q, 0 if not available
- DWORD bitlenJ; // # of bits in (p-1)/q, 0 if not available
- DSSSEED DSSSeed;
- } DHPUBKEY_VER3, DSSPUBKEY_VER3;
-
- typedef struct _PRIVKEYVER3 {
- DWORD magic;
- DWORD bitlenP; // # of bits in prime modulus
- DWORD bitlenQ; // # of bits in prime q, 0 if not available
- DWORD bitlenJ; // # of bits in (p-1)/q, 0 if not available
- DWORD bitlenX; // # of bits in X
- DSSSEED DSSSeed;
- } DHPRIVKEY_VER3, DSSPRIVKEY_VER3;
-
- typedef struct _KEY_TYPE_SUBTYPE {
- DWORD dwKeySpec;
- GUID Type;
- GUID Subtype;
- } KEY_TYPE_SUBTYPE, *PKEY_TYPE_SUBTYPE;
-
- typedef struct _CERT_FORTEZZA_DATA_PROP {
- unsigned char SerialNumber[8];
- int CertIndex;
- unsigned char CertLabel[36];
- } CERT_FORTEZZA_DATA_PROP;
-
-
- //+-------------------------------------------------------------------------
- // CRYPTOAPI BLOB definitions
- //--------------------------------------------------------------------------
- typedef struct _CRYPTOAPI_BLOB {
- DWORD cbData;
- BYTE *pbData;
- } CRYPT_INTEGER_BLOB, *PCRYPT_INTEGER_BLOB,
- CRYPT_UINT_BLOB, *PCRYPT_UINT_BLOB,
- CRYPT_OBJID_BLOB, *PCRYPT_OBJID_BLOB,
- CERT_NAME_BLOB, *PCERT_NAME_BLOB,
- CERT_RDN_VALUE_BLOB, *PCERT_RDN_VALUE_BLOB,
- CERT_BLOB, *PCERT_BLOB,
- CRL_BLOB, *PCRL_BLOB,
- DATA_BLOB, *PDATA_BLOB,
- CRYPT_DATA_BLOB, *PCRYPT_DATA_BLOB,
- CRYPT_HASH_BLOB, *PCRYPT_HASH_BLOB,
- CRYPT_DIGEST_BLOB, *PCRYPT_DIGEST_BLOB,
- CRYPT_DER_BLOB, *PCRYPT_DER_BLOB,
- CRYPT_ATTR_BLOB, *PCRYPT_ATTR_BLOB;
-
- // structure for use with CryptSetKeyParam for CMS keys
- typedef struct _CMS_DH_KEY_INFO {
- DWORD dwVersion; // sizeof(CMS_DH_KEY_INFO)
- ALG_ID Algid; // algorithmm id for the key to be converted
- LPSTR pszContentEncObjId; // pointer to OID to hash in with Z
- CRYPT_DATA_BLOB PubInfo; // OPTIONAL - public information
- void *pReserved; // reserved - should be NULL
- } CMS_DH_KEY_INFO, *PCMS_DH_KEY_INFO;
-
-
- WINADVAPI
- BOOL
- WINAPI
- CryptAcquireContextA(
- HCRYPTPROV *phProv,
- LPCSTR szContainer,
- LPCSTR szProvider,
- DWORD dwProvType,
- DWORD dwFlags
- );
- WINADVAPI
- BOOL
- WINAPI
- CryptAcquireContextW(
- HCRYPTPROV *phProv,
- LPCWSTR szContainer,
- LPCWSTR szProvider,
- DWORD dwProvType,
- DWORD dwFlags
- );
- #ifdef UNICODE
- #define CryptAcquireContext CryptAcquireContextW
- #else
- #define CryptAcquireContext CryptAcquireContextA
- #endif // !UNICODE
-
- WINADVAPI
- BOOL
- WINAPI
- CryptReleaseContext(
- HCRYPTPROV hProv,
- DWORD dwFlags
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptGenKey(
- HCRYPTPROV hProv,
- ALG_ID Algid,
- DWORD dwFlags,
- HCRYPTKEY *phKey
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptDeriveKey(
- HCRYPTPROV hProv,
- ALG_ID Algid,
- HCRYPTHASH hBaseData,
- DWORD dwFlags,
- HCRYPTKEY *phKey
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptDestroyKey(
- HCRYPTKEY hKey
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptSetKeyParam(
- HCRYPTKEY hKey,
- DWORD dwParam,
- CONST BYTE *pbData,
- DWORD dwFlags
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptGetKeyParam(
- HCRYPTKEY hKey,
- DWORD dwParam,
- BYTE *pbData,
- DWORD *pdwDataLen,
- DWORD dwFlags
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptSetHashParam(
- HCRYPTHASH hHash,
- DWORD dwParam,
- CONST BYTE *pbData,
- DWORD dwFlags
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptGetHashParam(
- HCRYPTHASH hHash,
- DWORD dwParam,
- BYTE *pbData,
- DWORD *pdwDataLen,
- DWORD dwFlags
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptSetProvParam(
- HCRYPTPROV hProv,
- DWORD dwParam,
- CONST BYTE *pbData,
- DWORD dwFlags
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptGetProvParam(
- HCRYPTPROV hProv,
- DWORD dwParam,
- BYTE *pbData,
- DWORD *pdwDataLen,
- DWORD dwFlags
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptGenRandom(
- HCRYPTPROV hProv,
- DWORD dwLen,
- BYTE *pbBuffer
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptGetUserKey(
- HCRYPTPROV hProv,
- DWORD dwKeySpec,
- HCRYPTKEY *phUserKey
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptExportKey(
- HCRYPTKEY hKey,
- HCRYPTKEY hExpKey,
- DWORD dwBlobType,
- DWORD dwFlags,
- BYTE *pbData,
- DWORD *pdwDataLen
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptImportKey(
- HCRYPTPROV hProv,
- CONST BYTE *pbData,
- DWORD dwDataLen,
- HCRYPTKEY hPubKey,
- DWORD dwFlags,
- HCRYPTKEY *phKey
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptEncrypt(
- HCRYPTKEY hKey,
- HCRYPTHASH hHash,
- BOOL Final,
- DWORD dwFlags,
- BYTE *pbData,
- DWORD *pdwDataLen,
- DWORD dwBufLen
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptDecrypt(
- HCRYPTKEY hKey,
- HCRYPTHASH hHash,
- BOOL Final,
- DWORD dwFlags,
- BYTE *pbData,
- DWORD *pdwDataLen
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptCreateHash(
- HCRYPTPROV hProv,
- ALG_ID Algid,
- HCRYPTKEY hKey,
- DWORD dwFlags,
- HCRYPTHASH *phHash
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptHashData(
- HCRYPTHASH hHash,
- CONST BYTE *pbData,
- DWORD dwDataLen,
- DWORD dwFlags
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptHashSessionKey(
- HCRYPTHASH hHash,
- HCRYPTKEY hKey,
- DWORD dwFlags
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptDestroyHash(
- HCRYPTHASH hHash
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptSignHashA(
- HCRYPTHASH hHash,
- DWORD dwKeySpec,
- LPCSTR szDescription,
- DWORD dwFlags,
- BYTE *pbSignature,
- DWORD *pdwSigLen
- );
- WINADVAPI
- BOOL
- WINAPI
- CryptSignHashW(
- HCRYPTHASH hHash,
- DWORD dwKeySpec,
- LPCWSTR szDescription,
- DWORD dwFlags,
- BYTE *pbSignature,
- DWORD *pdwSigLen
- );
- #ifdef UNICODE
- #define CryptSignHash CryptSignHashW
- #else
- #define CryptSignHash CryptSignHashA
- #endif // !UNICODE
-
- WINADVAPI
- BOOL
- WINAPI
- CryptVerifySignatureA(
- HCRYPTHASH hHash,
- CONST BYTE *pbSignature,
- DWORD dwSigLen,
- HCRYPTKEY hPubKey,
- LPCSTR szDescription,
- DWORD dwFlags
- );
- WINADVAPI
- BOOL
- WINAPI
- CryptVerifySignatureW(
- HCRYPTHASH hHash,
- CONST BYTE *pbSignature,
- DWORD dwSigLen,
- HCRYPTKEY hPubKey,
- LPCWSTR szDescription,
- DWORD dwFlags
- );
- #ifdef UNICODE
- #define CryptVerifySignature CryptVerifySignatureW
- #else
- #define CryptVerifySignature CryptVerifySignatureA
- #endif // !UNICODE
-
- WINADVAPI
- BOOL
- WINAPI
- CryptSetProviderA(
- LPCSTR pszProvName,
- DWORD dwProvType
- );
- WINADVAPI
- BOOL
- WINAPI
- CryptSetProviderW(
- LPCWSTR pszProvName,
- DWORD dwProvType
- );
- #ifdef UNICODE
- #define CryptSetProvider CryptSetProviderW
- #else
- #define CryptSetProvider CryptSetProviderA
- #endif // !UNICODE
-
- WINADVAPI
- BOOL
- WINAPI
- CryptSetProviderExA(
- LPCSTR pszProvName,
- DWORD dwProvType,
- DWORD *pdwReserved,
- DWORD dwFlags
- );
- WINADVAPI
- BOOL
- WINAPI
- CryptSetProviderExW(
- LPCWSTR pszProvName,
- DWORD dwProvType,
- DWORD *pdwReserved,
- DWORD dwFlags
- );
- #ifdef UNICODE
- #define CryptSetProviderEx CryptSetProviderExW
- #else
- #define CryptSetProviderEx CryptSetProviderExA
- #endif // !UNICODE
-
- WINADVAPI
- BOOL
- WINAPI
- CryptGetDefaultProviderA(
- DWORD dwProvType,
- DWORD *pdwReserved,
- DWORD dwFlags,
- LPSTR pszProvName,
- DWORD *pcbProvName
- );
- WINADVAPI
- BOOL
- WINAPI
- CryptGetDefaultProviderW(
- DWORD dwProvType,
- DWORD *pdwReserved,
- DWORD dwFlags,
- LPWSTR pszProvName,
- DWORD *pcbProvName
- );
- #ifdef UNICODE
- #define CryptGetDefaultProvider CryptGetDefaultProviderW
- #else
- #define CryptGetDefaultProvider CryptGetDefaultProviderA
- #endif // !UNICODE
-
- WINADVAPI
- BOOL
- WINAPI
- CryptEnumProviderTypesA(
- DWORD dwIndex,
- DWORD *pdwReserved,
- DWORD dwFlags,
- DWORD *pdwProvType,
- LPSTR szTypeName,
- DWORD *pcbTypeName
- );
- WINADVAPI
- BOOL
- WINAPI
- CryptEnumProviderTypesW(
- DWORD dwIndex,
- DWORD *pdwReserved,
- DWORD dwFlags,
- DWORD *pdwProvType,
- LPWSTR szTypeName,
- DWORD *pcbTypeName
- );
- #ifdef UNICODE
- #define CryptEnumProviderTypes CryptEnumProviderTypesW
- #else
- #define CryptEnumProviderTypes CryptEnumProviderTypesA
- #endif // !UNICODE
-
- WINADVAPI
- BOOL
- WINAPI
- CryptEnumProvidersA(
- DWORD dwIndex,
- DWORD *pdwReserved,
- DWORD dwFlags,
- DWORD *pdwProvType,
- LPSTR szProvName,
- DWORD *pcbProvName
- );
- WINADVAPI
- BOOL
- WINAPI
- CryptEnumProvidersW(
- DWORD dwIndex,
- DWORD *pdwReserved,
- DWORD dwFlags,
- DWORD *pdwProvType,
- LPWSTR szProvName,
- DWORD *pcbProvName
- );
- #ifdef UNICODE
- #define CryptEnumProviders CryptEnumProvidersW
- #else
- #define CryptEnumProviders CryptEnumProvidersA
- #endif // !UNICODE
-
- WINADVAPI
- BOOL
- WINAPI
- CryptContextAddRef(
- HCRYPTPROV hProv,
- DWORD *pdwReserved,
- DWORD dwFlags
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptDuplicateKey(
- HCRYPTKEY hKey,
- DWORD *pdwReserved,
- DWORD dwFlags,
- HCRYPTKEY *phKey
- );
-
- WINADVAPI
- BOOL
- WINAPI
- CryptDuplicateHash(
- HCRYPTHASH hHash,
- DWORD *pdwReserved,
- DWORD dwFlags,
- HCRYPTHASH *phHash
- );
-
- //
- // This function is provided in Microsoft Windows 2000 as a means of
- // installing the 128-bit encryption provider. This function is unavailable
- // in Microsoft Windows XP, because Windows XP ships with the 128-bit
- // encryption provider.
- //
- BOOL
- __cdecl
- GetEncSChannel(
- BYTE **pData,
- DWORD *dwDecSize
- );
-
- //+-------------------------------------------------------------------------
- // In a CRYPT_BIT_BLOB the last byte may contain 0-7 unused bits. Therefore, the
- // overall bit length is cbData * 8 - cUnusedBits.
- //--------------------------------------------------------------------------
- typedef struct _CRYPT_BIT_BLOB {
- DWORD cbData;
- BYTE *pbData;
- DWORD cUnusedBits;
- } CRYPT_BIT_BLOB, *PCRYPT_BIT_BLOB;
-
- //+-------------------------------------------------------------------------
- // Type used for any algorithm
- //
- // Where the Parameters CRYPT_OBJID_BLOB is in its encoded representation. For most
- // algorithm types, the Parameters CRYPT_OBJID_BLOB is NULL (Parameters.cbData = 0).
- //--------------------------------------------------------------------------
- typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
- LPSTR pszObjId;
- CRYPT_OBJID_BLOB Parameters;
- } CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;
-
- // Following are the definitions of various algorithm object identifiers
- // RSA
- #define szOID_RSA "1.2.840.113549"
- #define szOID_PKCS "1.2.840.113549.1"
- #define szOID_RSA_HASH "1.2.840.113549.2"
- #define szOID_RSA_ENCRYPT "1.2.840.113549.3"
-
- #define szOID_PKCS_1 "1.2.840.113549.1.1"
- #define szOID_PKCS_2 "1.2.840.113549.1.2"
- #define szOID_PKCS_3 "1.2.840.113549.1.3"
- #define szOID_PKCS_4 "1.2.840.113549.1.4"
- #define szOID_PKCS_5 "1.2.840.113549.1.5"
- #define szOID_PKCS_6 "1.2.840.113549.1.6"
- #define szOID_PKCS_7 "1.2.840.113549.1.7"
- #define szOID_PKCS_8 "1.2.840.113549.1.8"
- #define szOID_PKCS_9 "1.2.840.113549.1.9"
- #define szOID_PKCS_10 "1.2.840.113549.1.10"
- #define szOID_PKCS_12 "1.2.840.113549.1.12"
-
- #define szOID_RSA_RSA "1.2.840.113549.1.1.1"
- #define szOID_RSA_MD2RSA "1.2.840.113549.1.1.2"
- #define szOID_RSA_MD4RSA "1.2.840.113549.1.1.3"
- #define szOID_RSA_MD5RSA "1.2.840.113549.1.1.4"
- #define szOID_RSA_SHA1RSA "1.2.840.113549.1.1.5"
- #define szOID_RSA_SETOAEP_RSA "1.2.840.113549.1.1.6"
-
- #define szOID_RSA_DH "1.2.840.113549.1.3.1"
-
- #define szOID_RSA_data "1.2.840.113549.1.7.1"
- #define szOID_RSA_signedData "1.2.840.113549.1.7.2"
- #define szOID_RSA_envelopedData "1.2.840.113549.1.7.3"
- #define szOID_RSA_signEnvData "1.2.840.113549.1.7.4"
- #define szOID_RSA_digestedData "1.2.840.113549.1.7.5"
- #define szOID_RSA_hashedData "1.2.840.113549.1.7.5"
- #define szOID_RSA_encryptedData "1.2.840.113549.1.7.6"
-
- #define szOID_RSA_emailAddr "1.2.840.113549.1.9.1"
- #define szOID_RSA_unstructName "1.2.840.113549.1.9.2"
- #define szOID_RSA_contentType "1.2.840.113549.1.9.3"
- #define szOID_RSA_messageDigest "1.2.840.113549.1.9.4"
- #define szOID_RSA_signingTime "1.2.840.113549.1.9.5"
- #define szOID_RSA_counterSign "1.2.840.113549.1.9.6"
- #define szOID_RSA_challengePwd "1.2.840.113549.1.9.7"
- #define szOID_RSA_unstructAddr "1.2.840.113549.1.9.8"
- #define szOID_RSA_extCertAttrs "1.2.840.113549.1.9.9"
- #define szOID_RSA_certExtensions "1.2.840.113549.1.9.14"
- #define szOID_RSA_SMIMECapabilities "1.2.840.113549.1.9.15"
- #define szOID_RSA_preferSignedData "1.2.840.113549.1.9.15.1"
-
- #define szOID_RSA_SMIMEalg "1.2.840.113549.1.9.16.3"
- #define szOID_RSA_SMIMEalgESDH "1.2.840.113549.1.9.16.3.5"
- #define szOID_RSA_SMIMEalgCMS3DESwrap "1.2.840.113549.1.9.16.3.6"
- #define szOID_RSA_SMIMEalgCMSRC2wrap "1.2.840.113549.1.9.16.3.7"
-
- #define szOID_RSA_MD2 "1.2.840.113549.2.2"
- #define szOID_RSA_MD4 "1.2.840.113549.2.4"
- #define szOID_RSA_MD5 "1.2.840.113549.2.5"
-
- #define szOID_RSA_RC2CBC "1.2.840.113549.3.2"
- #define szOID_RSA_RC4 "1.2.840.113549.3.4"
- #define szOID_RSA_DES_EDE3_CBC "1.2.840.113549.3.7"
- #define szOID_RSA_RC5_CBCPad "1.2.840.113549.3.9"
-
-
- #define szOID_ANSI_X942 "1.2.840.10046"
- #define szOID_ANSI_X942_DH "1.2.840.10046.2.1"
-
- #define szOID_X957 "1.2.840.10040"
- #define szOID_X957_DSA "1.2.840.10040.4.1"
- #define szOID_X957_SHA1DSA "1.2.840.10040.4.3"
-
- // ITU-T UsefulDefinitions
- #define szOID_DS "2.5"
- #define szOID_DSALG "2.5.8"
- #define szOID_DSALG_CRPT "2.5.8.1"
- #define szOID_DSALG_HASH "2.5.8.2"
- #define szOID_DSALG_SIGN "2.5.8.3"
- #define szOID_DSALG_RSA "2.5.8.1.1"
- // NIST OSE Implementors' Workshop (OIW)
- // http://nemo.ncsl.nist.gov/oiw/agreements/stable/OSI/12s_9506.w51
- // http://nemo.ncsl.nist.gov/oiw/agreements/working/OSI/12w_9503.w51
- #define szOID_OIW "1.3.14"
- // NIST OSE Implementors' Workshop (OIW) Security SIG algorithm identifiers
- #define szOID_OIWSEC "1.3.14.3.2"
- #define szOID_OIWSEC_md4RSA "1.3.14.3.2.2"
- #define szOID_OIWSEC_md5RSA "1.3.14.3.2.3"
- #define szOID_OIWSEC_md4RSA2 "1.3.14.3.2.4"
- #define szOID_OIWSEC_desECB "1.3.14.3.2.6"
- #define szOID_OIWSEC_desCBC "1.3.14.3.2.7"
- #define szOID_OIWSEC_desOFB "1.3.14.3.2.8"
- #define szOID_OIWSEC_desCFB "1.3.14.3.2.9"
- #define szOID_OIWSEC_desMAC "1.3.14.3.2.10"
- #define szOID_OIWSEC_rsaSign "1.3.14.3.2.11"
- #define szOID_OIWSEC_dsa "1.3.14.3.2.12"
- #define szOID_OIWSEC_shaDSA "1.3.14.3.2.13"
- #define szOID_OIWSEC_mdc2RSA "1.3.14.3.2.14"
- #define szOID_OIWSEC_shaRSA "1.3.14.3.2.15"
- #define szOID_OIWSEC_dhCommMod "1.3.14.3.2.16"
- #define szOID_OIWSEC_desEDE "1.3.14.3.2.17"
- #define szOID_OIWSEC_sha "1.3.14.3.2.18"
- #define szOID_OIWSEC_mdc2 "1.3.14.3.2.19"
- #define szOID_OIWSEC_dsaComm "1.3.14.3.2.20"
- #define szOID_OIWSEC_dsaCommSHA "1.3.14.3.2.21"
- #define szOID_OIWSEC_rsaXchg "1.3.14.3.2.22"
- #define szOID_OIWSEC_keyHashSeal "1.3.14.3.2.23"
- #define szOID_OIWSEC_md2RSASign "1.3.14.3.2.24"
- #define szOID_OIWSEC_md5RSASign "1.3.14.3.2.25"
- #define szOID_OIWSEC_sha1 "1.3.14.3.2.26"
- #define szOID_OIWSEC_dsaSHA1 "1.3.14.3.2.27"
- #define szOID_OIWSEC_dsaCommSHA1 "1.3.14.3.2.28"
- #define szOID_OIWSEC_sha1RSASign "1.3.14.3.2.29"
- // NIST OSE Implementors' Workshop (OIW) Directory SIG algorithm identifiers
- #define szOID_OIWDIR "1.3.14.7.2"
- #define szOID_OIWDIR_CRPT "1.3.14.7.2.1"
- #define szOID_OIWDIR_HASH "1.3.14.7.2.2"
- #define szOID_OIWDIR_SIGN "1.3.14.7.2.3"
- #define szOID_OIWDIR_md2 "1.3.14.7.2.2.1"
- #define szOID_OIWDIR_md2RSA "1.3.14.7.2.3.1"
-
-
- // INFOSEC Algorithms
- // joint-iso-ccitt(2) country(16) us(840) organization(1) us-government(101) dod(2) id-infosec(1)
- #define szOID_INFOSEC "2.16.840.1.101.2.1"
- #define szOID_INFOSEC_sdnsSignature "2.16.840.1.101.2.1.1.1"
- #define szOID_INFOSEC_mosaicSignature "2.16.840.1.101.2.1.1.2"
- #define szOID_INFOSEC_sdnsConfidentiality "2.16.840.1.101.2.1.1.3"
- #define szOID_INFOSEC_mosaicConfidentiality "2.16.840.1.101.2.1.1.4"
- #define szOID_INFOSEC_sdnsIntegrity "2.16.840.1.101.2.1.1.5"
- #define szOID_INFOSEC_mosaicIntegrity "2.16.840.1.101.2.1.1.6"
- #define szOID_INFOSEC_sdnsTokenProtection "2.16.840.1.101.2.1.1.7"
- #define szOID_INFOSEC_mosaicTokenProtection "2.16.840.1.101.2.1.1.8"
- #define szOID_INFOSEC_sdnsKeyManagement "2.16.840.1.101.2.1.1.9"
- #define szOID_INFOSEC_mosaicKeyManagement "2.16.840.1.101.2.1.1.10"
- #define szOID_INFOSEC_sdnsKMandSig "2.16.840.1.101.2.1.1.11"
- #define szOID_INFOSEC_mosaicKMandSig "2.16.840.1.101.2.1.1.12"
- #define szOID_INFOSEC_SuiteASignature "2.16.840.1.101.2.1.1.13"
- #define szOID_INFOSEC_SuiteAConfidentiality "2.16.840.1.101.2.1.1.14"
- #define szOID_INFOSEC_SuiteAIntegrity "2.16.840.1.101.2.1.1.15"
- #define szOID_INFOSEC_SuiteATokenProtection "2.16.840.1.101.2.1.1.16"
- #define szOID_INFOSEC_SuiteAKeyManagement "2.16.840.1.101.2.1.1.17"
- #define szOID_INFOSEC_SuiteAKMandSig "2.16.840.1.101.2.1.1.18"
- #define szOID_INFOSEC_mosaicUpdatedSig "2.16.840.1.101.2.1.1.19"
- #define szOID_INFOSEC_mosaicKMandUpdSig "2.16.840.1.101.2.1.1.20"
- #define szOID_INFOSEC_mosaicUpdatedInteg "2.16.840.1.101.2.1.1.21"
-
- typedef struct _CRYPT_OBJID_TABLE {
- DWORD dwAlgId;
- LPCSTR pszObjId;
- } CRYPT_OBJID_TABLE, *PCRYPT_OBJID_TABLE;
-
-
- //+-------------------------------------------------------------------------
- // PKCS #1 HashInfo (DigestInfo)
- //--------------------------------------------------------------------------
- typedef struct _CRYPT_HASH_INFO {
- CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm;
- CRYPT_HASH_BLOB Hash;
- } CRYPT_HASH_INFO, *PCRYPT_HASH_INFO;
-
- //+-------------------------------------------------------------------------
- // Type used for an extension to an encoded content
- //
- // Where the Value's CRYPT_OBJID_BLOB is in its encoded representation.
- //--------------------------------------------------------------------------
- typedef struct _CERT_EXTENSION {
- LPSTR pszObjId;
- BOOL fCritical;
- CRYPT_OBJID_BLOB Value;
- } CERT_EXTENSION, *PCERT_EXTENSION;
-
- //+-------------------------------------------------------------------------
- // AttributeTypeValue
- //
- // Where the Value's CRYPT_OBJID_BLOB is in its encoded representation.
- //--------------------------------------------------------------------------
- typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE {
- LPSTR pszObjId;
- CRYPT_OBJID_BLOB Value;
- } CRYPT_ATTRIBUTE_TYPE_VALUE, *PCRYPT_ATTRIBUTE_TYPE_VALUE;
-
- //+-------------------------------------------------------------------------
- // Attributes
- //
- // Where the Value's PATTR_BLOBs are in their encoded representation.
- //--------------------------------------------------------------------------
- typedef struct _CRYPT_ATTRIBUTE {
- LPSTR pszObjId;
- DWORD cValue;
- PCRYPT_ATTR_BLOB rgValue;
- } CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE;
-
- typedef struct _CRYPT_ATTRIBUTES {
- IN DWORD cAttr;
- IN PCRYPT_ATTRIBUTE rgAttr;
- } CRYPT_ATTRIBUTES, *PCRYPT_ATTRIBUTES;
-
- //+-------------------------------------------------------------------------
- // Attributes making up a Relative Distinguished Name (CERT_RDN)
- //
- // The interpretation of the Value depends on the dwValueType.
- // See below for a list of the types.
- //--------------------------------------------------------------------------
- typedef struct _CERT_RDN_ATTR {
- LPSTR pszObjId;
- DWORD dwValueType;
- CERT_RDN_VALUE_BLOB Value;
- } CERT_RDN_ATTR, *PCERT_RDN_ATTR;
-
- //+-------------------------------------------------------------------------
- // CERT_RDN attribute Object Identifiers
- //--------------------------------------------------------------------------
- // Labeling attribute types:
- #define szOID_COMMON_NAME "2.5.4.3" // case-ignore string
- #define szOID_SUR_NAME "2.5.4.4" // case-ignore string
- #define szOID_DEVICE_SERIAL_NUMBER "2.5.4.5" // printable string
-
- // Geographic attribute types:
- #define szOID_COUNTRY_NAME "2.5.4.6" // printable 2char string
- #define szOID_LOCALITY_NAME "2.5.4.7" // case-ignore string
- #define szOID_STATE_OR_PROVINCE_NAME "2.5.4.8" // case-ignore string
- #define szOID_STREET_ADDRESS "2.5.4.9" // case-ignore string
-
- // Organizational attribute types:
- #define szOID_ORGANIZATION_NAME "2.5.4.10" // case-ignore string
- #define szOID_ORGANIZATIONAL_UNIT_NAME "2.5.4.11" // case-ignore string
- #define szOID_TITLE "2.5.4.12" // case-ignore string
-
- // Explanatory attribute types:
- #define szOID_DESCRIPTION "2.5.4.13" // case-ignore string
- #define szOID_SEARCH_GUIDE "2.5.4.14"
- #define szOID_BUSINESS_CATEGORY "2.5.4.15" // case-ignore string
-
- // Postal addressing attribute types:
- #define szOID_POSTAL_ADDRESS "2.5.4.16"
- #define szOID_POSTAL_CODE "2.5.4.17" // case-ignore string
- #define szOID_POST_OFFICE_BOX "2.5.4.18" // case-ignore string
- #define szOID_PHYSICAL_DELIVERY_OFFICE_NAME "2.5.4.19" // case-ignore string
-
- // Telecommunications addressing attribute types:
- #define szOID_TELEPHONE_NUMBER "2.5.4.20" // telephone number
- #define szOID_TELEX_NUMBER "2.5.4.21"
- #define szOID_TELE…