=?UTF-8?Q?Michael=20M=C3=BCller=20?=: bcrypt: Implement BCryptGetProperty for BCRYPT_CHAINING_MODE.
Alexandre Julliard
julliard at winehq.org
Mon Mar 19 18:32:50 CDT 2018
Module: wine
Branch: master
Commit: ba1ed4432c98c23ecaa03eebbc3d8309b8fa550f
URL: https://source.winehq.org/git/wine.git/?a=commit;h=ba1ed4432c98c23ecaa03eebbc3d8309b8fa550f
Author: Michael Müller <michael at fds-team.de>
Date: Mon Mar 19 11:16:12 2018 +0000
bcrypt: Implement BCryptGetProperty for BCRYPT_CHAINING_MODE.
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/bcrypt/bcrypt_main.c | 19 ++++++++++---------
dlls/bcrypt/tests/bcrypt.c | 2 +-
2 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c
index 2f56604..55901f9 100644
--- a/dlls/bcrypt/bcrypt_main.c
+++ b/dlls/bcrypt/bcrypt_main.c
@@ -540,17 +540,18 @@ static NTSTATUS get_alg_property( const struct algorithm *alg, const WCHAR *prop
}
if (!strcmpW( prop, BCRYPT_CHAINING_MODE ))
{
- if (size >= sizeof(BCRYPT_CHAIN_MODE_CBC) * sizeof(WCHAR))
+ const WCHAR *mode;
+ switch (alg->mode)
{
- memcpy(buf, BCRYPT_CHAIN_MODE_CBC, sizeof(BCRYPT_CHAIN_MODE_CBC));
- *ret_size = sizeof(BCRYPT_CHAIN_MODE_CBC) * sizeof(WCHAR);
- return STATUS_SUCCESS;
- }
- else
- {
- *ret_size = sizeof(BCRYPT_CHAIN_MODE_CBC) * sizeof(WCHAR);
- return STATUS_BUFFER_TOO_SMALL;
+ case MODE_ID_GCM: mode = BCRYPT_CHAIN_MODE_GCM; break;
+ case MODE_ID_CBC: mode = BCRYPT_CHAIN_MODE_CBC; break;
+ default: return STATUS_NOT_IMPLEMENTED;
}
+
+ *ret_size = 64;
+ if (size < *ret_size) return STATUS_BUFFER_TOO_SMALL;
+ memcpy( buf, mode, (strlenW(mode) + 1) * sizeof(WCHAR) );
+ return STATUS_SUCCESS;
}
if (!strcmpW( prop, BCRYPT_KEY_LENGTHS ))
{
diff --git a/dlls/bcrypt/tests/bcrypt.c b/dlls/bcrypt/tests/bcrypt.c
index f8b63a9..f235cc7 100644
--- a/dlls/bcrypt/tests/bcrypt.c
+++ b/dlls/bcrypt/tests/bcrypt.c
@@ -483,7 +483,7 @@ static void test_aes(void)
memset(mode, 0, sizeof(mode));
ret = pBCryptGetProperty(alg, BCRYPT_CHAINING_MODE, mode, sizeof(mode), &size, 0);
ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
- todo_wine ok(!lstrcmpW((const WCHAR *)mode, BCRYPT_CHAIN_MODE_GCM), "got %s\n", wine_dbgstr_w((const WCHAR *)mode));
+ ok(!lstrcmpW((const WCHAR *)mode, BCRYPT_CHAIN_MODE_GCM), "got %s\n", wine_dbgstr_w((const WCHAR *)mode));
ok(size == 64, "got %u\n", size);
test_alg_name(alg, "AES");
More information about the wine-cvs
mailing list