Home | History | Annotate | Download | only in include
      1 /**
      2  * This file is part of the mingw-w64 runtime package.
      3  * No warranty is given; refer to the file DISCLAIMER within this package.
      4  */
      5 #include <winapifamily.h>
      6 
      7 #ifndef __NCRYPT_H__
      8 #define __NCRYPT_H__
      9 
     10 #ifdef __cplusplus
     11 extern "C" {
     12 #endif
     13 
     14 #ifndef WINAPI
     15 #if defined(_ARM_)
     16 #define WINAPI
     17 #else
     18 #define WINAPI __stdcall
     19 #endif
     20 #endif
     21 
     22 #ifndef __SECSTATUS_DEFINED__
     23   typedef LONG SECURITY_STATUS;
     24 #define __SECSTATUS_DEFINED__
     25 #endif
     26 
     27 #include <bcrypt.h>
     28 
     29 #define NCRYPT_MAX_KEY_NAME_LENGTH 512
     30 #define NCRYPT_MAX_ALG_ID_LENGTH 512
     31 
     32 #define MS_KEY_STORAGE_PROVIDER L"Microsoft Software Key Storage Provider"
     33 #define MS_SMART_CARD_KEY_STORAGE_PROVIDER L"Microsoft Smart Card Key Storage Provider"
     34 #define MS_PLATFORM_KEY_STORAGE_PROVIDER L"Microsoft Platform Crypto Provider"
     35 
     36 #define NCRYPT_RSA_ALGORITHM BCRYPT_RSA_ALGORITHM
     37 #define NCRYPT_RSA_SIGN_ALGORITHM BCRYPT_RSA_SIGN_ALGORITHM
     38 #define NCRYPT_DH_ALGORITHM BCRYPT_DH_ALGORITHM
     39 #define NCRYPT_DSA_ALGORITHM BCRYPT_DSA_ALGORITHM
     40 #define NCRYPT_MD2_ALGORITHM BCRYPT_MD2_ALGORITHM
     41 #define NCRYPT_MD4_ALGORITHM BCRYPT_MD4_ALGORITHM
     42 #define NCRYPT_MD5_ALGORITHM BCRYPT_MD5_ALGORITHM
     43 #define NCRYPT_SHA1_ALGORITHM BCRYPT_SHA1_ALGORITHM
     44 #define NCRYPT_SHA256_ALGORITHM BCRYPT_SHA256_ALGORITHM
     45 #define NCRYPT_SHA384_ALGORITHM BCRYPT_SHA384_ALGORITHM
     46 #define NCRYPT_SHA512_ALGORITHM BCRYPT_SHA512_ALGORITHM
     47 #define NCRYPT_ECDSA_P256_ALGORITHM BCRYPT_ECDSA_P256_ALGORITHM
     48 #define NCRYPT_ECDSA_P384_ALGORITHM BCRYPT_ECDSA_P384_ALGORITHM
     49 #define NCRYPT_ECDSA_P521_ALGORITHM BCRYPT_ECDSA_P521_ALGORITHM
     50 #define NCRYPT_ECDH_P256_ALGORITHM BCRYPT_ECDH_P256_ALGORITHM
     51 #define NCRYPT_ECDH_P384_ALGORITHM BCRYPT_ECDH_P384_ALGORITHM
     52 #define NCRYPT_ECDH_P521_ALGORITHM BCRYPT_ECDH_P521_ALGORITHM
     53 #if NTDDI_VERSION >= 0x06020000
     54 #define NCRYPT_AES_ALGORITHM BCRYPT_AES_ALGORITHM
     55 #define NCRYPT_RC2_ALGORITHM BCRYPT_RC2_ALGORITHM
     56 #define NCRYPT_3DES_ALGORITHM BCRYPT_3DES_ALGORITHM
     57 #define NCRYPT_DES_ALGORITHM BCRYPT_DES_ALGORITHM
     58 #define NCRYPT_DESX_ALGORITHM BCRYPT_DESX_ALGORITHM
     59 #define NCRYPT_3DES_112_ALGORITHM BCRYPT_3DES_112_ALGORITHM
     60 #define NCRYPT_SP800108_CTR_HMAC_ALGORITHM BCRYPT_SP800108_CTR_HMAC_ALGORITHM
     61 #define NCRYPT_SP80056A_CONCAT_ALGORITHM BCRYPT_SP80056A_CONCAT_ALGORITHM
     62 #define NCRYPT_PBKDF2_ALGORITHM BCRYPT_PBKDF2_ALGORITHM
     63 #define NCRYPT_CAPI_KDF_ALGORITHM BCRYPT_CAPI_KDF_ALGORITHM
     64 #endif
     65 
     66 #define NCRYPT_KEY_STORAGE_ALGORITHM L"KEY_STORAGE"
     67 
     68 #define NCRYPT_CIPHER_INTERFACE BCRYPT_CIPHER_INTERFACE
     69 #define NCRYPT_HASH_INTERFACE BCRYPT_HASH_INTERFACE
     70 #define NCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE
     71 #define NCRYPT_SECRET_AGREEMENT_INTERFACE BCRYPT_SECRET_AGREEMENT_INTERFACE
     72 #define NCRYPT_SIGNATURE_INTERFACE BCRYPT_SIGNATURE_INTERFACE
     73 #if NTDDI_VERSION >= 0x06020000
     74 #define NCRYPT_KEY_DERIVATION_INTERFACE BCRYPT_KEY_DERIVATION_INTERFACE
     75 #endif
     76 
     77 #define NCRYPT_KEY_STORAGE_INTERFACE 0x00010001
     78 #define NCRYPT_SCHANNEL_INTERFACE 0x00010002
     79 #define NCRYPT_SCHANNEL_SIGNATURE_INTERFACE 0x00010003
     80 #if NTDDI_VERSION >= 0x06020000
     81 #define NCRYPT_KEY_PROTECTION_INTERFACE 0x00010004
     82 #endif
     83 
     84 #define NCRYPT_RSA_ALGORITHM_GROUP NCRYPT_RSA_ALGORITHM
     85 #define NCRYPT_DH_ALGORITHM_GROUP NCRYPT_DH_ALGORITHM
     86 #define NCRYPT_DSA_ALGORITHM_GROUP NCRYPT_DSA_ALGORITHM
     87 #define NCRYPT_ECDSA_ALGORITHM_GROUP L"ECDSA"
     88 #define NCRYPT_ECDH_ALGORITHM_GROUP L"ECDH"
     89 
     90 #if NTDDI_VERSION >= 0x06020000
     91 #define NCRYPT_AES_ALGORITHM_GROUP NCRYPT_AES_ALGORITHM
     92 #define NCRYPT_RC2_ALGORITHM_GROUP NCRYPT_RC2_ALGORITHM
     93 #define NCRYPT_DES_ALGORITHM_GROUP L"DES"
     94 #define NCRYPT_KEY_DERIVATION_GROUP L"KEY_DERIVATION"
     95 #endif
     96 
     97 #define NCRYPTBUFFER_VERSION 0
     98 
     99 #define NCRYPTBUFFER_EMPTY 0
    100 #define NCRYPTBUFFER_DATA 1
    101 #define NCRYPTBUFFER_PROTECTION_DESCRIPTOR_STRING 3
    102 #define NCRYPTBUFFER_PROTECTION_FLAGS 4
    103 
    104 #define NCRYPTBUFFER_SSL_CLIENT_RANDOM 20
    105 #define NCRYPTBUFFER_SSL_SERVER_RANDOM 21
    106 #define NCRYPTBUFFER_SSL_HIGHEST_VERSION 22
    107 #define NCRYPTBUFFER_SSL_CLEAR_KEY 23
    108 #define NCRYPTBUFFER_SSL_KEY_ARG_DATA 24
    109 
    110 #define NCRYPTBUFFER_PKCS_OID 40
    111 #define NCRYPTBUFFER_PKCS_ALG_OID 41
    112 #define NCRYPTBUFFER_PKCS_ALG_PARAM 42
    113 #define NCRYPTBUFFER_PKCS_ALG_ID 43
    114 #define NCRYPTBUFFER_PKCS_ATTRS 44
    115 #define NCRYPTBUFFER_PKCS_KEY_NAME 45
    116 #define NCRYPTBUFFER_PKCS_SECRET 46
    117 #define NCRYPTBUFFER_CERT_BLOB 47
    118 
    119 #define NCRYPT_NO_PADDING_FLAG 0x1
    120 #define NCRYPT_PAD_PKCS1_FLAG 0x2
    121 #define NCRYPT_PAD_OAEP_FLAG 0x4
    122 #define NCRYPT_PAD_PSS_FLAG 0x8
    123 #if NTDDI_VERSION >= 0x06020000
    124 #define NCRYPT_PAD_CIPHER_FLAG 0x10
    125 
    126 #define NCRYPT_CIPHER_NO_PADDING_FLAG 0x0
    127 #define NCRYPT_CIPHER_BLOCK_PADDING_FLAG 0x1
    128 #define NCRYPT_CIPHER_OTHER_PADDING_FLAG 0x2
    129 #endif
    130 
    131 #ifndef HCRYPTPROV_DEFINED
    132 #define HCRYPTPROV_DEFINED
    133   typedef ULONG_PTR HCRYPTPROV;
    134   typedef ULONG_PTR HCRYPTKEY;
    135   typedef ULONG_PTR HCRYPTHASH;
    136 #endif
    137 
    138   typedef LPVOID (WINAPI *PFN_NCRYPT_ALLOC) (SIZE_T cbSize);
    139   typedef VOID (WINAPI *PFN_NCRYPT_FREE) (LPVOID pv);
    140 
    141   typedef struct NCRYPT_ALLOC_PARA {
    142     DWORD cbSize;
    143     PFN_NCRYPT_ALLOC pfnAlloc;
    144     PFN_NCRYPT_FREE pfnFree;
    145   } NCRYPT_ALLOC_PARA;
    146 
    147   typedef BCryptBuffer NCryptBuffer;
    148   typedef BCryptBuffer *PNCryptBuffer;
    149   typedef BCryptBufferDesc NCryptBufferDesc;
    150   typedef BCryptBufferDesc *PNCryptBufferDesc;
    151 
    152   typedef ULONG_PTR NCRYPT_HANDLE;
    153   typedef ULONG_PTR NCRYPT_PROV_HANDLE;
    154   typedef ULONG_PTR NCRYPT_KEY_HANDLE;
    155   typedef ULONG_PTR NCRYPT_HASH_HANDLE;
    156   typedef ULONG_PTR NCRYPT_SECRET_HANDLE;
    157 
    158 #if NTDDI_VERSION >= 0x06020000
    159   typedef struct _NCRYPT_CIPHER_PADDING_INFO {
    160     ULONG cbSize;
    161     DWORD dwFlags;
    162     PUCHAR pbIV;
    163     ULONG cbIV;
    164     PUCHAR pbOtherInfo;
    165     ULONG cbOtherInfo;
    166   } NCRYPT_CIPHER_PADDING_INFO,*PNCRYPT_CIPHER_PADDING_INFO;
    167 #endif
    168 
    169 #define NCRYPT_NO_KEY_VALIDATION BCRYPT_NO_KEY_VALIDATION
    170 #define NCRYPT_MACHINE_KEY_FLAG 0x20
    171 #define NCRYPT_SILENT_FLAG 0x40
    172 #define NCRYPT_OVERWRITE_KEY_FLAG 0x80
    173 #ifndef NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG
    174 #define NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG 0x200
    175 #endif
    176 #ifndef NCRYPT_DO_NOT_FINALIZE_FLAG
    177 #define NCRYPT_DO_NOT_FINALIZE_FLAG 0x400
    178 #endif
    179 #define NCRYPT_PERSIST_ONLY_FLAG 0x40000000
    180 #define NCRYPT_PERSIST_FLAG 0x80000000
    181 #define NCRYPT_REGISTER_NOTIFY_FLAG 0x1
    182 #define NCRYPT_UNREGISTER_NOTIFY_FLAG 0x2
    183 
    184 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
    185 #define NCRYPT_CIPHER_OPERATION BCRYPT_CIPHER_OPERATION
    186 #define NCRYPT_HASH_OPERATION BCRYPT_HASH_OPERATION
    187 #define NCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION BCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION
    188 #define NCRYPT_SECRET_AGREEMENT_OPERATION BCRYPT_SECRET_AGREEMENT_OPERATION
    189 #define NCRYPT_SIGNATURE_OPERATION BCRYPT_SIGNATURE_OPERATION
    190 #define NCRYPT_RNG_OPERATION BCRYPT_RNG_OPERATION
    191 #if NTDDI_VERSION >= 0x06020000
    192 #define NCRYPT_KEY_DERIVATION_OPERATION BCRYPT_KEY_DERIVATION_OPERATION
    193 #endif
    194 
    195 #define NCRYPT_MACHINE_KEY_FLAG 0x20
    196 
    197 #define NCRYPT_MACHINE_KEY_FLAG 0x20
    198 #define NCRYPT_SILENT_FLAG 0x40
    199 #define NCRYPT_MACHINE_KEY_FLAG 0x20
    200 #define NCRYPT_OVERWRITE_KEY_FLAG 0x80
    201 
    202   typedef struct _NCryptAlgorithmName {
    203     LPWSTR pszName;
    204     DWORD dwClass;
    205     DWORD dwAlgOperations;
    206     DWORD dwFlags;
    207   } NCryptAlgorithmName;
    208 
    209   typedef struct NCryptKeyName {
    210     LPWSTR pszName;
    211     LPWSTR pszAlgid;
    212     DWORD dwLegacyKeySpec;
    213     DWORD dwFlags;
    214   } NCryptKeyName;
    215 
    216   typedef struct NCryptProviderName {
    217     LPWSTR pszName;
    218     LPWSTR pszComment;
    219   } NCryptProviderName;
    220 
    221   SECURITY_STATUS WINAPI NCryptOpenStorageProvider (NCRYPT_PROV_HANDLE *phProvider, LPCWSTR pszProviderName, DWORD dwFlags);
    222   SECURITY_STATUS WINAPI NCryptEnumAlgorithms (NCRYPT_PROV_HANDLE hProvider, DWORD dwAlgOperations, DWORD *pdwAlgCount, NCryptAlgorithmName **ppAlgList, DWORD dwFlags);
    223   SECURITY_STATUS WINAPI NCryptIsAlgSupported (NCRYPT_PROV_HANDLE hProvider, LPCWSTR pszAlgId, DWORD dwFlags);
    224   SECURITY_STATUS WINAPI NCryptEnumKeys (NCRYPT_PROV_HANDLE hProvider, LPCWSTR pszScope, NCryptKeyName **ppKeyName, PVOID *ppEnumState, DWORD dwFlags);
    225   SECURITY_STATUS WINAPI NCryptEnumStorageProviders (DWORD *pdwProviderCount, NCryptProviderName **ppProviderList, DWORD dwFlags);
    226   SECURITY_STATUS WINAPI NCryptFreeBuffer (PVOID pvInput);
    227   SECURITY_STATUS WINAPI NCryptOpenKey (NCRYPT_PROV_HANDLE hProvider, NCRYPT_KEY_HANDLE *phKey, LPCWSTR pszKeyName, DWORD dwLegacyKeySpec, DWORD dwFlags);
    228   SECURITY_STATUS WINAPI NCryptCreatePersistedKey (NCRYPT_PROV_HANDLE hProvider, NCRYPT_KEY_HANDLE *phKey, LPCWSTR pszAlgId, LPCWSTR pszKeyName, DWORD dwLegacyKeySpec, DWORD dwFlags);
    229 
    230 #define NCRYPT_NAME_PROPERTY L"Name"
    231 #define NCRYPT_UNIQUE_NAME_PROPERTY L"Unique Name"
    232 #define NCRYPT_ALGORITHM_PROPERTY L"Algorithm Name"
    233 #define NCRYPT_LENGTH_PROPERTY L"Length"
    234 #define NCRYPT_LENGTHS_PROPERTY L"Lengths"
    235 #define NCRYPT_BLOCK_LENGTH_PROPERTY L"Block Length"
    236 #if NTDDI_VERSION >= 0x06020000
    237 #define NCRYPT_CHAINING_MODE_PROPERTY L"Chaining Mode"
    238 #define NCRYPT_AUTH_TAG_LENGTH L"AuthTagLength"
    239 #endif
    240 #define NCRYPT_UI_POLICY_PROPERTY L"UI Policy"
    241 #define NCRYPT_EXPORT_POLICY_PROPERTY L"Export Policy"
    242 #define NCRYPT_WINDOW_HANDLE_PROPERTY L"HWND Handle"
    243 #define NCRYPT_USE_CONTEXT_PROPERTY L"Use Context"
    244 #define NCRYPT_IMPL_TYPE_PROPERTY L"Impl Type"
    245 #define NCRYPT_KEY_USAGE_PROPERTY L"Key Usage"
    246 #define NCRYPT_KEY_TYPE_PROPERTY L"Key Type"
    247 #define NCRYPT_VERSION_PROPERTY L"Version"
    248 #define NCRYPT_SECURITY_DESCR_SUPPORT_PROPERTY L"Security Descr Support"
    249 #define NCRYPT_SECURITY_DESCR_PROPERTY L"Security Descr"
    250 #define NCRYPT_USE_COUNT_ENABLED_PROPERTY L"Enabled Use Count"
    251 #define NCRYPT_USE_COUNT_PROPERTY L"Use Count"
    252 #define NCRYPT_LAST_MODIFIED_PROPERTY L"Modified"
    253 #define NCRYPT_MAX_NAME_LENGTH_PROPERTY L"Max Name Length"
    254 #define NCRYPT_ALGORITHM_GROUP_PROPERTY L"Algorithm Group"
    255 #define NCRYPT_DH_PARAMETERS_PROPERTY BCRYPT_DH_PARAMETERS
    256 #define NCRYPT_PROVIDER_HANDLE_PROPERTY L"Provider Handle"
    257 #define NCRYPT_PIN_PROPERTY L"SmartCardPin"
    258 #define NCRYPT_READER_PROPERTY L"SmartCardReader"
    259 #define NCRYPT_SMARTCARD_GUID_PROPERTY L"SmartCardGuid"
    260 #define NCRYPT_CERTIFICATE_PROPERTY L"SmartCardKeyCertificate"
    261 #define NCRYPT_PIN_PROMPT_PROPERTY L"SmartCardPinPrompt"
    262 #define NCRYPT_USER_CERTSTORE_PROPERTY L"SmartCardUserCertStore"
    263 #define NCRYPT_ROOT_CERTSTORE_PROPERTY L"SmartcardRootCertStore"
    264 #define NCRYPT_SECURE_PIN_PROPERTY L"SmartCardSecurePin"
    265 #define NCRYPT_ASSOCIATED_ECDH_KEY L"SmartCardAssociatedECDHKey"
    266 #define NCRYPT_SCARD_PIN_ID L"SmartCardPinId"
    267 #define NCRYPT_SCARD_PIN_INFO L"SmartCardPinInfo"
    268 
    269 #if NTDDI_VERSION >= 0x06020000
    270 #define NCRYPT_READER_ICON_PROPERTY L"SmartCardReaderIcon"
    271 #define NCRYPT_KDF_SECRET_VALUE L"KDFKeySecret"
    272 
    273 #define NCRYPT_PCP_PLATFORM_TYPE_PROPERTY L"PCP_PLATFORM_TYPE"
    274 #define NCRYPT_PCP_PROVIDER_VERSION_PROPERTY L"PCP_PROVIDER_VERSION"
    275 #define NCRYPT_PCP_EKPUB_PROPERTY L"PCP_EKPUB"
    276 #define NCRYPT_PCP_EKCERT_PROPERTY L"PCP_EKCERT"
    277 #define NCRYPT_PCP_EKNVCERT_PROPERTY L"PCP_EKNVCERT"
    278 #define NCRYPT_PCP_SRKPUB_PROPERTY L"PCP_SRKPUB"
    279 #define NCRYPT_PCP_PCRTABLE_PROPERTY L"PCP_PCRTABLE"
    280 #define NCRYPT_PCP_CHANGEPASSWORD_PROPERTY L"PCP_CHANGEPASSWORD"
    281 #define NCRYPT_PCP_PASSWORD_REQUIRED_PROPERTY L"PCP_PASSWORD_REQUIRED"
    282 #define NCRYPT_PCP_USAGEAUTH_PROPERTY L"PCP_USAGEAUTH"
    283 #define NCRYPT_PCP_MIGRATIONPASSWORD_PROPERTY L"PCP_MIGRATIONPASSWORD"
    284 #define NCRYPT_PCP_EXPORT_ALLOWED_PROPERTY L"PCP_EXPORT_ALLOWED"
    285 #define NCRYPT_PCP_STORAGEPARENT_PROPERTY L"PCP_STORAGEPARENT"
    286 #define NCRYPT_PCP_PROVIDERHANDLE_PROPERTY L"PCP_PROVIDERMHANDLE"
    287 #define NCRYPT_PCP_PLATFORMHANDLE_PROPERTY L"PCP_PLATFORMHANDLE"
    288 #define NCRYPT_PCP_PLATFORM_BINDING_PCRMASK_PROPERTY L"PCP_PLATFORM_BINDING_PCRMASK"
    289 #define NCRYPT_PCP_PLATFORM_BINDING_PCRDIGESTLIST_PROPERTY L"PCP_PLATFORM_BINDING_PCRDIGESTLIST"
    290 #define NCRYPT_PCP_PLATFORM_BINDING_PCRDIGEST_PROPERTY L"PCP_PLATFORM_BINDING_PCRDIGEST"
    291 #define NCRYPT_PCP_KEY_USAGE_POLICY_PROPERTY L"PCP_KEY_USAGE_POLICY"
    292 #define NCRYPT_PCP_TPM12_IDBINDING_PROPERTY L"PCP_TPM12_IDBINDING"
    293 #define NCRYPT_PCP_TPM12_IDACTIVATION_PROPERTY L"PCP_TPM12_IDACTIVATION"
    294 #define NCRYPT_PCP_KEYATTESTATION_PROPERTY L"PCP_TPM12_KEYATTESTATION"
    295 #define NCRYPT_PCP_ALTERNATE_KEY_STORAGE_LOCATION_PROPERTY L"PCP_ALTERNATE_KEY_STORAGE_LOCATION"
    296 
    297 #define NCRYPT_TPM12_PROVIDER (0x00010000)
    298 #define NCRYPT_PCP_SIGNATURE_KEY (0x1)
    299 #define NCRYPT_PCP_ENCRYPTION_KEY (0x2)
    300 #define NCRYPT_PCP_GENERIC_KEY (NCRYPT_PCP_SIGNATURE_KEY | NCRYPT_PCP_ENCRYPTION_KEY)
    301 #define NCRYPT_PCP_STORAGE_KEY (0x00000004)
    302 #define NCRYPT_PCP_IDENTITY_KEY (0x00000008)
    303 #endif
    304 
    305 #if NTDDI_VERSION >= 0x06020000
    306 #define NCRYPT_INITIALIZATION_VECTOR BCRYPT_INITIALIZATION_VECTOR
    307 #endif
    308 
    309 #define NCRYPT_MAX_PROPERTY_NAME 64
    310 
    311 #define NCRYPT_MAX_PROPERTY_DATA 0x100000
    312 
    313 #define NCRYPT_ALLOW_EXPORT_FLAG 0x1
    314 #define NCRYPT_ALLOW_PLAINTEXT_EXPORT_FLAG 0x2
    315 #define NCRYPT_ALLOW_ARCHIVING_FLAG 0x00000004
    316 #define NCRYPT_ALLOW_PLAINTEXT_ARCHIVING_FLAG 0x00000008
    317 
    318 #define NCRYPT_IMPL_HARDWARE_FLAG 0x1
    319 #define NCRYPT_IMPL_SOFTWARE_FLAG 0x2
    320 #define NCRYPT_IMPL_REMOVABLE_FLAG 0x00000008
    321 #define NCRYPT_IMPL_HARDWARE_RNG_FLAG 0x00000010
    322 
    323 #define NCRYPT_ALLOW_DECRYPT_FLAG 0x1
    324 #define NCRYPT_ALLOW_SIGNING_FLAG 0x2
    325 #define NCRYPT_ALLOW_KEY_AGREEMENT_FLAG 0x00000004
    326 #define NCRYPT_ALLOW_ALL_USAGES 0x00ffffff
    327 
    328 #define NCRYPT_UI_PROTECT_KEY_FLAG 0x1
    329 #define NCRYPT_UI_FORCE_HIGH_PROTECTION_FLAG 0x2
    330 
    331 #define NCRYPT_PERSIST_ONLY_FLAG 0x40000000
    332 #define NCRYPT_PERSIST_FLAG 0x80000000
    333 #define NCRYPT_PERSIST_ONLY_FLAG 0x40000000
    334 
    335 typedef struct __NCRYPT_UI_POLICY {
    336     DWORD dwVersion;
    337     DWORD dwFlags;
    338     LPCWSTR pszCreationTitle;
    339     LPCWSTR pszFriendlyName;
    340     LPCWSTR pszDescription;
    341   } NCRYPT_UI_POLICY;
    342 
    343   typedef struct __NCRYPT_SUPPORTED_LENGTHS {
    344     DWORD dwMinLength;
    345     DWORD dwMaxLength;
    346     DWORD dwIncrement;
    347     DWORD dwDefaultLength;
    348   } NCRYPT_SUPPORTED_LENGTHS;
    349 
    350   SECURITY_STATUS WINAPI NCryptGetProperty (NCRYPT_HANDLE hObject, LPCWSTR pszProperty, PBYTE pbOutput, DWORD cbOutput, DWORD *pcbResult, DWORD dwFlags);
    351   SECURITY_STATUS WINAPI NCryptSetProperty (NCRYPT_HANDLE hObject, LPCWSTR pszProperty, PBYTE pbInput, DWORD cbInput, DWORD dwFlags);
    352   SECURITY_STATUS WINAPI NCryptFinalizeKey (NCRYPT_KEY_HANDLE hKey, DWORD dwFlags);
    353   SECURITY_STATUS WINAPI NCryptEncrypt (NCRYPT_KEY_HANDLE hKey, PBYTE pbInput, DWORD cbInput, VOID *pPaddingInfo, PBYTE pbOutput, DWORD cbOutput, DWORD *pcbResult, DWORD dwFlags);
    354   SECURITY_STATUS WINAPI NCryptDecrypt (NCRYPT_KEY_HANDLE hKey, PBYTE pbInput, DWORD cbInput, VOID *pPaddingInfo, PBYTE pbOutput, DWORD cbOutput, DWORD *pcbResult, DWORD dwFlags);
    355 
    356 #if NTDDI_VERSION >= 0x06020000
    357   typedef struct _NCRYPT_KEY_BLOB_HEADER {
    358     ULONG cbSize;
    359     ULONG dwMagic;
    360     ULONG cbAlgName;
    361     ULONG cbKeyData;
    362   } NCRYPT_KEY_BLOB_HEADER,*PNCRYPT_KEY_BLOB_HEADER;
    363 
    364 #define NCRYPT_CIPHER_KEY_BLOB_MAGIC 0x52485043
    365 #define NCRYPT_PROTECTED_KEY_BLOB_MAGIC 0x4b545250
    366 
    367 #define NCRYPT_CIPHER_KEY_BLOB L"CipherKeyBlob"
    368 #define NCRYPT_PROTECTED_KEY_BLOB L"ProtectedKeyBlob"
    369 #endif
    370 
    371 #define NCRYPT_PKCS7_ENVELOPE_BLOB L"PKCS7_ENVELOPE"
    372 #define NCRYPT_PKCS8_PRIVATE_KEY_BLOB L"PKCS8_PRIVATEKEY"
    373 #define NCRYPT_OPAQUETRANSPORT_BLOB L"OpaqueTransport"
    374 
    375 #define NCRYPT_MACHINE_KEY_FLAG 0x20
    376 #define NCRYPT_EXPORT_LEGACY_FLAG 0x00000800
    377 
    378 #define NCRYPT_REGISTER_NOTIFY_FLAG 0x1
    379 #define NCRYPT_UNREGISTER_NOTIFY_FLAG 0x2
    380 #define NCRYPT_MACHINE_KEY_FLAG 0x20
    381 
    382 #define NCRYPT_KEY_STORAGE_INTERFACE_VERSION BCRYPT_MAKE_INTERFACE_VERSION (1, 0)
    383 #define NCRYPT_KEY_STORAGE_INTERFACE_VERSION_2 BCRYPT_MAKE_INTERFACE_VERSION (2, 0)
    384 
    385   SECURITY_STATUS WINAPI NCryptImportKey (NCRYPT_PROV_HANDLE hProvider, NCRYPT_KEY_HANDLE hImportKey, LPCWSTR pszBlobType, NCryptBufferDesc *pParameterList, NCRYPT_KEY_HANDLE *phKey, PBYTE pbData, DWORD cbData, DWORD dwFlags);
    386   SECURITY_STATUS WINAPI NCryptExportKey (NCRYPT_KEY_HANDLE hKey, NCRYPT_KEY_HANDLE hExportKey, LPCWSTR pszBlobType, NCryptBufferDesc *pParameterList, PBYTE pbOutput, DWORD cbOutput, DWORD *pcbResult, DWORD dwFlags);
    387   SECURITY_STATUS WINAPI NCryptSignHash (NCRYPT_KEY_HANDLE hKey, VOID *pPaddingInfo, PBYTE pbHashValue, DWORD cbHashValue, PBYTE pbSignature, DWORD cbSignature, DWORD *pcbResult, DWORD dwFlags);
    388   SECURITY_STATUS WINAPI NCryptVerifySignature (NCRYPT_KEY_HANDLE hKey, VOID *pPaddingInfo, PBYTE pbHashValue, DWORD cbHashValue, PBYTE pbSignature, DWORD cbSignature, DWORD dwFlags);
    389   SECURITY_STATUS WINAPI NCryptDeleteKey (NCRYPT_KEY_HANDLE hKey, DWORD dwFlags);
    390   SECURITY_STATUS WINAPI NCryptFreeObject (NCRYPT_HANDLE hObject);
    391   WINBOOL WINAPI NCryptIsKeyHandle (NCRYPT_KEY_HANDLE hKey);
    392   SECURITY_STATUS WINAPI NCryptTranslateHandle (NCRYPT_PROV_HANDLE *phProvider, NCRYPT_KEY_HANDLE *phKey, HCRYPTPROV hLegacyProv, HCRYPTKEY hLegacyKey, DWORD dwLegacyKeySpec, DWORD dwFlags);
    393   SECURITY_STATUS WINAPI NCryptNotifyChangeKey (NCRYPT_PROV_HANDLE hProvider, HANDLE *phEvent, DWORD dwFlags);
    394   SECURITY_STATUS WINAPI NCryptSecretAgreement (NCRYPT_KEY_HANDLE hPrivKey, NCRYPT_KEY_HANDLE hPubKey, NCRYPT_SECRET_HANDLE *phAgreedSecret, DWORD dwFlags);
    395   SECURITY_STATUS WINAPI NCryptDeriveKey (NCRYPT_SECRET_HANDLE hSharedSecret, LPCWSTR pwszKDF, NCryptBufferDesc *pParameterList, PBYTE pbDerivedKey, DWORD cbDerivedKey, DWORD *pcbResult, ULONG dwFlags);
    396 #if NTDDI_VERSION >= 0x06020000
    397   SECURITY_STATUS WINAPI NCryptKeyDerivation (NCRYPT_KEY_HANDLE hKey, NCryptBufferDesc *pParameterList, PUCHAR pbDerivedKey, DWORD cbDerivedKey, DWORD *pcbResult, ULONG dwFlags);
    398 #endif
    399 #endif
    400 
    401 #ifdef __cplusplus
    402 }
    403 #endif
    404 #endif
    405