Free ECDSA and RSA structures when freeing a connection_t.
authorGuus Sliepen <guus@tinc-vpn.org>
Sun, 10 Jul 2011 19:02:34 +0000 (21:02 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Sun, 10 Jul 2011 19:04:31 +0000 (21:04 +0200)
src/connection.c
src/openssl/ecdsa.c
src/openssl/ecdsa.h
src/openssl/rsa.c
src/openssl/rsa.h

index 62bfccb..956607c 100644 (file)
@@ -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);
 
index c3b9683..a4f0f30 100644 (file)
@@ -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;
+       }
+}
index fcdc3b3..cc0e7b0 100644 (file)
@@ -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
index d39a1cb..c3ea692 100644 (file)
@@ -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;
+       }
+}
index 62836a8..10fe346 100644 (file)
@@ -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