diff --git a/patches/bcrypt-BCryptSecretAgreement/0001-bcrypt-Add-BCryptDestroySecret-BCryptSecretAgreement.patch b/patches/bcrypt-BCryptSecretAgreement/0001-bcrypt-Add-BCryptDestroySecret-BCryptSecretAgreement.patch new file mode 100644 index 00000000..51936b79 --- /dev/null +++ b/patches/bcrypt-BCryptSecretAgreement/0001-bcrypt-Add-BCryptDestroySecret-BCryptSecretAgreement.patch @@ -0,0 +1,91 @@ +From 72d00367b9863fd84d47623b6811552e155fca84 Mon Sep 17 00:00:00 2001 +From: Alistair Leslie-Hughes +Date: Tue, 5 Feb 2019 10:00:26 +1100 +Subject: [PATCH] bcrypt: Add BCryptDestroySecret/BCryptSecretAgreement stubs + +--- + dlls/bcrypt/bcrypt.spec | 4 ++-- + dlls/bcrypt/bcrypt_main.c | 16 ++++++++++++++++ + include/bcrypt.h | 3 +++ + 3 files changed, 21 insertions(+), 2 deletions(-) + +diff --git a/dlls/bcrypt/bcrypt.spec b/dlls/bcrypt/bcrypt.spec +index 052a099..dfe08e7 100644 +--- a/dlls/bcrypt/bcrypt.spec ++++ b/dlls/bcrypt/bcrypt.spec +@@ -11,7 +11,7 @@ + @ stdcall BCryptDeriveKeyPBKDF2(ptr ptr long ptr long int64 ptr long long) + @ stdcall BCryptDestroyHash(ptr) + @ stdcall BCryptDestroyKey(ptr) +-@ stub BCryptDestroySecret ++@ stdcall BCryptDestroySecret(ptr) + @ stdcall BCryptDuplicateHash(ptr ptr ptr long long) + @ stdcall BCryptDuplicateKey(ptr ptr ptr long long) + @ stdcall BCryptEncrypt(ptr ptr long ptr ptr long ptr long ptr long) +@@ -44,7 +44,7 @@ + @ stdcall BCryptRemoveContextFunction(long wstr long wstr) + @ stdcall BCryptRemoveContextFunctionProvider(long wstr long wstr wstr) + @ stub BCryptResolveProviders +-@ stub BCryptSecretAgreement ++@ stdcall BCryptSecretAgreement(ptr ptr ptr long) + @ stub BCryptSetAuditingInterface + @ stub BCryptSetContextFunctionProperty + @ stdcall BCryptSetProperty(ptr wstr ptr long long) +diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c +index 80bd14b..36451c9 100644 +--- a/dlls/bcrypt/bcrypt_main.c ++++ b/dlls/bcrypt/bcrypt_main.c +@@ -1556,6 +1556,22 @@ NTSTATUS WINAPI BCryptDeriveKeyPBKDF2( BCRYPT_ALG_HANDLE handle, + return STATUS_SUCCESS; + } + ++NTSTATUS WINAPI BCryptSecretAgreement(BCRYPT_KEY_HANDLE handle, BCRYPT_KEY_HANDLE key, BCRYPT_SECRET_HANDLE *secret, ULONG flags) ++{ ++ FIXME( "%p, %p, %p, %08x\n", handle, key, secret, flags ); ++ ++ if(secret) ++ *secret = (BCRYPT_SECRET_HANDLE *)0xDEADFEED; ++ ++ return STATUS_SUCCESS; ++} ++ ++NTSTATUS WINAPI BCryptDestroySecret(BCRYPT_SECRET_HANDLE secret) ++{ ++ FIXME( "%p\n", secret ); ++ return STATUS_SUCCESS; ++} ++ + BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved ) + { + switch (reason) +diff --git a/include/bcrypt.h b/include/bcrypt.h +index ba78c1d..866914c 100644 +--- a/include/bcrypt.h ++++ b/include/bcrypt.h +@@ -211,6 +211,7 @@ typedef PVOID BCRYPT_ALG_HANDLE; + typedef PVOID BCRYPT_KEY_HANDLE; + typedef PVOID BCRYPT_HANDLE; + typedef PVOID BCRYPT_HASH_HANDLE; ++typedef PVOID BCRYPT_SECRET_HANDLE; + + /* Flags for BCryptGenRandom */ + #define BCRYPT_RNG_USE_ENTROPY_IN_BUFFER 0x00000001 +@@ -228,6 +229,7 @@ NTSTATUS WINAPI BCryptDecrypt(BCRYPT_KEY_HANDLE, PUCHAR, ULONG, VOID *, PUCHAR, + NTSTATUS WINAPI BCryptDeriveKeyPBKDF2(BCRYPT_ALG_HANDLE, PUCHAR, ULONG, PUCHAR, ULONG, ULONGLONG, PUCHAR, ULONG, ULONG); + NTSTATUS WINAPI BCryptDestroyHash(BCRYPT_HASH_HANDLE); + NTSTATUS WINAPI BCryptDestroyKey(BCRYPT_KEY_HANDLE); ++NTSTATUS WINAPI BCryptDestroySecret(BCRYPT_SECRET_HANDLE); + NTSTATUS WINAPI BCryptDuplicateHash(BCRYPT_HASH_HANDLE, BCRYPT_HASH_HANDLE *, UCHAR *, ULONG, ULONG); + NTSTATUS WINAPI BCryptEncrypt(BCRYPT_KEY_HANDLE, PUCHAR, ULONG, VOID *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG *, ULONG); + NTSTATUS WINAPI BCryptEnumAlgorithms(ULONG, ULONG *, BCRYPT_ALGORITHM_IDENTIFIER **, ULONG); +@@ -242,6 +244,7 @@ NTSTATUS WINAPI BCryptHash(BCRYPT_ALG_HANDLE, PUCHAR, ULONG, PUCHAR, ULONG, PUCH + NTSTATUS WINAPI BCryptHashData(BCRYPT_HASH_HANDLE, PUCHAR, ULONG, ULONG); + NTSTATUS WINAPI BCryptImportKeyPair(BCRYPT_ALG_HANDLE, BCRYPT_KEY_HANDLE, LPCWSTR, BCRYPT_KEY_HANDLE *, UCHAR *, ULONG, ULONG); + NTSTATUS WINAPI BCryptOpenAlgorithmProvider(BCRYPT_ALG_HANDLE *, LPCWSTR, LPCWSTR, ULONG); ++NTSTATUS WINAPI BCryptSecretAgreement(BCRYPT_KEY_HANDLE, BCRYPT_KEY_HANDLE, BCRYPT_SECRET_HANDLE *, ULONG); + NTSTATUS WINAPI BCryptSetProperty(BCRYPT_HANDLE, LPCWSTR, PUCHAR, ULONG, ULONG); + NTSTATUS WINAPI BCryptVerifySignature(BCRYPT_KEY_HANDLE, void *, UCHAR *, ULONG, UCHAR *, ULONG, ULONG); + +-- +1.9.1 + diff --git a/patches/bcrypt-BCryptSecretAgreement/0002-bcrypt-Add-BCryptDeriveKey-stub.patch b/patches/bcrypt-BCryptSecretAgreement/0002-bcrypt-Add-BCryptDeriveKey-stub.patch new file mode 100644 index 00000000..efd0e729 --- /dev/null +++ b/patches/bcrypt-BCryptSecretAgreement/0002-bcrypt-Add-BCryptDeriveKey-stub.patch @@ -0,0 +1,78 @@ +From 315b52406fbddcaf9289b2a47e8498fba49f8278 Mon Sep 17 00:00:00 2001 +From: Alistair Leslie-Hughes +Date: Tue, 5 Feb 2019 10:09:59 +1100 +Subject: [PATCH] bcrypt: Add BCryptDeriveKey stub + +--- + dlls/bcrypt/bcrypt.spec | 2 +- + dlls/bcrypt/bcrypt_main.c | 7 +++++++ + include/bcrypt.h | 15 +++++++++++++++ + 3 files changed, 23 insertions(+), 1 deletion(-) + +diff --git a/dlls/bcrypt/bcrypt.spec b/dlls/bcrypt/bcrypt.spec +index dfe08e7..4946ee5 100644 +--- a/dlls/bcrypt/bcrypt.spec ++++ b/dlls/bcrypt/bcrypt.spec +@@ -7,7 +7,7 @@ + @ stdcall BCryptCreateHash(ptr ptr ptr long ptr long long) + @ stdcall BCryptDecrypt(ptr ptr long ptr ptr long ptr long ptr long) + @ stub BCryptDeleteContext +-@ stub BCryptDeriveKey ++@ stdcall BCryptDeriveKey(ptr wstr ptr ptr long ptr long) + @ stdcall BCryptDeriveKeyPBKDF2(ptr ptr long ptr long int64 ptr long long) + @ stdcall BCryptDestroyHash(ptr) + @ stdcall BCryptDestroyKey(ptr) +diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c +index 36451c9..ca2f274 100644 +--- a/dlls/bcrypt/bcrypt_main.c ++++ b/dlls/bcrypt/bcrypt_main.c +@@ -1572,6 +1572,13 @@ NTSTATUS WINAPI BCryptDestroySecret(BCRYPT_SECRET_HANDLE secret) + return STATUS_SUCCESS; + } + ++NTSTATUS WINAPI BCryptDeriveKey(BCRYPT_SECRET_HANDLE secret, LPCWSTR kdf, BCryptBufferDesc *parameter, ++ PUCHAR derived, ULONG derived_size, ULONG *result, ULONG flags) ++{ ++ FIXME( "%p, %s, %p, %p, %d, %p, %08x\n", secret, debugstr_w(kdf), parameter, derived, derived_size, result, flags ); ++ return STATUS_INTERNAL_ERROR; ++} ++ + BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved ) + { + switch (reason) +diff --git a/include/bcrypt.h b/include/bcrypt.h +index 866914c..a5abf23 100644 +--- a/include/bcrypt.h ++++ b/include/bcrypt.h +@@ -204,6 +204,20 @@ typedef struct _BCRYPT_KEY_DATA_BLOB_HEADER + ULONG cbKeyData; + } BCRYPT_KEY_DATA_BLOB_HEADER, *PBCRYPT_KEY_DATA_BLOB_HEADER; + ++typedef struct _BCryptBuffer ++{ ++ ULONG cbBuffer; ++ ULONG BufferType; ++ void *pvBuffer; ++} BCryptBuffer, *PBCryptBuffer; ++ ++typedef struct _BCryptBufferDesc ++{ ++ ULONG ulVersion; ++ ULONG cBuffers; ++ PBCryptBuffer pBuffers; ++} BCryptBufferDesc, *PBCryptBufferDesc; ++ + #define BCRYPT_KEY_DATA_BLOB_MAGIC 0x4d42444b + #define BCRYPT_KEY_DATA_BLOB_VERSION1 1 + +@@ -226,6 +240,7 @@ typedef PVOID BCRYPT_SECRET_HANDLE; + NTSTATUS WINAPI BCryptCloseAlgorithmProvider(BCRYPT_ALG_HANDLE, ULONG); + NTSTATUS WINAPI BCryptCreateHash(BCRYPT_ALG_HANDLE, BCRYPT_HASH_HANDLE *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG); + NTSTATUS WINAPI BCryptDecrypt(BCRYPT_KEY_HANDLE, PUCHAR, ULONG, VOID *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG *, ULONG); ++NTSTATUS WINAPI BCryptDeriveKey(BCRYPT_SECRET_HANDLE, LPCWSTR, BCryptBufferDesc*, PUCHAR, ULONG, ULONG *, ULONG); + NTSTATUS WINAPI BCryptDeriveKeyPBKDF2(BCRYPT_ALG_HANDLE, PUCHAR, ULONG, PUCHAR, ULONG, ULONGLONG, PUCHAR, ULONG, ULONG); + NTSTATUS WINAPI BCryptDestroyHash(BCRYPT_HASH_HANDLE); + NTSTATUS WINAPI BCryptDestroyKey(BCRYPT_KEY_HANDLE); +-- +1.9.1 + diff --git a/patches/bcrypt-BCryptSecretAgreement/definition b/patches/bcrypt-BCryptSecretAgreement/definition new file mode 100644 index 00000000..d85e29e9 --- /dev/null +++ b/patches/bcrypt-BCryptSecretAgreement/definition @@ -0,0 +1,2 @@ +Fixes: [46564] Add BCryptDestroySecret/BCryptSecretAgreement stubs. +Depends: bcrypt-BCryptGenerateKeyPair diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index f59fd772..de86032a 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -98,6 +98,7 @@ patch_enable_all () enable_avifile_dll16_AVIStreamGetFrame="$1" enable_bcrypt_BCryptDeriveKeyPBKDF2="$1" enable_bcrypt_BCryptGenerateKeyPair="$1" + enable_bcrypt_BCryptSecretAgreement="$1" enable_comctl32_Listview_DrawItem="$1" enable_comdlg32_lpstrFileTitle="$1" enable_configure_Absolute_RPATH="$1" @@ -459,6 +460,9 @@ patch_enable () bcrypt-BCryptGenerateKeyPair) enable_bcrypt_BCryptGenerateKeyPair="$2" ;; + bcrypt-BCryptSecretAgreement) + enable_bcrypt_BCryptSecretAgreement="$2" + ;; comctl32-Listview_DrawItem) enable_comctl32_Listview_DrawItem="$2" ;; @@ -2190,6 +2194,13 @@ if test "$enable_nvapi_Stub_DLL" -eq 1; then enable_nvcuda_CUDA_Support=1 fi +if test "$enable_bcrypt_BCryptSecretAgreement" -eq 1; then + if test "$enable_bcrypt_BCryptGenerateKeyPair" -gt 1; then + abort "Patchset bcrypt-BCryptGenerateKeyPair disabled, but bcrypt-BCryptSecretAgreement depends on that." + fi + enable_bcrypt_BCryptGenerateKeyPair=1 +fi + if test "$enable_advapi32_Token_Integrity_Level" -eq 1; then if test "$enable_Staging" -gt 1; then abort "Patchset Staging disabled, but advapi32-Token_Integrity_Level depends on that." @@ -2566,6 +2577,26 @@ if test "$enable_bcrypt_BCryptGenerateKeyPair" -eq 1; then ) >> "$patchlist" fi +# Patchset bcrypt-BCryptSecretAgreement +# | +# | This patchset has the following (direct or indirect) dependencies: +# | * bcrypt-BCryptGenerateKeyPair +# | +# | This patchset fixes the following Wine bugs: +# | * [#46564] Add BCryptDestroySecret/BCryptSecretAgreement stubs. +# | +# | Modified files: +# | * dlls/bcrypt/bcrypt.spec, dlls/bcrypt/bcrypt_main.c, include/bcrypt.h +# | +if test "$enable_bcrypt_BCryptSecretAgreement" -eq 1; then + patch_apply bcrypt-BCryptSecretAgreement/0001-bcrypt-Add-BCryptDestroySecret-BCryptSecretAgreement.patch + patch_apply bcrypt-BCryptSecretAgreement/0002-bcrypt-Add-BCryptDeriveKey-stub.patch + ( + printf '%s\n' '+ { "Alistair Leslie-Hughes", "bcrypt: Add BCryptDestroySecret/BCryptSecretAgreement stubs.", 1 },'; + printf '%s\n' '+ { "Alistair Leslie-Hughes", "bcrypt: Add BCryptDeriveKey stub.", 1 },'; + ) >> "$patchlist" +fi + # Patchset comctl32-Listview_DrawItem # | # | This patchset fixes the following Wine bugs: