Hans Leidekker : bcrypt: Support retrieving the PaddingSchemes property for RSA.

Alexandre Julliard julliard at winehq.org
Mon Feb 17 15:42:15 CST 2020


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

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Mon Feb 17 13:35:42 2020 +0100

bcrypt: Support retrieving the PaddingSchemes property for RSA.

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

---

 dlls/bcrypt/bcrypt_main.c  | 17 +++++++++++++++++
 dlls/bcrypt/tests/bcrypt.c |  8 +++++++-
 include/bcrypt.h           |  6 ++++++
 3 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c
index 298bfb4007..c2939ea815 100644
--- a/dlls/bcrypt/bcrypt_main.c
+++ b/dlls/bcrypt/bcrypt_main.c
@@ -528,6 +528,20 @@ static NTSTATUS get_aes_property( enum mode_id mode, const WCHAR *prop, UCHAR *b
     return STATUS_NOT_IMPLEMENTED;
 }
 
+static NTSTATUS get_rsa_property( enum mode_id mode, const WCHAR *prop, UCHAR *buf, ULONG size, ULONG *ret_size )
+{
+    if (!strcmpW( prop, BCRYPT_PADDING_SCHEMES ))
+    {
+        *ret_size = sizeof(ULONG);
+        if (size < sizeof(ULONG)) return STATUS_BUFFER_TOO_SMALL;
+        if (buf) *(ULONG *)buf = BCRYPT_SUPPORTED_PAD_PKCS1_SIG;
+        return STATUS_SUCCESS;
+    }
+
+    FIXME( "unsupported property %s\n", debugstr_w(prop) );
+    return STATUS_NOT_IMPLEMENTED;
+}
+
 NTSTATUS get_alg_property( const struct algorithm *alg, const WCHAR *prop, UCHAR *buf, ULONG size, ULONG *ret_size )
 {
     NTSTATUS status;
@@ -541,6 +555,9 @@ NTSTATUS get_alg_property( const struct algorithm *alg, const WCHAR *prop, UCHAR
     case ALG_ID_AES:
         return get_aes_property( alg->mode, prop, buf, size, ret_size );
 
+    case ALG_ID_RSA:
+        return get_rsa_property( alg->mode, prop, buf, size, ret_size );
+
     default:
         break;
     }
diff --git a/dlls/bcrypt/tests/bcrypt.c b/dlls/bcrypt/tests/bcrypt.c
index 0dc2085111..f7404057fa 100644
--- a/dlls/bcrypt/tests/bcrypt.c
+++ b/dlls/bcrypt/tests/bcrypt.c
@@ -1786,7 +1786,7 @@ static void test_RSA(void)
     BCRYPT_KEY_HANDLE key;
     BCRYPT_RSAKEY_BLOB *rsablob;
     UCHAR sig[64];
-    ULONG len, size;
+    ULONG len, size, schemes;
     NTSTATUS ret;
     BYTE *buf;
 
@@ -1797,6 +1797,12 @@ static void test_RSA(void)
         return;
     }
 
+    schemes = size = 0;
+    ret = pBCryptGetProperty(alg, L"PaddingSchemes", (UCHAR *)&schemes, sizeof(schemes), &size, 0);
+    ok(!ret, "got %08x\n", ret);
+    ok(schemes, "schemes not set\n");
+    ok(size == sizeof(schemes), "got %u\n", size);
+
     ret = pBCryptImportKeyPair(alg, NULL, BCRYPT_RSAPUBLIC_BLOB, &key, rsaPublicBlob, sizeof(rsaPublicBlob), 0);
     ok(!ret, "pBCryptImportKeyPair failed: %08x\n", ret);
 
diff --git a/include/bcrypt.h b/include/bcrypt.h
index 0bc4dea910..3dcab5f75a 100644
--- a/include/bcrypt.h
+++ b/include/bcrypt.h
@@ -189,6 +189,12 @@ static const WCHAR BCRYPT_KDF_RAW_SECRET[] = {'T','R','U','N','C','A','T','E',0}
 #define BCRYPT_RNG_INTERFACE                    0x00000006
 #define BCRYPT_KEY_DERIVATION_INTERFACE         0x00000007
 
+#define BCRYPT_SUPPORTED_PAD_ROUTER     0x00000001
+#define BCRYPT_SUPPORTED_PAD_PKCS1_ENC  0x00000002
+#define BCRYPT_SUPPORTED_PAD_PKCS1_SIG  0x00000004
+#define BCRYPT_SUPPORTED_PAD_OAEP       0x00000008
+#define BCRYPT_SUPPORTED_PAD_PSS        0x00000010
+
 typedef struct _BCRYPT_ALGORITHM_IDENTIFIER
 {
     LPWSTR pszName;




More information about the wine-cvs mailing list