[2/2] bcrypt: Support BCRYPT_KEY_LENGTHS property for AES.
Hans Leidekker
hans at codeweavers.com
Thu Aug 17 06:36:39 CDT 2017
From: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
dlls/bcrypt/bcrypt_main.c | 13 +++++++++++++
dlls/bcrypt/tests/bcrypt.c | 20 ++++++++++++++++++++
2 files changed, 33 insertions(+)
diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c
index 7a93515..b631128 100644
--- a/dlls/bcrypt/bcrypt_main.c
+++ b/dlls/bcrypt/bcrypt_main.c
@@ -474,6 +474,19 @@ static NTSTATUS get_alg_property( enum alg_id id, const WCHAR *prop, UCHAR *buf,
return STATUS_BUFFER_TOO_SMALL;
}
}
+ if (!strcmpW( prop, BCRYPT_KEY_LENGTHS ))
+ {
+ BCRYPT_KEY_LENGTHS_STRUCT *key_lengths = (void *)buf;
+ *ret_size = sizeof(*key_lengths);
+ if (key_lengths && size < *ret_size) return STATUS_BUFFER_TOO_SMALL;
+ if (key_lengths)
+ {
+ key_lengths->dwMinLength = 128;
+ key_lengths->dwMaxLength = 256;
+ key_lengths->dwIncrement = 64;
+ }
+ return STATUS_SUCCESS;
+ }
break;
default:
diff --git a/dlls/bcrypt/tests/bcrypt.c b/dlls/bcrypt/tests/bcrypt.c
index 05d85d0..7ac0c11 100644
--- a/dlls/bcrypt/tests/bcrypt.c
+++ b/dlls/bcrypt/tests/bcrypt.c
@@ -700,6 +700,7 @@ static void test_rng(void)
static void test_aes(void)
{
+ BCRYPT_KEY_LENGTHS_STRUCT key_lengths;
BCRYPT_ALG_HANDLE alg;
ULONG size, len;
UCHAR mode[64];
@@ -733,6 +734,15 @@ static void test_aes(void)
ok(!lstrcmpW((const WCHAR *)mode, BCRYPT_CHAIN_MODE_CBC), "got %s\n", mode);
ok(size == 64, "got %u\n", size);
+ size = 0;
+ memset(&key_lengths, 0, sizeof(key_lengths));
+ ret = BCryptGetProperty(alg, BCRYPT_KEY_LENGTHS, (UCHAR*)&key_lengths, sizeof(key_lengths), &size, 0);
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
+ ok(size == sizeof(key_lengths), "got %u\n", size);
+ ok(key_lengths.dwMinLength == 128, "Expected 128, got %d\n", key_lengths.dwMinLength);
+ ok(key_lengths.dwMaxLength == 256, "Expected 256, got %d\n", key_lengths.dwMaxLength);
+ ok(key_lengths.dwIncrement == 64, "Expected 64, got %d\n", key_lengths.dwIncrement);
+
test_alg_name(alg, "AES");
ret = pBCryptCloseAlgorithmProvider(alg, 0);
@@ -962,6 +972,7 @@ static void test_BCryptDecrypt(void)
{0xc6,0xa1,0x3b,0x37,0x87,0x8f,0x5b,0x82,0x6f,0x4f,0x81,0x62,0xa1,0xc8,0xd8,0x79,
0xb1,0xa2,0x92,0x73,0xbe,0x2c,0x42,0x07,0xa5,0xac,0xe3,0x93,0x39,0x8c,0xb6,0xfb,
0x87,0x5d,0xea,0xa3,0x7e,0x0f,0xde,0xfa,0xd9,0xec,0x6c,0x4e,0x3c,0x76,0x86,0xe4};
+ BCRYPT_KEY_LENGTHS_STRUCT key_lengths;
BCRYPT_ALG_HANDLE aes;
BCRYPT_KEY_HANDLE key;
UCHAR *buf, plaintext[48], ivbuf[16];
@@ -971,6 +982,15 @@ static void test_BCryptDecrypt(void)
ret = pBCryptOpenAlgorithmProvider(&aes, BCRYPT_AES_ALGORITHM, NULL, 0);
ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
+ size = 0;
+ memset(&key_lengths, 0, sizeof(key_lengths));
+ ret = BCryptGetProperty(aes, BCRYPT_KEY_LENGTHS, (UCHAR*)&key_lengths, sizeof(key_lengths), &size, 0);
+ ok(ret == STATUS_SUCCESS, "got %08x\n", ret);
+ ok(size == sizeof(key_lengths), "got %u\n", size);
+ ok(key_lengths.dwMinLength == 128, "Expected 128, got %d\n", key_lengths.dwMinLength);
+ ok(key_lengths.dwMaxLength == 256, "Expected 256, got %d\n", key_lengths.dwMaxLength);
+ ok(key_lengths.dwIncrement == 64, "Expected 64, got %d\n", key_lengths.dwIncrement);
+
len = 0xdeadbeef;
size = sizeof(len);
ret = pBCryptGetProperty(aes, BCRYPT_OBJECT_LENGTH, (UCHAR *)&len, sizeof(len), &size, 0);
--
2.1.4
More information about the wine-patches
mailing list