make session completion work with untrusted devices as well
This commit is contained in:
		
							parent
							
								
									ffe610f961
								
							
						
					
					
						commit
						18a8a6e5ac
					
				| @ -1437,7 +1437,7 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded { | |||||||
| 
 | 
 | ||||||
| 	private void completeSession(XmppAxolotlSession session) { | 	private void completeSession(XmppAxolotlSession session) { | ||||||
| 		final XmppAxolotlMessage axolotlMessage = new XmppAxolotlMessage(account.getJid().asBareJid(), getOwnDeviceId()); | 		final XmppAxolotlMessage axolotlMessage = new XmppAxolotlMessage(account.getJid().asBareJid(), getOwnDeviceId()); | ||||||
| 		axolotlMessage.addDevice(session); | 		axolotlMessage.addDevice(session, true); | ||||||
| 		try { | 		try { | ||||||
| 			Jid jid = Jid.of(session.getRemoteAddress().getName()); | 			Jid jid = Jid.of(session.getRemoteAddress().getName()); | ||||||
| 			MessagePacket packet = mXmppConnectionService.getMessageGenerator().generateKeyTransportMessage(jid, axolotlMessage); | 			MessagePacket packet = mXmppConnectionService.getMessageGenerator().generateKeyTransportMessage(jid, axolotlMessage); | ||||||
|  | |||||||
| @ -218,16 +218,20 @@ public class XmppAxolotlMessage { | |||||||
| 		return this.from; | 		return this.from; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	public int getSenderDeviceId() { | 	int getSenderDeviceId() { | ||||||
| 		return sourceDeviceId; | 		return sourceDeviceId; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	public void addDevice(XmppAxolotlSession session) { | 	void addDevice(XmppAxolotlSession session) { | ||||||
|  | 		addDevice(session, false); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	void addDevice(XmppAxolotlSession session, boolean ignoreSessionTrust) { | ||||||
| 		XmppAxolotlSession.AxolotlKey key; | 		XmppAxolotlSession.AxolotlKey key; | ||||||
| 		if (authtagPlusInnerKey != null) { | 		if (authtagPlusInnerKey != null) { | ||||||
| 			key = session.processSending(authtagPlusInnerKey); | 			key = session.processSending(authtagPlusInnerKey, ignoreSessionTrust); | ||||||
| 		} else { | 		} else { | ||||||
| 			key = session.processSending(innerKey); | 			key = session.processSending(innerKey, ignoreSessionTrust); | ||||||
| 		} | 		} | ||||||
| 		if (key != null) { | 		if (key != null) { | ||||||
| 			keys.put(session.getRemoteAddress().getDeviceId(), key); | 			keys.put(session.getRemoteAddress().getDeviceId(), key); | ||||||
|  | |||||||
| @ -118,9 +118,9 @@ public class XmppAxolotlSession implements Comparable<XmppAxolotlSession> { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@Nullable | 	@Nullable | ||||||
| 	public AxolotlKey processSending(@NonNull byte[] outgoingMessage) { | 	public AxolotlKey processSending(@NonNull byte[] outgoingMessage, boolean ignoreSessionTrust) { | ||||||
| 		FingerprintStatus status = getTrust(); | 		FingerprintStatus status = getTrust(); | ||||||
| 		if (status.isTrustedAndActive()) { | 		if (ignoreSessionTrust || status.isTrustedAndActive()) { | ||||||
| 			try { | 			try { | ||||||
| 				CiphertextMessage ciphertextMessage = cipher.encrypt(outgoingMessage); | 				CiphertextMessage ciphertextMessage = cipher.encrypt(outgoingMessage); | ||||||
| 				return new AxolotlKey(ciphertextMessage.serialize(),ciphertextMessage.getType() == CiphertextMessage.PREKEY_TYPE); | 				return new AxolotlKey(ciphertextMessage.serialize(),ciphertextMessage.getType() == CiphertextMessage.PREKEY_TYPE); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch