diff --git a/src/securejoin.rs b/src/securejoin.rs index b28a3d576..26260a63d 100644 --- a/src/securejoin.rs +++ b/src/securejoin.rs @@ -495,9 +495,6 @@ pub(crate) async fn handle_securejoin_handshake( } bobstate.step_contact_confirm(context).await?; - bobstate - .notify_peer_verified(context, mime_message.timestamp_sent) - .await?; bobstate.emit_progress(context, JoinerProgress::Succeeded); } Ok(HandshakeMessage::Ignore) @@ -527,9 +524,6 @@ pub(crate) async fn handle_securejoin_handshake( } bobstate.step_contact_confirm(context).await?; - bobstate - .notify_peer_verified(context, mime_message.timestamp_sent) - .await?; bobstate.emit_progress(context, JoinerProgress::Succeeded); } Ok(HandshakeMessage::Propagate) diff --git a/src/securejoin/bob.rs b/src/securejoin/bob.rs index f5d0ba99c..1ef8c5170 100644 --- a/src/securejoin/bob.rs +++ b/src/securejoin/bob.rs @@ -100,6 +100,9 @@ pub(super) async fn handle_auth_required( let chat_id = bobstate.joining_chat_id(context).await?; chat::add_info_msg(context, chat_id, &msg, time()).await?; } + bobstate + .notify_peer_verified(context, message.timestamp_sent) + .await?; bobstate.emit_progress(context, JoinerProgress::RequestWithAuthSent); Ok(HandshakeMessage::Done) } diff --git a/src/securejoin/bobstate.rs b/src/securejoin/bobstate.rs index 13292acd7..99cccb6c5 100644 --- a/src/securejoin/bobstate.rs +++ b/src/securejoin/bobstate.rs @@ -24,6 +24,7 @@ use crate::mimeparser::{MimeMessage, SystemMessage}; use crate::param::Param; use crate::securejoin::Peerstate; use crate::sql::Sql; +use crate::tools::time; /// The stage of the [`BobState`] securejoin handshake protocol state machine. /// @@ -89,22 +90,26 @@ impl BobState { invite: QrInvite, chat_id: ChatId, ) -> Result<(Self, BobHandshakeStage, Vec)> { - let (stage, next) = - if verify_sender_by_fingerprint(context, invite.fingerprint(), invite.contact_id()) - .await? - { - // The scanned fingerprint matches Alice's key, we can proceed to step 4b. - info!(context, "Taking securejoin protocol shortcut"); - send_handshake_message(context, &invite, chat_id, BobHandshakeMsg::RequestWithAuth) - .await?; - ( - BobHandshakeStage::RequestWithAuthSent, - SecureJoinStep::ContactConfirm, - ) - } else { - send_handshake_message(context, &invite, chat_id, BobHandshakeMsg::Request).await?; - (BobHandshakeStage::RequestSent, SecureJoinStep::AuthRequired) - }; + let peer_verified = + verify_sender_by_fingerprint(context, invite.fingerprint(), invite.contact_id()) + .await?; + + let (stage, next); + if peer_verified { + // The scanned fingerprint matches Alice's key, we can proceed to step 4b. + info!(context, "Taking securejoin protocol shortcut"); + send_handshake_message(context, &invite, chat_id, BobHandshakeMsg::RequestWithAuth) + .await?; + + stage = BobHandshakeStage::RequestWithAuthSent; + next = SecureJoinStep::ContactConfirm; + } else { + send_handshake_message(context, &invite, chat_id, BobHandshakeMsg::Request).await?; + + stage = BobHandshakeStage::RequestSent; + next = SecureJoinStep::AuthRequired; + }; + let (id, aborted_states) = Self::insert_new_db_entry(context, next, invite.clone(), chat_id).await?; let state = Self { @@ -113,6 +118,12 @@ impl BobState { next, chat_id, }; + + if peer_verified { + // Mark 1:1 chat as verified already. + state.notify_peer_verified(context, time()).await?; + } + Ok((state, stage, aborted_states)) }