| 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 | |
| 6 | #include <winapifamily.h> |
| 7 | |
| 8 | #ifndef __BCRYPT_H__ |
| 9 | #define __BCRYPT_H__ |
| 10 | |
| 11 | #ifdef __cplusplus |
| 12 | extern "C" { |
| 13 | #endif |
| 14 | |
| 15 | #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || _WIN32_WINNT >= 0x0A00 |
| 16 | |
| 17 | #ifndef WINAPI |
| 18 | #if defined(_ARM_) |
| 19 | #define WINAPI |
| 20 | #else |
| 21 | #define WINAPI __stdcall |
| 22 | #endif |
| 23 | #endif |
| 24 | |
| 25 | #if !defined (_NTDEF_) && !defined (_NTSTATUS_PSDK) |
| 26 | #define _NTSTATUS_PSDK |
| 27 | typedef LONG NTSTATUS,*PNTSTATUS; |
| 28 | #endif |
| 29 | |
| 30 | #ifndef BCRYPT_SUCCESS |
| 31 | #define BCRYPT_SUCCESS(Status) (((NTSTATUS) (Status)) >= 0) |
| 32 | #endif |
| 33 | |
| 34 | #ifndef CONST |
| 35 | #define CONST const |
| 36 | #endif |
| 37 | #ifndef _NO_W32_PSEUDO_MODIFIERS |
| 38 | #ifndef IN |
| 39 | #define IN |
| 40 | #endif |
| 41 | #ifndef OUT |
| 42 | #define OUT |
| 43 | #endif |
| 44 | #ifndef OPTIONAL |
| 45 | #define OPTIONAL |
| 46 | #endif |
| 47 | #endif |
| 48 | |
| 49 | #define BCRYPT_OBJECT_ALIGNMENT 16 |
| 50 | |
| 51 | #define BCRYPT_STRUCT_ALIGNMENT |
| 52 | |
| 53 | #define BCRYPT_KDF_HASH L"HASH" |
| 54 | #define BCRYPT_KDF_HMAC L"HMAC" |
| 55 | #define BCRYPT_KDF_TLS_PRF L"TLS_PRF" |
| 56 | #define BCRYPT_KDF_SP80056A_CONCAT L"SP800_56A_CONCAT" |
| 57 | |
| 58 | #if NTDDI_VERSION >= NTDDI_WINBLUE |
| 59 | #define BCRYPT_KDF_RAW_SECRET L"TRUNCATE" |
| 60 | #endif |
| 61 | |
| 62 | #if NTDDI_VERSION >= NTDDI_WIN10_RS4 |
| 63 | #define BCRYPT_KDF_HKDF L"HKDF" |
| 64 | #endif |
| 65 | |
| 66 | #define KDF_HASH_ALGORITHM 0x0 |
| 67 | #define KDF_SECRET_PREPEND 0x1 |
| 68 | #define KDF_SECRET_APPEND 0x2 |
| 69 | #define KDF_HMAC_KEY 0x3 |
| 70 | #define KDF_TLS_PRF_LABEL 0x4 |
| 71 | #define KDF_TLS_PRF_SEED 0x5 |
| 72 | #define KDF_SECRET_HANDLE 0x6 |
| 73 | #if NTDDI_VERSION >= NTDDI_WIN7 |
| 74 | #define KDF_TLS_PRF_PROTOCOL 0x7 |
| 75 | #define KDF_ALGORITHMID 0x8 |
| 76 | #define KDF_PARTYUINFO 0x9 |
| 77 | #define KDF_PARTYVINFO 0xa |
| 78 | #define KDF_SUPPPUBINFO 0xb |
| 79 | #define KDF_SUPPPRIVINFO 0xc |
| 80 | #endif |
| 81 | #if NTDDI_VERSION >= NTDDI_WIN8 |
| 82 | #define KDF_LABEL 0xd |
| 83 | #define KDF_CONTEXT 0xe |
| 84 | #define KDF_SALT 0xf |
| 85 | #define KDF_ITERATION_COUNT 0x10 |
| 86 | #define KDF_GENERIC_PARAMETER 0x11 |
| 87 | #define KDF_KEYBITLENGTH 0x12 |
| 88 | #endif |
| 89 | #if NTDDI_VERSION >= NTDDI_WIN10_RS4 |
| 90 | #define KDF_HKDF_SALT 0x13 |
| 91 | #define KDF_HKDF_INFO 0x14 |
| 92 | #endif |
| 93 | |
| 94 | #define KDF_USE_SECRET_AS_HMAC_KEY_FLAG 1 |
| 95 | |
| 96 | #define BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO_VERSION 1 |
| 97 | |
| 98 | #define BCRYPT_AUTH_MODE_CHAIN_CALLS_FLAG 0x00000001 |
| 99 | #define BCRYPT_AUTH_MODE_IN_PROGRESS_FLAG 0x00000002 |
| 100 | |
| 101 | #define BCRYPT_INIT_AUTH_MODE_INFO(_AUTH_INFO_STRUCT_) \ |
| 102 | RtlZeroMemory ((&_AUTH_INFO_STRUCT_), sizeof (BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO)); \ |
| 103 | (_AUTH_INFO_STRUCT_).cbSize = sizeof (BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO); \ |
| 104 | (_AUTH_INFO_STRUCT_).dwInfoVersion = BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO_VERSION; |
| 105 | |
| 106 | #define BCRYPT_OPAQUE_KEY_BLOB L"OpaqueKeyBlob" |
| 107 | #define BCRYPT_KEY_DATA_BLOB L"KeyDataBlob" |
| 108 | #if NTDDI_VERSION >= NTDDI_WIN7 |
| 109 | #define BCRYPT_AES_WRAP_KEY_BLOB L"Rfc3565KeyWrapBlob" |
| 110 | #endif |
| 111 | |
| 112 | #define BCRYPT_ALGORITHM_NAME L"AlgorithmName" |
| 113 | #define BCRYPT_AUTH_TAG_LENGTH L"AuthTagLength" |
| 114 | #define BCRYPT_BLOCK_LENGTH L"BlockLength" |
| 115 | #define BCRYPT_BLOCK_SIZE_LIST L"BlockSizeList" |
| 116 | #define BCRYPT_CHAINING_MODE L"ChainingMode" |
| 117 | #define BCRYPT_CHAIN_MODE_CBC L"ChainingModeCBC" |
| 118 | #define BCRYPT_CHAIN_MODE_CCM L"ChainingModeCCM" |
| 119 | #define BCRYPT_CHAIN_MODE_CFB L"ChainingModeCFB" |
| 120 | #define BCRYPT_CHAIN_MODE_ECB L"ChainingModeECB" |
| 121 | #define BCRYPT_CHAIN_MODE_GCM L"ChainingModeGCM" |
| 122 | #define BCRYPT_CHAIN_MODE_NA L"ChainingModeN/A" |
| 123 | #define BCRYPT_EFFECTIVE_KEY_LENGTH L"EffectiveKeyLength" |
| 124 | #define BCRYPT_HASH_BLOCK_LENGTH L"HashBlockLength" |
| 125 | #define BCRYPT_HASH_LENGTH L"HashDigestLength" |
| 126 | #define BCRYPT_HASH_OID_LIST L"HashOIDList" |
| 127 | #define BCRYPT_INITIALIZATION_VECTOR L"IV" |
| 128 | #define BCRYPT_IS_KEYED_HASH L"IsKeyedHash" |
| 129 | #define BCRYPT_IS_REUSABLE_HASH L"IsReusableHash" |
| 130 | #define BCRYPT_KEY_LENGTH L"KeyLength" |
| 131 | #define BCRYPT_KEY_LENGTHS L"KeyLengths" |
| 132 | #define BCRYPT_KEY_OBJECT_LENGTH L"KeyObjectLength" |
| 133 | #define BCRYPT_KEY_STRENGTH L"KeyStrength" |
| 134 | #define BCRYPT_MESSAGE_BLOCK_LENGTH L"MessageBlockLength" |
| 135 | #define BCRYPT_OBJECT_LENGTH L"ObjectLength" |
| 136 | #define BCRYPT_PADDING_SCHEMES L"PaddingSchemes" |
| 137 | #define BCRYPT_PCP_PLATFORM_TYPE_PROPERTY L"PCP_PLATFORM_TYPE" |
| 138 | #define BCRYPT_PCP_PROVIDER_VERSION_PROPERTY L"PCP_PROVIDER_VERSION" |
| 139 | #define BCRYPT_PRIMITIVE_TYPE L"PrimitiveType" |
| 140 | #define BCRYPT_PROVIDER_HANDLE L"ProviderHandle" |
| 141 | #define BCRYPT_PUBLIC_KEY_LENGTH L"PublicKeyLength" |
| 142 | #define BCRYPT_SIGNATURE_LENGTH L"SignatureLength" |
| 143 | #if (NTDDI_VERSION > NTDDI_WINBLUE || (NTDDI_VERSION == NTDDI_WINBLUE && defined(WINBLUE_KBSPRING14))) |
| 144 | #define BCRYPT_MULTI_OBJECT_LENGTH L"MultiObjectLength" |
| 145 | #endif |
| 146 | #if NTDDI_VERSION >= NTDDI_WIN10_RS4 |
| 147 | #define BCRYPT_IS_IFX_TPM_WEAK_KEY L"IsIfxTpmWeakKey" |
| 148 | #define BCRYPT_HKDF_HASH_ALGORITHM L"HkdfHashAlgorithm" |
| 149 | #define BCRYPT_HKDF_SALT_AND_FINALIZE L"HkdfSaltAndFinalize" |
| 150 | #define BCRYPT_HKDF_PRK_AND_FINALIZE L"HkdfPrkAndFinalize" |
| 151 | #endif |
| 152 | |
| 153 | #if NTDDI_VERSION >= NTDDI_WIN11_ZN |
| 154 | #define BCRYPT_FUNCTION_NAME_STRING L"FunctionNameString" |
| 155 | #define BCRYPT_CUSTOMIZATION_STRING L"CustomizationString" |
| 156 | #endif |
| 157 | |
| 158 | #if NTDDI_VERSION >= NTDDI_WIN11_GA |
| 159 | #define BCRYPT_CHAIN_MODE_KWP L"ChainingModeKWP" |
| 160 | #endif |
| 161 | |
| 162 | #define BCRYPT_SUPPORTED_PAD_ROUTER 0x00000001 |
| 163 | #define BCRYPT_SUPPORTED_PAD_PKCS1_ENC 0x00000002 |
| 164 | #define BCRYPT_SUPPORTED_PAD_PKCS1_SIG 0x00000004 |
| 165 | #define BCRYPT_SUPPORTED_PAD_OAEP 0x00000008 |
| 166 | #define BCRYPT_SUPPORTED_PAD_PSS 0x00000010 |
| 167 | |
| 168 | #define BCRYPT_PROV_DISPATCH 0x00000001 |
| 169 | |
| 170 | #define BCRYPT_BLOCK_PADDING 0x00000001 |
| 171 | |
| 172 | #if NTDDI_VERSION >= NTDDI_WIN10_CO |
| 173 | #define BCRYPT_GENERATE_IV 0x00000020 |
| 174 | #endif |
| 175 | |
| 176 | #define BCRYPT_PAD_NONE 0x00000001 |
| 177 | #define BCRYPT_PAD_PKCS1 0x00000002 |
| 178 | #define BCRYPT_PAD_OAEP 0x00000004 |
| 179 | #define BCRYPT_PAD_PSS 0x00000008 |
| 180 | #if NTDDI_VERSION >= NTDDI_WINBLUE |
| 181 | #define BCRYPT_PAD_PKCS1_OPTIONAL_HASH_OID 0x00000010 |
| 182 | #endif |
| 183 | |
| 184 | #define BCRYPTBUFFER_VERSION 0 |
| 185 | |
| 186 | typedef struct __BCRYPT_KEY_LENGTHS_STRUCT { |
| 187 | ULONG dwMinLength; |
| 188 | ULONG dwMaxLength; |
| 189 | ULONG dwIncrement; |
| 190 | } BCRYPT_KEY_LENGTHS_STRUCT; |
| 191 | |
| 192 | typedef BCRYPT_KEY_LENGTHS_STRUCT BCRYPT_AUTH_TAG_LENGTHS_STRUCT; |
| 193 | |
| 194 | typedef struct _BCRYPT_OID { |
| 195 | ULONG cbOID; |
| 196 | PUCHAR pbOID; |
| 197 | } BCRYPT_OID; |
| 198 | |
| 199 | typedef struct _BCRYPT_OID_LIST { |
| 200 | ULONG dwOIDCount; |
| 201 | BCRYPT_OID *pOIDs; |
| 202 | } BCRYPT_OID_LIST; |
| 203 | |
| 204 | typedef struct _BCRYPT_PKCS1_PADDING_INFO { |
| 205 | LPCWSTR pszAlgId; |
| 206 | } BCRYPT_PKCS1_PADDING_INFO; |
| 207 | |
| 208 | typedef struct _BCRYPT_PSS_PADDING_INFO { |
| 209 | LPCWSTR pszAlgId; |
| 210 | ULONG cbSalt; |
| 211 | } BCRYPT_PSS_PADDING_INFO; |
| 212 | |
| 213 | typedef struct _BCRYPT_OAEP_PADDING_INFO { |
| 214 | LPCWSTR pszAlgId; |
| 215 | PUCHAR pbLabel; |
| 216 | ULONG cbLabel; |
| 217 | } BCRYPT_OAEP_PADDING_INFO; |
| 218 | |
| 219 | typedef struct _BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO { |
| 220 | ULONG cbSize; |
| 221 | ULONG dwInfoVersion; |
| 222 | PUCHAR pbNonce; |
| 223 | ULONG cbNonce; |
| 224 | PUCHAR pbAuthData; |
| 225 | ULONG cbAuthData; |
| 226 | PUCHAR pbTag; |
| 227 | ULONG cbTag; |
| 228 | PUCHAR pbMacContext; |
| 229 | ULONG cbMacContext; |
| 230 | ULONG cbAAD; |
| 231 | ULONGLONG cbData; |
| 232 | ULONG dwFlags; |
| 233 | } BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO,*PBCRYPT_AUTHENTICATED_CIPHER_MODE_INFO; |
| 234 | #endif |
| 235 | |
| 236 | #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP) || _WIN32_WINNT >= 0x0A00 |
| 237 | typedef struct _BCryptBuffer { |
| 238 | ULONG cbBuffer; |
| 239 | ULONG BufferType; |
| 240 | PVOID pvBuffer; |
| 241 | } BCryptBuffer,*PBCryptBuffer; |
| 242 | |
| 243 | typedef struct _BCryptBufferDesc { |
| 244 | ULONG ulVersion; |
| 245 | ULONG cBuffers; |
| 246 | PBCryptBuffer pBuffers; |
| 247 | } BCryptBufferDesc,*PBCryptBufferDesc; |
| 248 | #endif |
| 249 | |
| 250 | #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || _WIN32_WINNT >= 0x0A00 |
| 251 | |
| 252 | #define BCRYPT_PUBLIC_KEY_BLOB L"PUBLICBLOB" |
| 253 | #define BCRYPT_PRIVATE_KEY_BLOB L"PRIVATEBLOB" |
| 254 | |
| 255 | #define BCRYPT_RSAPUBLIC_BLOB L"RSAPUBLICBLOB" |
| 256 | #define BCRYPT_RSAPRIVATE_BLOB L"RSAPRIVATEBLOB" |
| 257 | #define LEGACY_RSAPUBLIC_BLOB L"CAPIPUBLICBLOB" |
| 258 | #define LEGACY_RSAPRIVATE_BLOB L"CAPIPRIVATEBLOB" |
| 259 | |
| 260 | #define BCRYPT_RSAPUBLIC_MAGIC 0x31415352 |
| 261 | #define BCRYPT_RSAPRIVATE_MAGIC 0x32415352 |
| 262 | |
| 263 | #define BCRYPT_RSAFULLPRIVATE_BLOB L"RSAFULLPRIVATEBLOB" |
| 264 | |
| 265 | #define BCRYPT_RSAFULLPRIVATE_MAGIC 0x33415352 |
| 266 | |
| 267 | #if NTDDI_VERSION >= NTDDI_WIN8 |
| 268 | #define BCRYPT_GLOBAL_PARAMETERS L"SecretAgreementParam" |
| 269 | #define BCRYPT_PRIVATE_KEY L"PrivKeyVal" |
| 270 | #endif |
| 271 | |
| 272 | #define BCRYPT_ECCPUBLIC_BLOB L"ECCPUBLICBLOB" |
| 273 | #define BCRYPT_ECCPRIVATE_BLOB L"ECCPRIVATEBLOB" |
| 274 | |
| 275 | #if NTDDI_VERSION >= NTDDI_WINTHRESHOLD |
| 276 | #define BCRYPT_ECCFULLPUBLIC_BLOB L"ECCFULLPUBLICBLOB" |
| 277 | #define BCRYPT_ECCFULLPRIVATE_BLOB L"ECCFULLPRIVATEBLOB" |
| 278 | #define SSL_ECCPUBLIC_BLOB L"SSLECCPUBLICBLOB" |
| 279 | #endif |
| 280 | #define TLS_13_PRE_SHARED_KEY L"TLS13PRESHAREDKEY" |
| 281 | |
| 282 | #define BCRYPT_ECDH_PUBLIC_P256_MAGIC 0x314b4345 |
| 283 | #define BCRYPT_ECDH_PRIVATE_P256_MAGIC 0x324b4345 |
| 284 | #define BCRYPT_ECDH_PUBLIC_P384_MAGIC 0x334b4345 |
| 285 | #define BCRYPT_ECDH_PRIVATE_P384_MAGIC 0x344b4345 |
| 286 | #define BCRYPT_ECDH_PUBLIC_P521_MAGIC 0x354b4345 |
| 287 | #define BCRYPT_ECDH_PRIVATE_P521_MAGIC 0x364b4345 |
| 288 | #if NTDDI_VERSION >= NTDDI_WINTHRESHOLD |
| 289 | #define BCRYPT_ECDH_PUBLIC_GENERIC_MAGIC 0x504B4345 |
| 290 | #define BCRYPT_ECDH_PRIVATE_GENERIC_MAGIC 0x564B4345 |
| 291 | #endif |
| 292 | |
| 293 | #define BCRYPT_ECDSA_PUBLIC_P256_MAGIC 0x31534345 |
| 294 | #define BCRYPT_ECDSA_PRIVATE_P256_MAGIC 0x32534345 |
| 295 | #define BCRYPT_ECDSA_PUBLIC_P384_MAGIC 0x33534345 |
| 296 | #define BCRYPT_ECDSA_PRIVATE_P384_MAGIC 0x34534345 |
| 297 | #define BCRYPT_ECDSA_PUBLIC_P521_MAGIC 0x35534345 |
| 298 | #define BCRYPT_ECDSA_PRIVATE_P521_MAGIC 0x36534345 |
| 299 | #if NTDDI_VERSION >= NTDDI_WINTHRESHOLD |
| 300 | #define BCRYPT_ECDSA_PUBLIC_GENERIC_MAGIC 0x50444345 |
| 301 | #define BCRYPT_ECDSA_PRIVATE_GENERIC_MAGIC 0x56444345 |
| 302 | #endif |
| 303 | |
| 304 | #define BCRYPT_DH_PUBLIC_BLOB L"DHPUBLICBLOB" |
| 305 | #define BCRYPT_DH_PRIVATE_BLOB L"DHPRIVATEBLOB" |
| 306 | #define LEGACY_DH_PUBLIC_BLOB L"CAPIDHPUBLICBLOB" |
| 307 | #define LEGACY_DH_PRIVATE_BLOB L"CAPIDHPRIVATEBLOB" |
| 308 | |
| 309 | #define BCRYPT_DH_PUBLIC_MAGIC 0x42504844 |
| 310 | #define BCRYPT_DH_PRIVATE_MAGIC 0x56504844 |
| 311 | |
| 312 | #define BCRYPT_DH_PARAMETERS L"DHParameters" |
| 313 | #define BCRYPT_DH_PARAMETERS_MAGIC 0x4d504844 |
| 314 | |
| 315 | #define BCRYPT_DSA_PUBLIC_BLOB L"DSAPUBLICBLOB" |
| 316 | #define BCRYPT_DSA_PRIVATE_BLOB L"DSAPRIVATEBLOB" |
| 317 | #define LEGACY_DSA_PUBLIC_BLOB L"CAPIDSAPUBLICBLOB" |
| 318 | #define LEGACY_DSA_PRIVATE_BLOB L"CAPIDSAPRIVATEBLOB" |
| 319 | #define LEGACY_DSA_V2_PUBLIC_BLOB L"V2CAPIDSAPUBLICBLOB" |
| 320 | #define LEGACY_DSA_V2_PRIVATE_BLOB L"V2CAPIDSAPRIVATEBLOB" |
| 321 | |
| 322 | #define BCRYPT_DSA_PUBLIC_MAGIC 0x42505344 |
| 323 | #define BCRYPT_DSA_PRIVATE_MAGIC 0x56505344 |
| 324 | #define BCRYPT_DSA_PUBLIC_MAGIC_V2 0x32425044 |
| 325 | #define BCRYPT_DSA_PRIVATE_MAGIC_V2 0x32565044 |
| 326 | |
| 327 | #define BCRYPT_KEY_DATA_BLOB_MAGIC 0x4d42444b |
| 328 | #define BCRYPT_KEY_DATA_BLOB_VERSION1 0x1 |
| 329 | |
| 330 | #define BCRYPT_DSA_PARAMETERS L"DSAParameters" |
| 331 | #define BCRYPT_DSA_PARAMETERS_MAGIC 0x4d505344 |
| 332 | #define BCRYPT_DSA_PARAMETERS_MAGIC_V2 0x324d5044 |
| 333 | |
| 334 | #define MS_PRIMITIVE_PROVIDER L"Microsoft Primitive Provider" |
| 335 | #define MS_PLATFORM_CRYPTO_PROVIDER L"Microsoft Platform Crypto Provider" |
| 336 | |
| 337 | #define BCRYPT_RSA_ALGORITHM L"RSA" |
| 338 | #define BCRYPT_RSA_SIGN_ALGORITHM L"RSA_SIGN" |
| 339 | #define BCRYPT_DH_ALGORITHM L"DH" |
| 340 | #define BCRYPT_DSA_ALGORITHM L"DSA" |
| 341 | #define BCRYPT_RC2_ALGORITHM L"RC2" |
| 342 | #define BCRYPT_RC4_ALGORITHM L"RC4" |
| 343 | #define BCRYPT_AES_ALGORITHM L"AES" |
| 344 | #define BCRYPT_DES_ALGORITHM L"DES" |
| 345 | #define BCRYPT_DESX_ALGORITHM L"DESX" |
| 346 | #define BCRYPT_3DES_ALGORITHM L"3DES" |
| 347 | #define BCRYPT_3DES_112_ALGORITHM L"3DES_112" |
| 348 | #define BCRYPT_MD2_ALGORITHM L"MD2" |
| 349 | #define BCRYPT_MD4_ALGORITHM L"MD4" |
| 350 | #define BCRYPT_MD5_ALGORITHM L"MD5" |
| 351 | #define BCRYPT_SHA1_ALGORITHM L"SHA1" |
| 352 | #define BCRYPT_SHA256_ALGORITHM L"SHA256" |
| 353 | #define BCRYPT_SHA384_ALGORITHM L"SHA384" |
| 354 | #define BCRYPT_SHA512_ALGORITHM L"SHA512" |
| 355 | #define BCRYPT_AES_GMAC_ALGORITHM L"AES-GMAC" |
| 356 | #define BCRYPT_AES_CMAC_ALGORITHM L"AES-CMAC" |
| 357 | #define BCRYPT_ECDSA_P256_ALGORITHM L"ECDSA_P256" |
| 358 | #define BCRYPT_ECDSA_P384_ALGORITHM L"ECDSA_P384" |
| 359 | #define BCRYPT_ECDSA_P521_ALGORITHM L"ECDSA_P521" |
| 360 | #define BCRYPT_ECDH_P256_ALGORITHM L"ECDH_P256" |
| 361 | #define BCRYPT_ECDH_P384_ALGORITHM L"ECDH_P384" |
| 362 | #define BCRYPT_ECDH_P521_ALGORITHM L"ECDH_P521" |
| 363 | #define BCRYPT_RNG_ALGORITHM L"RNG" |
| 364 | #define BCRYPT_RNG_FIPS186_DSA_ALGORITHM L"FIPS186DSARNG" |
| 365 | #define BCRYPT_RNG_DUAL_EC_ALGORITHM L"DUALECRNG" |
| 366 | #define BCRYPT_SP800108_CTR_HMAC_ALGORITHM L"SP800_108_CTR_HMAC" |
| 367 | #define BCRYPT_SP80056A_CONCAT_ALGORITHM L"SP800_56A_CONCAT" |
| 368 | #define BCRYPT_PBKDF2_ALGORITHM L"PBKDF2" |
| 369 | #define BCRYPT_CAPI_KDF_ALGORITHM L"CAPI_KDF" |
| 370 | |
| 371 | #define BCRYPT_CIPHER_INTERFACE 0x00000001 |
| 372 | #define BCRYPT_HASH_INTERFACE 0x00000002 |
| 373 | #define BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE 0x00000003 |
| 374 | #define BCRYPT_SECRET_AGREEMENT_INTERFACE 0x00000004 |
| 375 | #define BCRYPT_SIGNATURE_INTERFACE 0x00000005 |
| 376 | #define BCRYPT_RNG_INTERFACE 0x00000006 |
| 377 | #define BCRYPT_KEY_DERIVATION_INTERFACE 0x00000007 |
| 378 | |
| 379 | #if NTDDI_VERSION >= NTDDI_WINTHRESHOLD |
| 380 | #define BCRYPT_MD2_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000001) |
| 381 | #define BCRYPT_MD4_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000011) |
| 382 | #define BCRYPT_MD5_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000021) |
| 383 | #define BCRYPT_SHA1_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000031) |
| 384 | #define BCRYPT_SHA256_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000041) |
| 385 | #define BCRYPT_SHA384_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000051) |
| 386 | #define BCRYPT_SHA512_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000061) |
| 387 | #define BCRYPT_RC4_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000071) |
| 388 | #define BCRYPT_RNG_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000081) |
| 389 | #define BCRYPT_HMAC_MD5_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000091) |
| 390 | #define BCRYPT_HMAC_SHA1_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000000a1) |
| 391 | #define BCRYPT_HMAC_SHA256_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000000b1) |
| 392 | #define BCRYPT_HMAC_SHA384_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000000c1) |
| 393 | #define BCRYPT_HMAC_SHA512_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000000d1) |
| 394 | #define BCRYPT_RSA_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000000e1) |
| 395 | #define BCRYPT_ECDSA_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000000f1) |
| 396 | |
| 397 | #define BCRYPT_AES_CMAC_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000101) |
| 398 | #define BCRYPT_AES_GMAC_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000111) |
| 399 | #define BCRYPT_HMAC_MD2_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000121) |
| 400 | #define BCRYPT_HMAC_MD4_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000131) |
| 401 | |
| 402 | #define BCRYPT_3DES_CBC_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000141) |
| 403 | #define BCRYPT_3DES_ECB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000151) |
| 404 | #define BCRYPT_3DES_CFB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000161) |
| 405 | #define BCRYPT_3DES_112_CBC_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000171) |
| 406 | #define BCRYPT_3DES_112_ECB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000181) |
| 407 | #define BCRYPT_3DES_112_CFB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000191) |
| 408 | #define BCRYPT_AES_CBC_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000001a1) |
| 409 | #define BCRYPT_AES_ECB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000001b1) |
| 410 | #define BCRYPT_AES_CFB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000001c1) |
| 411 | #define BCRYPT_AES_CCM_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000001d1) |
| 412 | #define BCRYPT_AES_GCM_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000001e1) |
| 413 | #define BCRYPT_DES_CBC_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000001f1) |
| 414 | #define BCRYPT_DES_ECB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000201) |
| 415 | #define BCRYPT_DES_CFB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000211) |
| 416 | #define BCRYPT_DESX_CBC_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000221) |
| 417 | #define BCRYPT_DESX_ECB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000231) |
| 418 | #define BCRYPT_DESX_CFB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000241) |
| 419 | #define BCRYPT_RC2_CBC_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000251) |
| 420 | #define BCRYPT_RC2_ECB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000261) |
| 421 | #define BCRYPT_RC2_CFB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000271) |
| 422 | |
| 423 | #define BCRYPT_DH_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000281) |
| 424 | #define BCRYPT_ECDH_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000291) |
| 425 | #define BCRYPT_ECDH_P256_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000002a1) |
| 426 | #define BCRYPT_ECDH_P384_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000002b1) |
| 427 | #define BCRYPT_ECDH_P521_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000002c1) |
| 428 | #define BCRYPT_DSA_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000002d1) |
| 429 | #define BCRYPT_ECDSA_P256_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000002e1) |
| 430 | #define BCRYPT_ECDSA_P384_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000002f1) |
| 431 | #define BCRYPT_ECDSA_P521_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000301) |
| 432 | #define BCRYPT_RSA_SIGN_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000311) |
| 433 | |
| 434 | #define BCRYPT_CAPI_KDF_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000321) |
| 435 | #define BCRYPT_PBKDF2_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000331) |
| 436 | |
| 437 | #define BCRYPT_SP800108_CTR_HMAC_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000341) |
| 438 | #define BCRYPT_SP80056A_CONCAT_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000351) |
| 439 | |
| 440 | #define BCRYPT_TLS1_1_KDF_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000361) |
| 441 | #define BCRYPT_TLS1_2_KDF_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000371) |
| 442 | |
| 443 | #define BCRYPT_XTS_AES_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000381) |
| 444 | |
| 445 | #define BCRYPT_HKDF_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000391) |
| 446 | |
| 447 | #endif |
| 448 | |
| 449 | #if NTDDI_VERSION >= NTDDI_WIN10_FE |
| 450 | #define BCRYPT_CHACHA20_POLY1305_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000003A1) |
| 451 | #endif |
| 452 | |
| 453 | #if NTDDI_VERSION >= NTDDI_WIN11_ZN |
| 454 | #define BCRYPT_SHA3_256_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000003B1) |
| 455 | #define BCRYPT_SHA3_384_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000003C1) |
| 456 | #define BCRYPT_SHA3_512_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000003D1) |
| 457 | #define BCRYPT_HMAC_SHA3_256_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000003E1) |
| 458 | #define BCRYPT_HMAC_SHA3_384_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000003F1) |
| 459 | #define BCRYPT_HMAC_SHA3_512_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000401) |
| 460 | #define BCRYPT_CSHAKE128_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000411) |
| 461 | #define BCRYPT_CSHAKE256_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000421) |
| 462 | #define BCRYPT_KMAC128_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000431) |
| 463 | #define BCRYPT_KMAC256_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000441) |
| 464 | #endif |
| 465 | |
| 466 | #if NTDDI_VERSION >= NTDDI_WIN11_GA |
| 467 | #define BCRYPT_AES_KWP_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000451) |
| 468 | #endif |
| 469 | |
| 470 | #define BCRYPT_ALG_HANDLE_HMAC_FLAG 0x00000008 |
| 471 | #define BCRYPT_CAPI_AES_FLAG 0x00000010 |
| 472 | #define BCRYPT_HASH_REUSABLE_FLAG 0x00000020 |
| 473 | |
| 474 | #define BCRYPT_BUFFERS_LOCKED_FLAG 0x00000040 |
| 475 | |
| 476 | #define BCRYPT_CIPHER_OPERATION 0x00000001 |
| 477 | #define BCRYPT_HASH_OPERATION 0x00000002 |
| 478 | #define BCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION 0x00000004 |
| 479 | #define BCRYPT_SECRET_AGREEMENT_OPERATION 0x00000008 |
| 480 | #define BCRYPT_SIGNATURE_OPERATION 0x00000010 |
| 481 | #define BCRYPT_RNG_OPERATION 0x00000020 |
| 482 | #define BCRYPT_KEY_DERIVATION_OPERATION 0x00000040 |
| 483 | |
| 484 | #define BCRYPT_PUBLIC_KEY_FLAG 0x00000001 |
| 485 | #define BCRYPT_PRIVATE_KEY_FLAG 0x00000002 |
| 486 | |
| 487 | #define BCRYPT_NO_KEY_VALIDATION 0x00000008 |
| 488 | |
| 489 | #define BCRYPT_RNG_USE_ENTROPY_IN_BUFFER 0x00000001 |
| 490 | #define BCRYPT_USE_SYSTEM_PREFERRED_RNG 0x00000002 |
| 491 | |
| 492 | #define BCRYPT_MAKE_INTERFACE_VERSION(major, minor) { (USHORT)major,(USHORT)minor} |
| 493 | #define BCRYPT_IS_INTERFACE_VERSION_COMPATIBLE(loader, provider) ((loader).MajorVersion <= (provider).MajorVersion) |
| 494 | |
| 495 | #define BCRYPT_CIPHER_INTERFACE_VERSION_1 BCRYPT_MAKE_INTERFACE_VERSION (1, 0) |
| 496 | #define BCRYPT_HASH_INTERFACE_VERSION_1 BCRYPT_MAKE_INTERFACE_VERSION (1, 0) |
| 497 | #define BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE_VERSION_1 BCRYPT_MAKE_INTERFACE_VERSION (1, 0) |
| 498 | #define BCRYPT_SECRET_AGREEMENT_INTERFACE_VERSION_1 BCRYPT_MAKE_INTERFACE_VERSION (1, 0) |
| 499 | #define BCRYPT_SIGNATURE_INTERFACE_VERSION_1 BCRYPT_MAKE_INTERFACE_VERSION (1, 0) |
| 500 | #define BCRYPT_RNG_INTERFACE_VERSION_1 BCRYPT_MAKE_INTERFACE_VERSION (1, 0) |
| 501 | |
| 502 | #define CRYPT_MIN_DEPENDENCIES (0x00000001) |
| 503 | #define CRYPT_PROCESS_ISOLATE (0x00010000) |
| 504 | |
| 505 | #define CRYPT_UM (0x00000001) |
| 506 | #define CRYPT_KM (0x00000002) |
| 507 | #define CRYPT_MM (0x00000003) |
| 508 | #define CRYPT_ANY (0x00000004) |
| 509 | |
| 510 | #define CRYPT_OVERWRITE (0x00000001) |
| 511 | |
| 512 | #define CRYPT_LOCAL (0x00000001) |
| 513 | #define CRYPT_DOMAIN (0x00000002) |
| 514 | |
| 515 | #define CRYPT_EXCLUSIVE (0x00000001) |
| 516 | #define CRYPT_OVERRIDE (0x00010000) |
| 517 | |
| 518 | #define CRYPT_ALL_FUNCTIONS (0x00000001) |
| 519 | #define CRYPT_ALL_PROVIDERS (0x00000002) |
| 520 | |
| 521 | #define CRYPT_PRIORITY_TOP (0x00000000) |
| 522 | #define CRYPT_PRIORITY_BOTTOM (0xffffffff) |
| 523 | |
| 524 | #define CRYPT_DEFAULT_CONTEXT L"Default" |
| 525 | |
| 526 | typedef PVOID BCRYPT_HANDLE; |
| 527 | typedef PVOID BCRYPT_ALG_HANDLE; |
| 528 | typedef PVOID BCRYPT_KEY_HANDLE; |
| 529 | typedef PVOID BCRYPT_HASH_HANDLE; |
| 530 | typedef PVOID BCRYPT_SECRET_HANDLE; |
| 531 | |
| 532 | typedef struct _BCRYPT_KEY_BLOB { |
| 533 | ULONG Magic; |
| 534 | } BCRYPT_KEY_BLOB; |
| 535 | |
| 536 | typedef struct _BCRYPT_RSAKEY_BLOB { |
| 537 | ULONG Magic; |
| 538 | ULONG BitLength; |
| 539 | ULONG cbPublicExp; |
| 540 | ULONG cbModulus; |
| 541 | ULONG cbPrime1; |
| 542 | ULONG cbPrime2; |
| 543 | } BCRYPT_RSAKEY_BLOB; |
| 544 | |
| 545 | typedef struct _BCRYPT_ECCKEY_BLOB { |
| 546 | ULONG dwMagic; |
| 547 | ULONG cbKey; |
| 548 | } BCRYPT_ECCKEY_BLOB,*PBCRYPT_ECCKEY_BLOB; |
| 549 | |
| 550 | #if NTDDI_VERSION >= NTDDI_WINTHRESHOLD |
| 551 | typedef struct _SSL_ECCKEY_BLOB { |
| 552 | ULONG dwCurveType; |
| 553 | ULONG cbKey; |
| 554 | } SSL_ECCKEY_BLOB, *PSSL_ECCKEY_BLOB; |
| 555 | |
| 556 | #define BCRYPT_ECC_FULLKEY_BLOB_V1 0x1 |
| 557 | |
| 558 | typedef enum { |
| 559 | BCRYPT_ECC_PRIME_SHORT_WEIERSTRASS_CURVE = 0x1, |
| 560 | BCRYPT_ECC_PRIME_TWISTED_EDWARDS_CURVE = 0x2, |
| 561 | BCRYPT_ECC_PRIME_MONTGOMERY_CURVE = 0x3 |
| 562 | } ECC_CURVE_TYPE_ENUM; |
| 563 | |
| 564 | typedef enum { |
| 565 | BCRYPT_NO_CURVE_GENERATION_ALG_ID = 0x0 |
| 566 | } ECC_CURVE_ALG_ID_ENUM; |
| 567 | |
| 568 | typedef struct _BCRYPT_ECCFULLKEY_BLOB { |
| 569 | ULONG dwMagic; |
| 570 | ULONG dwVersion; |
| 571 | ECC_CURVE_TYPE_ENUM dwCurveType; |
| 572 | ECC_CURVE_ALG_ID_ENUM dwCurveGenerationAlgId; |
| 573 | ULONG cbFieldLength; |
| 574 | ULONG cbSubgroupOrder; |
| 575 | ULONG cbCofactor; |
| 576 | ULONG cbSeed; |
| 577 | } BCRYPT_ECCFULLKEY_BLOB, *PBCRYPT_ECCFULLKEY_BLOB; |
| 578 | #endif /* NTDDI_VERSION >= NTDDI_WINTHRESHOLD */ |
| 579 | |
| 580 | typedef struct _BCRYPT_DH_KEY_BLOB { |
| 581 | ULONG dwMagic; |
| 582 | ULONG cbKey; |
| 583 | } BCRYPT_DH_KEY_BLOB,*PBCRYPT_DH_KEY_BLOB; |
| 584 | |
| 585 | typedef struct _BCRYPT_DH_PARAMETER_HEADER { |
| 586 | ULONG cbLength; |
| 587 | ULONG dwMagic; |
| 588 | ULONG cbKeyLength; |
| 589 | } BCRYPT_DH_PARAMETER_HEADER; |
| 590 | |
| 591 | typedef struct _BCRYPT_DSA_KEY_BLOB { |
| 592 | ULONG dwMagic; |
| 593 | ULONG cbKey; |
| 594 | UCHAR Count[4]; |
| 595 | UCHAR Seed[20]; |
| 596 | UCHAR q[20]; |
| 597 | } BCRYPT_DSA_KEY_BLOB,*PBCRYPT_DSA_KEY_BLOB; |
| 598 | |
| 599 | typedef enum { |
| 600 | DSA_HASH_ALGORITHM_SHA1, |
| 601 | DSA_HASH_ALGORITHM_SHA256, |
| 602 | DSA_HASH_ALGORITHM_SHA512 |
| 603 | } HASHALGORITHM_ENUM; |
| 604 | |
| 605 | typedef enum { |
| 606 | DSA_FIPS186_2, |
| 607 | DSA_FIPS186_3 |
| 608 | } DSAFIPSVERSION_ENUM; |
| 609 | typedef struct _BCRYPT_DSA_KEY_BLOB_V2 { |
| 610 | ULONG dwMagic; |
| 611 | ULONG cbKey; |
| 612 | HASHALGORITHM_ENUM hashAlgorithm; |
| 613 | DSAFIPSVERSION_ENUM standardVersion; |
| 614 | ULONG cbSeedLength; |
| 615 | ULONG cbGroupSize; |
| 616 | UCHAR Count[4]; |
| 617 | } BCRYPT_DSA_KEY_BLOB_V2,*PBCRYPT_DSA_KEY_BLOB_V2; |
| 618 | |
| 619 | typedef struct _BCRYPT_KEY_DATA_BLOB_HEADER { |
| 620 | ULONG dwMagic; |
| 621 | ULONG dwVersion; |
| 622 | ULONG cbKeyData; |
| 623 | } BCRYPT_KEY_DATA_BLOB_HEADER,*PBCRYPT_KEY_DATA_BLOB_HEADER; |
| 624 | |
| 625 | typedef struct _BCRYPT_DSA_PARAMETER_HEADER { |
| 626 | ULONG cbLength; |
| 627 | ULONG dwMagic; |
| 628 | ULONG cbKeyLength; |
| 629 | UCHAR Count[4]; |
| 630 | UCHAR Seed[20]; |
| 631 | UCHAR q[20]; |
| 632 | } BCRYPT_DSA_PARAMETER_HEADER; |
| 633 | |
| 634 | typedef struct _BCRYPT_DSA_PARAMETER_HEADER_V2 { |
| 635 | ULONG cbLength; |
| 636 | ULONG dwMagic; |
| 637 | ULONG cbKeyLength; |
| 638 | HASHALGORITHM_ENUM hashAlgorithm; |
| 639 | DSAFIPSVERSION_ENUM standardVersion; |
| 640 | ULONG cbSeedLength; |
| 641 | ULONG cbGroupSize; |
| 642 | UCHAR Count[4]; |
| 643 | } BCRYPT_DSA_PARAMETER_HEADER_V2; |
| 644 | |
| 645 | typedef struct _BCRYPT_ECC_CURVE_NAMES { |
| 646 | ULONG dwEccCurveNames; |
| 647 | LPWSTR *pEccCurveNames; |
| 648 | } BCRYPT_ECC_CURVE_NAMES; |
| 649 | |
| 650 | typedef enum { |
| 651 | BCRYPT_HASH_OPERATION_HASH_DATA = 1, |
| 652 | BCRYPT_HASH_OPERATION_FINISH_HASH = 2 |
| 653 | } BCRYPT_HASH_OPERATION_TYPE; |
| 654 | |
| 655 | typedef struct _BCRYPT_MULTI_HASH_OPERATION { |
| 656 | ULONG iHash; |
| 657 | BCRYPT_HASH_OPERATION_TYPE hashOperation; |
| 658 | PUCHAR pbBuffer; |
| 659 | ULONG cbBuffer; |
| 660 | } BCRYPT_MULTI_HASH_OPERATION; |
| 661 | |
| 662 | typedef enum { |
| 663 | BCRYPT_OPERATION_TYPE_HASH = 1 |
| 664 | } BCRYPT_MULTI_OPERATION_TYPE; |
| 665 | |
| 666 | typedef struct _BCRYPT_MULTI_OBJECT_LENGTH_STRUCT { |
| 667 | ULONG cbPerObject; |
| 668 | ULONG cbPerElement; |
| 669 | } BCRYPT_MULTI_OBJECT_LENGTH_STRUCT; |
| 670 | |
| 671 | typedef struct _BCRYPT_ALGORITHM_IDENTIFIER { |
| 672 | LPWSTR pszName; |
| 673 | ULONG dwClass; |
| 674 | ULONG dwFlags; |
| 675 | } BCRYPT_ALGORITHM_IDENTIFIER; |
| 676 | |
| 677 | typedef struct _BCRYPT_PROVIDER_NAME { |
| 678 | LPWSTR pszProviderName; |
| 679 | } BCRYPT_PROVIDER_NAME; |
| 680 | |
| 681 | typedef struct _BCRYPT_INTERFACE_VERSION { |
| 682 | USHORT MajorVersion; |
| 683 | USHORT MinorVersion; |
| 684 | } BCRYPT_INTERFACE_VERSION,*PBCRYPT_INTERFACE_VERSION; |
| 685 | |
| 686 | typedef struct _CRYPT_INTERFACE_REG { |
| 687 | ULONG dwInterface; |
| 688 | ULONG dwFlags; |
| 689 | ULONG cFunctions; |
| 690 | PWSTR *rgpszFunctions; |
| 691 | } CRYPT_INTERFACE_REG,*PCRYPT_INTERFACE_REG; |
| 692 | |
| 693 | typedef struct _CRYPT_IMAGE_REG { |
| 694 | PWSTR pszImage; |
| 695 | ULONG cInterfaces; |
| 696 | PCRYPT_INTERFACE_REG *rgpInterfaces; |
| 697 | } CRYPT_IMAGE_REG,*PCRYPT_IMAGE_REG; |
| 698 | |
| 699 | typedef struct _CRYPT_PROVIDER_REG { |
| 700 | ULONG cAliases; |
| 701 | PWSTR *rgpszAliases; |
| 702 | PCRYPT_IMAGE_REG pUM; |
| 703 | PCRYPT_IMAGE_REG pKM; |
| 704 | } CRYPT_PROVIDER_REG,*PCRYPT_PROVIDER_REG; |
| 705 | |
| 706 | typedef struct _CRYPT_PROVIDERS { |
| 707 | ULONG cProviders; |
| 708 | PWSTR *rgpszProviders; |
| 709 | } CRYPT_PROVIDERS,*PCRYPT_PROVIDERS; |
| 710 | |
| 711 | typedef struct _CRYPT_CONTEXT_CONFIG { |
| 712 | ULONG dwFlags; |
| 713 | ULONG dwReserved; |
| 714 | } CRYPT_CONTEXT_CONFIG,*PCRYPT_CONTEXT_CONFIG; |
| 715 | |
| 716 | typedef struct _CRYPT_CONTEXT_FUNCTION_CONFIG { |
| 717 | ULONG dwFlags; |
| 718 | ULONG dwReserved; |
| 719 | } CRYPT_CONTEXT_FUNCTION_CONFIG,*PCRYPT_CONTEXT_FUNCTION_CONFIG; |
| 720 | |
| 721 | typedef struct _CRYPT_CONTEXTS { |
| 722 | ULONG cContexts; |
| 723 | PWSTR *rgpszContexts; |
| 724 | } CRYPT_CONTEXTS,*PCRYPT_CONTEXTS; |
| 725 | |
| 726 | typedef struct _CRYPT_CONTEXT_FUNCTIONS { |
| 727 | ULONG cFunctions; |
| 728 | PWSTR *rgpszFunctions; |
| 729 | } CRYPT_CONTEXT_FUNCTIONS,*PCRYPT_CONTEXT_FUNCTIONS; |
| 730 | |
| 731 | typedef struct _CRYPT_CONTEXT_FUNCTION_PROVIDERS { |
| 732 | ULONG cProviders; |
| 733 | PWSTR *rgpszProviders; |
| 734 | } CRYPT_CONTEXT_FUNCTION_PROVIDERS,*PCRYPT_CONTEXT_FUNCTION_PROVIDERS; |
| 735 | |
| 736 | typedef struct _CRYPT_PROPERTY_REF { |
| 737 | PWSTR pszProperty; |
| 738 | ULONG cbValue; |
| 739 | PUCHAR pbValue; |
| 740 | } CRYPT_PROPERTY_REF,*PCRYPT_PROPERTY_REF; |
| 741 | |
| 742 | typedef struct _CRYPT_IMAGE_REF { |
| 743 | PWSTR pszImage; |
| 744 | ULONG dwFlags; |
| 745 | } CRYPT_IMAGE_REF,*PCRYPT_IMAGE_REF; |
| 746 | |
| 747 | typedef struct _CRYPT_PROVIDER_REF { |
| 748 | ULONG dwInterface; |
| 749 | PWSTR pszFunction; |
| 750 | PWSTR pszProvider; |
| 751 | ULONG cProperties; |
| 752 | PCRYPT_PROPERTY_REF *rgpProperties; |
| 753 | PCRYPT_IMAGE_REF pUM; |
| 754 | PCRYPT_IMAGE_REF pKM; |
| 755 | } CRYPT_PROVIDER_REF,*PCRYPT_PROVIDER_REF; |
| 756 | |
| 757 | typedef struct _CRYPT_PROVIDER_REFS { |
| 758 | ULONG cProviders; |
| 759 | PCRYPT_PROVIDER_REF *rgpProviders; |
| 760 | } CRYPT_PROVIDER_REFS,*PCRYPT_PROVIDER_REFS; |
| 761 | |
| 762 | NTSTATUS WINAPI BCryptOpenAlgorithmProvider (BCRYPT_ALG_HANDLE *phAlgorithm, LPCWSTR pszAlgId, LPCWSTR pszImplementation, ULONG dwFlags); |
| 763 | NTSTATUS WINAPI BCryptEnumAlgorithms (ULONG dwAlgOperations, ULONG *pAlgCount, BCRYPT_ALGORITHM_IDENTIFIER **ppAlgList, ULONG dwFlags); |
| 764 | NTSTATUS WINAPI BCryptEnumProviders (LPCWSTR pszAlgId, ULONG *pImplCount, BCRYPT_PROVIDER_NAME **ppImplList, ULONG dwFlags); |
| 765 | NTSTATUS WINAPI BCryptGetProperty (BCRYPT_HANDLE hObject, LPCWSTR pszProperty, PUCHAR pbOutput, ULONG cbOutput, ULONG *pcbResult, ULONG dwFlags); |
| 766 | NTSTATUS WINAPI BCryptSetProperty (BCRYPT_HANDLE hObject, LPCWSTR pszProperty, PUCHAR pbInput, ULONG cbInput, ULONG dwFlags); |
| 767 | NTSTATUS WINAPI BCryptCloseAlgorithmProvider (BCRYPT_ALG_HANDLE hAlgorithm, ULONG dwFlags); |
| 768 | VOID WINAPI BCryptFreeBuffer (PVOID pvBuffer); |
| 769 | NTSTATUS WINAPI BCryptGenerateSymmetricKey (BCRYPT_ALG_HANDLE hAlgorithm, BCRYPT_KEY_HANDLE *phKey, PUCHAR pbKeyObject, ULONG cbKeyObject, PUCHAR pbSecret, ULONG cbSecret, ULONG dwFlags); |
| 770 | NTSTATUS WINAPI BCryptGenerateKeyPair (BCRYPT_ALG_HANDLE hAlgorithm, BCRYPT_KEY_HANDLE *phKey, ULONG dwLength, ULONG dwFlags); |
| 771 | NTSTATUS WINAPI BCryptEncrypt (BCRYPT_KEY_HANDLE hKey, PUCHAR pbInput, ULONG cbInput, VOID *pPaddingInfo, PUCHAR pbIV, ULONG cbIV, PUCHAR pbOutput, ULONG cbOutput, ULONG *pcbResult, ULONG dwFlags); |
| 772 | NTSTATUS WINAPI BCryptDecrypt (BCRYPT_KEY_HANDLE hKey, PUCHAR pbInput, ULONG cbInput, VOID *pPaddingInfo, PUCHAR pbIV, ULONG cbIV, PUCHAR pbOutput, ULONG cbOutput, ULONG *pcbResult, ULONG dwFlags); |
| 773 | NTSTATUS WINAPI BCryptExportKey (BCRYPT_KEY_HANDLE hKey, BCRYPT_KEY_HANDLE hExportKey, LPCWSTR pszBlobType, PUCHAR pbOutput, ULONG cbOutput, ULONG *pcbResult, ULONG dwFlags); |
| 774 | NTSTATUS WINAPI BCryptImportKey (BCRYPT_ALG_HANDLE hAlgorithm, BCRYPT_KEY_HANDLE hImportKey, LPCWSTR pszBlobType, BCRYPT_KEY_HANDLE *phKey, PUCHAR pbKeyObject, ULONG cbKeyObject, PUCHAR pbInput, ULONG cbInput, ULONG dwFlags); |
| 775 | NTSTATUS WINAPI BCryptImportKeyPair (BCRYPT_ALG_HANDLE hAlgorithm, BCRYPT_KEY_HANDLE hImportKey, LPCWSTR pszBlobType, BCRYPT_KEY_HANDLE *phKey, PUCHAR pbInput, ULONG cbInput, ULONG dwFlags); |
| 776 | NTSTATUS WINAPI BCryptDuplicateKey (BCRYPT_KEY_HANDLE hKey, BCRYPT_KEY_HANDLE *phNewKey, PUCHAR pbKeyObject, ULONG cbKeyObject, ULONG dwFlags); |
| 777 | NTSTATUS WINAPI BCryptFinalizeKeyPair (BCRYPT_KEY_HANDLE hKey, ULONG dwFlags); |
| 778 | NTSTATUS WINAPI BCryptDestroyKey (BCRYPT_KEY_HANDLE hKey); |
| 779 | NTSTATUS WINAPI BCryptDestroySecret (BCRYPT_SECRET_HANDLE hSecret); |
| 780 | NTSTATUS WINAPI BCryptSignHash (BCRYPT_KEY_HANDLE hKey, VOID *pPaddingInfo, PUCHAR pbInput, ULONG cbInput, PUCHAR pbOutput, ULONG cbOutput, ULONG *pcbResult, ULONG dwFlags); |
| 781 | NTSTATUS WINAPI BCryptVerifySignature (BCRYPT_KEY_HANDLE hKey, VOID *pPaddingInfo, PUCHAR pbHash, ULONG cbHash, PUCHAR pbSignature, ULONG cbSignature, ULONG dwFlags); |
| 782 | NTSTATUS WINAPI BCryptSecretAgreement (BCRYPT_KEY_HANDLE hPrivKey, BCRYPT_KEY_HANDLE hPubKey, BCRYPT_SECRET_HANDLE *phAgreedSecret, ULONG dwFlags); |
| 783 | NTSTATUS WINAPI BCryptDeriveKey (BCRYPT_SECRET_HANDLE hSharedSecret, LPCWSTR pwszKDF, BCryptBufferDesc *pParameterList, PUCHAR pbDerivedKey, ULONG cbDerivedKey, ULONG *pcbResult, ULONG dwFlags); |
| 784 | NTSTATUS WINAPI BCryptKeyDerivation (BCRYPT_KEY_HANDLE hKey, BCryptBufferDesc *pParameterList, PUCHAR pbDerivedKey, ULONG cbDerivedKey, ULONG *pcbResult, ULONG dwFlags); |
| 785 | NTSTATUS WINAPI BCryptCreateHash (BCRYPT_ALG_HANDLE hAlgorithm, BCRYPT_HASH_HANDLE *phHash, PUCHAR pbHashObject, ULONG cbHashObject, PUCHAR pbSecret, ULONG cbSecret, ULONG dwFlags); |
| 786 | NTSTATUS WINAPI BCryptHashData (BCRYPT_HASH_HANDLE hHash, PUCHAR pbInput, ULONG cbInput, ULONG dwFlags); |
| 787 | NTSTATUS WINAPI BCryptFinishHash (BCRYPT_HASH_HANDLE hHash, PUCHAR pbOutput, ULONG cbOutput, ULONG dwFlags); |
| 788 | #if (NTDDI_VERSION > NTDDI_WINBLUE || (NTDDI_VERSION == NTDDI_WINBLUE && defined(WINBLUE_KBSPRING14))) |
| 789 | NTSTATUS WINAPI BCryptCreateMultiHash (BCRYPT_ALG_HANDLE hAlgorithm, BCRYPT_HASH_HANDLE *phHash, ULONG nHashes, PUCHAR pbHashObject, ULONG cbHashObject, PUCHAR pbSecret, ULONG cbSecret, ULONG dwFlags); |
| 790 | NTSTATUS WINAPI BCryptProcessMultiOperations (BCRYPT_HANDLE hObject, BCRYPT_MULTI_OPERATION_TYPE operationType, PVOID pOperations, ULONG cbOperations, ULONG dwFlags); |
| 791 | #endif |
| 792 | NTSTATUS WINAPI BCryptDuplicateHash (BCRYPT_HASH_HANDLE hHash, BCRYPT_HASH_HANDLE *phNewHash, PUCHAR pbHashObject, ULONG cbHashObject, ULONG dwFlags); |
| 793 | NTSTATUS WINAPI BCryptDestroyHash (BCRYPT_HASH_HANDLE hHash); |
| 794 | #if NTDDI_VERSION >= NTDDI_WINTHRESHOLD |
| 795 | NTSTATUS WINAPI BCryptHash (BCRYPT_ALG_HANDLE hAlgorithm, PUCHAR pbSecret, ULONG cbSecret, PUCHAR pbInput, ULONG cbInput, PUCHAR pbOutput, ULONG cbOutput); |
| 796 | #endif |
| 797 | NTSTATUS WINAPI BCryptGenRandom (BCRYPT_ALG_HANDLE hAlgorithm, PUCHAR pbBuffer, ULONG cbBuffer, ULONG dwFlags); |
| 798 | NTSTATUS WINAPI BCryptDeriveKeyCapi (BCRYPT_HASH_HANDLE hHash, BCRYPT_ALG_HANDLE hTargetAlg, PUCHAR pbDerivedKey, ULONG cbDerivedKey, ULONG dwFlags); |
| 799 | NTSTATUS WINAPI BCryptDeriveKeyPBKDF2 (BCRYPT_ALG_HANDLE hPrf, PUCHAR pbPassword, ULONG cbPassword, PUCHAR pbSalt, ULONG cbSalt, ULONGLONG cIterations, PUCHAR pbDerivedKey, ULONG cbDerivedKey, ULONG dwFlags); |
| 800 | NTSTATUS WINAPI BCryptResolveProviders (LPCWSTR pszContext, ULONG dwInterface, LPCWSTR pszFunction, LPCWSTR pszProvider, ULONG dwMode, ULONG dwFlags, ULONG *pcbBuffer, PCRYPT_PROVIDER_REFS *ppBuffer); |
| 801 | NTSTATUS WINAPI BCryptGetFipsAlgorithmMode (BOOLEAN *pfEnabled); |
| 802 | #endif |
| 803 | #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) |
| 804 | #ifndef KERNEL_MODE_CNG |
| 805 | NTSTATUS WINAPI BCryptQueryProviderRegistration (LPCWSTR pszProvider, ULONG dwMode, ULONG dwInterface, ULONG *pcbBuffer, PCRYPT_PROVIDER_REG *ppBuffer); |
| 806 | NTSTATUS WINAPI BCryptEnumRegisteredProviders (ULONG *pcbBuffer, PCRYPT_PROVIDERS *ppBuffer); |
| 807 | NTSTATUS WINAPI BCryptCreateContext (ULONG dwTable, LPCWSTR pszContext, PCRYPT_CONTEXT_CONFIG pConfig); |
| 808 | NTSTATUS WINAPI BCryptDeleteContext (ULONG dwTable, LPCWSTR pszContext); |
| 809 | NTSTATUS WINAPI BCryptEnumContexts (ULONG dwTable, ULONG *pcbBuffer, PCRYPT_CONTEXTS *ppBuffer); |
| 810 | NTSTATUS WINAPI BCryptConfigureContext (ULONG dwTable, LPCWSTR pszContext, PCRYPT_CONTEXT_CONFIG pConfig); |
| 811 | NTSTATUS WINAPI BCryptQueryContextConfiguration (ULONG dwTable, LPCWSTR pszContext, ULONG *pcbBuffer, PCRYPT_CONTEXT_CONFIG *ppBuffer); |
| 812 | NTSTATUS WINAPI BCryptAddContextFunction (ULONG dwTable, LPCWSTR pszContext, ULONG dwInterface, LPCWSTR pszFunction, ULONG dwPosition); |
| 813 | NTSTATUS WINAPI BCryptRemoveContextFunction (ULONG dwTable, LPCWSTR pszContext, ULONG dwInterface, LPCWSTR pszFunction); |
| 814 | NTSTATUS WINAPI BCryptEnumContextFunctions (ULONG dwTable, LPCWSTR pszContext, ULONG dwInterface, ULONG *pcbBuffer, PCRYPT_CONTEXT_FUNCTIONS *ppBuffer); |
| 815 | NTSTATUS WINAPI BCryptConfigureContextFunction (ULONG dwTable, LPCWSTR pszContext, ULONG dwInterface, LPCWSTR pszFunction, PCRYPT_CONTEXT_FUNCTION_CONFIG pConfig); |
| 816 | NTSTATUS WINAPI BCryptQueryContextFunctionConfiguration (ULONG dwTable, LPCWSTR pszContext, ULONG dwInterface, LPCWSTR pszFunction, ULONG *pcbBuffer, PCRYPT_CONTEXT_FUNCTION_CONFIG *ppBuffer); |
| 817 | NTSTATUS WINAPI BCryptEnumContextFunctionProviders (ULONG dwTable, LPCWSTR pszContext, ULONG dwInterface, LPCWSTR pszFunction, ULONG *pcbBuffer, PCRYPT_CONTEXT_FUNCTION_PROVIDERS *ppBuffer); |
| 818 | NTSTATUS WINAPI BCryptSetContextFunctionProperty (ULONG dwTable, LPCWSTR pszContext, ULONG dwInterface, LPCWSTR pszFunction, LPCWSTR pszProperty, ULONG cbValue, PUCHAR pbValue); |
| 819 | NTSTATUS WINAPI BCryptQueryContextFunctionProperty (ULONG dwTable, LPCWSTR pszContext, ULONG dwInterface, LPCWSTR pszFunction, LPCWSTR pszProperty, ULONG *pcbValue, PUCHAR *ppbValue); |
| 820 | NTSTATUS WINAPI BCryptRegisterConfigChangeNotify (HANDLE *phEvent); |
| 821 | NTSTATUS WINAPI BCryptUnregisterConfigChangeNotify (HANDLE hEvent); |
| 822 | #else |
| 823 | NTSTATUS WINAPI BCryptRegisterConfigChangeNotify (PRKEVENT pEvent); |
| 824 | NTSTATUS WINAPI BCryptUnregisterConfigChangeNotify (PRKEVENT pEvent); |
| 825 | #endif |
| 826 | #endif |
| 827 | |
| 828 | #ifdef __cplusplus |
| 829 | } |
| 830 | #endif |
| 831 | #endif |