diff --git a/src/dc_receive_imf.rs b/src/dc_receive_imf.rs index 7377a86c9..466698dac 100644 --- a/src/dc_receive_imf.rs +++ b/src/dc_receive_imf.rs @@ -1664,7 +1664,7 @@ fn check_verified_properties( let fp = peerstate.gossip_key_fingerprint.clone(); if let Some(fp) = fp { peerstate.set_verified( - DC_PS_GOSSIP_KEY, + PeerstateKeyType::GossipKey, &fp, PeerstateVerifiedStatus::BidirectVerified, ); diff --git a/src/peerstate.rs b/src/peerstate.rs index 32a0143dc..f26f1d88d 100644 --- a/src/peerstate.rs +++ b/src/peerstate.rs @@ -12,8 +12,11 @@ use crate::error::*; use crate::key::*; use crate::sql::{self, Sql}; -pub const DC_PS_GOSSIP_KEY: u32 = 0; -pub const DC_PS_PUBLIC_KEY: u32 = 1; +#[derive(Debug)] +pub enum PeerstateKeyType { + GossipKey, + PublicKey, +} #[derive(Debug, PartialEq, Eq, Clone, Copy, FromPrimitive)] #[repr(u8)] @@ -346,35 +349,40 @@ impl<'a> Peerstate<'a> { pub fn set_verified( &mut self, - which_key: u32, + which_key: PeerstateKeyType, fingerprint: &str, verified: PeerstateVerifiedStatus, ) -> bool { - let mut success = false; - if !(which_key != DC_PS_GOSSIP_KEY && which_key != DC_PS_PUBLIC_KEY - || verified != PeerstateVerifiedStatus::BidirectVerified) - { - if which_key == DC_PS_PUBLIC_KEY - && self.public_key_fingerprint.is_some() - && self.public_key_fingerprint.as_ref().unwrap() == fingerprint - { - self.to_save = Some(ToSave::All); - self.verified_key = self.public_key.clone(); - self.verified_key_fingerprint = self.public_key_fingerprint.clone(); - success = true; - } - if which_key == DC_PS_GOSSIP_KEY - && self.gossip_key_fingerprint.is_some() - && self.gossip_key_fingerprint.as_ref().unwrap() == fingerprint - { - self.to_save = Some(ToSave::All); - self.verified_key = self.gossip_key.clone(); - self.verified_key_fingerprint = self.gossip_key_fingerprint.clone(); - success = true; + if verified == PeerstateVerifiedStatus::BidirectVerified { + match which_key { + PeerstateKeyType::PublicKey => { + if self.public_key_fingerprint.is_some() + && self.public_key_fingerprint.as_ref().unwrap() == fingerprint + { + self.to_save = Some(ToSave::All); + self.verified_key = self.public_key.clone(); + self.verified_key_fingerprint = self.public_key_fingerprint.clone(); + true + } else { + false + } + } + PeerstateKeyType::GossipKey => { + if self.gossip_key_fingerprint.is_some() + && self.gossip_key_fingerprint.as_ref().unwrap() == fingerprint + { + self.to_save = Some(ToSave::All); + self.verified_key = self.gossip_key.clone(); + self.verified_key_fingerprint = self.gossip_key_fingerprint.clone(); + true + } else { + false + } + } } + } else { + false } - - success } pub fn save_to_db(&self, sql: &Sql, create: bool) -> Result<()> { diff --git a/src/securejoin.rs b/src/securejoin.rs index 1197109df..d252bb811 100644 --- a/src/securejoin.rs +++ b/src/securejoin.rs @@ -691,7 +691,7 @@ fn mark_peer_as_verified(context: &Context, fingerprint: impl AsRef) -> Res Peerstate::from_fingerprint(context, &context.sql, fingerprint.as_ref()) { if peerstate.set_verified( - DC_PS_PUBLIC_KEY, + PeerstateKeyType::PublicKey, fingerprint.as_ref(), PeerstateVerifiedStatus::BidirectVerified, ) {