Commit 123d4002 authored by Manuel Schölling's avatar Manuel Schölling
Browse files

Add comparison for PKeys

parent 1aab7b3c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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);
+30 −0
Original line number Diff line number Diff line
@@ -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);
    }
}