[PATCH 09/10] ncrypt: Add key properties to key object.
Santino Mazza
mazzasantino1206 at gmail.com
Sat Feb 12 15:49:53 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 | 13 +++++++++++--
3 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/dlls/ncrypt/ncrypt_internal.h b/dlls/ncrypt/ncrypt_internal.h
index 64ca7ed4c56..c47c1f22e89 100644
--- a/dlls/ncrypt/ncrypt_internal.h
+++ b/dlls/ncrypt/ncrypt_internal.h
@@ -42,6 +42,7 @@ enum key_algorithm_type
struct 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 3fe33f24a43..88389d1a02a 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 ccaa6003efa..ca6857fa8af 100644
--- a/dlls/ncrypt/tests/ncrypt.c
+++ b/dlls/ncrypt/tests/ncrypt.c
@@ -167,15 +167,24 @@ static void test_get_property(void)
ncryptret = NCryptImportKey(prov, (NCRYPT_KEY_HANDLE)NULL, BCRYPT_RSAPUBLIC_BLOB, NULL, &key, rsa_key_blob, 155, 0);
DWORD size;
- ncryptret = NCryptGetProperty(key, L"Algorithm Group", NULL, 0, &size, 0);
+ ncryptret = NCryptGetProperty(key, NCRYPT_ALGORITHM_GROUP_PROPERTY, NULL, 0, &size, 0);
ok(ncryptret == ERROR_SUCCESS, "got 0x%x\n", ncryptret);
ok(size == 8, "got 0x%x\n", size);
WCHAR value[8];
- ncryptret = NCryptGetProperty(key, L"Algorithm Group", value, 8, &size, 0);
+ ncryptret = NCryptGetProperty(key, NCRYPT_ALGORITHM_GROUP_PROPERTY, value, 8, &size, 0);
ok(ncryptret == ERROR_SUCCESS, "got 0x%x\n", ncryptret);
ok(size == 8, "got 0x%x\n", size);
ok(lstrcmpW(value, L"RSA") == 0, "The string doesn't match with 'RSA'\n");
+
+ DWORD keylength;
+ ncryptret = NCryptGetProperty(key, NCRYPT_LENGTH_PROPERTY, NULL, 0, &size, 0);
+ ok(ncryptret == ERROR_SUCCESS, "got 0x%x\n", ncryptret);
+ ok(size == sizeof(DWORD), "got 0x%x\n", size);
+
+ ncryptret = NCryptGetProperty(key, NCRYPT_LENGTH_PROPERTY, &keylength, size, &size, 0);
+ ok(ncryptret == ERROR_SUCCESS, "got 0x%x\n", ncryptret);
+ ok(keylength == 1024, "got 0x%x\n", keylength);
}
START_TEST(ncrypt)
--
2.25.1
More information about the wine-devel
mailing list