From f6fcadbc9546803e1e01a3556a345198d5de29ce Mon Sep 17 00:00:00 2001
From: Biswapriyo Nath <[email protected]>
Date: Sun, 4 Oct 2020 19:40:54 +0530
Subject: [PATCH 4/4] headers: Update bcrypt.h header file.

Changes:
  * Add BCryptCreateMultiHash, BCryptProcessMultiOperations and BCryptHash 
function declarations.
  * Add related symbols of those functions.
  * Relocate duplicate BCryptUnregisterConfigChangeNotify function declaration.

Signed-off-by: Biswapriyo Nath <[email protected]>
---
 mingw-w64-headers/include/bcrypt.h | 82 +++++++++++++++++++++++++++++-
 1 file changed, 81 insertions(+), 1 deletion(-)

diff --git a/mingw-w64-headers/include/bcrypt.h 
b/mingw-w64-headers/include/bcrypt.h
index 006181c..6369fd1 100644
--- a/mingw-w64-headers/include/bcrypt.h
+++ b/mingw-w64-headers/include/bcrypt.h
@@ -55,6 +55,14 @@ extern "C" {
 #define BCRYPT_KDF_TLS_PRF L"TLS_PRF"
 #define BCRYPT_KDF_SP80056A_CONCAT L"SP800_56A_CONCAT"
 
+#if NTDDI_VERSION >= NTDDI_WINBLUE
+#define BCRYPT_KDF_RAW_SECRET L"TRUNCATE"
+#endif
+
+#if NTDDI_VERSION >= NTDDI_WIN10_RS4
+#define BCRYPT_KDF_HKDF L"HKDF"
+#endif
+
 #define KDF_HASH_ALGORITHM 0x0
 #define KDF_SECRET_PREPEND 0x1
 #define KDF_SECRET_APPEND 0x2
@@ -62,18 +70,26 @@ extern "C" {
 #define KDF_TLS_PRF_LABEL 0x4
 #define KDF_TLS_PRF_SEED 0x5
 #define KDF_SECRET_HANDLE 0x6
+#if NTDDI_VERSION >= NTDDI_WIN7
 #define KDF_TLS_PRF_PROTOCOL 0x7
 #define KDF_ALGORITHMID 0x8
 #define KDF_PARTYUINFO 0x9
 #define KDF_PARTYVINFO 0xa
 #define KDF_SUPPPUBINFO 0xb
 #define KDF_SUPPPRIVINFO 0xc
+#endif
+#if NTDDI_VERSION >= NTDDI_WIN8
 #define KDF_LABEL 0xd
 #define KDF_CONTEXT 0xe
 #define KDF_SALT 0xf
 #define KDF_ITERATION_COUNT 0x10
 #define KDF_GENERIC_PARAMETER 0x11
 #define KDF_KEYBITLENGTH 0x12
+#endif
+#if NTDDI_VERSION >= NTDDI_WIN10_RS4
+#define KDF_HKDF_SALT 0x13
+#define KDF_HKDF_INFO 0x14
+#endif
 
 #define KDF_USE_SECRET_AS_HMAC_KEY_FLAG 1
 
@@ -89,7 +105,9 @@ extern "C" {
 
 #define BCRYPT_OPAQUE_KEY_BLOB L"OpaqueKeyBlob"
 #define BCRYPT_KEY_DATA_BLOB L"KeyDataBlob"
+#if NTDDI_VERSION >= NTDDI_WIN7
 #define BCRYPT_AES_WRAP_KEY_BLOB L"Rfc3565KeyWrapBlob"
+#endif
 
 #define BCRYPT_ALGORITHM_NAME L"AlgorithmName"
 #define BCRYPT_AUTH_TAG_LENGTH L"AuthTagLength"
@@ -120,7 +138,17 @@ extern "C" {
 #define BCRYPT_PCP_PROVIDER_VERSION_PROPERTY L"PCP_PROVIDER_VERSION"
 #define BCRYPT_PRIMITIVE_TYPE L"PrimitiveType"
 #define BCRYPT_PROVIDER_HANDLE L"ProviderHandle"
+#define BCRYPT_PUBLIC_KEY_LENGTH L"PublicKeyLength"
 #define BCRYPT_SIGNATURE_LENGTH L"SignatureLength"
+#if (NTDDI_VERSION > NTDDI_WINBLUE || (NTDDI_VERSION == NTDDI_WINBLUE && 
defined(WINBLUE_KBSPRING14)))
+#define BCRYPT_MULTI_OBJECT_LENGTH L"MultiObjectLength"
+#endif
+#if NTDDI_VERSION >= NTDDI_WIN10_RS4
+#define BCRYPT_IS_IFX_TPM_WEAK_KEY L"IsIfxTpmWeakKey"
+#define BCRYPT_HKDF_HASH_ALGORITHM L"HkdfHashAlgorithm"
+#define BCRYPT_HKDF_SALT_AND_FINALIZE L"HkdfSaltAndFinalize"
+#define BCRYPT_HKDF_PRK_AND_FINALIZE L"HkdfPrkAndFinalize"
+#endif
 
 #define BCRYPT_SUPPORTED_PAD_ROUTER 0x00000001
 #define BCRYPT_SUPPORTED_PAD_PKCS1_ENC 0x00000002
@@ -136,6 +164,9 @@ extern "C" {
 #define BCRYPT_PAD_PKCS1 0x00000002
 #define BCRYPT_PAD_OAEP 0x00000004
 #define BCRYPT_PAD_PSS 0x00000008
+#if NTDDI_VERSION >= NTDDI_WINBLUE
+#define BCRYPT_PAD_PKCS1_OPTIONAL_HASH_OID 0x00000010
+#endif
 
 #define BCRYPTBUFFER_VERSION 0
 
@@ -220,18 +251,30 @@ extern "C" {
 
 #define BCRYPT_RSAFULLPRIVATE_MAGIC 0x33415352
 
+#if NTDDI_VERSION >= NTDDI_WIN8
 #define BCRYPT_GLOBAL_PARAMETERS L"SecretAgreementParam"
 #define BCRYPT_PRIVATE_KEY L"PrivKeyVal"
+#endif
 
 #define BCRYPT_ECCPUBLIC_BLOB L"ECCPUBLICBLOB"
 #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
 #define BCRYPT_ECDH_PRIVATE_P256_MAGIC 0x324b4345
 #define BCRYPT_ECDH_PUBLIC_P384_MAGIC 0x334b4345
 #define BCRYPT_ECDH_PRIVATE_P384_MAGIC 0x344b4345
 #define BCRYPT_ECDH_PUBLIC_P521_MAGIC 0x354b4345
 #define BCRYPT_ECDH_PRIVATE_P521_MAGIC 0x364b4345
+#if NTDDI_VERSION >= NTDDI_WINTHRESHOLD
+#define BCRYPT_ECDH_PUBLIC_GENERIC_MAGIC 0x504B4345
+#define BCRYPT_ECDH_PRIVATE_GENERIC_MAGIC 0x564B4345
+#endif
 
 #define BCRYPT_ECDSA_PUBLIC_P256_MAGIC 0x31534345
 #define BCRYPT_ECDSA_PRIVATE_P256_MAGIC 0x32534345
@@ -239,6 +282,10 @@ extern "C" {
 #define BCRYPT_ECDSA_PRIVATE_P384_MAGIC 0x34534345
 #define BCRYPT_ECDSA_PUBLIC_P521_MAGIC 0x35534345
 #define BCRYPT_ECDSA_PRIVATE_P521_MAGIC 0x36534345
+#if NTDDI_VERSION >= NTDDI_WINTHRESHOLD
+#define BCRYPT_ECDSA_PUBLIC_GENERIC_MAGIC 0x50444345
+#define BCRYPT_ECDSA_PRIVATE_GENERIC_MAGIC 0x56444345
+#endif
 
 #define BCRYPT_DH_PUBLIC_BLOB L"DHPUBLICBLOB"
 #define BCRYPT_DH_PRIVATE_BLOB L"DHPRIVATEBLOB"
@@ -460,6 +507,32 @@ typedef PVOID BCRYPT_HANDLE;
     UCHAR Count[4];
   } BCRYPT_DSA_PARAMETER_HEADER_V2;
 
+  typedef struct _BCRYPT_ECC_CURVE_NAMES {
+    ULONG dwEccCurveNames;
+    LPWSTR *pEccCurveNames;
+  } BCRYPT_ECC_CURVE_NAMES;
+
+  typedef enum {
+    BCRYPT_HASH_OPERATION_HASH_DATA = 1,
+    BCRYPT_HASH_OPERATION_FINISH_HASH = 2
+  } BCRYPT_HASH_OPERATION_TYPE;
+
+  typedef struct _BCRYPT_MULTI_HASH_OPERATION {
+    ULONG iHash;
+    BCRYPT_HASH_OPERATION_TYPE hashOperation;
+    PUCHAR pbBuffer;
+    ULONG cbBuffer;
+  } BCRYPT_MULTI_HASH_OPERATION;
+
+  typedef enum {
+    BCRYPT_OPERATION_TYPE_HASH = 1
+  } BCRYPT_MULTI_OPERATION_TYPE;
+
+  typedef struct _BCRYPT_MULTI_OBJECT_LENGTH_STRUCT {
+    ULONG cbPerObject;
+    ULONG cbPerElement;
+  } BCRYPT_MULTI_OBJECT_LENGTH_STRUCT;
+
   typedef struct _BCRYPT_ALGORITHM_IDENTIFIER {
     LPWSTR pszName;
     ULONG dwClass;
@@ -577,8 +650,15 @@ typedef PVOID BCRYPT_HANDLE;
   NTSTATUS WINAPI BCryptCreateHash (BCRYPT_ALG_HANDLE hAlgorithm, 
BCRYPT_HASH_HANDLE *phHash, PUCHAR pbHashObject, ULONG cbHashObject, PUCHAR 
pbSecret, ULONG cbSecret, ULONG dwFlags);
   NTSTATUS WINAPI BCryptHashData (BCRYPT_HASH_HANDLE hHash, PUCHAR pbInput, 
ULONG cbInput, ULONG dwFlags);
   NTSTATUS WINAPI BCryptFinishHash (BCRYPT_HASH_HANDLE hHash, PUCHAR pbOutput, 
ULONG cbOutput, ULONG dwFlags);
+#if (NTDDI_VERSION > NTDDI_WINBLUE || (NTDDI_VERSION == NTDDI_WINBLUE && 
defined(WINBLUE_KBSPRING14)))
+  NTSTATUS WINAPI BCryptCreateMultiHash (BCRYPT_ALG_HANDLE hAlgorithm, 
BCRYPT_HASH_HANDLE *phHash, ULONG nHashes, PUCHAR pbHashObject, ULONG 
cbHashObject, PUCHAR pbSecret, ULONG cbSecret, ULONG dwFlags);
+  NTSTATUS WINAPI BCryptProcessMultiOperations (BCRYPT_HANDLE hObject, 
BCRYPT_MULTI_OPERATION_TYPE operationType, PVOID pOperations, ULONG 
cbOperations, ULONG dwFlags);
+#endif
   NTSTATUS WINAPI BCryptDuplicateHash (BCRYPT_HASH_HANDLE hHash, 
BCRYPT_HASH_HANDLE *phNewHash, PUCHAR pbHashObject, ULONG cbHashObject, ULONG 
dwFlags);
   NTSTATUS WINAPI BCryptDestroyHash (BCRYPT_HASH_HANDLE hHash);
+#if NTDDI_VERSION >= NTDDI_WINTHRESHOLD
+  NTSTATUS WINAPI BCryptHash (BCRYPT_ALG_HANDLE hAlgorithm, PUCHAR pbSecret, 
ULONG cbSecret, PUCHAR pbInput, ULONG cbInput, PUCHAR pbOutput, ULONG cbOutput);
+#endif
   NTSTATUS WINAPI BCryptGenRandom (BCRYPT_ALG_HANDLE hAlgorithm, PUCHAR 
pbBuffer, ULONG cbBuffer, ULONG dwFlags);
   NTSTATUS WINAPI BCryptDeriveKeyCapi (BCRYPT_HASH_HANDLE hHash, 
BCRYPT_ALG_HANDLE hTargetAlg, PUCHAR pbDerivedKey, ULONG cbDerivedKey, ULONG 
dwFlags);
   NTSTATUS WINAPI BCryptDeriveKeyPBKDF2 (BCRYPT_ALG_HANDLE hPrf, PUCHAR 
pbPassword, ULONG cbPassword, PUCHAR pbSalt, ULONG cbSalt, ULONGLONG 
cIterations, PUCHAR pbDerivedKey, ULONG cbDerivedKey, ULONG dwFlags);
@@ -603,10 +683,10 @@ typedef PVOID BCRYPT_HANDLE;
   NTSTATUS WINAPI BCryptSetContextFunctionProperty (ULONG dwTable, LPCWSTR 
pszContext, ULONG dwInterface, LPCWSTR pszFunction, LPCWSTR pszProperty, ULONG 
cbValue, PUCHAR pbValue);
   NTSTATUS WINAPI BCryptQueryContextFunctionProperty (ULONG dwTable, LPCWSTR 
pszContext, ULONG dwInterface, LPCWSTR pszFunction, LPCWSTR pszProperty, ULONG 
*pcbValue, PUCHAR *ppbValue);
   NTSTATUS WINAPI BCryptRegisterConfigChangeNotify (HANDLE *phEvent);
+  NTSTATUS WINAPI BCryptUnregisterConfigChangeNotify (HANDLE hEvent);
 #else
   NTSTATUS WINAPI BCryptRegisterConfigChangeNotify (PRKEVENT pEvent);
   NTSTATUS WINAPI BCryptUnregisterConfigChangeNotify (PRKEVENT pEvent);
-  NTSTATUS WINAPI BCryptUnregisterConfigChangeNotify (HANDLE hEvent);
 #endif
 #endif
 
-- 
2.27.0

_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to