Hans Leidekker : dssenh: Implement CPGetHashParam.
Alexandre Julliard
julliard at winehq.org
Fri Oct 9 16:00:44 CDT 2020
Module: wine
Branch: master
Commit: 8ff5c52b14388e2d84f67a3a6c6f17b89d50100d
URL: https://source.winehq.org/git/wine.git/?a=commit;h=8ff5c52b14388e2d84f67a3a6c6f17b89d50100d
Author: Hans Leidekker <hans at codeweavers.com>
Date: Fri Oct 9 12:45:59 2020 +0200
dssenh: Implement CPGetHashParam.
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/dssenh/main.c | 40 +++++++++++++++++++++++++++++++++++++++-
dlls/dssenh/tests/dssenh.c | 5 -----
2 files changed, 39 insertions(+), 6 deletions(-)
diff --git a/dlls/dssenh/main.c b/dlls/dssenh/main.c
index 44912ed498..a3a4e1b2c3 100644
--- a/dlls/dssenh/main.c
+++ b/dlls/dssenh/main.c
@@ -431,7 +431,45 @@ BOOL WINAPI CPHashData( HCRYPTPROV hprov, HCRYPTHASH hhash, const BYTE *data, DW
BOOL WINAPI CPGetHashParam( HCRYPTPROV hprov, HCRYPTHASH hhash, DWORD param, BYTE *data, DWORD *len, DWORD flags )
{
- return FALSE;
+ struct hash *hash = (struct hash *)hhash;
+
+ TRACE( "%p, %p, %08x, %p, %p, %08x\n", (void *)hprov, (void *)hhash, param, data, len, flags );
+
+ if (hash->magic != MAGIC_HASH) return FALSE;
+
+ switch (param)
+ {
+ case HP_HASHSIZE:
+ if (sizeof(hash->len) > *len)
+ {
+ *len = sizeof(hash->len);
+ SetLastError( ERROR_MORE_DATA );
+ return FALSE;
+ }
+ *(DWORD *)data = hash->len;
+ *len = sizeof(hash->len);
+ return TRUE;
+
+ case HP_HASHVAL:
+ if (!hash->finished)
+ {
+ if (BCryptFinishHash( hash->handle, hash->value, hash->len, 0 )) return FALSE;
+ hash->finished = TRUE;
+ }
+ if (hash->len > *len)
+ {
+ *len = hash->len;
+ SetLastError( ERROR_MORE_DATA );
+ return FALSE;
+ }
+ memcpy( data, hash->value, hash->len );
+ *len = hash->len;
+ return TRUE;
+
+ default:
+ SetLastError( NTE_BAD_TYPE );
+ return FALSE;
+ }
}
BOOL WINAPI CPDeriveKey( HCRYPTPROV hprov, ALG_ID algid, HCRYPTHASH hhash, DWORD flags, HCRYPTKEY *ret_key )
diff --git a/dlls/dssenh/tests/dssenh.c b/dlls/dssenh/tests/dssenh.c
index cc4650b2c8..3bd546524f 100644
--- a/dlls/dssenh/tests/dssenh.c
+++ b/dlls/dssenh/tests/dssenh.c
@@ -453,11 +453,6 @@ static void test_hash(const struct hash_test *tests, int testLen)
dataLen = sizeof(DWORD);
result = CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE *)&hashLen, &dataLen, 0);
- if (!result)
- {
- skip("skipping hash tests\n");
- return;
- }
ok(result && (hashLen == tests[i].hashLen), "Expected %d hash len, got %d.Error: %x\n",
tests[i].hashLen, hashLen, GetLastError());
More information about the wine-cvs
mailing list