make session completion work with untrusted devices as well

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java     |  2 
src/main/java/eu/siacs/conversations/crypto/axolotl/XmppAxolotlMessage.java | 12 
src/main/java/eu/siacs/conversations/crypto/axolotl/XmppAxolotlSession.java |  4 
3 files changed, 11 insertions(+), 7 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java 🔗

@@ -1437,7 +1437,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);

src/main/java/eu/siacs/conversations/crypto/axolotl/XmppAxolotlMessage.java 🔗

@@ -218,16 +218,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);

src/main/java/eu/siacs/conversations/crypto/axolotl/XmppAxolotlSession.java 🔗

@@ -118,9 +118,9 @@ public class XmppAxolotlSession implements Comparable<XmppAxolotlSession> {
 	}
 
 	@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);