diff --git a/openssl-sys/src/lib.rs b/openssl-sys/src/lib.rs index 28db754a..ac1891aa 100644 --- a/openssl-sys/src/lib.rs +++ b/openssl-sys/src/lib.rs @@ -50,6 +50,9 @@ pub struct EVP_MD_CTX { } impl Copy for EVP_MD_CTX {} +impl Clone for EVP_MD_CTX { + fn clone(&self) -> EVP_MD_CTX { *self } +} #[repr(C)] pub struct HMAC_CTX { @@ -62,6 +65,9 @@ pub struct HMAC_CTX { } impl Copy for HMAC_CTX {} +impl Clone for HMAC_CTX { + fn clone(&self) -> HMAC_CTX { *self } +} #[repr(C)] pub struct X509V3_CTX { @@ -77,6 +83,9 @@ pub struct X509V3_CTX { } impl Copy for X509V3_CTX {} +impl Clone for X509V3_CTX { + fn clone(&self) -> X509V3_CTX { *self } +} #[repr(C)] pub struct BIGNUM { @@ -88,6 +97,9 @@ pub struct BIGNUM { } impl Copy for BIGNUM {} +impl Clone for BIGNUM { + fn clone(&self) -> BIGNUM { *self } +} pub type CRYPTO_EX_new = extern "C" fn(parent: *mut c_void, ptr: *mut c_void, ad: *const CRYPTO_EX_DATA, idx: c_int, diff --git a/openssl/src/bn/mod.rs b/openssl/src/bn/mod.rs index 795788fa..ccf28337 100644 --- a/openssl/src/bn/mod.rs +++ b/openssl/src/bn/mod.rs @@ -8,7 +8,7 @@ use ssl::error::SslError; pub struct BigNum(*mut ffi::BIGNUM); -#[derive(Copy)] +#[derive(Copy, Clone)] #[repr(C)] pub enum RNGProperty { MsbMaybeZero = -1, @@ -196,7 +196,7 @@ impl BigNum { pub fn div_word(&mut self, w: c_ulong) -> Result { unsafe { let result = ffi::BN_div_word(self.raw(), w); - if result != -1 as c_ulong { + if result != !0 as c_ulong { Ok(result) } else { Err(SslError::get()) @@ -207,7 +207,7 @@ impl BigNum { pub fn mod_word(&self, w: c_ulong) -> Result { unsafe { let result = ffi::BN_mod_word(self.raw(), w); - if result != -1 as c_ulong { + if result != !0 as c_ulong { Ok(result) } else { Err(SslError::get()) diff --git a/openssl/src/crypto/hash.rs b/openssl/src/crypto/hash.rs index 29e180e5..801d8ca5 100644 --- a/openssl/src/crypto/hash.rs +++ b/openssl/src/crypto/hash.rs @@ -6,7 +6,7 @@ use std::io; use ffi; /// Message digest (hash) type. -#[derive(Copy)] +#[derive(Copy, Clone)] pub enum Type { MD5, SHA1, @@ -51,7 +51,7 @@ impl Type { } } -#[derive(PartialEq, Copy)] +#[derive(PartialEq, Copy, Clone)] enum State { Reset, Updated, diff --git a/openssl/src/crypto/hmac.rs b/openssl/src/crypto/hmac.rs index dace68aa..a59cb929 100644 --- a/openssl/src/crypto/hmac.rs +++ b/openssl/src/crypto/hmac.rs @@ -22,7 +22,7 @@ use std::io::prelude::*; use crypto::hash::Type; use ffi; -#[derive(PartialEq, Copy)] +#[derive(PartialEq, Copy, Clone)] enum State { Reset, Updated, diff --git a/openssl/src/crypto/pkey.rs b/openssl/src/crypto/pkey.rs index e23171ed..9bcc79b6 100644 --- a/openssl/src/crypto/pkey.rs +++ b/openssl/src/crypto/pkey.rs @@ -9,7 +9,7 @@ use crypto::hash::Type as HashType; use ffi; use ssl::error::{SslError, StreamError}; -#[derive(Copy)] +#[derive(Copy, Clone)] enum Parts { Neither, Public, @@ -17,7 +17,7 @@ enum Parts { } /// Represents a role an asymmetric key might be appropriate for. -#[derive(Copy)] +#[derive(Copy, Clone)] pub enum Role { Encrypt, Decrypt, @@ -26,7 +26,7 @@ pub enum Role { } /// Type of encryption padding to use. -#[derive(Copy)] +#[derive(Copy, Clone)] pub enum EncryptionPadding { OAEP, PKCS1v15 diff --git a/openssl/src/crypto/symm.rs b/openssl/src/crypto/symm.rs index e8bbcf80..62208439 100644 --- a/openssl/src/crypto/symm.rs +++ b/openssl/src/crypto/symm.rs @@ -3,14 +3,14 @@ use libc::{c_int}; use ffi; -#[derive(Copy)] +#[derive(Copy, Clone)] pub enum Mode { Encrypt, Decrypt, } #[allow(non_camel_case_types)] -#[derive(Copy)] +#[derive(Copy, Clone)] pub enum Type { AES_128_ECB, AES_128_CBC, diff --git a/openssl/src/x509/mod.rs b/openssl/src/x509/mod.rs index bce9485e..c19f093d 100644 --- a/openssl/src/x509/mod.rs +++ b/openssl/src/x509/mod.rs @@ -20,7 +20,7 @@ use ssl::error::{SslError, StreamError}; #[cfg(test)] mod tests; -#[derive(Copy)] +#[derive(Copy, Clone)] #[repr(i32)] pub enum X509FileType { PEM = ffi::X509_FILETYPE_PEM, @@ -449,7 +449,7 @@ pub struct X509Name<'x> { macro_rules! make_validation_error( ($ok_val:ident, $($name:ident = $val:ident,)+) => ( - #[derive(Copy)] + #[derive(Copy, Clone)] pub enum X509ValidationError { $($name,)+ X509UnknownError(c_int)