ncrypt.h 17 KB

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