From: Bruno Jesus <00cpxxx@gmail.com> Subject: [PATCH 4/7] bcrypt: Implement BCryptDestroyKey Message-Id: <20161207010621.23230-4-00cpxxx@gmail.com> Date: Tue, 6 Dec 2016 23:06:18 -0200 In-Reply-To: <20161207010621.23230-1-00cpxxx@gmail.com> References: <20161207010621.23230-1-00cpxxx@gmail.com> From: Hans Leidekker Signed-off-by: Bruno Jesus <00cpxxx@gmail.com> --- dlls/bcrypt/bcrypt.spec | 2 +- dlls/bcrypt/bcrypt_main.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/dlls/bcrypt/bcrypt.spec b/dlls/bcrypt/bcrypt.spec index 8d2865c..962953e 100644 --- a/dlls/bcrypt/bcrypt.spec +++ b/dlls/bcrypt/bcrypt.spec @@ -9,7 +9,7 @@ @ stub BCryptDeleteContext @ stub BCryptDeriveKey @ stdcall BCryptDestroyHash(ptr) -@ stub BCryptDestroyKey +@ stdcall BCryptDestroyKey(ptr) @ stub BCryptDestroySecret @ stub BCryptDuplicateHash @ stub BCryptDuplicateKey diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c index be33eb0..5657264 100644 --- a/dlls/bcrypt/bcrypt_main.c +++ b/dlls/bcrypt/bcrypt_main.c @@ -49,6 +49,8 @@ WINE_DECLARE_DEBUG_CHANNEL(winediag); static void *libgnutls_handle; #define MAKE_FUNCPTR(f) static typeof(f) * p##f +MAKE_FUNCPTR(gnutls_cipher_init); +MAKE_FUNCPTR(gnutls_cipher_deinit); MAKE_FUNCPTR(gnutls_global_deinit); MAKE_FUNCPTR(gnutls_global_init); MAKE_FUNCPTR(gnutls_global_set_log_function); @@ -84,6 +86,8 @@ static BOOL gnutls_initialize(void) goto fail; \ } + LOAD_FUNCPTR(gnutls_cipher_init); + LOAD_FUNCPTR(gnutls_cipher_deinit); LOAD_FUNCPTR(gnutls_global_deinit) LOAD_FUNCPTR(gnutls_global_init) LOAD_FUNCPTR(gnutls_global_set_log_function) @@ -576,6 +580,14 @@ static NTSTATUS key_init( struct key *key, enum alg_id id, UCHAR *secret, ULONG return STATUS_SUCCESS; } + +static NTSTATUS key_destroy( struct key *key ) +{ + if (key->handle) pgnutls_cipher_deinit( key->handle ); + HeapFree( GetProcessHeap(), 0, key->secret ); + HeapFree( GetProcessHeap(), 0, key ); + return STATUS_SUCCESS; +} #else struct hash { @@ -630,6 +642,12 @@ static NTSTATUS key_init( struct key *key, enum alg_id id, const UCHAR *secret, ERR( "support for keys not available at build time\n" ); return STATUS_NOT_IMPLEMENTED; } + +static NTSTATUS key_destroy( struct key *key ) +{ + ERR( "support for keys not available at build time\n" ); + return STATUS_NOT_IMPLEMENTED; +} #endif #define OBJECT_LENGTH_MD5 274 @@ -958,6 +976,16 @@ NTSTATUS WINAPI BCryptGenerateSymmetricKey( BCRYPT_ALG_HANDLE algorithm, BCRYPT_ return STATUS_SUCCESS; } +NTSTATUS WINAPI BCryptDestroyKey( BCRYPT_KEY_HANDLE handle ) +{ + struct key *key = handle; + + TRACE( "%p\n", handle ); + + if (!key || key->hdr.magic != MAGIC_KEY) return STATUS_INVALID_HANDLE; + return key_destroy( key ); +} + BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved ) { switch (reason) -- 2.9.3