From 3dc21336baced97a110773ac9e72db210a56af82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= 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 ++++++++++++++++++ dlls/ncrypt/ncrypt.spec | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/dlls/bcrypt/bcrypt.spec b/dlls/bcrypt/bcrypt.spec index 962953e509b..9ecd21d767c 100644 --- 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 index 4f09948096c..3eb0135b37c 100644 --- 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; 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 -- 2.11.0