[PATCH v2 09/10] ncrypt: Add key properties to key object.
Santino Mazza
mazzasantino1206 at gmail.com
Mon Feb 14 14:29:40 CST 2022
Add some of the properties of the key, like its algorithm group or
the bit length.
Signed-off-by: Santino Mazza <mazzasantino1206 at gmail.com>
---
dlls/ncrypt/ncrypt_internal.h | 1 +
dlls/ncrypt/ncrypt_main.c | 4 ++++
dlls/ncrypt/tests/ncrypt.c | 15 +++++++++++----
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/dlls/ncrypt/ncrypt_internal.h b/dlls/ncrypt/ncrypt_internal.h
index a9345da3c80..16ed03d6971 100644
--- a/dlls/ncrypt/ncrypt_internal.h
+++ b/dlls/ncrypt/ncrypt_internal.h
@@ -42,6 +42,7 @@ enum key_algorithm_type
struct ncrypt_rsa_key
{
enum asymmetric_key_type type;
+ DWORD bit_length;
DWORD public_exp_size;
BYTE *public_exp;
DWORD modulus_size;
diff --git a/dlls/ncrypt/ncrypt_main.c b/dlls/ncrypt/ncrypt_main.c
index 7c6fe76338f..6ee9dc12948 100644
--- a/dlls/ncrypt/ncrypt_main.c
+++ b/dlls/ncrypt/ncrypt_main.c
@@ -211,6 +211,7 @@ SECURITY_STATUS WINAPI NCryptImportKey(NCRYPT_PROV_HANDLE provider, NCRYPT_KEY_H
rsakey = &rsakeyobject->object.key;
rsakey->algtype = RSA;
+ rsakey->payload.rsa_key.bit_length = rsaheader->BitLength;
rsakey->payload.rsa_key.public_exp_size = rsaheader->cbPublicExp;
rsakey->payload.rsa_key.modulus_size = rsaheader->cbModulus;
rsakey->payload.rsa_key.public_exp = malloc(rsaheader->cbPublicExp);
@@ -231,6 +232,9 @@ SECURITY_STATUS WINAPI NCryptImportKey(NCRYPT_PROV_HANDLE provider, NCRYPT_KEY_H
memcpy(rsakey->payload.rsa_key.public_exp, public_exp, rsaheader->cbPublicExp);
memcpy(rsakey->payload.rsa_key.modulus, modulus, rsaheader->cbModulus);
+ set_object_property(rsakeyobject, NCRYPT_ALGORITHM_GROUP_PROPERTY, L"RSA", 8);
+ set_object_property(rsakeyobject, NCRYPT_LENGTH_PROPERTY, &rsakey->payload.rsa_key.bit_length, sizeof(DWORD));
+ set_object_property(rsakeyobject, NCRYPT_PROVIDER_HANDLE_PROPERTY, &provider, sizeof(NCRYPT_PROV_HANDLE));
*key = (NCRYPT_KEY_HANDLE)rsakeyobject;
}
break;
diff --git a/dlls/ncrypt/tests/ncrypt.c b/dlls/ncrypt/tests/ncrypt.c
index ff4bc3be7cc..0d0570daca7 100644
--- a/dlls/ncrypt/tests/ncrypt.c
+++ b/dlls/ncrypt/tests/ncrypt.c
@@ -152,21 +152,28 @@ static void test_get_property(void)
SECURITY_STATUS ret = NCryptOpenStorageProvider(&prov, NULL, 0);
ok(ret == ERROR_SUCCESS, "got 0x%x\n", ret);
- todo_wine {
NCRYPT_KEY_HANDLE key;
ret = NCryptImportKey(prov, (NCRYPT_KEY_HANDLE)NULL, BCRYPT_RSAPUBLIC_BLOB, NULL, &key, rsa_key_blob, sizeof(rsa_key_blob), 0);
DWORD size;
- ret = NCryptGetProperty(key, L"Algorithm Group", NULL, 0, &size, 0);
+ ret = NCryptGetProperty(key, NCRYPT_ALGORITHM_GROUP_PROPERTY, NULL, 0, &size, 0);
ok(ret == ERROR_SUCCESS, "got 0x%x\n", ret);
ok(size == 8, "got 0x%x\n", size);
WCHAR value[8];
- ret = NCryptGetProperty(key, L"Algorithm Group", value, 8, &size, 0);
+ ret = NCryptGetProperty(key, NCRYPT_ALGORITHM_GROUP_PROPERTY, value, 8, &size, 0);
ok(ret == ERROR_SUCCESS, "got 0x%x\n", ret);
ok(size == 8, "got 0x%x\n", size);
ok(lstrcmpW(value, L"RSA") == 0, "The string doesn't match with 'RSA'\n");
- }
+
+ DWORD keylength;
+ ret = NCryptGetProperty(key, NCRYPT_LENGTH_PROPERTY, NULL, 0, &size, 0);
+ ok(ret == ERROR_SUCCESS, "got 0x%x\n", ret);
+ ok(size == sizeof(DWORD), "got 0x%x\n", size);
+
+ ret = NCryptGetProperty(key, NCRYPT_LENGTH_PROPERTY, &keylength, size, &size, 0);
+ ok(ret == ERROR_SUCCESS, "got 0x%x\n", ret);
+ ok(keylength == 1024, "got 0x%x\n", keylength);
}
START_TEST(ncrypt)
--
2.32.0
More information about the wine-devel
mailing list