[PATCH 4/4] bcrypt: Use CRT memory allocators.
Hans Leidekker
hans at codeweavers.com
Fri Dec 3 08:49:31 CST 2021
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
dlls/bcrypt/bcrypt_main.c | 90 +++++++++++++++++++--------------------
1 file changed, 44 insertions(+), 46 deletions(-)
diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c
index a1c6ef2c66c..6319a26dd4d 100644
--- a/dlls/bcrypt/bcrypt_main.c
+++ b/dlls/bcrypt/bcrypt_main.c
@@ -18,6 +18,7 @@
*/
#include <stdarg.h>
+#include <stdlib.h>
#include "ntstatus.h"
#define WIN32_NO_STATUS
@@ -28,10 +29,8 @@
#include "winternl.h"
#include "bcrypt.h"
-#include "bcrypt_internal.h"
-
#include "wine/debug.h"
-#include "wine/heap.h"
+#include "bcrypt_internal.h"
WINE_DEFAULT_DEBUG_CHANNEL(bcrypt);
@@ -156,7 +155,7 @@ NTSTATUS WINAPI BCryptEnumAlgorithms( ULONG type, ULONG *ret_count, BCRYPT_ALGOR
if (match_operation_type( type, builtin_algorithms[i].class )) count++;
}
- if (!(list = heap_alloc( count * sizeof(*list) ))) return STATUS_NO_MEMORY;
+ if (!(list = malloc( count * sizeof(*list) ))) return STATUS_NO_MEMORY;
for (i = 0; i < ARRAY_SIZE( builtin_algorithms ); i++)
{
@@ -248,7 +247,7 @@ NTSTATUS WINAPI BCryptOpenAlgorithmProvider( BCRYPT_ALG_HANDLE *handle, LPCWSTR
return STATUS_NOT_IMPLEMENTED;
}
- if (!(alg = heap_alloc( sizeof(*alg) ))) return STATUS_NO_MEMORY;
+ if (!(alg = malloc( sizeof(*alg) ))) return STATUS_NO_MEMORY;
alg->hdr.magic = MAGIC_ALG;
alg->id = alg_id;
alg->mode = MODE_ID_CBC;
@@ -266,7 +265,7 @@ NTSTATUS WINAPI BCryptCloseAlgorithmProvider( BCRYPT_ALG_HANDLE handle, DWORD fl
if (!alg || alg->hdr.magic != MAGIC_ALG) return STATUS_INVALID_HANDLE;
alg->hdr.magic = 0;
- heap_free( alg );
+ free( alg );
return STATUS_SUCCESS;
}
@@ -797,16 +796,16 @@ static NTSTATUS hash_create( const struct algorithm *alg, UCHAR *secret, ULONG s
struct hash *hash;
NTSTATUS status;
- if (!(hash = heap_alloc_zero( sizeof(*hash) ))) return STATUS_NO_MEMORY;
+ if (!(hash = calloc( 1, sizeof(*hash) ))) return STATUS_NO_MEMORY;
hash->hdr.magic = MAGIC_HASH;
hash->alg_id = alg->id;
if (alg->flags & BCRYPT_ALG_HANDLE_HMAC_FLAG) hash->flags = HASH_FLAG_HMAC;
if ((alg->flags & BCRYPT_HASH_REUSABLE_FLAG) || (flags & BCRYPT_HASH_REUSABLE_FLAG))
hash->flags |= HASH_FLAG_REUSABLE;
- if (secret_len && !(hash->secret = heap_alloc( secret_len )))
+ if (secret_len && !(hash->secret = malloc( secret_len )))
{
- heap_free( hash );
+ free( hash );
return STATUS_NO_MEMORY;
}
memcpy( hash->secret, secret, secret_len );
@@ -814,8 +813,8 @@ static NTSTATUS hash_create( const struct algorithm *alg, UCHAR *secret, ULONG s
if ((status = hash_prepare( hash )))
{
- heap_free( hash->secret );
- heap_free( hash );
+ free( hash->secret );
+ free( hash );
return status;
}
@@ -858,13 +857,12 @@ NTSTATUS WINAPI BCryptDuplicateHash( BCRYPT_HASH_HANDLE handle, BCRYPT_HASH_HAND
if (!handle_copy) return STATUS_INVALID_PARAMETER;
if (object) FIXME( "ignoring object buffer\n" );
- if (!(hash_copy = heap_alloc( sizeof(*hash_copy) )))
- return STATUS_NO_MEMORY;
+ if (!(hash_copy = malloc( sizeof(*hash_copy) ))) return STATUS_NO_MEMORY;
memcpy( hash_copy, hash_orig, sizeof(*hash_orig) );
- if (hash_orig->secret && !(hash_copy->secret = heap_alloc( hash_orig->secret_len )))
+ if (hash_orig->secret && !(hash_copy->secret = malloc( hash_orig->secret_len )))
{
- heap_free( hash_copy );
+ free( hash_copy );
return STATUS_NO_MEMORY;
}
memcpy( hash_copy->secret, hash_orig->secret, hash_orig->secret_len );
@@ -877,8 +875,8 @@ static void hash_destroy( struct hash *hash )
{
if (!hash) return;
hash->hdr.magic = 0;
- heap_free( hash->secret );
- heap_free( hash );
+ free( hash->secret );
+ free( hash );
}
NTSTATUS WINAPI BCryptDestroyHash( BCRYPT_HASH_HANDLE handle )
@@ -971,15 +969,15 @@ static NTSTATUS key_asymmetric_create( struct key **ret_key, struct algorithm *a
return STATUS_NOT_IMPLEMENTED;
}
- if (!(key = heap_alloc_zero( sizeof(*key) ))) return STATUS_NO_MEMORY;
+ if (!(key = calloc( 1, sizeof(*key) ))) return STATUS_NO_MEMORY;
key->hdr.magic = MAGIC_KEY;
key->alg_id = alg->id;
key->u.a.bitlen = bitlen;
key->u.a.pubkey_len = pubkey_len;
- if (!(key->u.a.pubkey = heap_alloc( pubkey_len )))
+ if (!(key->u.a.pubkey = malloc( pubkey_len )))
{
- heap_free( key );
+ free( key );
return STATUS_NO_MEMORY;
}
if (pubkey) memcpy( key->u.a.pubkey, pubkey, pubkey_len );
@@ -1013,12 +1011,12 @@ static NTSTATUS key_symmetric_set_vector( struct key *key, UCHAR *vector, ULONG
BOOL needs_reset = (!is_zero_vector( vector, vector_len ) ||
!is_equal_vector( key->u.s.vector, key->u.s.vector_len, vector, vector_len ));
- heap_free( key->u.s.vector );
+ free( key->u.s.vector );
key->u.s.vector = NULL;
key->u.s.vector_len = 0;
if (vector)
{
- if (!(key->u.s.vector = heap_alloc( vector_len ))) return STATUS_NO_MEMORY;
+ if (!(key->u.s.vector = malloc( vector_len ))) return STATUS_NO_MEMORY;
memcpy( key->u.s.vector, vector, vector_len );
key->u.s.vector_len = vector_len;
}
@@ -1208,12 +1206,12 @@ static NTSTATUS key_symmetric_encrypt( struct key *key, UCHAR *input, ULONG inp
if (flags & BCRYPT_BLOCK_PADDING)
{
- if (!(buf = heap_alloc( key->u.s.block_size ))) return STATUS_NO_MEMORY;
+ if (!(buf = malloc( key->u.s.block_size ))) return STATUS_NO_MEMORY;
memcpy( buf, encrypt_params.input, bytes_left );
memset( buf + bytes_left, key->u.s.block_size - bytes_left, key->u.s.block_size - bytes_left );
encrypt_params.input = buf;
status = UNIX_CALL( key_symmetric_encrypt, &encrypt_params );
- heap_free( buf );
+ free( buf );
}
return status;
@@ -1300,7 +1298,7 @@ static NTSTATUS key_symmetric_decrypt( struct key *key, UCHAR *input, ULONG inpu
if (flags & BCRYPT_BLOCK_PADDING)
{
UCHAR *buf, *dst = decrypt_params.output;
- if (!(buf = heap_alloc( key->u.s.block_size ))) return STATUS_NO_MEMORY;
+ if (!(buf = malloc( key->u.s.block_size ))) return STATUS_NO_MEMORY;
decrypt_params.output = buf;
status = UNIX_CALL( key_symmetric_decrypt, &decrypt_params );
if (!status && buf[ key->u.s.block_size - 1 ] <= key->u.s.block_size)
@@ -1310,7 +1308,7 @@ static NTSTATUS key_symmetric_decrypt( struct key *key, UCHAR *input, ULONG inpu
else memcpy( dst, buf, key->u.s.block_size - buf[ key->u.s.block_size - 1 ] );
}
else status = STATUS_UNSUCCESSFUL; /* FIXME: invalid padding */
- heap_free( buf );
+ free( buf );
}
return status;
@@ -1567,16 +1565,16 @@ NTSTATUS WINAPI BCryptGenerateSymmetricKey( BCRYPT_ALG_HANDLE algorithm, BCRYPT_
}
}
- if (!(key = heap_alloc_zero( sizeof(*key) ))) return STATUS_NO_MEMORY;
+ if (!(key = calloc( 1, sizeof(*key) ))) return STATUS_NO_MEMORY;
InitializeCriticalSection( &key->u.s.cs );
key->hdr.magic = MAGIC_KEY;
key->alg_id = alg->id;
key->u.s.mode = alg->mode;
key->u.s.block_size = block_size;
- if (!(key->u.s.secret = heap_alloc( secret_len )))
+ if (!(key->u.s.secret = malloc( secret_len )))
{
- heap_free( key );
+ free( key );
return STATUS_NO_MEMORY;
}
memcpy( key->u.s.secret, secret, secret_len );
@@ -1685,7 +1683,7 @@ static NTSTATUS key_duplicate( struct key *key_orig, struct key *key_copy )
if (key_is_symmetric( key_orig ))
{
- if (!(buffer = heap_alloc( key_orig->u.s.secret_len ))) return STATUS_NO_MEMORY;
+ if (!(buffer = malloc( key_orig->u.s.secret_len ))) return STATUS_NO_MEMORY;
memcpy( buffer, key_orig->u.s.secret, key_orig->u.s.secret_len );
key_copy->u.s.mode = key_orig->u.s.mode;
@@ -1698,7 +1696,7 @@ static NTSTATUS key_duplicate( struct key *key_orig, struct key *key_copy )
{
struct key_asymmetric_duplicate_params params;
- if (!(buffer = heap_alloc( key_orig->u.a.pubkey_len ))) return STATUS_NO_MEMORY;
+ if (!(buffer = malloc( key_orig->u.a.pubkey_len ))) return STATUS_NO_MEMORY;
memcpy( buffer, key_orig->u.a.pubkey, key_orig->u.a.pubkey_len );
key_copy->u.a.bitlen = key_orig->u.a.bitlen;
@@ -1720,17 +1718,17 @@ static void key_destroy( struct key *key )
if (key_is_symmetric( key ))
{
UNIX_CALL( key_symmetric_destroy, key );
- heap_free( key->u.s.vector );
- heap_free( key->u.s.secret );
+ free( key->u.s.vector );
+ free( key->u.s.secret );
DeleteCriticalSection( &key->u.s.cs );
}
else
{
UNIX_CALL( key_asymmetric_destroy, key );
- heap_free( key->u.a.pubkey );
+ free( key->u.a.pubkey );
}
key->hdr.magic = 0;
- heap_free( key );
+ free( key );
}
NTSTATUS WINAPI BCryptDuplicateKey( BCRYPT_KEY_HANDLE handle, BCRYPT_KEY_HANDLE *handle_copy,
@@ -1745,7 +1743,7 @@ NTSTATUS WINAPI BCryptDuplicateKey( BCRYPT_KEY_HANDLE handle, BCRYPT_KEY_HANDLE
if (!key_orig || key_orig->hdr.magic != MAGIC_KEY) return STATUS_INVALID_HANDLE;
if (!handle_copy) return STATUS_INVALID_PARAMETER;
- if (!(key_copy = heap_alloc( sizeof(*key_copy) ))) return STATUS_NO_MEMORY;
+ if (!(key_copy = malloc( sizeof(*key_copy) ))) return STATUS_NO_MEMORY;
if ((status = key_duplicate( key_orig, key_copy )))
{
@@ -1978,7 +1976,7 @@ static NTSTATUS pbkdf2( struct hash *hash, UCHAR *pwd, ULONG pwd_len, UCHAR *sal
UCHAR bytes[4], *buf;
ULONG j, k;
- if (!(buf = heap_alloc( hash_len ))) return STATUS_NO_MEMORY;
+ if (!(buf = malloc( hash_len ))) return STATUS_NO_MEMORY;
for (j = 0; j < iterations; j++)
{
@@ -1987,7 +1985,7 @@ static NTSTATUS pbkdf2( struct hash *hash, UCHAR *pwd, ULONG pwd_len, UCHAR *sal
/* use salt || INT(i) */
if ((status = hash_update( &hash->inner, hash->alg_id, salt, salt_len )))
{
- heap_free( buf );
+ free( buf );
return status;
}
bytes[0] = (i >> 24) & 0xff;
@@ -2000,13 +1998,13 @@ static NTSTATUS pbkdf2( struct hash *hash, UCHAR *pwd, ULONG pwd_len, UCHAR *sal
if (status)
{
- heap_free( buf );
+ free( buf );
return status;
}
if ((status = hash_finalize( hash, buf, hash_len )))
{
- heap_free( buf );
+ free( buf );
return status;
}
@@ -2014,7 +2012,7 @@ static NTSTATUS pbkdf2( struct hash *hash, UCHAR *pwd, ULONG pwd_len, UCHAR *sal
else for (k = 0; k < hash_len; k++) dst[k] ^= buf[k];
}
- heap_free( buf );
+ free( buf );
return status;
}
@@ -2051,7 +2049,7 @@ NTSTATUS WINAPI BCryptDeriveKeyPBKDF2( BCRYPT_ALG_HANDLE handle, UCHAR *pwd, ULO
}
/* final partial block */
- if (!(partial = heap_alloc( hash_len )))
+ if (!(partial = malloc( hash_len )))
{
hash_destroy( hash );
return STATUS_NO_MEMORY;
@@ -2060,13 +2058,13 @@ NTSTATUS WINAPI BCryptDeriveKeyPBKDF2( BCRYPT_ALG_HANDLE handle, UCHAR *pwd, ULO
if ((status = pbkdf2( hash, pwd, pwd_len, salt, salt_len, iterations, block_count, partial, hash_len )))
{
hash_destroy( hash );
- heap_free( partial );
+ free( partial );
return status;
}
memcpy( dk + ((block_count - 1) * hash_len), partial, bytes_left );
hash_destroy( hash );
- heap_free( partial );
+ free( partial );
return STATUS_SUCCESS;
}
@@ -2082,7 +2080,7 @@ NTSTATUS WINAPI BCryptSecretAgreement(BCRYPT_KEY_HANDLE privatekey, BCRYPT_KEY_H
if (!pubkey || pubkey->hdr.magic != MAGIC_KEY) return STATUS_INVALID_HANDLE;
if (!handle) return STATUS_INVALID_PARAMETER;
- if (!(secret = heap_alloc_zero( sizeof(*secret) ))) return STATUS_NO_MEMORY;
+ if (!(secret = calloc( 1, sizeof(*secret) ))) return STATUS_NO_MEMORY;
secret->hdr.magic = MAGIC_SECRET;
*handle = secret;
@@ -2097,7 +2095,7 @@ NTSTATUS WINAPI BCryptDestroySecret(BCRYPT_SECRET_HANDLE handle)
if (!secret || secret->hdr.magic != MAGIC_SECRET) return STATUS_INVALID_HANDLE;
secret->hdr.magic = 0;
- heap_free( secret );
+ free( secret );
return STATUS_SUCCESS;
}
--
2.30.2
More information about the wine-devel
mailing list