Free resources in rsa_t. 1.1-threads
authorGuus Sliepen <guus@tinc-vpn.org>
Sat, 15 Jan 2011 22:11:25 +0000 (23:11 +0100)
committerGuus Sliepen <guus@tinc-vpn.org>
Sat, 15 Jan 2011 22:11:25 +0000 (23:11 +0100)
src/connection.c
src/gcrypt/rsa.c
src/gcrypt/rsa.h
src/openssl/rsa.c
src/openssl/rsa.h

index 2fa789bdf6ba01cb47eb7d3eed2a80085d4b11e4..bdbf1c3dc2c23922f4746ec000078d83864aba10 100644 (file)
@@ -78,6 +78,9 @@ void free_connection(connection_t *c) {
        if(c->thread)
                thread_destroy(&c->thread);
 
+       if(c->rsa)
+               rsa_free(c->rsa);
+
        free(c);
 }
 
index a729591ddeb8fd73a46e0ffbd9163fb0b9428ee9..e38b50b0a3911fac6c9d292f8594cdd5135da371 100644 (file)
@@ -300,3 +300,9 @@ bool rsa_private_decrypt(rsa_t *rsa, void *in, size_t len, void *out) {
 
        return true;
 }
+
+void rsa_free(rsa_t *rsa) {
+       gcry_mpi_release(rsa->n);
+       gcry_mpi_release(rsa->e);
+       gcry_mpi_release(rsa->d);
+}
index 143f01537ed4f3c2ef80c29f14d57ebb6ef87fc7..a76bfde923cb8ed124c116f206e6a3d232bb5054 100644 (file)
@@ -35,5 +35,6 @@ 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 len, void *out);
 extern bool rsa_private_decrypt(rsa_t *rsa, void *in, size_t len, void *out);
+extern void rsa_free(rsa_t *rsa);
 
 #endif
index d39a1cba405df774e74bd7d322cbec673bc0b7ad..a85bc8a2c730104682c6e275c8c8457290a58fa6 100644 (file)
@@ -88,3 +88,7 @@ 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;   
 }
+
+void rsa_free(rsa_t *rsa) {
+       RSA_free(*rsa);
+}
index 62836a8e83c35cef4d1a6628c0b447838fa44993..933cc1140387a97949d866d7b8feddafb3baf2c6 100644 (file)
@@ -31,5 +31,6 @@ 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 void rsa_free(rsa_t *rsa);
 
 #endif