Hans Leidekker : dssenh: Implement CPHashData.

Alexandre Julliard julliard at winehq.org
Fri Oct 9 16:00:44 CDT 2020


Module: wine
Branch: master
Commit: d5688169a8798790753a1578bbda22ae1345c4de
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=d5688169a8798790753a1578bbda22ae1345c4de

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Fri Oct  9 12:45:58 2020 +0200

dssenh: Implement CPHashData.

Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dssenh/main.c         | 10 +++++++++-
 dlls/dssenh/tests/dssenh.c | 24 ++++++++++++------------
 2 files changed, 21 insertions(+), 13 deletions(-)

diff --git a/dlls/dssenh/main.c b/dlls/dssenh/main.c
index 66f3456d78..44912ed498 100644
--- a/dlls/dssenh/main.c
+++ b/dlls/dssenh/main.c
@@ -1,5 +1,6 @@
 /*
  * Copyright 2008 Maarten Lankhorst
+ * Copyright 2020 Hans Leidekker for CodeWeavers
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -418,7 +419,14 @@ BOOL WINAPI CPDestroyHash( HCRYPTPROV hprov, HCRYPTHASH hhash )
 
 BOOL WINAPI CPHashData( HCRYPTPROV hprov, HCRYPTHASH hhash, const BYTE *data, DWORD len, DWORD flags )
 {
-    return FALSE;
+    struct hash *hash = (struct hash *)hhash;
+
+    TRACE("%p, %p, %p, %u, %08x\n", (void *)hprov, (void *)hhash, data, len, flags );
+
+    if (hash->magic != MAGIC_HASH) return FALSE;
+
+    if (hash->finished || BCryptHashData( hash->handle, (UCHAR *)data, len, 0 )) return FALSE;
+    return TRUE;
 }
 
 BOOL WINAPI CPGetHashParam( HCRYPTPROV hprov, HCRYPTHASH hhash, DWORD param, BYTE *data, DWORD *len, DWORD flags )
diff --git a/dlls/dssenh/tests/dssenh.c b/dlls/dssenh/tests/dssenh.c
index f06cdd1433..cc4650b2c8 100644
--- a/dlls/dssenh/tests/dssenh.c
+++ b/dlls/dssenh/tests/dssenh.c
@@ -449,15 +449,15 @@ static void test_hash(const struct hash_test *tests, int testLen)
         ok(result, "Expected creation of a hash.\n");
 
         result = CryptHashData(hHash, data, dataLen, 0);
+        ok(result, "Expected data to be added to hash.\n");
+
+        dataLen = sizeof(DWORD);
+        result = CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE *)&hashLen, &dataLen, 0);
         if (!result)
         {
             skip("skipping hash tests\n");
             return;
         }
-        ok(result, "Expected data to be added to hash.\n");
-
-        dataLen = sizeof(DWORD);
-        result = CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE *)&hashLen, &dataLen, 0);
         ok(result && (hashLen == tests[i].hashLen), "Expected %d hash len, got %d.Error: %x\n",
             tests[i].hashLen, hashLen, GetLastError());
 
@@ -608,15 +608,15 @@ static void test_data_encryption(const struct encrypt_test *tests, int testLen)
         ok(result, "Expected creation of a MD5 hash for key derivation.\n");
 
         result = CryptHashData(hHash, (BYTE *)dataToHash, sizeof(dataToHash), 0);
+        ok(result, "Expected data to be added to hash for key derivation.\n");
+
+        /* Derive key */
+        result = CryptDeriveKey(hProv, tests[i].algid, hHash, tests[i].keyLength, &pKey);
         if (!result)
         {
             skip("skipping encryption tests\n");
             return;
         }
-        ok(result, "Expected data to be added to hash for key derivation.\n");
-
-        /* Derive key */
-        result = CryptDeriveKey(hProv, tests[i].algid, hHash, tests[i].keyLength, &pKey);
         ok(result, "Expected a derived key.\n");
 
         result = CryptDestroyHash(hHash);
@@ -698,15 +698,15 @@ static void test_cipher_modes(const struct ciphermode_test *tests, int testLen)
     ok(result, "Expected creation of a MD5 hash for key derivation.\n");
 
     result = CryptHashData(hHash, (BYTE *)dataToHash, sizeof(dataToHash), 0);
+    ok(result, "Expected data to be added to hash for key derivation.\n");
+
+    /* Derive a CALG_RC2 key, but could be any other encryption cipher */
+    result = CryptDeriveKey(hProv, CALG_RC2, hHash, 40 << 16, &pKey);
     if (!result)
     {
         skip("skipping ciper modes tests\n");
         return;
     }
-    ok(result, "Expected data to be added to hash for key derivation.\n");
-
-    /* Derive a CALG_RC2 key, but could be any other encryption cipher */
-    result = CryptDeriveKey(hProv, CALG_RC2, hHash, 40 << 16, &pKey);
     ok(result, "Expected a derived key.\n");
 
     result = CryptDestroyHash(hHash);




More information about the wine-cvs mailing list