From 653790eacbf7dcf94cbf181657cdb0c30c890c3f Mon Sep 17 00:00:00 2001
From: Mark Haines <mjark@negativecurvature.net>
Date: Thu, 20 Oct 2016 09:58:55 +0100
Subject: Return the message index when decrypting group messages.

Applications can use the index to detect replays of the same message.
---
 javascript/demo/group_demo.js           | 4 ++--
 javascript/olm_inbound_group_session.js | 9 +++++++--
 2 files changed, 9 insertions(+), 4 deletions(-)

(limited to 'javascript')

diff --git a/javascript/demo/group_demo.js b/javascript/demo/group_demo.js
index 1b8f7ab..42a3d84 100644
--- a/javascript/demo/group_demo.js
+++ b/javascript/demo/group_demo.js
@@ -403,8 +403,8 @@ DemoUser.prototype.decryptGroup = function(jsonpacket, callback) {
             throw new Error("Unknown session id " + session_id);
         }
 
-        var plaintext = session.decrypt(packet.body);
-        done(plaintext);
+        var result = session.decrypt(packet.body);
+        done(result.plaintext);
     }, callback);
 };
 
diff --git a/javascript/olm_inbound_group_session.js b/javascript/olm_inbound_group_session.js
index 6058233..1b7fcfe 100644
--- a/javascript/olm_inbound_group_session.js
+++ b/javascript/olm_inbound_group_session.js
@@ -73,10 +73,12 @@ InboundGroupSession.prototype['decrypt'] = restore_stack(function(
     // So we copy the array to a new buffer
     var message_buffer = stack(message_array);
     var plaintext_buffer = stack(max_plaintext_length + NULL_BYTE_PADDING_LENGTH);
+    var message_index = stack(4);
     var plaintext_length = inbound_group_session_method(Module["_olm_group_decrypt"])(
         this.ptr,
         message_buffer, message_array.length,
-        plaintext_buffer, max_plaintext_length
+        plaintext_buffer, max_plaintext_length,
+        message_index
     );
 
     // Pointer_stringify requires a null-terminated argument (the optional
@@ -86,7 +88,10 @@ InboundGroupSession.prototype['decrypt'] = restore_stack(function(
         0, "i8"
     );
 
-    return Pointer_stringify(plaintext_buffer);
+    return {
+        "plaintext": Pointer_stringify(plaintext_buffer),
+        "message_index": Module['getValue'](message_index, "i32")
+    }
 });
 
 InboundGroupSession.prototype['session_id'] = restore_stack(function() {
-- 
cgit v1.2.3-70-g09d2