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
@@ -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);
@@ -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);
@@ -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);