2017-01-19 02:02:48 -08:00
|
|
|
From 3dc21336baced97a110773ac9e72db210a56af82 Mon Sep 17 00:00:00 2001
|
2016-12-20 13:36:51 -08:00
|
|
|
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
|
|
|
Date: Tue, 20 Dec 2016 03:59:19 +0100
|
|
|
|
Subject: bcrypt: Implement BCryptDuplicateHash.
|
|
|
|
|
|
|
|
FIXME: Should we check for NULL pointers?
|
|
|
|
---
|
|
|
|
dlls/bcrypt/bcrypt.spec | 2 +-
|
|
|
|
dlls/bcrypt/bcrypt_main.c | 18 ++++++++++++++++++
|
2017-01-19 02:02:48 -08:00
|
|
|
dlls/ncrypt/ncrypt.spec | 2 +-
|
|
|
|
3 files changed, 20 insertions(+), 2 deletions(-)
|
2016-12-20 13:36:51 -08:00
|
|
|
|
|
|
|
diff --git a/dlls/bcrypt/bcrypt.spec b/dlls/bcrypt/bcrypt.spec
|
2017-01-19 02:02:48 -08:00
|
|
|
index 962953e509b..9ecd21d767c 100644
|
2016-12-20 13:36:51 -08:00
|
|
|
--- a/dlls/bcrypt/bcrypt.spec
|
|
|
|
+++ b/dlls/bcrypt/bcrypt.spec
|
|
|
|
@@ -11,7 +11,7 @@
|
|
|
|
@ stdcall BCryptDestroyHash(ptr)
|
|
|
|
@ stdcall BCryptDestroyKey(ptr)
|
|
|
|
@ stub BCryptDestroySecret
|
|
|
|
-@ stub BCryptDuplicateHash
|
|
|
|
+@ stdcall BCryptDuplicateHash(ptr ptr ptr long long)
|
|
|
|
@ stub BCryptDuplicateKey
|
|
|
|
@ stdcall BCryptEncrypt(ptr ptr long ptr ptr long ptr long ptr long)
|
|
|
|
@ stdcall BCryptEnumAlgorithms(long ptr ptr long)
|
|
|
|
diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c
|
2017-01-19 02:02:48 -08:00
|
|
|
index 4f09948096c..3eb0135b37c 100644
|
2016-12-20 13:36:51 -08:00
|
|
|
--- a/dlls/bcrypt/bcrypt_main.c
|
|
|
|
+++ b/dlls/bcrypt/bcrypt_main.c
|
|
|
|
@@ -672,6 +672,24 @@ end:
|
|
|
|
return STATUS_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
+NTSTATUS WINAPI BCryptDuplicateHash( BCRYPT_HASH_HANDLE handle, BCRYPT_HASH_HANDLE *handle_copy,
|
|
|
|
+ UCHAR *object, ULONG object_count, ULONG flags )
|
|
|
|
+{
|
|
|
|
+ struct hash *hash_orig = handle;
|
|
|
|
+ struct hash *hash_copy;
|
|
|
|
+
|
|
|
|
+ TRACE( "%p, %p, %p, %u, %u\n", handle, handle_copy, object, object_count, flags );
|
|
|
|
+
|
|
|
|
+ if (!hash_orig || hash_orig->hdr.magic != MAGIC_HASH) return STATUS_INVALID_HANDLE;
|
|
|
|
+ if (!(hash_copy = HeapAlloc( GetProcessHeap(), 0, sizeof(*hash_copy) )))
|
|
|
|
+ return STATUS_NO_MEMORY;
|
|
|
|
+
|
|
|
|
+ memcpy( hash_copy, hash_orig, sizeof(*hash_orig) );
|
|
|
|
+
|
|
|
|
+ *handle_copy = hash_copy;
|
|
|
|
+ return STATUS_SUCCESS;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
NTSTATUS WINAPI BCryptDestroyHash( BCRYPT_HASH_HANDLE handle )
|
|
|
|
{
|
|
|
|
struct hash *hash = handle;
|
2017-01-19 02:02:48 -08:00
|
|
|
diff --git a/dlls/ncrypt/ncrypt.spec b/dlls/ncrypt/ncrypt.spec
|
|
|
|
index 60b7eb37075..1a78853bf49 100644
|
|
|
|
--- a/dlls/ncrypt/ncrypt.spec
|
|
|
|
+++ b/dlls/ncrypt/ncrypt.spec
|
|
|
|
@@ -13,7 +13,7 @@
|
|
|
|
@ stdcall BCryptDestroyHash(ptr) bcrypt.BCryptDestroyHash
|
|
|
|
@ stdcall BCryptDestroyKey(ptr) bcrypt.BCryptDestroyKey
|
|
|
|
@ stub BCryptDestroySecret
|
|
|
|
-@ stub BCryptDuplicateHash
|
|
|
|
+@ stdcall BCryptDuplicateHash(ptr ptr ptr long long) bcrypt.BCryptDuplicateHash
|
|
|
|
@ stub BCryptDuplicateKey
|
|
|
|
@ stdcall BCryptEncrypt(ptr ptr long ptr ptr long ptr long ptr long) bcrypt.BCryptEncrypt
|
|
|
|
@ stdcall BCryptEnumAlgorithms(long ptr ptr long) bcrypt.BCryptEnumAlgorithms
|
2016-12-20 13:36:51 -08:00
|
|
|
--
|
2017-01-19 02:02:48 -08:00
|
|
|
2.11.0
|
2016-12-20 13:36:51 -08:00
|
|
|
|