1
0
mirror of https://github.com/wine-mirror/wine synced 2024-07-08 03:45:57 +00:00

dssenh: Use BCrypt algorithm pseudo-handles.

This commit is contained in:
Hans Leidekker 2022-09-12 15:56:49 +02:00 committed by Alexandre Julliard
parent 7780caf4ee
commit c7e0f923bc

View File

@ -40,7 +40,6 @@ struct key
DWORD magic;
DWORD algid;
DWORD flags;
BCRYPT_ALG_HANDLE alg_handle;
BCRYPT_KEY_HANDLE handle;
};
@ -139,13 +138,11 @@ static const WCHAR *map_keyspec_to_keypair_name( DWORD keyspec )
static struct key *create_key( ALG_ID algid, DWORD flags )
{
struct key *ret;
const WCHAR *alg;
switch (algid)
{
case AT_SIGNATURE:
case CALG_DSS_SIGN:
alg = BCRYPT_DSA_ALGORITHM;
break;
default:
@ -158,11 +155,6 @@ static struct key *create_key( ALG_ID algid, DWORD flags )
ret->magic = MAGIC_KEY;
ret->algid = algid;
ret->flags = flags;
if (BCryptOpenAlgorithmProvider( &ret->alg_handle, alg, MS_PRIMITIVE_PROVIDER, 0 ))
{
free( ret );
return NULL;
}
return ret;
}
@ -170,7 +162,6 @@ static void destroy_key( struct key *key )
{
if (!key) return;
BCryptDestroyKey( key->handle );
BCryptCloseAlgorithmProvider( key->alg_handle, 0 );
key->magic = 0;
free( key );
}
@ -181,7 +172,7 @@ static struct key *import_key( DWORD keyspec, BYTE *data, DWORD len )
if (!(ret = create_key( keyspec, 0 ))) return NULL;
if (BCryptImportKeyPair( ret->alg_handle, NULL, LEGACY_DSA_V2_PRIVATE_BLOB, &ret->handle, data, len, 0 ))
if (BCryptImportKeyPair( BCRYPT_DSA_ALG_HANDLE, NULL, LEGACY_DSA_V2_PRIVATE_BLOB, &ret->handle, data, len, 0 ))
{
WARN( "failed to import key\n" );
destroy_key( ret );
@ -404,7 +395,7 @@ static BOOL generate_key( struct container *container, ALG_ID algid, DWORD bitle
if (!(key = create_key( algid, flags ))) return FALSE;
if ((status = BCryptGenerateKeyPair( key->alg_handle, &key->handle, bitlen, 0 )))
if ((status = BCryptGenerateKeyPair( BCRYPT_DSA_ALG_HANDLE, &key->handle, bitlen, 0 )))
{
ERR( "failed to generate key %08lx\n", status );
destroy_key( key );
@ -517,7 +508,7 @@ static BOOL import_key_dss2( struct container *container, ALG_ID algid, const BY
if (!(key = create_key( CALG_DSS_SIGN, flags ))) return FALSE;
if ((status = BCryptImportKeyPair( key->alg_handle, NULL, type, &key->handle, (UCHAR *)data, len, 0 )))
if ((status = BCryptImportKeyPair( BCRYPT_DSA_ALG_HANDLE, NULL, type, &key->handle, (UCHAR *)data, len, 0 )))
{
TRACE( "failed to import key %08lx\n", status );
destroy_key( key );
@ -624,8 +615,8 @@ static BOOL import_key_dss3( struct container *container, ALG_ID algid, const BY
dst += blob->cbKey;
for (i = 0; i < blob->cbKey; i++) dst[i] = src[blob->cbKey - i - 1];
if ((status = BCryptImportKeyPair( key->alg_handle, NULL, BCRYPT_DSA_PUBLIC_BLOB, &key->handle, (UCHAR *)blob,
size, 0 )))
if ((status = BCryptImportKeyPair( BCRYPT_DSA_ALG_HANDLE, NULL, BCRYPT_DSA_PUBLIC_BLOB, &key->handle,
(UCHAR *)blob, size, 0 )))
{
WARN( "failed to import key %08lx\n", status );
destroy_key( key );
@ -771,18 +762,17 @@ static struct hash *create_hash( ALG_ID algid )
{
struct hash *ret;
BCRYPT_ALG_HANDLE alg_handle;
const WCHAR *alg;
DWORD len;
switch (algid)
{
case CALG_MD5:
alg = BCRYPT_MD5_ALGORITHM;
alg_handle = BCRYPT_MD5_ALG_HANDLE;
len = 16;
break;
case CALG_SHA1:
alg = BCRYPT_SHA1_ALGORITHM;
alg_handle = BCRYPT_SHA1_ALG_HANDLE;
len = 20;
break;
@ -795,19 +785,11 @@ static struct hash *create_hash( ALG_ID algid )
ret->magic = MAGIC_HASH;
ret->len = len;
if (BCryptOpenAlgorithmProvider( &alg_handle, alg, MS_PRIMITIVE_PROVIDER, 0 ))
{
free( ret );
return NULL;
}
if (BCryptCreateHash( alg_handle, &ret->handle, NULL, 0, NULL, 0, 0 ))
{
BCryptCloseAlgorithmProvider( alg_handle, 0 );
free( ret );
return NULL;
}
BCryptCloseAlgorithmProvider( alg_handle, 0 );
return ret;
}