Santino Mazza : bcrypt: Move symmetric flags check to symmetric section.

Alexandre Julliard julliard at winehq.org
Mon Aug 15 15:22:31 CDT 2022


Module: wine
Branch: master
Commit: 5c1b0e5df50d5e1586b5b51790bcfcbca5594907
URL:    https://gitlab.winehq.org/wine/wine/-/commit/5c1b0e5df50d5e1586b5b51790bcfcbca5594907

Author: Santino Mazza <mazzasantino1206 at gmail.com>
Date:   Sun Aug 14 10:27:32 2022 -0300

bcrypt: Move symmetric flags check to symmetric section.

Signed-off-by: Santino Mazza <mazzasantino1206 at gmail.com>

---

 dlls/bcrypt/bcrypt_main.c  | 37 +++++++++++++++++++++++--------------
 dlls/bcrypt/tests/bcrypt.c |  3 ++-
 2 files changed, 25 insertions(+), 15 deletions(-)

diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c
index 081a35bb416..5a3fefd2b51 100644
--- a/dlls/bcrypt/bcrypt_main.c
+++ b/dlls/bcrypt/bcrypt_main.c
@@ -1928,34 +1928,43 @@ NTSTATUS WINAPI BCryptDecrypt( BCRYPT_KEY_HANDLE handle, UCHAR *input, ULONG inp
                                ULONG iv_len, UCHAR *output, ULONG output_len, ULONG *ret_len, ULONG flags )
 {
     struct key_asymmetric_decrypt_params params;
+    NTSTATUS ret;
     struct key *key = handle;
 
     TRACE( "%p, %p, %lu, %p, %p, %lu, %p, %lu, %p, %#lx\n", handle, input, input_len, padding, iv, iv_len, output,
            output_len, ret_len, flags );
 
     if (!key || key->hdr.magic != MAGIC_KEY) return STATUS_INVALID_HANDLE;
-    if (flags & ~BCRYPT_BLOCK_PADDING)
-    {
-        FIXME( "flags %#lx not supported\n", flags );
-        return STATUS_NOT_IMPLEMENTED;
-    }
 
     if (key_is_symmetric( key ))
     {
-        NTSTATUS ret;
+        if (flags & ~BCRYPT_BLOCK_PADDING)
+        {
+            FIXME( "flags %#lx not supported\n", flags );
+            return STATUS_NOT_IMPLEMENTED;
+        }
+
         EnterCriticalSection( &key->u.s.cs );
         ret = key_symmetric_decrypt( key, input, input_len, padding, iv, iv_len, output, output_len, ret_len, flags );
         LeaveCriticalSection( &key->u.s.cs );
-        return ret;
+    }
+    else
+    {
+        if (flags & BCRYPT_PAD_NONE || flags & BCRYPT_PAD_OAEP)
+        {
+            FIXME( "flags %#lx not implemented\n", flags );
+            return STATUS_NOT_IMPLEMENTED;
+        }
+        params.key = key;
+        params.input = input;
+        params.input_len = input_len;
+        params.output = output;
+        params.output_len = output_len;
+        params.ret_len = ret_len;
+        ret = UNIX_CALL(key_asymmetric_decrypt, &params);
     }
 
-    params.key        = key;
-    params.input      = input;
-    params.input_len  = input_len;
-    params.output     = output;
-    params.output_len = output_len;
-    params.ret_len    = ret_len;
-    return UNIX_CALL( key_asymmetric_decrypt, &params );
+    return ret;
 }
 
 NTSTATUS WINAPI BCryptSetProperty( BCRYPT_HANDLE handle, const WCHAR *prop, UCHAR *value, ULONG size, ULONG flags )
diff --git a/dlls/bcrypt/tests/bcrypt.c b/dlls/bcrypt/tests/bcrypt.c
index 04b3be53ae6..a72849fb4e9 100644
--- a/dlls/bcrypt/tests/bcrypt.c
+++ b/dlls/bcrypt/tests/bcrypt.c
@@ -2258,13 +2258,14 @@ static void test_rsa_encrypt(void)
     ok(ret == STATUS_SUCCESS, "got %lx\n", ret);
     ok(memcmp(encrypted_a, encrypted_b, encrypted_size), "Both outputs are the same\n");
 
-    todo_wine {
     BCryptDecrypt(key, encrypted_a, encrypted_size, NULL, NULL, 0, NULL, 0, &decrypted_size, BCRYPT_PAD_PKCS1);
+    ok(decrypted_size == sizeof(input), "got size of %ld\n", decrypted_size);
     decrypted = malloc(decrypted_size);
     BCryptDecrypt(key, encrypted_a, encrypted_size, NULL, NULL, 0, decrypted, decrypted_size, &decrypted_size, BCRYPT_PAD_PKCS1);
     ok(!memcmp(decrypted, input, sizeof(input)), "Decrypted output it's not what expected\n");
     free(decrypted);
 
+    todo_wine {
     encrypted_size = 60;
     /*  OAEP Padding  */
     ret = BCryptEncrypt(key, input, sizeof(input), &oaep_pad, NULL, 0, NULL, 0, &encrypted_size, BCRYPT_PAD_OAEP);




More information about the wine-cvs mailing list