From 027228debee2ea6f31cd176e456c13d626380066 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Sun, 10 Jul 2011 21:02:34 +0200 Subject: [PATCH] Free ECDSA and RSA structures when freeing a connection_t. --- src/connection.c | 3 +++ src/openssl/ecdsa.c | 11 +++++++++++ src/openssl/ecdsa.h | 2 ++ src/openssl/rsa.c | 11 +++++++++++ src/openssl/rsa.h | 3 +++ 5 files changed, 30 insertions(+) diff --git a/src/connection.c b/src/connection.c index 62bfccb..956607c 100644 --- a/src/connection.c +++ b/src/connection.c @@ -69,6 +69,9 @@ void free_connection(connection_t *c) { cipher_close(&c->outcipher); digest_close(&c->outdigest); + ecdsa_free(&c->ecdsa); + rsa_free(&c->rsa); + if(c->hischallenge) free(c->hischallenge); diff --git a/src/openssl/ecdsa.c b/src/openssl/ecdsa.c index c3b9683..a4f0f30 100644 --- a/src/openssl/ecdsa.c +++ b/src/openssl/ecdsa.c @@ -105,3 +105,14 @@ bool ecdsa_verify(ecdsa_t *ecdsa, const void *in, size_t len, const void *sig) { return true; } + +bool ecdsa_active(ecdsa_t *ecdsa) { + return *ecdsa; +} + +void ecdsa_free(ecdsa_t *ecdsa) { + if(*ecdsa) { + EC_KEY_free(*ecdsa); + *ecdsa = NULL; + } +} diff --git a/src/openssl/ecdsa.h b/src/openssl/ecdsa.h index fcdc3b3..cc0e7b0 100644 --- a/src/openssl/ecdsa.h +++ b/src/openssl/ecdsa.h @@ -30,5 +30,7 @@ extern bool ecdsa_read_pem_private_key(ecdsa_t *ecdsa, FILE *fp); extern size_t ecdsa_size(ecdsa_t *ecdsa); extern bool ecdsa_sign(ecdsa_t *ecdsa, const void *in, size_t inlen, void *out); extern bool ecdsa_verify(ecdsa_t *ecdsa, const void *in, size_t inlen, const void *out); +extern bool ecdsa_active(ecdsa_t *ecdsa); +extern void ecdsa_free(ecdsa_t *ecdsa); #endif diff --git a/src/openssl/rsa.c b/src/openssl/rsa.c index d39a1cb..c3ea692 100644 --- a/src/openssl/rsa.c +++ b/src/openssl/rsa.c @@ -88,3 +88,14 @@ bool rsa_private_decrypt(rsa_t *rsa, void *in, size_t len, void *out) { logger(LOG_ERR, "Unable to perform RSA decryption: %s", ERR_error_string(ERR_get_error(), NULL)); return false; } + +bool rsa_active(rsa_t *rsa) { + return *rsa; +} + +void rsa_free(rsa_t *rsa) { + if(*rsa) { + RSA_free(*rsa); + *rsa = NULL; + } +} diff --git a/src/openssl/rsa.h b/src/openssl/rsa.h index 62836a8..10fe346 100644 --- a/src/openssl/rsa.h +++ b/src/openssl/rsa.h @@ -31,5 +31,8 @@ extern bool rsa_read_pem_private_key(rsa_t *rsa, FILE *fp); extern size_t rsa_size(rsa_t *rsa); extern bool rsa_public_encrypt(rsa_t *rsa, void *in, size_t inlen, void *out); extern bool rsa_private_decrypt(rsa_t *rsa, void *in, size_t inlen, void *out); +extern bool rsa_active(rsa_t *rsa); +extern void rsa_free(rsa_t *rsa); + #endif -- 2.25.1