From 07c61394e90bd0b52d582d783944053a4b614fad Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Tue, 19 Aug 2014 14:46:01 -0700 Subject: [PATCH] When processing PreKeyBundle, archive current session if it exists. --- .../java/org/whispersystems/libaxolotl/SessionBuilder.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libaxolotl/src/main/java/org/whispersystems/libaxolotl/SessionBuilder.java b/libaxolotl/src/main/java/org/whispersystems/libaxolotl/SessionBuilder.java index be9ed18f3e..bcf0ef962e 100644 --- a/libaxolotl/src/main/java/org/whispersystems/libaxolotl/SessionBuilder.java +++ b/libaxolotl/src/main/java/org/whispersystems/libaxolotl/SessionBuilder.java @@ -222,6 +222,7 @@ public class SessionBuilder { throw new InvalidKeyException("Both signed and unsigned prekeys are absent!"); } + boolean isExistingSession = sessionStore.containsSession(recipientId, deviceId); SessionRecord sessionRecord = sessionStore.loadSession(recipientId, deviceId); ECKeyPair ourBaseKey = Curve.generateKeyPair(); ECPublicKey theirSignedPreKey = preKey.getSignedPreKey() != null ? preKey.getSignedPreKey() : @@ -238,8 +239,8 @@ public class SessionBuilder { Optional.fromNullable(preKey.getPreKey()) : Optional.absent()); - if (sessionRecord.getSessionState().getNeedsRefresh()) sessionRecord.archiveCurrentState(); - else sessionRecord.reset(); + if (isExistingSession) sessionRecord.archiveCurrentState(); + else sessionRecord.reset(); RatchetingSession.initializeSession(sessionRecord.getSessionState(), preKey.getSignedPreKey() == null ? 2 : 3,