diff options
| author | Manuel Schölling <[email protected]> | 2015-04-16 17:14:21 +0200 |
|---|---|---|
| committer | Manuel Schölling <[email protected]> | 2015-04-16 17:14:21 +0200 |
| commit | 123d400277f36fef193eba2287f65e6deb041f25 (patch) | |
| tree | 79ca9084d514e6a511dbe1a4a31b5fe72b959e36 | |
| parent | Merge pull request #199 from CarlColglazier/patch-1 (diff) | |
| download | rust-openssl-123d400277f36fef193eba2287f65e6deb041f25.tar.xz rust-openssl-123d400277f36fef193eba2287f65e6deb041f25.zip | |
Add comparison for PKeys
| -rw-r--r-- | openssl-sys/src/lib.rs | 1 | ||||
| -rw-r--r-- | openssl/src/crypto/pkey.rs | 30 |
2 files changed, 31 insertions, 0 deletions
diff --git a/openssl-sys/src/lib.rs b/openssl-sys/src/lib.rs index 53e06c3a..598a3c59 100644 --- a/openssl-sys/src/lib.rs +++ b/openssl-sys/src/lib.rs @@ -433,6 +433,7 @@ extern "C" { pub fn EVP_PKEY_assign(pkey: *mut EVP_PKEY, typ: c_int, key: *const c_void) -> c_int; pub fn EVP_PKEY_get1_RSA(k: *mut EVP_PKEY) -> *mut RSA; pub fn EVP_PKEY_set1_RSA(k: *mut EVP_PKEY, r: *mut RSA) -> c_int; + pub fn EVP_PKEY_cmp(a: *const EVP_PKEY, b: *const EVP_PKEY) -> c_int; pub fn HMAC_CTX_init(ctx: *mut HMAC_CTX); pub fn HMAC_CTX_cleanup(ctx: *mut HMAC_CTX); diff --git a/openssl/src/crypto/pkey.rs b/openssl/src/crypto/pkey.rs index 33433b0c..e93757a1 100644 --- a/openssl/src/crypto/pkey.rs +++ b/openssl/src/crypto/pkey.rs @@ -352,6 +352,12 @@ impl PKey { } } +impl PartialEq<PKey> for PKey { + fn eq(&self, other: &PKey) -> bool { + unsafe { ffi::EVP_PKEY_cmp(self.evp, other.evp) == 1 } + } +} + impl Drop for PKey { fn drop(&mut self) { unsafe { @@ -373,6 +379,7 @@ mod tests { k0.gen(512); k1.load_pub(&k0.save_pub()); assert_eq!(k0.save_pub(), k1.save_pub()); + assert!(k0 == k1); assert_eq!(k0.size(), k1.size()); assert!(k0.can(super::Role::Encrypt)); assert!(k0.can(super::Role::Decrypt)); @@ -391,6 +398,7 @@ mod tests { k0.gen(512); k1.load_priv(&k0.save_priv()); assert_eq!(k0.save_priv(), k1.save_priv()); + assert!(k0 == k1); assert_eq!(k0.size(), k1.size()); assert!(k0.can(super::Role::Encrypt)); assert!(k0.can(super::Role::Decrypt)); @@ -461,4 +469,26 @@ mod tests { assert!(k1.verify_with_hash(&msg, &sig, MD5)); assert!(!k1.verify_with_hash(&msg, &sig, SHA1)); } + + #[test] + fn test_eq() { + let mut k0 = super::PKey::new(); + let mut p0 = super::PKey::new(); + let mut k1 = super::PKey::new(); + let mut p1 = super::PKey::new(); + k0.gen(512); + k1.gen(512); + p0.load_pub(&k0.save_pub()); + p1.load_pub(&k1.save_pub()); + + assert!(k0 == k0); + assert!(k1 == k1); + assert!(p0 == p0); + assert!(p1 == p1); + + assert!(k0 != k1); + assert!(p0 != p1); + assert!(k0 != p1); + assert!(p0 != k1); + } } |