Hans Leidekker : bcrypt: Ignore the size parameter in BCRYPT_CHAINING_MODE setters.

Alexandre Julliard julliard at winehq.org
Mon Nov 25 09:12:25 CST 2019


Module: wine
Branch: stable
Commit: 9899acf0d82524b88fddf8664fa4db652b4045a2
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=9899acf0d82524b88fddf8664fa4db652b4045a2

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Fri Jul  5 10:38:01 2019 +0200

bcrypt: Ignore the size parameter in BCRYPT_CHAINING_MODE setters.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47432
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 691fcebf3d0d403fe6817821fbe28bc25f983051)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 dlls/bcrypt/bcrypt_main.c  |  8 ++++----
 dlls/bcrypt/gnutls.c       |  8 ++++----
 dlls/bcrypt/macos.c        |  6 +++---
 dlls/bcrypt/tests/bcrypt.c | 21 ++++++++++++++++++++-
 4 files changed, 31 insertions(+), 12 deletions(-)

diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c
index c41c409042..7bf9bb2f01 100644
--- a/dlls/bcrypt/bcrypt_main.c
+++ b/dlls/bcrypt/bcrypt_main.c
@@ -501,24 +501,24 @@ static NTSTATUS set_alg_property( struct algorithm *alg, const WCHAR *prop, UCHA
     case ALG_ID_AES:
         if (!strcmpW( prop, BCRYPT_CHAINING_MODE ))
         {
-            if (!strncmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_ECB, size ))
+            if (!strcmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_ECB ))
             {
                 alg->mode = MODE_ID_ECB;
                 return STATUS_SUCCESS;
             }
-            else if (!strncmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_CBC, size ))
+            else if (!strcmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_CBC ))
             {
                 alg->mode = MODE_ID_CBC;
                 return STATUS_SUCCESS;
             }
-            else if (!strncmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_GCM, size ))
+            else if (!strcmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_GCM ))
             {
                 alg->mode = MODE_ID_GCM;
                 return STATUS_SUCCESS;
             }
             else
             {
-                FIXME( "unsupported mode %s\n", debugstr_wn( (WCHAR *)value, size ) );
+                FIXME( "unsupported mode %s\n", debugstr_w((WCHAR *)value) );
                 return STATUS_NOT_IMPLEMENTED;
             }
         }
diff --git a/dlls/bcrypt/gnutls.c b/dlls/bcrypt/gnutls.c
index 5a656ccba2..1474ce430d 100644
--- a/dlls/bcrypt/gnutls.c
+++ b/dlls/bcrypt/gnutls.c
@@ -355,24 +355,24 @@ NTSTATUS key_set_property( struct key *key, const WCHAR *prop, UCHAR *value, ULO
 {
     if (!strcmpW( prop, BCRYPT_CHAINING_MODE ))
     {
-        if (!strncmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_ECB, size ))
+        if (!strcmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_ECB ))
         {
             key->u.s.mode = MODE_ID_ECB;
             return STATUS_SUCCESS;
         }
-        else if (!strncmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_CBC, size ))
+        else if (!strcmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_CBC ))
         {
             key->u.s.mode = MODE_ID_CBC;
             return STATUS_SUCCESS;
         }
-        else if (!strncmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_GCM, size ))
+        else if (!strcmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_GCM ))
         {
             key->u.s.mode = MODE_ID_GCM;
             return STATUS_SUCCESS;
         }
         else
         {
-            FIXME( "unsupported mode %s\n", debugstr_wn( (WCHAR *)value, size ) );
+            FIXME( "unsupported mode %s\n", debugstr_w((WCHAR *)value) );
             return STATUS_NOT_IMPLEMENTED;
         }
     }
diff --git a/dlls/bcrypt/macos.c b/dlls/bcrypt/macos.c
index 0e0ed8379d..b7af035af8 100644
--- a/dlls/bcrypt/macos.c
+++ b/dlls/bcrypt/macos.c
@@ -48,19 +48,19 @@ NTSTATUS key_set_property( struct key *key, const WCHAR *prop, UCHAR *value, ULO
 {
     if (!strcmpW( prop, BCRYPT_CHAINING_MODE ))
     {
-        if (!strncmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_ECB, size ))
+        if (!strcmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_ECB ))
         {
             key->u.s.mode = MODE_ID_ECB;
             return STATUS_SUCCESS;
         }
-        else if (!strncmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_CBC, size ))
+        else if (!strcmpW( (WCHAR *)value, BCRYPT_CHAIN_MODE_CBC ))
         {
             key->u.s.mode = MODE_ID_CBC;
             return STATUS_SUCCESS;
         }
         else
         {
-            FIXME( "unsupported mode %s\n", debugstr_wn( (WCHAR *)value, size ) );
+            FIXME( "unsupported mode %s\n", debugstr_w((WCHAR *)value) );
             return STATUS_NOT_IMPLEMENTED;
         }
     }
diff --git a/dlls/bcrypt/tests/bcrypt.c b/dlls/bcrypt/tests/bcrypt.c
index 7274516840..f39fc8e3ab 100644
--- a/dlls/bcrypt/tests/bcrypt.c
+++ b/dlls/bcrypt/tests/bcrypt.c
@@ -488,7 +488,7 @@ static void test_aes(void)
     ok(key_lengths.dwIncrement == 64, "Expected 64, got %d\n", key_lengths.dwIncrement);
 
     memcpy(mode, BCRYPT_CHAIN_MODE_GCM, sizeof(BCRYPT_CHAIN_MODE_GCM));
-    ret = pBCryptSetProperty(alg, BCRYPT_CHAINING_MODE, mode, sizeof(mode), 0);
+    ret = pBCryptSetProperty(alg, BCRYPT_CHAINING_MODE, mode, 0, 0);
     ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
 
     size = 0;
@@ -543,6 +543,25 @@ static void test_BCryptGenerateSymmetricKey(void)
                             sizeof(BCRYPT_CHAIN_MODE_CBC), 0);
     ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
 
+    size = 0;
+    memset(mode, 0, sizeof(mode));
+    ret = pBCryptGetProperty(key, BCRYPT_CHAINING_MODE, mode, sizeof(mode), &size, 0);
+    ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
+    ok(!lstrcmpW((const WCHAR *)mode, BCRYPT_CHAIN_MODE_CBC), "got %s\n", wine_dbgstr_w((const WCHAR *)mode));
+    ok(size == 64, "got %u\n", size);
+
+    ret = pBCryptSetProperty(key, BCRYPT_CHAINING_MODE, (UCHAR *)BCRYPT_CHAIN_MODE_ECB, 0, 0);
+    ok(ret == STATUS_SUCCESS || broken(ret == STATUS_NOT_SUPPORTED) /* < Win 8 */, "got %08x\n", ret);
+    if (ret == STATUS_SUCCESS)
+    {
+        size = 0;
+        memset(mode, 0, sizeof(mode));
+        ret = pBCryptGetProperty(key, BCRYPT_CHAINING_MODE, mode, sizeof(mode), &size, 0);
+        ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
+        ok(!lstrcmpW((const WCHAR *)mode, BCRYPT_CHAIN_MODE_ECB), "got %s\n", wine_dbgstr_w((const WCHAR *)mode));
+        ok(size == 64, "got %u\n", size);
+    }
+
     ret = pBCryptSetProperty(key, BCRYPT_CHAINING_MODE, (UCHAR *)BCRYPT_CHAIN_MODE_CBC,
                              sizeof(BCRYPT_CHAIN_MODE_CBC), 0);
     ok(ret == STATUS_SUCCESS || broken(ret == STATUS_NOT_SUPPORTED) /* < Win 8 */, "got %08x\n", ret);




More information about the wine-cvs mailing list