mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-01 21:33:38 +00:00
ncrypt: Use BCrypt algorithm pseudo-handles.
This commit is contained in:
parent
ba1631ad88
commit
4918be2c59
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue