From 0525b1f960f4d7b45940bfe4a88beac99e571363 Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Wed, 16 May 2018 21:43:07 +0200 Subject: make session completion work with untrusted devices as well --- .../de/pixart/messenger/crypto/axolotl/AxolotlService.java | 2 +- .../pixart/messenger/crypto/axolotl/XmppAxolotlMessage.java | 12 ++++++++---- .../pixart/messenger/crypto/axolotl/XmppAxolotlSession.java | 4 ++-- 3 files changed, 11 insertions(+), 7 deletions(-) (limited to 'src/main') diff --git a/src/main/java/de/pixart/messenger/crypto/axolotl/AxolotlService.java b/src/main/java/de/pixart/messenger/crypto/axolotl/AxolotlService.java index ebf4e8667..d29d0c034 100644 --- a/src/main/java/de/pixart/messenger/crypto/axolotl/AxolotlService.java +++ b/src/main/java/de/pixart/messenger/crypto/axolotl/AxolotlService.java @@ -1436,7 +1436,7 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded { private void completeSession(XmppAxolotlSession session) { final XmppAxolotlMessage axolotlMessage = new XmppAxolotlMessage(account.getJid().asBareJid(), getOwnDeviceId()); - axolotlMessage.addDevice(session); + axolotlMessage.addDevice(session, true); try { Jid jid = Jid.of(session.getRemoteAddress().getName()); MessagePacket packet = mXmppConnectionService.getMessageGenerator().generateKeyTransportMessage(jid, axolotlMessage); diff --git a/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlMessage.java b/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlMessage.java index 81bf6754c..0adbbe51f 100644 --- a/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlMessage.java +++ b/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlMessage.java @@ -215,16 +215,20 @@ public class XmppAxolotlMessage { return this.from; } - public int getSenderDeviceId() { + int getSenderDeviceId() { return sourceDeviceId; } - public void addDevice(XmppAxolotlSession session) { + void addDevice(XmppAxolotlSession session) { + addDevice(session, false); + } + + void addDevice(XmppAxolotlSession session, boolean ignoreSessionTrust) { XmppAxolotlSession.AxolotlKey key; if (authtagPlusInnerKey != null) { - key = session.processSending(authtagPlusInnerKey); + key = session.processSending(authtagPlusInnerKey, ignoreSessionTrust); } else { - key = session.processSending(innerKey); + key = session.processSending(innerKey, ignoreSessionTrust); } if (key != null) { keys.put(session.getRemoteAddress().getDeviceId(), key); diff --git a/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlSession.java b/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlSession.java index cb84ebc63..09045f032 100644 --- a/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlSession.java +++ b/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlSession.java @@ -118,9 +118,9 @@ public class XmppAxolotlSession implements Comparable { } @Nullable - public AxolotlKey processSending(@NonNull byte[] outgoingMessage) { + public AxolotlKey processSending(@NonNull byte[] outgoingMessage, boolean ignoreSessionTrust) { FingerprintStatus status = getTrust(); - if (status.isTrustedAndActive()) { + if (ignoreSessionTrust || status.isTrustedAndActive()) { try { CiphertextMessage ciphertextMessage = cipher.encrypt(outgoingMessage); return new AxolotlKey(ciphertextMessage.serialize(), ciphertextMessage.getType() == CiphertextMessage.PREKEY_TYPE); -- cgit v1.2.3