aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlSession.java
diff options
context:
space:
mode:
authorChristian Schneppe <christian@pix-art.de>2017-01-09 22:28:32 +0100
committerChristian Schneppe <christian@pix-art.de>2017-01-09 22:28:32 +0100
commit395c0f94edcbab6eac9e0f22a76ce1180de7c923 (patch)
tree3dc67f32af27d6cd5f2762248d3dbcc4b9907012 /src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlSession.java
parent135e9c9bdc66a58781211f45e1cb0517ad675d20 (diff)
adding prekey='true' to omemo messages if applicable
Diffstat (limited to '')
-rw-r--r--src/main/java/de/pixart/messenger/crypto/axolotl/XmppAxolotlSession.java20
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;
+ }
+ }
}