Loading openssl-sys/src/lib.rs +1 −0 Original line number Diff line number Diff line Loading @@ -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); Loading openssl/src/crypto/pkey.rs +30 −0 Original line number Diff line number Diff line Loading @@ -350,6 +350,10 @@ impl PKey { pub unsafe fn get_handle(&self) -> *mut ffi::EVP_PKEY { return self.evp } pub fn public_eq(&self, other: &PKey) -> bool { unsafe { ffi::EVP_PKEY_cmp(self.evp, other.evp) == 1 } } } impl Drop for PKey { Loading @@ -373,6 +377,7 @@ mod tests { k0.gen(512); k1.load_pub(&k0.save_pub()); assert_eq!(k0.save_pub(), k1.save_pub()); assert!(k0.public_eq(&k1)); assert_eq!(k0.size(), k1.size()); assert!(k0.can(super::Role::Encrypt)); assert!(k0.can(super::Role::Decrypt)); Loading @@ -391,6 +396,7 @@ mod tests { k0.gen(512); k1.load_priv(&k0.save_priv()); assert_eq!(k0.save_priv(), k1.save_priv()); assert!(k0.public_eq(&k1)); assert_eq!(k0.size(), k1.size()); assert!(k0.can(super::Role::Encrypt)); assert!(k0.can(super::Role::Decrypt)); Loading Loading @@ -461,4 +467,28 @@ 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.public_eq(&k0)); assert!(k1.public_eq(&k1)); assert!(p0.public_eq(&p0)); assert!(p1.public_eq(&p1)); assert!(k0.public_eq(&p0)); assert!(k1.public_eq(&p1)); assert!(!k0.public_eq(&k1)); assert!(!p0.public_eq(&p1)); assert!(!k0.public_eq(&p1)); assert!(!p0.public_eq(&k1)); } } Loading
openssl-sys/src/lib.rs +1 −0 Original line number Diff line number Diff line Loading @@ -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); Loading
openssl/src/crypto/pkey.rs +30 −0 Original line number Diff line number Diff line Loading @@ -350,6 +350,10 @@ impl PKey { pub unsafe fn get_handle(&self) -> *mut ffi::EVP_PKEY { return self.evp } pub fn public_eq(&self, other: &PKey) -> bool { unsafe { ffi::EVP_PKEY_cmp(self.evp, other.evp) == 1 } } } impl Drop for PKey { Loading @@ -373,6 +377,7 @@ mod tests { k0.gen(512); k1.load_pub(&k0.save_pub()); assert_eq!(k0.save_pub(), k1.save_pub()); assert!(k0.public_eq(&k1)); assert_eq!(k0.size(), k1.size()); assert!(k0.can(super::Role::Encrypt)); assert!(k0.can(super::Role::Decrypt)); Loading @@ -391,6 +396,7 @@ mod tests { k0.gen(512); k1.load_priv(&k0.save_priv()); assert_eq!(k0.save_priv(), k1.save_priv()); assert!(k0.public_eq(&k1)); assert_eq!(k0.size(), k1.size()); assert!(k0.can(super::Role::Encrypt)); assert!(k0.can(super::Role::Decrypt)); Loading Loading @@ -461,4 +467,28 @@ 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.public_eq(&k0)); assert!(k1.public_eq(&k1)); assert!(p0.public_eq(&p0)); assert!(p1.public_eq(&p1)); assert!(k0.public_eq(&p0)); assert!(k1.public_eq(&p1)); assert!(!k0.public_eq(&k1)); assert!(!p0.public_eq(&p1)); assert!(!k0.public_eq(&p1)); assert!(!p0.public_eq(&k1)); } }