diff options
author | Christian Schneppe <christian@pix-art.de> | 2017-01-09 22:28:32 +0100 |
---|---|---|
committer | Christian Schneppe <christian@pix-art.de> | 2017-01-09 22:28:32 +0100 |
commit | 395c0f94edcbab6eac9e0f22a76ce1180de7c923 (patch) | |
tree | 3dc67f32af27d6cd5f2762248d3dbcc4b9907012 /src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlSession.java | |
parent | 135e9c9bdc66a58781211f45e1cb0517ad675d20 (diff) |
adding prekey='true' to omemo messages if applicable
Diffstat (limited to 'src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlSession.java')
-rw-r--r-- | src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlSession.java | 20 |
1 files changed, 15 insertions, 5 deletions
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 d850e18e7..59a7fc71f 100644 --- a/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlSession.java +++ b/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlSession.java @@ -82,13 +82,13 @@ public class XmppAxolotlSession implements Comparable<XmppAxolotlSession> { } @Nullable - public byte[] processReceiving(byte[] encryptedKey) { + public byte[] processReceiving(AxolotlKey encryptedKey) { byte[] plaintext = null; FingerprintStatus status = getTrust(); if (!status.isCompromised()) { try { try { - PreKeyWhisperMessage message = new PreKeyWhisperMessage(encryptedKey); + PreKeyWhisperMessage message = new PreKeyWhisperMessage(encryptedKey.key); if (!message.getPreKeyId().isPresent()) { Log.w(Config.LOGTAG, AxolotlService.getLogprefix(account) + "PreKeyWhisperMessage did not contain a PreKeyId"); return null; @@ -104,7 +104,7 @@ public class XmppAxolotlSession implements Comparable<XmppAxolotlSession> { } } catch (InvalidMessageException | InvalidVersionException e) { Log.i(Config.LOGTAG, AxolotlService.getLogprefix(account) + "WhisperMessage received"); - WhisperMessage message = new WhisperMessage(encryptedKey); + WhisperMessage message = new WhisperMessage(encryptedKey.key); plaintext = cipher.decrypt(message); } catch (InvalidKeyException | InvalidKeyIdException | UntrustedIdentityException e) { Log.w(Config.LOGTAG, AxolotlService.getLogprefix(account) + "Error decrypting axolotl header, " + e.getClass().getName() + ": " + e.getMessage()); @@ -123,11 +123,11 @@ public class XmppAxolotlSession implements Comparable<XmppAxolotlSession> { } @Nullable - public byte[] processSending(@NonNull byte[] outgoingMessage) { + public AxolotlKey processSending(@NonNull byte[] outgoingMessage) { FingerprintStatus status = getTrust(); if (status.isTrustedAndActive()) { CiphertextMessage ciphertextMessage = cipher.encrypt(outgoingMessage); - return ciphertextMessage.serialize(); + return new AxolotlKey(ciphertextMessage.serialize(),ciphertextMessage.getType() == CiphertextMessage.PREKEY_TYPE); } else { return null; } @@ -141,4 +141,14 @@ public class XmppAxolotlSession implements Comparable<XmppAxolotlSession> { public int compareTo(XmppAxolotlSession o) { return getTrust().compareTo(o.getTrust()); } + + public static class AxolotlKey { + public final byte[] key; + public final boolean prekey; + + public AxolotlKey(byte[] key, boolean prekey) { + this.key = key; + this.prekey = prekey; + } + } } |