Headers diff for bcrypt.dll between 6.3.9600.17415-Windows 8.1 and 10.0.10586.0-Windows 10 1511 10586.494 versions



 bcrypt.h (6.3.9600.17415-Windows 8.1)   bcrypt.h (10.0.10586.0-Windows 10 1511 10586.494) 
skipping to change at line 12 skipping to change at line 12
// //
// Microsoft Windows // Microsoft Windows
// Copyright (C) Microsoft Corporation, 2004. // Copyright (C) Microsoft Corporation, 2004.
// //
// File: bcrypt.h // File: bcrypt.h
// //
// Contents: Cryptographic Primitive API Prototypes and Definitions // Contents: Cryptographic Primitive API Prototypes and Definitions
// //
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
#ifndef __BCRYPT_H__ #pragma once
//
// The __BCRYPT_H__ is used by other header files to conditionally define
// BCrypt-dependent extensions when bcrypt.h has been included.
//
#define __BCRYPT_H__ #define __BCRYPT_H__
#include <winapifamily.h> #include <winapifamily.h>
#if _MSC_VER >= 1200
#pragma warning(push)
#pragma warning(disable:4820) // padding added after data member
#endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#pragma region Desktop Family #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
#ifndef WINAPI #ifndef WINAPI
#define WINAPI __stdcall #define WINAPI __stdcall
#endif #endif
#ifndef _NTDEF_ #ifndef _NTDEF_
typedef _Return_type_success_(return >= 0) LONG NTSTATUS; typedef _Return_type_success_(return >= 0) LONG NTSTATUS;
typedef NTSTATUS *PNTSTATUS; typedef NTSTATUS *PNTSTATUS;
#endif #endif
skipping to change at line 78 skipping to change at line 88
// all structures that used it contained a pointer so they were already 4/8 alig ned. // all structures that used it contained a pointer so they were already 4/8 alig ned.
// //
#define BCRYPT_STRUCT_ALIGNMENT #define BCRYPT_STRUCT_ALIGNMENT
// //
// DeriveKey KDF Types // DeriveKey KDF Types
// //
#define BCRYPT_KDF_HASH L"HASH" #define BCRYPT_KDF_HASH L"HASH"
#define BCRYPT_KDF_HMAC L"HMAC" #define BCRYPT_KDF_HMAC L"HMAC"
#define BCRYPT_KDF_TLS_PRF L"TLS_PRF" #define BCRYPT_KDF_TLS_PRF L"TLS_PRF"
#if (NTDDI_VERSION >= NTDDI_WIN7)
#define BCRYPT_KDF_SP80056A_CONCAT L"SP800_56A_CONCAT" #define BCRYPT_KDF_SP80056A_CONCAT L"SP800_56A_CONCAT"
#endif
// //
// DeriveKey KDF BufferTypes // DeriveKey KDF BufferTypes
// //
// For BCRYPT_KDF_HASH and BCRYPT_KDF_HMAC operations, there may be an arbitrary // For BCRYPT_KDF_HASH and BCRYPT_KDF_HMAC operations, there may be an arbitrary
// number of KDF_SECRET_PREPEND and KDF_SECRET_APPEND buffertypes in the // number of KDF_SECRET_PREPEND and KDF_SECRET_APPEND buffertypes in the
// parameter list. The BufferTypes are processed in order of appearence // parameter list. The BufferTypes are processed in order of appearence
// within the parameter list. // within the parameter list.
// //
#define KDF_HASH_ALGORITHM 0x0 #define KDF_HASH_ALGORITHM 0x0
#define KDF_SECRET_PREPEND 0x1 #define KDF_SECRET_PREPEND 0x1
#define KDF_SECRET_APPEND 0x2 #define KDF_SECRET_APPEND 0x2
#define KDF_HMAC_KEY 0x3 #define KDF_HMAC_KEY 0x3
#define KDF_TLS_PRF_LABEL 0x4 #define KDF_TLS_PRF_LABEL 0x4
#define KDF_TLS_PRF_SEED 0x5 #define KDF_TLS_PRF_SEED 0x5
#define KDF_SECRET_HANDLE 0x6 #define KDF_SECRET_HANDLE 0x6
#if (NTDDI_VERSION >= NTDDI_WIN7)
#define KDF_TLS_PRF_PROTOCOL 0x7 #define KDF_TLS_PRF_PROTOCOL 0x7
#define KDF_ALGORITHMID 0x8 #define KDF_ALGORITHMID 0x8
#define KDF_PARTYUINFO 0x9 #define KDF_PARTYUINFO 0x9
#define KDF_PARTYVINFO 0xA #define KDF_PARTYVINFO 0xA
#define KDF_SUPPPUBINFO 0xB #define KDF_SUPPPUBINFO 0xB
#define KDF_SUPPPRIVINFO 0xC #define KDF_SUPPPRIVINFO 0xC
#endif
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define KDF_LABEL 0xD #define KDF_LABEL 0xD
#define KDF_CONTEXT 0xE #define KDF_CONTEXT 0xE
#define KDF_SALT 0xF #define KDF_SALT 0xF
#define KDF_ITERATION_COUNT 0x10 #define KDF_ITERATION_COUNT 0x10
// //
// //
// Parameters for BCrypt(/NCrypt)KeyDerivation: // Parameters for BCrypt(/NCrypt)KeyDerivation:
// Generic parameters: // Generic parameters:
// KDF_GENERIC_PARAMETER and KDF_HASH_ALGORITHM are the generic parameters that can be passed for the following KDF algorithms: // KDF_GENERIC_PARAMETER and KDF_HASH_ALGORITHM are the generic parameters that can be passed for the following KDF algorithms:
// BCRYPT/NCRYPT_SP800108_CTR_HMAC_ALGORITHM // BCRYPT/NCRYPT_SP800108_CTR_HMAC_ALGORITHM
// KDF_GENERIC_PARAMETER = KDF_LABEL||0x00||KDF_CONTEXT // KDF_GENERIC_PARAMETER = KDF_LABEL||0x00||KDF_CONTEXT
// BCRYPT/NCRYPT_SP80056A_CONCAT_ALGORITHM // BCRYPT/NCRYPT_SP80056A_CONCAT_ALGORITHM
// KDF_GENERIC_PARAMETER = KDF_ALGORITHMID || KDF_PARTYUINFO || KDF_PARTYVI NFO {|| KDF_SUPPPUBINFO } {|| KDF_SUPPPRIVINFO } // KDF_GENERIC_PARAMETER = KDF_ALGORITHMID || KDF_PARTYUINFO || KDF_PARTYVI NFO {|| KDF_SUPPPUBINFO } {|| KDF_SUPPPRIVINFO }
// BCRYPT/NCRYPT_PBKDF2_ALGORITHM // BCRYPT/NCRYPT_PBKDF2_ALGORITHM
// KDF_GENERIC_PARAMETER = KDF_SALT // KDF_GENERIC_PARAMETER = KDF_SALT
// BCRYPT/NCRYPT_CAPI_KDF_ALGORITHM // BCRYPT/NCRYPT_CAPI_KDF_ALGORITHM
// KDF_GENERIC_PARAMETER = Not used // KDF_GENERIC_PARAMETER = Not used
// BCRYPT/NCRYPT_TLS1_1_KDF_ALGORITHM
// KDF_GENERIC_PARAMETER = Not used
// BCRYPT/NCRYPT_TLS1_2_KDF_ALGORITHM
// KDF_GENERIC_PARAMETER = Not used
// //
// KDF specific parameters: // KDF specific parameters:
// For BCRYPT/NCRYPT_SP800108_CTR_HMAC_ALGORITHM: // For BCRYPT/NCRYPT_SP800108_CTR_HMAC_ALGORITHM:
// KDF_HASH_ALGORITHM, KDF_LABEL and KDF_CONTEXT are required // KDF_HASH_ALGORITHM, KDF_LABEL and KDF_CONTEXT are required
// For BCRYPT/NCRYPT_SP80056A_CONCAT_ALGORITHM: // For BCRYPT/NCRYPT_SP80056A_CONCAT_ALGORITHM:
// KDF_HASH_ALGORITHM, KDF_ALGORITHMID, KDF_PARTYUINFO, KDF_PARTYVINFO are required // KDF_HASH_ALGORITHM, KDF_ALGORITHMID, KDF_PARTYUINFO, KDF_PARTYVINFO are required
// KDF_SUPPPUBINFO, KDF_SUPPPRIVINFO are optional // KDF_SUPPPUBINFO, KDF_SUPPPRIVINFO are optional
// For BCRYPT/NCRYPT_PBKDF2_ALGORITHM // For BCRYPT/NCRYPT_PBKDF2_ALGORITHM
// KDF_HASH_ALGORITHM is required // KDF_HASH_ALGORITHM is required
// KDF_ITERATION_COUNT, KDF_SALT are optional // KDF_ITERATION_COUNT, KDF_SALT are optional
// Iteration count, (if not specified) will default to 10,000 // Iteration count, (if not specified) will default to 10,000
// For BCRYPT/NCRYPT_CAPI_KDF_ALGORITHM // For BCRYPT/NCRYPT_CAPI_KDF_ALGORITHM
// KDF_HASH_ALGORITHM is required // KDF_HASH_ALGORITHM is required
// For BCRYPT/NCRYPT_TLS1_1_KDF_ALGORITHM
// KDF_TLS_PRF_LABEL is required
// KDF_TLS_PRF_SEED is required
// For BCRYPT/NCRYPT_TLS1_2_KDF_ALGORITHM
// KDF_HASH_ALGORITHM is required
// KDF_TLS_PRF_LABEL is required
// KDF_TLS_PRF_SEED is required
// //
#define KDF_GENERIC_PARAMETER 0x11 #define KDF_GENERIC_PARAMETER 0x11
#define KDF_KEYBITLENGTH 0x12 #define KDF_KEYBITLENGTH 0x12
#endif
// //
// DeriveKey Flags: // DeriveKey Flags:
// //
// KDF_USE_SECRET_AS_HMAC_KEY_FLAG causes the secret agreement to serve also // KDF_USE_SECRET_AS_HMAC_KEY_FLAG causes the secret agreement to serve also
// as the HMAC key. If this flag is used, the KDF_HMAC_KEY parameter should // as the HMAC key. If this flag is used, the KDF_HMAC_KEY parameter should
// NOT be specified. // NOT be specified.
// //
#define KDF_USE_SECRET_AS_HMAC_KEY_FLAG 0x1 #define KDF_USE_SECRET_AS_HMAC_KEY_FLAG 0x1
skipping to change at line 222 skipping to change at line 251
(_AUTH_INFO_STRUCT_).cbSize = sizeof(BCRYPT_AUTHENTICATED_CIPHER_MOD E_INFO); \ (_AUTH_INFO_STRUCT_).cbSize = sizeof(BCRYPT_AUTHENTICATED_CIPHER_MOD E_INFO); \
(_AUTH_INFO_STRUCT_).dwInfoVersion = BCRYPT_AUTHENTICATED_CIPHER_MOD E_INFO_VERSION; (_AUTH_INFO_STRUCT_).dwInfoVersion = BCRYPT_AUTHENTICATED_CIPHER_MOD E_INFO_VERSION;
// //
// BCrypt String Properties // BCrypt String Properties
// //
// BCrypt(Import/Export)Key BLOB types // BCrypt(Import/Export)Key BLOB types
#define BCRYPT_OPAQUE_KEY_BLOB L"OpaqueKeyBlob" #define BCRYPT_OPAQUE_KEY_BLOB L"OpaqueKeyBlob"
#define BCRYPT_KEY_DATA_BLOB L"KeyDataBlob" #define BCRYPT_KEY_DATA_BLOB L"KeyDataBlob"
#if (NTDDI_VERSION >= NTDDI_WIN7)
#define BCRYPT_AES_WRAP_KEY_BLOB L"Rfc3565KeyWrapBlob" #define BCRYPT_AES_WRAP_KEY_BLOB L"Rfc3565KeyWrapBlob"
#endif
// BCryptGetProperty strings // BCryptGetProperty strings
#define BCRYPT_OBJECT_LENGTH L"ObjectLength" #define BCRYPT_OBJECT_LENGTH L"ObjectLength"
#define BCRYPT_ALGORITHM_NAME L"AlgorithmName" #define BCRYPT_ALGORITHM_NAME L"AlgorithmName"
#define BCRYPT_PROVIDER_HANDLE L"ProviderHandle" #define BCRYPT_PROVIDER_HANDLE L"ProviderHandle"
#define BCRYPT_CHAINING_MODE L"ChainingMode" #define BCRYPT_CHAINING_MODE L"ChainingMode"
#define BCRYPT_BLOCK_LENGTH L"BlockLength" #define BCRYPT_BLOCK_LENGTH L"BlockLength"
#define BCRYPT_KEY_LENGTH L"KeyLength" #define BCRYPT_KEY_LENGTH L"KeyLength"
#define BCRYPT_KEY_OBJECT_LENGTH L"KeyObjectLength" #define BCRYPT_KEY_OBJECT_LENGTH L"KeyObjectLength"
#define BCRYPT_KEY_STRENGTH L"KeyStrength" #define BCRYPT_KEY_STRENGTH L"KeyStrength"
#define BCRYPT_KEY_LENGTHS L"KeyLengths" #define BCRYPT_KEY_LENGTHS L"KeyLengths"
#define BCRYPT_BLOCK_SIZE_LIST L"BlockSizeList" #define BCRYPT_BLOCK_SIZE_LIST L"BlockSizeList"
#define BCRYPT_EFFECTIVE_KEY_LENGTH L"EffectiveKeyLength" #define BCRYPT_EFFECTIVE_KEY_LENGTH L"EffectiveKeyLength"
#define BCRYPT_HASH_LENGTH L"HashDigestLength" #define BCRYPT_HASH_LENGTH L"HashDigestLength"
#define BCRYPT_HASH_OID_LIST L"HashOIDList" #define BCRYPT_HASH_OID_LIST L"HashOIDList"
#define BCRYPT_PADDING_SCHEMES L"PaddingSchemes" #define BCRYPT_PADDING_SCHEMES L"PaddingSchemes"
#define BCRYPT_SIGNATURE_LENGTH L"SignatureLength" #define BCRYPT_SIGNATURE_LENGTH L"SignatureLength"
#define BCRYPT_HASH_BLOCK_LENGTH L"HashBlockLength" #define BCRYPT_HASH_BLOCK_LENGTH L"HashBlockLength"
#define BCRYPT_AUTH_TAG_LENGTH L"AuthTagLength" #define BCRYPT_AUTH_TAG_LENGTH L"AuthTagLength"
#if (NTDDI_VERSION >= NTDDI_WIN7)
#define BCRYPT_PRIMITIVE_TYPE L"PrimitiveType" #define BCRYPT_PRIMITIVE_TYPE L"PrimitiveType"
#define BCRYPT_IS_KEYED_HASH L"IsKeyedHash" #define BCRYPT_IS_KEYED_HASH L"IsKeyedHash"
#endif
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define BCRYPT_IS_REUSABLE_HASH L"IsReusableHash" #define BCRYPT_IS_REUSABLE_HASH L"IsReusableHash"
#define BCRYPT_MESSAGE_BLOCK_LENGTH L"MessageBlockLength" #define BCRYPT_MESSAGE_BLOCK_LENGTH L"MessageBlockLength"
#endif
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define BCRYPT_PUBLIC_KEY_LENGTH L"PublicKeyLength"
#endif
// Additional BCryptGetProperty strings for the RNG Platform Crypto Provider // Additional BCryptGetProperty strings for the RNG Platform Crypto Provider
#define BCRYPT_PCP_PLATFORM_TYPE_PROPERTY L"PCP_PLATFORM_TYPE" #define BCRYPT_PCP_PLATFORM_TYPE_PROPERTY L"PCP_PLATFORM_TYPE"
#define BCRYPT_PCP_PROVIDER_VERSION_PROPERTY L"PCP_PROVIDER_VERSION" #define BCRYPT_PCP_PROVIDER_VERSION_PROPERTY L"PCP_PROVIDER_VERSION"
#if (NTDDI_VERSION > NTDDI_WINBLUE || (NTDDI_VERSION == NTDDI_WINBLUE && defined (WINBLUE_KBSPRING14))) #if (NTDDI_VERSION > NTDDI_WINBLUE || (NTDDI_VERSION == NTDDI_WINBLUE && defined (WINBLUE_KBSPRING14)))
#define BCRYPT_MULTI_OBJECT_LENGTH L"MultiObjectLength" #define BCRYPT_MULTI_OBJECT_LENGTH L"MultiObjectLength"
#endif #endif
// BCryptSetProperty strings // BCryptSetProperty strings
skipping to change at line 292 skipping to change at line 334
#define BCRYPT_PAD_NONE 0x00000001 #define BCRYPT_PAD_NONE 0x00000001
#define BCRYPT_PAD_PKCS1 0x00000002 // BCryptEncrypt/Decrypt BCryptS ignHash/VerifySignature #define BCRYPT_PAD_PKCS1 0x00000002 // BCryptEncrypt/Decrypt BCryptS ignHash/VerifySignature
#define BCRYPT_PAD_OAEP 0x00000004 // BCryptEncrypt/Decrypt #define BCRYPT_PAD_OAEP 0x00000004 // BCryptEncrypt/Decrypt
#define BCRYPT_PAD_PSS 0x00000008 // BCryptSignHash/VerifySignatur e #define BCRYPT_PAD_PSS 0x00000008 // BCryptSignHash/VerifySignatur e
#if (NTDDI_VERSION >= NTDDI_WINBLUE) #if (NTDDI_VERSION >= NTDDI_WINBLUE)
#define BCRYPT_PAD_PKCS1_OPTIONAL_HASH_OID 0x00000010 //BCryptVerifySignature #define BCRYPT_PAD_PKCS1_OPTIONAL_HASH_OID 0x00000010 //BCryptVerifySignature
#endif #endif
#define BCRYPTBUFFER_VERSION 0 #define BCRYPTBUFFER_VERSION 0
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
#pragma endregion
#pragma region Application Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
typedef struct _BCryptBuffer { typedef struct _BCryptBuffer {
ULONG cbBuffer; // Length of buffer, in bytes ULONG cbBuffer; // Length of buffer, in bytes
ULONG BufferType; // Buffer type ULONG BufferType; // Buffer type
PVOID pvBuffer; // Pointer to buffer PVOID pvBuffer; // Pointer to buffer
} BCryptBuffer, * PBCryptBuffer; } BCryptBuffer, * PBCryptBuffer;
typedef struct _BCryptBufferDesc { typedef struct _BCryptBufferDesc {
ULONG ulVersion; // Version number ULONG ulVersion; // Version number
ULONG cBuffers; // Number of buffers ULONG cBuffers; // Number of buffers
PBCryptBuffer pBuffers; // Pointer to array of buffers PBCryptBuffer pBuffers; // Pointer to array of buffers
} BCryptBufferDesc, * PBCryptBufferDesc; } BCryptBufferDesc, * PBCryptBufferDesc;
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */
#pragma endregion
#pragma region Desktop Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
// //
// Primitive handles // Primitive handles
// //
typedef PVOID BCRYPT_HANDLE; typedef PVOID BCRYPT_HANDLE;
typedef PVOID BCRYPT_ALG_HANDLE; typedef PVOID BCRYPT_ALG_HANDLE;
typedef PVOID BCRYPT_KEY_HANDLE; typedef PVOID BCRYPT_KEY_HANDLE;
typedef PVOID BCRYPT_HASH_HANDLE; typedef PVOID BCRYPT_HASH_HANDLE;
typedef PVOID BCRYPT_SECRET_HANDLE; typedef PVOID BCRYPT_SECRET_HANDLE;
skipping to change at line 380 skipping to change at line 410
// Prime2 // Prime2
// Private Exponent mod (Prime1 - 1) // Private Exponent mod (Prime1 - 1)
// Private Exponent mod (Prime2 - 1) // Private Exponent mod (Prime2 - 1)
// Inverse of Prime2 mod Prime1 // Inverse of Prime2 mod Prime1
// PrivateExponent // PrivateExponent
#define BCRYPT_RSAFULLPRIVATE_BLOB L"RSAFULLPRIVATEBLOB" #define BCRYPT_RSAFULLPRIVATE_BLOB L"RSAFULLPRIVATEBLOB"
#define BCRYPT_RSAFULLPRIVATE_MAGIC 0x33415352 // RSA3 #define BCRYPT_RSAFULLPRIVATE_MAGIC 0x33415352 // RSA3
//Properties of secret agreement algorithms //Properties of secret agreement algorithms
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define BCRYPT_GLOBAL_PARAMETERS L"SecretAgreementParam" #define BCRYPT_GLOBAL_PARAMETERS L"SecretAgreementParam"
#define BCRYPT_PRIVATE_KEY L"PrivKeyVal" #define BCRYPT_PRIVATE_KEY L"PrivKeyVal"
#endif
// The BCRYPT_ECCPUBLIC_BLOB and BCRYPT_ECCPRIVATE_BLOB blob types are used // The BCRYPT_ECCPUBLIC_BLOB and BCRYPT_ECCPRIVATE_BLOB blob types are used
// to transport plaintext ECC keys. These blob types will be supported by // to transport plaintext ECC keys. These blob types will be supported by
// all ECC primitive providers. // all ECC primitive providers.
#define BCRYPT_ECCPUBLIC_BLOB L"ECCPUBLICBLOB" #define BCRYPT_ECCPUBLIC_BLOB L"ECCPUBLICBLOB"
#define BCRYPT_ECCPRIVATE_BLOB L"ECCPRIVATEBLOB" #define BCRYPT_ECCPRIVATE_BLOB L"ECCPRIVATEBLOB"
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
#define BCRYPT_ECCFULLPUBLIC_BLOB L"ECCFULLPUBLICBLOB"
#define BCRYPT_ECCFULLPRIVATE_BLOB L"ECCFULLPRIVATEBLOB"
#define SSL_ECCPUBLIC_BLOB L"SSLECCPUBLICBLOB"
#endif
#define BCRYPT_ECDH_PUBLIC_P256_MAGIC 0x314B4345 // ECK1 #define BCRYPT_ECDH_PUBLIC_P256_MAGIC 0x314B4345 // ECK1
#define BCRYPT_ECDH_PRIVATE_P256_MAGIC 0x324B4345 // ECK2 #define BCRYPT_ECDH_PRIVATE_P256_MAGIC 0x324B4345 // ECK2
#define BCRYPT_ECDH_PUBLIC_P384_MAGIC 0x334B4345 // ECK3 #define BCRYPT_ECDH_PUBLIC_P384_MAGIC 0x334B4345 // ECK3
#define BCRYPT_ECDH_PRIVATE_P384_MAGIC 0x344B4345 // ECK4 #define BCRYPT_ECDH_PRIVATE_P384_MAGIC 0x344B4345 // ECK4
#define BCRYPT_ECDH_PUBLIC_P521_MAGIC 0x354B4345 // ECK5 #define BCRYPT_ECDH_PUBLIC_P521_MAGIC 0x354B4345 // ECK5
#define BCRYPT_ECDH_PRIVATE_P521_MAGIC 0x364B4345 // ECK6 #define BCRYPT_ECDH_PRIVATE_P521_MAGIC 0x364B4345 // ECK6
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
#define BCRYPT_ECDH_PUBLIC_GENERIC_MAGIC 0x504B4345 // ECKP
#define BCRYPT_ECDH_PRIVATE_GENERIC_MAGIC 0x564B4345 // ECKV
#endif
#define BCRYPT_ECDSA_PUBLIC_P256_MAGIC 0x31534345 // ECS1 #define BCRYPT_ECDSA_PUBLIC_P256_MAGIC 0x31534345 // ECS1
#define BCRYPT_ECDSA_PRIVATE_P256_MAGIC 0x32534345 // ECS2 #define BCRYPT_ECDSA_PRIVATE_P256_MAGIC 0x32534345 // ECS2
#define BCRYPT_ECDSA_PUBLIC_P384_MAGIC 0x33534345 // ECS3 #define BCRYPT_ECDSA_PUBLIC_P384_MAGIC 0x33534345 // ECS3
#define BCRYPT_ECDSA_PRIVATE_P384_MAGIC 0x34534345 // ECS4 #define BCRYPT_ECDSA_PRIVATE_P384_MAGIC 0x34534345 // ECS4
#define BCRYPT_ECDSA_PUBLIC_P521_MAGIC 0x35534345 // ECS5 #define BCRYPT_ECDSA_PUBLIC_P521_MAGIC 0x35534345 // ECS5
#define BCRYPT_ECDSA_PRIVATE_P521_MAGIC 0x36534345 // ECS6 #define BCRYPT_ECDSA_PRIVATE_P521_MAGIC 0x36534345 // ECS6
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
#define BCRYPT_ECDSA_PUBLIC_GENERIC_MAGIC 0x50444345 // ECDP
#define BCRYPT_ECDSA_PRIVATE_GENERIC_MAGIC 0x56444345 // ECDV
#endif
typedef struct _BCRYPT_ECCKEY_BLOB typedef struct _BCRYPT_ECCKEY_BLOB
{ {
ULONG dwMagic; ULONG dwMagic;
ULONG cbKey; ULONG cbKey;
} BCRYPT_ECCKEY_BLOB, *PBCRYPT_ECCKEY_BLOB; } BCRYPT_ECCKEY_BLOB, *PBCRYPT_ECCKEY_BLOB;
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
//SSL ECC Public Blob Version
typedef struct _SSL_ECCKEY_BLOB
{
ULONG dwCurveType;
ULONG cbKey;
} SSL_ECCKEY_BLOB, *PSSL_ECCKEY_BLOB;
//ECC Full versions
#define BCRYPT_ECC_FULLKEY_BLOB_V1 0x1
typedef enum
{
BCRYPT_ECC_PRIME_SHORT_WEIERSTRASS_CURVE = 0x1,
BCRYPT_ECC_PRIME_TWISTED_EDWARDS_CURVE = 0x2,
BCRYPT_ECC_PRIME_MONTGOMERY_CURVE = 0x3
} ECC_CURVE_TYPE_ENUM;
typedef enum
{
BCRYPT_NO_CURVE_GENERATION_ALG_ID = 0x0
} ECC_CURVE_ALG_ID_ENUM;
//The full version contains the curve parameters as well
//as the public and potentially private exponent.
typedef struct _BCRYPT_ECCFULLKEY_BLOB
{
ULONG dwMagic;
ULONG dwVersion; //Version of the structure
ECC_CURVE_TYPE_ENUM dwCurveType; //Supported curve types.
ECC_CURVE_ALG_ID_ENUM dwCurveGenerationAlgId; //For X.592 verification pur
poses, if we include Seed we will need to include the algorithm ID.
ULONG cbFieldLength; //Byte length of the fields
P, A, B, X, Y.
ULONG cbSubgroupOrder; //Byte length of the subgrou
p.
ULONG cbCofactor; //Byte length of cofactor of
G in E.
ULONG cbSeed; //Byte length of the seed us
ed to generate the curve.
//P[cbFieldLength] Prime specifying the base field.
//A[cbFieldLength] Coefficient A of the equation y^2 = x^3 + A*
x + B mod p
//B[cbFieldLength] Coefficient B of the equation y^2 = x^3 + A*
x + B mod p
//Gx[cbFieldLength] X-coordinate of the base point.
//Gy[cbFieldLength] Y-coordinate of the base point.
//n[cbSubgroupOrder] Order of the group generated by G = (x,y)
//h[cbCofactor] Cofactor of G in E.
//S[cbSeed] Seed of the curve.
//Qx[cbFieldLength] X-coordinate of the public point.
//Qy[cbFieldLength] Y-coordinate of the public point.
//d[cbSubgroupOrder] Private key. Not always present.
} BCRYPT_ECCFULLKEY_BLOB, *PBCRYPT_ECCFULLKEY_BLOB;
#endif
// The BCRYPT_DH_PUBLIC_BLOB and BCRYPT_DH_PRIVATE_BLOB blob types are used // The BCRYPT_DH_PUBLIC_BLOB and BCRYPT_DH_PRIVATE_BLOB blob types are used
// to transport plaintext DH keys. These blob types will be supported by // to transport plaintext DH keys. These blob types will be supported by
// all DH primitive providers. // all DH primitive providers.
#define BCRYPT_DH_PUBLIC_BLOB L"DHPUBLICBLOB" #define BCRYPT_DH_PUBLIC_BLOB L"DHPUBLICBLOB"
#define BCRYPT_DH_PRIVATE_BLOB L"DHPRIVATEBLOB" #define BCRYPT_DH_PRIVATE_BLOB L"DHPRIVATEBLOB"
#define LEGACY_DH_PUBLIC_BLOB L"CAPIDHPUBLICBLOB" #define LEGACY_DH_PUBLIC_BLOB L"CAPIDHPUBLICBLOB"
#define LEGACY_DH_PRIVATE_BLOB L"CAPIDHPRIVATEBLOB" #define LEGACY_DH_PRIVATE_BLOB L"CAPIDHPRIVATEBLOB"
#define BCRYPT_DH_PUBLIC_MAGIC 0x42504844 // DHPB #define BCRYPT_DH_PUBLIC_MAGIC 0x42504844 // DHPB
#define BCRYPT_DH_PRIVATE_MAGIC 0x56504844 // DHPV #define BCRYPT_DH_PRIVATE_MAGIC 0x56504844 // DHPV
skipping to change at line 450 skipping to change at line 547
// all DSA primitive providers. // all DSA primitive providers.
#define BCRYPT_DSA_PUBLIC_BLOB L"DSAPUBLICBLOB" #define BCRYPT_DSA_PUBLIC_BLOB L"DSAPUBLICBLOB"
#define BCRYPT_DSA_PRIVATE_BLOB L"DSAPRIVATEBLOB" #define BCRYPT_DSA_PRIVATE_BLOB L"DSAPRIVATEBLOB"
#define LEGACY_DSA_PUBLIC_BLOB L"CAPIDSAPUBLICBLOB" #define LEGACY_DSA_PUBLIC_BLOB L"CAPIDSAPUBLICBLOB"
#define LEGACY_DSA_PRIVATE_BLOB L"CAPIDSAPRIVATEBLOB" #define LEGACY_DSA_PRIVATE_BLOB L"CAPIDSAPRIVATEBLOB"
#define LEGACY_DSA_V2_PUBLIC_BLOB L"V2CAPIDSAPUBLICBLOB" #define LEGACY_DSA_V2_PUBLIC_BLOB L"V2CAPIDSAPUBLICBLOB"
#define LEGACY_DSA_V2_PRIVATE_BLOB L"V2CAPIDSAPRIVATEBLOB" #define LEGACY_DSA_V2_PRIVATE_BLOB L"V2CAPIDSAPRIVATEBLOB"
#define BCRYPT_DSA_PUBLIC_MAGIC 0x42505344 // DSPB #define BCRYPT_DSA_PUBLIC_MAGIC 0x42505344 // DSPB
#define BCRYPT_DSA_PRIVATE_MAGIC 0x56505344 // DSPV #define BCRYPT_DSA_PRIVATE_MAGIC 0x56505344 // DSPV
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define BCRYPT_DSA_PUBLIC_MAGIC_V2 0x32425044 // DPB2 #define BCRYPT_DSA_PUBLIC_MAGIC_V2 0x32425044 // DPB2
#define BCRYPT_DSA_PRIVATE_MAGIC_V2 0x32565044 // DPV2 #define BCRYPT_DSA_PRIVATE_MAGIC_V2 0x32565044 // DPV2
#endif
typedef struct _BCRYPT_DSA_KEY_BLOB typedef struct _BCRYPT_DSA_KEY_BLOB
{ {
ULONG dwMagic; ULONG dwMagic;
ULONG cbKey; ULONG cbKey;
UCHAR Count[4]; UCHAR Count[4];
UCHAR Seed[20]; UCHAR Seed[20];
UCHAR q[20]; UCHAR q[20];
} BCRYPT_DSA_KEY_BLOB, *PBCRYPT_DSA_KEY_BLOB; } BCRYPT_DSA_KEY_BLOB, *PBCRYPT_DSA_KEY_BLOB;
#if (NTDDI_VERSION >= NTDDI_WIN8)
typedef enum typedef enum
{ {
DSA_HASH_ALGORITHM_SHA1, DSA_HASH_ALGORITHM_SHA1,
DSA_HASH_ALGORITHM_SHA256, DSA_HASH_ALGORITHM_SHA256,
DSA_HASH_ALGORITHM_SHA512 DSA_HASH_ALGORITHM_SHA512
}HASHALGORITHM_ENUM; } HASHALGORITHM_ENUM;
typedef enum typedef enum
{ {
DSA_FIPS186_2, DSA_FIPS186_2,
DSA_FIPS186_3 DSA_FIPS186_3
} DSAFIPSVERSION_ENUM; } DSAFIPSVERSION_ENUM;
typedef struct _BCRYPT_DSA_KEY_BLOB_V2 typedef struct _BCRYPT_DSA_KEY_BLOB_V2
{ {
ULONG dwMagic; ULONG dwMagic;
ULONG cbKey; ULONG cbKey;
HASHALGORITHM_ENUM hashAlgorithm; HASHALGORITHM_ENUM hashAlgorithm;
DSAFIPSVERSION_ENUM standardVersion; DSAFIPSVERSION_ENUM standardVersion;
ULONG cbSeedLength; ULONG cbSeedLength;
ULONG cbGroupSize; ULONG cbGroupSize;
UCHAR Count[4]; UCHAR Count[4];
} BCRYPT_DSA_KEY_BLOB_V2, *PBCRYPT_DSA_KEY_BLOB_V2; } BCRYPT_DSA_KEY_BLOB_V2, *PBCRYPT_DSA_KEY_BLOB_V2;
#endif
typedef struct _BCRYPT_KEY_DATA_BLOB_HEADER typedef struct _BCRYPT_KEY_DATA_BLOB_HEADER
{ {
ULONG dwMagic; ULONG dwMagic;
ULONG dwVersion; ULONG dwVersion;
ULONG cbKeyData; ULONG cbKeyData;
} BCRYPT_KEY_DATA_BLOB_HEADER, *PBCRYPT_KEY_DATA_BLOB_HEADER; } BCRYPT_KEY_DATA_BLOB_HEADER, *PBCRYPT_KEY_DATA_BLOB_HEADER;
#define BCRYPT_KEY_DATA_BLOB_MAGIC 0x4d42444b //Key Data Blob Magic (KDBM) #define BCRYPT_KEY_DATA_BLOB_MAGIC 0x4d42444b //Key Data Blob Magic (KDBM)
#define BCRYPT_KEY_DATA_BLOB_VERSION1 0x1 #define BCRYPT_KEY_DATA_BLOB_VERSION1 0x1
// Property Strings for DSA // Property Strings for DSA
#define BCRYPT_DSA_PARAMETERS L"DSAParameters" #define BCRYPT_DSA_PARAMETERS L"DSAParameters"
#define BCRYPT_DSA_PARAMETERS_MAGIC 0x4d505344 // DSPM #define BCRYPT_DSA_PARAMETERS_MAGIC 0x4d505344 // DSPM
#define BCRYPT_DSA_PARAMETERS_MAGIC_V2 0x324d5044 // DPM2 #if (NTDDI_VERSION >= NTDDI_WIN8)
#define BCRYPT_DSA_PARAMETERS_MAGIC_V2 0x324d5044 // DPM2
#endif
typedef struct _BCRYPT_DSA_PARAMETER_HEADER typedef struct _BCRYPT_DSA_PARAMETER_HEADER
{ {
ULONG cbLength; ULONG cbLength;
ULONG dwMagic; ULONG dwMagic;
ULONG cbKeyLength; ULONG cbKeyLength;
UCHAR Count[4]; UCHAR Count[4];
UCHAR Seed[20]; UCHAR Seed[20];
UCHAR q[20]; UCHAR q[20];
} BCRYPT_DSA_PARAMETER_HEADER; } BCRYPT_DSA_PARAMETER_HEADER;
#if (NTDDI_VERSION >= NTDDI_WIN8)
typedef struct _BCRYPT_DSA_PARAMETER_HEADER_V2 typedef struct _BCRYPT_DSA_PARAMETER_HEADER_V2
{ {
ULONG cbLength; ULONG cbLength;
ULONG dwMagic; ULONG dwMagic;
ULONG cbKeyLength; ULONG cbKeyLength;
HASHALGORITHM_ENUM hashAlgorithm; HASHALGORITHM_ENUM hashAlgorithm;
DSAFIPSVERSION_ENUM standardVersion; DSAFIPSVERSION_ENUM standardVersion;
ULONG cbSeedLength; ULONG cbSeedLength;
ULONG cbGroupSize; ULONG cbGroupSize;
UCHAR Count[4]; UCHAR Count[4];
} BCRYPT_DSA_PARAMETER_HEADER_V2; } BCRYPT_DSA_PARAMETER_HEADER_V2;
#endif
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
//Property Strings for ECC
#define BCRYPT_ECC_PARAMETERS L"ECCParameters"
#define BCRYPT_ECC_CURVE_NAME L"ECCCurveName"
#define BCRYPT_ECC_CURVE_NAME_LIST L"ECCCurveNameList"
#define BCRYPT_ECC_PARAMETERS_MAGIC 0x50434345 // ECCP
typedef struct _BCRYPT_ECC_CURVE_NAMES
{
ULONG dwEccCurveNames;
LPWSTR *pEccCurveNames;
} BCRYPT_ECC_CURVE_NAMES;
//
// ECC Curve Names
//
#define BCRYPT_ECC_CURVE_BRAINPOOLP160R1 L"brainpoolP160r1"
#define BCRYPT_ECC_CURVE_BRAINPOOLP160T1 L"brainpoolP160t1"
#define BCRYPT_ECC_CURVE_BRAINPOOLP192R1 L"brainpoolP192r1"
#define BCRYPT_ECC_CURVE_BRAINPOOLP192T1 L"brainpoolP192t1"
#define BCRYPT_ECC_CURVE_BRAINPOOLP224R1 L"brainpoolP224r1"
#define BCRYPT_ECC_CURVE_BRAINPOOLP224T1 L"brainpoolP224t1"
#define BCRYPT_ECC_CURVE_BRAINPOOLP256R1 L"brainpoolP256r1"
#define BCRYPT_ECC_CURVE_BRAINPOOLP256T1 L"brainpoolP256t1"
#define BCRYPT_ECC_CURVE_BRAINPOOLP320R1 L"brainpoolP320r1"
#define BCRYPT_ECC_CURVE_BRAINPOOLP320T1 L"brainpoolP320t1"
#define BCRYPT_ECC_CURVE_BRAINPOOLP384R1 L"brainpoolP384r1"
#define BCRYPT_ECC_CURVE_BRAINPOOLP384T1 L"brainpoolP384t1"
#define BCRYPT_ECC_CURVE_BRAINPOOLP512R1 L"brainpoolP512r1"
#define BCRYPT_ECC_CURVE_BRAINPOOLP512T1 L"brainpoolP512t1"
#define BCRYPT_ECC_CURVE_25519 L"curve25519"
#define BCRYPT_ECC_CURVE_EC192WAPI L"ec192wapi"
#define BCRYPT_ECC_CURVE_NISTP192 L"nistP192"
#define BCRYPT_ECC_CURVE_NISTP224 L"nistP224"
#define BCRYPT_ECC_CURVE_NISTP256 L"nistP256"
#define BCRYPT_ECC_CURVE_NISTP384 L"nistP384"
#define BCRYPT_ECC_CURVE_NISTP521 L"nistP521"
#define BCRYPT_ECC_CURVE_NUMSP256T1 L"numsP256t1"
#define BCRYPT_ECC_CURVE_NUMSP384T1 L"numsP384t1"
#define BCRYPT_ECC_CURVE_NUMSP512T1 L"numsP512t1"
#define BCRYPT_ECC_CURVE_SECP160K1 L"secP160k1"
#define BCRYPT_ECC_CURVE_SECP160R1 L"secP160r1"
#define BCRYPT_ECC_CURVE_SECP160R2 L"secP160r2"
#define BCRYPT_ECC_CURVE_SECP192K1 L"secP192k1"
#define BCRYPT_ECC_CURVE_SECP192R1 L"secP192r1"
#define BCRYPT_ECC_CURVE_SECP224K1 L"secP224k1"
#define BCRYPT_ECC_CURVE_SECP224R1 L"secP224r1"
#define BCRYPT_ECC_CURVE_SECP256K1 L"secP256k1"
#define BCRYPT_ECC_CURVE_SECP256R1 L"secP256r1"
#define BCRYPT_ECC_CURVE_SECP384R1 L"secP384r1"
#define BCRYPT_ECC_CURVE_SECP521R1 L"secP521r1"
#define BCRYPT_ECC_CURVE_WTLS7 L"wtls7"
#define BCRYPT_ECC_CURVE_WTLS9 L"wtls9"
#define BCRYPT_ECC_CURVE_WTLS12 L"wtls12"
#define BCRYPT_ECC_CURVE_X962P192V1 L"x962P192v1"
#define BCRYPT_ECC_CURVE_X962P192V2 L"x962P192v2"
#define BCRYPT_ECC_CURVE_X962P192V3 L"x962P192v3"
#define BCRYPT_ECC_CURVE_X962P239V1 L"x962P239v1"
#define BCRYPT_ECC_CURVE_X962P239V2 L"x962P239v2"
#define BCRYPT_ECC_CURVE_X962P239V3 L"x962P239v3"
#define BCRYPT_ECC_CURVE_X962P256V1 L"x962P256v1"
#endif
// Operation types used in BCRYPT_MULTI_HASH_OPERATION structures // Operation types used in BCRYPT_MULTI_HASH_OPERATION structures
typedef enum { typedef enum {
BCRYPT_HASH_OPERATION_HASH_DATA = 1, BCRYPT_HASH_OPERATION_HASH_DATA = 1,
BCRYPT_HASH_OPERATION_FINISH_HASH = 2, BCRYPT_HASH_OPERATION_FINISH_HASH = 2,
} BCRYPT_HASH_OPERATION_TYPE; } BCRYPT_HASH_OPERATION_TYPE;
typedef struct _BCRYPT_MULTI_HASH_OPERATION { typedef struct _BCRYPT_MULTI_HASH_OPERATION {
ULONG iHash; // i ndex of hash object ULONG iHash; // i ndex of hash object
BCRYPT_HASH_OPERATION_TYPE hashOperation; // o peration to be performed BCRYPT_HASH_OPERATION_TYPE hashOperation; // o peration to be performed
skipping to change at line 590 skipping to change at line 768
#define BCRYPT_AES_CMAC_ALGORITHM L"AES-CMAC" #define BCRYPT_AES_CMAC_ALGORITHM L"AES-CMAC"
#define BCRYPT_ECDSA_P256_ALGORITHM L"ECDSA_P256" #define BCRYPT_ECDSA_P256_ALGORITHM L"ECDSA_P256"
#define BCRYPT_ECDSA_P384_ALGORITHM L"ECDSA_P384" #define BCRYPT_ECDSA_P384_ALGORITHM L"ECDSA_P384"
#define BCRYPT_ECDSA_P521_ALGORITHM L"ECDSA_P521" #define BCRYPT_ECDSA_P521_ALGORITHM L"ECDSA_P521"
#define BCRYPT_ECDH_P256_ALGORITHM L"ECDH_P256" #define BCRYPT_ECDH_P256_ALGORITHM L"ECDH_P256"
#define BCRYPT_ECDH_P384_ALGORITHM L"ECDH_P384" #define BCRYPT_ECDH_P384_ALGORITHM L"ECDH_P384"
#define BCRYPT_ECDH_P521_ALGORITHM L"ECDH_P521" #define BCRYPT_ECDH_P521_ALGORITHM L"ECDH_P521"
#define BCRYPT_RNG_ALGORITHM L"RNG" #define BCRYPT_RNG_ALGORITHM L"RNG"
#define BCRYPT_RNG_FIPS186_DSA_ALGORITHM L"FIPS186DSARNG" #define BCRYPT_RNG_FIPS186_DSA_ALGORITHM L"FIPS186DSARNG"
#define BCRYPT_RNG_DUAL_EC_ALGORITHM L"DUALECRNG" #define BCRYPT_RNG_DUAL_EC_ALGORITHM L"DUALECRNG"
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define BCRYPT_SP800108_CTR_HMAC_ALGORITHM L"SP800_108_CTR_HMAC" #define BCRYPT_SP800108_CTR_HMAC_ALGORITHM L"SP800_108_CTR_HMAC"
#define BCRYPT_SP80056A_CONCAT_ALGORITHM L"SP800_56A_CONCAT" #define BCRYPT_SP80056A_CONCAT_ALGORITHM L"SP800_56A_CONCAT"
#define BCRYPT_PBKDF2_ALGORITHM L"PBKDF2" #define BCRYPT_PBKDF2_ALGORITHM L"PBKDF2"
#define BCRYPT_CAPI_KDF_ALGORITHM L"CAPI_KDF" #define BCRYPT_CAPI_KDF_ALGORITHM L"CAPI_KDF"
#define BCRYPT_TLS1_1_KDF_ALGORITHM L"TLS1_1_KDF"
#define BCRYPT_TLS1_2_KDF_ALGORITHM L"TLS1_2_KDF"
#endif
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
#define BCRYPT_ECDSA_ALGORITHM L"ECDSA"
#define BCRYPT_ECDH_ALGORITHM L"ECDH"
#define BCRYPT_XTS_AES_ALGORITHM L"XTS-AES"
#endif
// //
// Interfaces // Interfaces
// //
#define BCRYPT_CIPHER_INTERFACE 0x00000001 #define BCRYPT_CIPHER_INTERFACE 0x00000001
#define BCRYPT_HASH_INTERFACE 0x00000002 #define BCRYPT_HASH_INTERFACE 0x00000002
#define BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE 0x00000003 #define BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE 0x00000003
#define BCRYPT_SECRET_AGREEMENT_INTERFACE 0x00000004 #define BCRYPT_SECRET_AGREEMENT_INTERFACE 0x00000004
#define BCRYPT_SIGNATURE_INTERFACE 0x00000005 #define BCRYPT_SIGNATURE_INTERFACE 0x00000005
#define BCRYPT_RNG_INTERFACE 0x00000006 #define BCRYPT_RNG_INTERFACE 0x00000006
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define BCRYPT_KEY_DERIVATION_INTERFACE 0x00000007 #define BCRYPT_KEY_DERIVATION_INTERFACE 0x00000007
#endif
//
// Algorithm pseudo-handles
// Pseudo-handles are distinguished from normal handles by being 1 mod 16
//
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
#define BCRYPT_MD2_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000001)
#define BCRYPT_MD4_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000011)
#define BCRYPT_MD5_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000021)
#define BCRYPT_SHA1_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000031)
#define BCRYPT_SHA256_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000041)
#define BCRYPT_SHA384_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000051)
#define BCRYPT_SHA512_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000061)
#define BCRYPT_RC4_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000071)
#define BCRYPT_RNG_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000081)
#define BCRYPT_HMAC_MD5_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000091)
#define BCRYPT_HMAC_SHA1_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000000a1)
#define BCRYPT_HMAC_SHA256_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000000b1)
#define BCRYPT_HMAC_SHA384_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000000c1)
#define BCRYPT_HMAC_SHA512_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000000d1)
#define BCRYPT_RSA_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000000e1)
#define BCRYPT_ECDSA_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000000f1)
#define BCRYPT_AES_CMAC_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000101)
#define BCRYPT_AES_GMAC_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000111)
#define BCRYPT_HMAC_MD2_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000121)
#define BCRYPT_HMAC_MD4_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000131)
#define BCRYPT_3DES_CBC_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000141)
#define BCRYPT_3DES_ECB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000151)
#define BCRYPT_3DES_CFB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000161)
#define BCRYPT_3DES_112_CBC_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000171)
#define BCRYPT_3DES_112_ECB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000181)
#define BCRYPT_3DES_112_CFB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000191)
#define BCRYPT_AES_CBC_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000001a1)
#define BCRYPT_AES_ECB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000001b1)
#define BCRYPT_AES_CFB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000001c1)
#define BCRYPT_AES_CCM_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000001d1)
#define BCRYPT_AES_GCM_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000001e1)
#define BCRYPT_DES_CBC_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000001f1)
#define BCRYPT_DES_ECB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000201)
#define BCRYPT_DES_CFB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000211)
#define BCRYPT_DESX_CBC_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000221)
#define BCRYPT_DESX_ECB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000231)
#define BCRYPT_DESX_CFB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000241)
#define BCRYPT_RC2_CBC_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000251)
#define BCRYPT_RC2_ECB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000261)
#define BCRYPT_RC2_CFB_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000271)
#define BCRYPT_DH_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000281)
#define BCRYPT_ECDH_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000291)
#define BCRYPT_ECDH_P256_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000002a1)
#define BCRYPT_ECDH_P384_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000002b1)
#define BCRYPT_ECDH_P521_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000002c1)
#define BCRYPT_DSA_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000002d1)
#define BCRYPT_ECDSA_P256_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000002e1)
#define BCRYPT_ECDSA_P384_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x000002f1)
#define BCRYPT_ECDSA_P521_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000301)
#define BCRYPT_RSA_SIGN_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000311)
#define BCRYPT_CAPI_KDF_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000321)
#define BCRYPT_PBKDF2_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000331)
#define BCRYPT_SP800108_CTR_HMAC_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000341)
#define BCRYPT_SP80056A_CONCAT_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000351)
#define BCRYPT_TLS1_1_KDF_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000361)
#define BCRYPT_TLS1_2_KDF_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000371)
#define BCRYPT_XTS_AES_ALG_HANDLE ((BCRYPT_ALG_HANDLE) 0x00000381)
#endif
// //
// Primitive algorithm provider functions. // Primitive algorithm provider functions.
// //
#define BCRYPT_ALG_HANDLE_HMAC_FLAG 0x00000008 #define BCRYPT_ALG_HANDLE_HMAC_FLAG 0x00000008
#define BCRYPT_CAPI_AES_FLAG 0x00000010
#define BCRYPT_HASH_REUSABLE_FLAG 0x00000020 #define BCRYPT_HASH_REUSABLE_FLAG 0x00000020
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define BCRYPT_CAPI_AES_FLAG 0x00000010
#endif
#if (NTDDI_VERSION > NTDDI_WINBLUE || (NTDDI_VERSION == NTDDI_WINBLUE && defined (WINBLUE_KBSPRING14))) #if (NTDDI_VERSION > NTDDI_WINBLUE || (NTDDI_VERSION == NTDDI_WINBLUE && defined (WINBLUE_KBSPRING14)))
#define BCRYPT_MULTI_FLAG 0x00000040 #define BCRYPT_MULTI_FLAG 0x00000040
#endif #endif
// //
// The BUFFERS_LOCKED flag used in BCryptEncrypt/BCryptDecrypt signals that // The BUFFERS_LOCKED flag used in BCryptEncrypt/BCryptDecrypt signals that
// the pbInput and pbOutput buffers have been locked (see MmProbeAndLockPages) // the pbInput and pbOutput buffers have been locked (see MmProbeAndLockPages)
// and CNG may not lock the buffers again. // and CNG may not lock the buffers again.
// This flag applies only to kernel mode, it is ignored in user mode. // This flag applies only to kernel mode, it is ignored in user mode.
// //
skipping to change at line 645 skipping to change at line 912
// This flag indicates that the extended key size support is requested. // This flag indicates that the extended key size support is requested.
// It has the following consequences: // It has the following consequences:
// - BCryptGetProperty will report a new maximum key size for BCRYPT_KEY_LENGTHS . // - BCryptGetProperty will report a new maximum key size for BCRYPT_KEY_LENGTHS .
// - BCryptGenerateSymmetricKey will support the longer key sizes. // - BCryptGenerateSymmetricKey will support the longer key sizes.
// - BCryptGenerateSymmetricKey will no longer truncate keys that are too long, but return an error instead. // - BCryptGenerateSymmetricKey will no longer truncate keys that are too long, but return an error instead.
// //
#if (NTDDI_VERSION >= NTDDI_WINBLUE) #if (NTDDI_VERSION >= NTDDI_WINBLUE)
#define BCRYPT_EXTENDED_KEYSIZE 0x00000080 #define BCRYPT_EXTENDED_KEYSIZE 0x00000080
#endif #endif
//
// By default, all ECC point multiplications occur outside of a group of low ord
er. For curves
// with cofactor > 1, this requires torsion clearing prior to performing point m
ultiplcation. This
// is done to avoid small subgroup attacks by requiring all scalar multiplcation
s to include the
// cofactor. That is, Q=hkP, where h is the cofactor, k is the scalar, and P is
the point. If
// the caller instead wants Q=kP, pass in this flag.
//
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
#define BCRYPT_ECC_NO_COFACTOR_MULTIPLICATION 0x00000100
#endif
_Must_inspect_result_ _Must_inspect_result_
NTSTATUS NTSTATUS
WINAPI WINAPI
BCryptOpenAlgorithmProvider( BCryptOpenAlgorithmProvider(
_Out_ BCRYPT_ALG_HANDLE *phAlgorithm, _Out_ BCRYPT_ALG_HANDLE *phAlgorithm,
_In_ LPCWSTR pszAlgId, _In_ LPCWSTR pszAlgId,
_In_opt_ LPCWSTR pszImplementation, _In_opt_ LPCWSTR pszImplementation,
_In_ ULONG dwFlags); _In_ ULONG dwFlags);
// AlgOperations flags for use with BCryptEnumAlgorithms() // AlgOperations flags for use with BCryptEnumAlgorithms()
#define BCRYPT_CIPHER_OPERATION 0x00000001 #define BCRYPT_CIPHER_OPERATION 0x00000001
#define BCRYPT_HASH_OPERATION 0x00000002 #define BCRYPT_HASH_OPERATION 0x00000002
#define BCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION 0x00000004 #define BCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION 0x00000004
#define BCRYPT_SECRET_AGREEMENT_OPERATION 0x00000008 #define BCRYPT_SECRET_AGREEMENT_OPERATION 0x00000008
#define BCRYPT_SIGNATURE_OPERATION 0x00000010 #define BCRYPT_SIGNATURE_OPERATION 0x00000010
#define BCRYPT_RNG_OPERATION 0x00000020 #define BCRYPT_RNG_OPERATION 0x00000020
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define BCRYPT_KEY_DERIVATION_OPERATION 0x00000040 #define BCRYPT_KEY_DERIVATION_OPERATION 0x00000040
#endif
// USE EXTREME CAUTION: editing comments that contain "certenrolls_*" tokens // USE EXTREME CAUTION: editing comments that contain "certenrolls_*" tokens
// could break building CertEnroll idl files: // could break building CertEnroll idl files:
// certenrolls_begin -- BCRYPT_ALGORITHM_IDENTIFIER // certenrolls_begin -- BCRYPT_ALGORITHM_IDENTIFIER
typedef struct _BCRYPT_ALGORITHM_IDENTIFIER typedef struct _BCRYPT_ALGORITHM_IDENTIFIER
{ {
LPWSTR pszName; LPWSTR pszName;
ULONG dwClass; ULONG dwClass;
ULONG dwFlags; ULONG dwFlags;
skipping to change at line 698 skipping to change at line 979
_Must_inspect_result_ _Must_inspect_result_
NTSTATUS NTSTATUS
WINAPI WINAPI
BCryptEnumProviders( BCryptEnumProviders(
_In_ LPCWSTR pszAlgId, _In_ LPCWSTR pszAlgId,
_Out_ ULONG *pImplCount, _Out_ ULONG *pImplCount,
_Out_ BCRYPT_PROVIDER_NAME **ppImplList, _Out_ BCRYPT_PROVIDER_NAME **ppImplList,
_In_ ULONG dwFlags); _In_ ULONG dwFlags);
// Flags for use with BCryptGetProperty and BCryptSetProperty // Unused flags. Kept for backward compatibility.
// "Flags for use with BCryptGetProperty and BCryptSetProperty"
#define BCRYPT_PUBLIC_KEY_FLAG 0x00000001 #define BCRYPT_PUBLIC_KEY_FLAG 0x00000001
#define BCRYPT_PRIVATE_KEY_FLAG 0x00000002 #define BCRYPT_PRIVATE_KEY_FLAG 0x00000002
_Must_inspect_result_ _Must_inspect_result_
NTSTATUS NTSTATUS
WINAPI WINAPI
BCryptGetProperty( BCryptGetProperty(
_In_ BCRYPT_HANDLE hObject, _In_ BCRYPT_HANDLE hObject,
_In_ LPCWSTR pszProperty, _In_ LPCWSTR pszProperty,
_Out_writes_bytes_to_opt_(cbOutput, *pcbResult) PUCHAR pbOutput, _Out_writes_bytes_to_opt_(cbOutput, *pcbResult) PUCHAR pbOutput,
skipping to change at line 900 skipping to change at line 1182
WINAPI WINAPI
BCryptDeriveKey( BCryptDeriveKey(
_In_ BCRYPT_SECRET_HANDLE hSharedSecret, _In_ BCRYPT_SECRET_HANDLE hSharedSecret,
_In_ LPCWSTR pwszKDF, _In_ LPCWSTR pwszKDF,
_In_opt_ BCryptBufferDesc *pParameterList, _In_opt_ BCryptBufferDesc *pParameterList,
_Out_writes_bytes_to_opt_(cbDerivedKey, *pcbResult) PUCHAR pbDerivedKey, _Out_writes_bytes_to_opt_(cbDerivedKey, *pcbResult) PUCHAR pbDerivedKey,
_In_ ULONG cbDerivedKey, _In_ ULONG cbDerivedKey,
_Out_ ULONG *pcbResult, _Out_ ULONG *pcbResult,
_In_ ULONG dwFlags); _In_ ULONG dwFlags);
#if (NTDDI_VERSION >= NTDDI_WIN8)
_Must_inspect_result_ _Must_inspect_result_
NTSTATUS NTSTATUS
WINAPI WINAPI
BCryptKeyDerivation( BCryptKeyDerivation(
_In_ BCRYPT_KEY_HANDLE hKey, _In_ BCRYPT_KEY_HANDLE hKey,
_In_opt_ BCryptBufferDesc *pParameterList, _In_opt_ BCryptBufferDesc *pParameterList,
_Out_writes_bytes_to_(cbDerivedKey, *pcbResult) PUCHAR pbDerivedKey, _Out_writes_bytes_to_(cbDerivedKey, *pcbResult) PUCHAR pbDerivedKey,
_In_ ULONG cbDerivedKey, _In_ ULONG cbDerivedKey,
_Out_ ULONG *pcbResult, _Out_ ULONG *pcbResult,
_In_ ULONG dwFlags); _In_ ULONG dwFlags);
#endif
// //
// Primitive hashing functions. // Primitive hashing functions.
// //
_Must_inspect_result_ _Must_inspect_result_
NTSTATUS NTSTATUS
WINAPI WINAPI
BCryptCreateHash( BCryptCreateHash(
_Inout_ BCRYPT_ALG_HANDLE hAlgorithm, _Inout_ BCRYPT_ALG_HANDLE hAlgorithm,
_Out_ BCRYPT_HASH_HANDLE *phHash, _Out_ BCRYPT_HASH_HANDLE *phHash,
skipping to change at line 984 skipping to change at line 1268
_Out_ BCRYPT_HASH_HANDLE *phNewHash, _Out_ BCRYPT_HASH_HANDLE *phNewHash,
_Out_writes_bytes_all_opt_(cbHashObject) PUCHAR pbHashObject, _Out_writes_bytes_all_opt_(cbHashObject) PUCHAR pbHashObject,
_In_ ULONG cbHashObject, _In_ ULONG cbHashObject,
_In_ ULONG dwFlags); _In_ ULONG dwFlags);
NTSTATUS NTSTATUS
WINAPI WINAPI
BCryptDestroyHash( BCryptDestroyHash(
_Inout_ BCRYPT_HASH_HANDLE hHash); _Inout_ BCRYPT_HASH_HANDLE hHash);
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
NTSTATUS
WINAPI
BCryptHash(
_Inout_ BCRYPT_ALG_HANDLE hAlgorithm,
_In_reads_bytes_opt_(cbSecret) PUCHAR pbSecret, // for k
eyed algs
_In_ ULONG cbSecret, // for k
eyed algs
_In_reads_bytes_(cbInput) PUCHAR pbInput,
_In_ ULONG cbInput,
_Out_writes_bytes_all_(cbOutput) PUCHAR pbOutput,
_In_ ULONG cbOutput );
#endif
// //
// Primitive random number generation. // Primitive random number generation.
// //
// Flags to BCryptGenRandom // Flags to BCryptGenRandom
// BCRYPT_RNG_USE_ENTROPY_IN_BUFFER is ignored in Win7 & later
#define BCRYPT_RNG_USE_ENTROPY_IN_BUFFER 0x00000001 #define BCRYPT_RNG_USE_ENTROPY_IN_BUFFER 0x00000001
#define BCRYPT_USE_SYSTEM_PREFERRED_RNG 0x00000002 #define BCRYPT_USE_SYSTEM_PREFERRED_RNG 0x00000002
_Must_inspect_result_ _Must_inspect_result_
NTSTATUS NTSTATUS
WINAPI WINAPI
BCryptGenRandom( BCryptGenRandom(
_In_opt_ BCRYPT_ALG_HANDLE hAlgorithm, _In_opt_ BCRYPT_ALG_HANDLE hAlgorithm,
_Inout_updates_bytes_all_(cbBuffer) PUCHAR pbBuffer, _Out_writes_bytes_(cbBuffer) PUCHAR pbBuffer,
_In_ ULONG cbBuffer, _In_ ULONG cbBuffer,
_In_ ULONG dwFlags); _In_ ULONG dwFlags);
#if (NTDDI_VERSION >= NTDDI_WIN7)
// //
// Primitive key derivation functions. // Primitive key derivation functions.
// //
_Must_inspect_result_ _Must_inspect_result_
NTSTATUS NTSTATUS
WINAPI WINAPI
BCryptDeriveKeyCapi( BCryptDeriveKeyCapi(
_In_ BCRYPT_HASH_HANDLE hHash, _In_ BCRYPT_HASH_HANDLE hHash,
_In_opt_ BCRYPT_ALG_HANDLE hTargetAlg, _In_opt_ BCRYPT_ALG_HANDLE hTargetAlg,
_Out_writes_bytes_( cbDerivedKey ) PUCHAR pbDerivedKey, _Out_writes_bytes_( cbDerivedKey ) PUCHAR pbDerivedKey,
_In_ ULONG cbDerivedKey, _In_ ULONG cbDerivedKey,
_In_ ULONG dwFlags); _In_ ULONG dwFlags);
#endif
#if (NTDDI_VERSION >= NTDDI_WIN7)
_Must_inspect_result_ _Must_inspect_result_
NTSTATUS NTSTATUS
WINAPI WINAPI
BCryptDeriveKeyPBKDF2( BCryptDeriveKeyPBKDF2(
_In_ BCRYPT_ALG_HANDLE hPrf, _In_ BCRYPT_ALG_HANDLE hPrf,
_In_reads_bytes_opt_( cbPassword ) PUCHAR pbPassword, _In_reads_bytes_opt_( cbPassword ) PUCHAR pbPassword,
_In_ ULONG cbPassword, _In_ ULONG cbPassword,
_In_reads_bytes_opt_( cbSalt ) PUCHAR pbSalt, _In_reads_bytes_opt_( cbSalt ) PUCHAR pbSalt,
_In_ ULONG cbSalt, _In_ ULONG cbSalt,
_In_ ULONGLONG cIterations, _In_ ULONGLONG cIterations,
_Out_writes_bytes_( cbDerivedKey ) PUCHAR pbDerivedKey, _Out_writes_bytes_( cbDerivedKey ) PUCHAR pbDerivedKey,
_In_ ULONG cbDerivedKey, _In_ ULONG cbDerivedKey,
_In_ ULONG dwFlags); _In_ ULONG dwFlags);
#endif
// //
// Interface version control... // Interface version control...
// //
typedef struct _BCRYPT_INTERFACE_VERSION typedef struct _BCRYPT_INTERFACE_VERSION
{ {
USHORT MajorVersion; USHORT MajorVersion;
USHORT MinorVersion; USHORT MinorVersion;
} BCRYPT_INTERFACE_VERSION, *PBCRYPT_INTERFACE_VERSION; } BCRYPT_INTERFACE_VERSION, *PBCRYPT_INTERFACE_VERSION;
skipping to change at line 1230 skipping to change at line 1532
} }
CRYPT_PROVIDER_REF, *PCRYPT_PROVIDER_REF; CRYPT_PROVIDER_REF, *PCRYPT_PROVIDER_REF;
typedef struct _CRYPT_PROVIDER_REFS typedef struct _CRYPT_PROVIDER_REFS
{ {
ULONG cProviders; ULONG cProviders;
PCRYPT_PROVIDER_REF *rgpProviders; PCRYPT_PROVIDER_REF *rgpProviders;
} }
CRYPT_PROVIDER_REFS, *PCRYPT_PROVIDER_REFS; CRYPT_PROVIDER_REFS, *PCRYPT_PROVIDER_REFS;
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM
) */
#pragma endregion
#pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
// CryptoConfig Functions //////////////////////////////////////////////////// // CryptoConfig Functions ////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
#ifndef KERNEL_MODE_CNG #ifndef KERNEL_MODE_CNG
_Must_inspect_result_ _Must_inspect_result_
NTSTATUS NTSTATUS
WINAPI WINAPI
BCryptQueryProviderRegistration( BCryptQueryProviderRegistration(
skipping to change at line 1466 skipping to change at line 1774
// //
// Miscellaneous queries about the crypto environment // Miscellaneous queries about the crypto environment
// //
NTSTATUS NTSTATUS
WINAPI WINAPI
BCryptGetFipsAlgorithmMode( BCryptGetFipsAlgorithmMode(
_Out_ BOOLEAN *pfEnabled _Out_ BOOLEAN *pfEnabled
); );
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ BOOLEAN
CngGetFipsAlgorithmMode(
VOID
);
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY
STEM) */
#pragma endregion #pragma endregion
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif // __BCRYPT_H__ #if _MSC_VER >= 1200
#pragma warning(pop)
#endif
 End of changes. 56 change blocks. 
26 lines changed or deleted 354 lines changed or added

This html diff was produced by rfcdiff 1.41.