Santino Mazza : ncrypt: Implement NCryptFreeObject.
Alexandre Julliard
julliard at winehq.org
Wed Feb 16 15:30:25 CST 2022
Module: wine
Branch: master
Commit: 24a4431f67f8bf0b0c0ed53070b27c662ba42a40
URL: https://source.winehq.org/git/wine.git/?a=commit;h=24a4431f67f8bf0b0c0ed53070b27c662ba42a40
Author: Santino Mazza <mazzasantino1206 at gmail.com>
Date: Wed Feb 16 15:13:07 2022 +0100
ncrypt: Implement NCryptFreeObject.
Signed-off-by: Santino Mazza <mazzasantino1206 at gmail.com>
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ncrypt/main.c | 51 +++++++++++++++++++++++++++++++++++++++++++---
dlls/ncrypt/tests/ncrypt.c | 2 --
2 files changed, 48 insertions(+), 5 deletions(-)
diff --git a/dlls/ncrypt/main.c b/dlls/ncrypt/main.c
index 0d5a40b7b26..fcf5bdbe3e7 100644
--- a/dlls/ncrypt/main.c
+++ b/dlls/ncrypt/main.c
@@ -86,10 +86,55 @@ SECURITY_STATUS WINAPI NCryptFreeBuffer(PVOID buf)
return NTE_NOT_SUPPORTED;
}
-SECURITY_STATUS WINAPI NCryptFreeObject(NCRYPT_HANDLE object)
+static SECURITY_STATUS free_key_object(struct key *key)
{
- FIXME("(0x%lx): stub\n", object);
- return NTE_NOT_SUPPORTED;
+ switch (key->alg)
+ {
+ case RSA:
+ {
+ free(key->rsa.modulus);
+ free(key->rsa.public_exp);
+ free(key->rsa.prime1);
+ free(key->rsa.prime2);
+ break;
+ }
+ default:
+ WARN("invalid key %p\n", key);
+ return NTE_INVALID_HANDLE;
+ }
+ return ERROR_SUCCESS;
+}
+
+SECURITY_STATUS WINAPI NCryptFreeObject(NCRYPT_HANDLE handle)
+{
+ struct object *object = (struct object *)handle;
+ SECURITY_STATUS ret = ERROR_SUCCESS;
+
+ TRACE("(%#Ix)\n", handle);
+
+ if (!object)
+ {
+ WARN("invalid handle %#Ix\n", handle);
+ return NTE_INVALID_HANDLE;
+ }
+
+ switch (object->type)
+ {
+ case KEY:
+ {
+ if ((ret = free_key_object(&object->key))) return ret;
+ break;
+ }
+ case STORAGE_PROVIDER:
+ break;
+
+ default:
+ WARN("invalid handle %#Ix\n", handle);
+ return NTE_INVALID_HANDLE;
+ }
+
+ free(object);
+ return ret;
}
SECURITY_STATUS WINAPI NCryptGetProperty(NCRYPT_HANDLE object, const WCHAR *property, PBYTE output,
diff --git a/dlls/ncrypt/tests/ncrypt.c b/dlls/ncrypt/tests/ncrypt.c
index 01d33e93755..430cb0ae52c 100644
--- a/dlls/ncrypt/tests/ncrypt.c
+++ b/dlls/ncrypt/tests/ncrypt.c
@@ -148,7 +148,6 @@ static void test_ncrypt_free_object(void)
ret = NCryptImportKey(prov, 0, BCRYPT_RSAPUBLIC_BLOB, NULL, &key, rsa_key_blob, sizeof(rsa_key_blob), 0);
ok(ret == ERROR_SUCCESS, "got %#lx\n", ret);
- todo_wine {
ret = NCryptFreeObject(key);
ok(ret == ERROR_SUCCESS, "got %#lx\n", ret);
@@ -160,7 +159,6 @@ static void test_ncrypt_free_object(void)
ret = NCryptFreeObject((NCRYPT_KEY_HANDLE)buf);
ok(ret == NTE_INVALID_HANDLE, "got %#lx\n", ret);
free(buf);
- }
}
START_TEST(ncrypt)
More information about the wine-cvs
mailing list