ncrypt: Use BCrypt algorithm pseudo-handles.

This commit is contained in:
Hans Leidekker 2022-09-12 16:00:39 +02:00 committed by Alexandre Julliard
parent ba1631ad88
commit 4918be2c59
2 changed files with 5 additions and 28 deletions

View file

@ -130,38 +130,21 @@ static SECURITY_STATUS set_object_property(struct object *object, const WCHAR *n
static struct object *create_key_object(enum algid algid, NCRYPT_PROV_HANDLE provider) static struct object *create_key_object(enum algid algid, NCRYPT_PROV_HANDLE provider)
{ {
struct object *object; struct object *object;
NTSTATUS status;
if (!(object = allocate_object(KEY)))
{
ERR("Error allocating memory\n");
return NULL;
}
switch (algid) switch (algid)
{ {
case RSA: case RSA:
{ if (!(object = allocate_object(KEY))) return NULL;
status = BCryptOpenAlgorithmProvider(&object->key.bcrypt_alg, BCRYPT_RSA_ALGORITHM, NULL, 0);
if (status != STATUS_SUCCESS)
{
ERR("Error opening algorithm provider %#lx\n", status);
free(object);
return NULL;
}
object->key.algid = RSA; object->key.algid = RSA;
set_object_property(object, NCRYPT_ALGORITHM_GROUP_PROPERTY, (BYTE *)BCRYPT_RSA_ALGORITHM, set_object_property(object, NCRYPT_ALGORITHM_GROUP_PROPERTY, (BYTE *)BCRYPT_RSA_ALGORITHM,
sizeof(BCRYPT_RSA_ALGORITHM)); sizeof(BCRYPT_RSA_ALGORITHM));
break; break;
}
default: default:
{
ERR("Invalid algid %#x\n", algid); ERR("Invalid algid %#x\n", algid);
free(object);
return NULL; return NULL;
} }
}
set_object_property(object, NCRYPT_PROVIDER_HANDLE_PROPERTY, (BYTE *)&provider, sizeof(provider)); set_object_property(object, NCRYPT_PROVIDER_HANDLE_PROPERTY, (BYTE *)&provider, sizeof(provider));
return object; return object;
@ -190,11 +173,10 @@ SECURITY_STATUS WINAPI NCryptCreatePersistedKey(NCRYPT_PROV_HANDLE provider, NCR
return NTE_NO_MEMORY; return NTE_NO_MEMORY;
} }
status = BCryptGenerateKeyPair(object->key.bcrypt_alg, &object->key.bcrypt_key, default_bitlen, 0); status = BCryptGenerateKeyPair(BCRYPT_RSA_ALG_HANDLE, &object->key.bcrypt_key, default_bitlen, 0);
if (status != STATUS_SUCCESS) if (status != STATUS_SUCCESS)
{ {
ERR("Error generating key pair %#lx\n", status); ERR("Error generating key pair %#lx\n", status);
BCryptCloseAlgorithmProvider(object->key.bcrypt_alg, 0);
free(object); free(object);
return map_ntstatus(status); return map_ntstatus(status);
} }
@ -304,10 +286,7 @@ SECURITY_STATUS WINAPI NCryptFreeBuffer(PVOID buf)
static SECURITY_STATUS free_key_object(struct key *key) static SECURITY_STATUS free_key_object(struct key *key)
{ {
NTSTATUS status, status2; return map_ntstatus( BCryptDestroyKey(key->bcrypt_key) );
status = BCryptDestroyKey(key->bcrypt_key);
if ((status2 = BCryptCloseAlgorithmProvider(key->bcrypt_alg, 0))) return map_ntstatus(status2);
return status ? map_ntstatus(status) : ERROR_SUCCESS;
} }
SECURITY_STATUS WINAPI NCryptFreeObject(NCRYPT_HANDLE handle) SECURITY_STATUS WINAPI NCryptFreeObject(NCRYPT_HANDLE handle)
@ -414,11 +393,10 @@ SECURITY_STATUS WINAPI NCryptImportKey(NCRYPT_PROV_HANDLE provider, NCRYPT_KEY_H
return NTE_NO_MEMORY; return NTE_NO_MEMORY;
} }
status = BCryptImportKeyPair(object->key.bcrypt_alg, NULL, type, &object->key.bcrypt_key, data, datasize, 0); status = BCryptImportKeyPair(BCRYPT_RSA_ALG_HANDLE, NULL, type, &object->key.bcrypt_key, data, datasize, 0);
if (status != STATUS_SUCCESS) if (status != STATUS_SUCCESS)
{ {
WARN("Error importing key pair %#lx\n", status); WARN("Error importing key pair %#lx\n", status);
BCryptCloseAlgorithmProvider(object->key.bcrypt_alg, 0);
free(object); free(object);
return map_ntstatus(status); return map_ntstatus(status);
} }

View file

@ -31,7 +31,6 @@ enum algid
struct key struct key
{ {
enum algid algid; enum algid algid;
BCRYPT_ALG_HANDLE bcrypt_alg;
BCRYPT_KEY_HANDLE bcrypt_key; BCRYPT_KEY_HANDLE bcrypt_key;
}; };