Add destructors to all the types that need destructing

This commit is contained in:
Erick Tryzelaar 2013-08-15 07:30:37 -07:00
parent e3fef0c40e
commit 5ba7c49a91
3 changed files with 26 additions and 0 deletions

View File

@ -25,6 +25,7 @@ mod libcrypto {
#[link_args = "-lcrypto"] #[link_args = "-lcrypto"]
extern { extern {
fn EVP_MD_CTX_create() -> EVP_MD_CTX; fn EVP_MD_CTX_create() -> EVP_MD_CTX;
fn EVP_MD_CTX_destroy(ctx: EVP_MD_CTX);
fn EVP_md5() -> EVP_MD; fn EVP_md5() -> EVP_MD;
fn EVP_sha1() -> EVP_MD; fn EVP_sha1() -> EVP_MD;
@ -96,6 +97,14 @@ impl Hasher {
} }
} }
impl Drop for Hasher {
fn drop(&self) {
unsafe {
libcrypto::EVP_MD_CTX_destroy(self.ctx);
}
}
}
/** /**
* Hashes the supplied input data using hash t, returning the resulting hash * Hashes the supplied input data using hash t, returning the resulting hash
* value * value

View File

@ -336,6 +336,14 @@ impl PKey {
} }
} }
impl Drop for PKey {
fn drop(&self) {
unsafe {
libcrypto::EVP_PKEY_free(self.evp);
}
}
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;

View File

@ -16,6 +16,7 @@ pub mod libcrypto {
#[link_args = "-lcrypto"] #[link_args = "-lcrypto"]
fn EVP_CIPHER_CTX_new() -> EVP_CIPHER_CTX; fn EVP_CIPHER_CTX_new() -> EVP_CIPHER_CTX;
fn EVP_CIPHER_CTX_set_padding(ctx: EVP_CIPHER_CTX, padding: c_int); fn EVP_CIPHER_CTX_set_padding(ctx: EVP_CIPHER_CTX, padding: c_int);
fn EVP_CIPHER_CTX_free(ctx: EVP_CIPHER_CTX);
fn EVP_aes_128_ecb() -> EVP_CIPHER; fn EVP_aes_128_ecb() -> EVP_CIPHER;
fn EVP_aes_128_cbc() -> EVP_CIPHER; fn EVP_aes_128_cbc() -> EVP_CIPHER;
@ -149,6 +150,14 @@ impl Crypter {
} }
} }
impl Drop for Crypter {
fn drop(&self) {
unsafe {
libcrypto::EVP_CIPHER_CTX_free(self.ctx);
}
}
}
/** /**
* Encrypts data, using the specified crypter type in encrypt mode with the * Encrypts data, using the specified crypter type in encrypt mode with the
* specified key and iv; returns the resulting (encrypted) data. * specified key and iv; returns the resulting (encrypted) data.