| 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) || _WIN32_WINNT >= 0x0A00 |
| 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 |
#if NTDDI_VERSION >= NTDDI_WINTHRESHOLD |
| 400 |
SECURITY_STATUS WINAPI NCryptCreateClaim (NCRYPT_KEY_HANDLE hSubjectKey, NCRYPT_KEY_HANDLE hAuthorityKey, DWORD dwClaimType, NCryptBufferDesc *pParameterList, PBYTE pbClaimBlob, DWORD cbClaimBlob, DWORD *pcbResult, DWORD dwFlags); |
| 401 |
SECURITY_STATUS WINAPI NCryptVerifyClaim (NCRYPT_KEY_HANDLE hSubjectKey, NCRYPT_KEY_HANDLE hAuthorityKey, DWORD dwClaimType, NCryptBufferDesc *pParameterList, PBYTE pbClaimBlob, DWORD cbClaimBlob, NCryptBufferDesc *pOutput, DWORD dwFlags); |
| 402 |
#endif |
| 403 |
#endif |
| 404 |
|
| 405 |
#ifdef __cplusplus |
| 406 |
} |
| 407 |
#endif |
| 408 |
#endif |