diff options
| author | Steven Fackler <[email protected]> | 2016-04-06 21:34:26 -0700 |
|---|---|---|
| committer | Steven Fackler <[email protected]> | 2016-04-06 21:34:26 -0700 |
| commit | a25f115360a9a82950352dcf524c9e5405ce683d (patch) | |
| tree | 001c023f39b37a6b057dd6e573686ecc2388bd89 /openssl/src/crypto/pkey.rs | |
| parent | Merge branch 'release-v0.7.8' into release (diff) | |
| parent | Release v0.7.9 (diff) | |
| download | rust-openssl-0.7.9.tar.xz rust-openssl-0.7.9.zip | |
Merge branch 'release-v0.7.9' into releasev0.7.9
Diffstat (limited to 'openssl/src/crypto/pkey.rs')
| -rw-r--r-- | openssl/src/crypto/pkey.rs | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/openssl/src/crypto/pkey.rs b/openssl/src/crypto/pkey.rs index cafd50ad..f945276d 100644 --- a/openssl/src/crypto/pkey.rs +++ b/openssl/src/crypto/pkey.rs @@ -53,10 +53,6 @@ fn openssl_hash_nid(hash: HashType) -> c_int { } } -extern "C" { - fn rust_EVP_PKEY_clone(pkey: *mut ffi::EVP_PKEY); -} - pub struct PKey { evp: *mut ffi::EVP_PKEY, parts: Parts, @@ -614,10 +610,10 @@ impl Drop for PKey { impl Clone for PKey { fn clone(&self) -> Self { unsafe { - rust_EVP_PKEY_clone(self.evp); + let new_evp = ffi::EVP_PKEY_new(); + assert!(ffi::EVP_PKEY_copy_parameters(new_evp, self.evp) == 0); + PKey::from_handle(new_evp, self.parts) } - - PKey::from_handle(self.evp, self.parts) } } @@ -866,4 +862,16 @@ mod tests { pkey.load_pub(&[]); pkey.verify(&[], &[]); } + + #[test] + fn test_pkey_clone_creates_copy() { + let mut pkey = super::PKey::new(); + pkey.gen(512); + let old_pkey_n = pkey.get_rsa().n().unwrap(); + + let mut pkey2 = pkey.clone(); + pkey2.gen(512); + + assert!(old_pkey_n == pkey.get_rsa().n().unwrap()); + } } |