From 974e0984bd0d618093669780a75739d4b02fd3b2 Mon Sep 17 00:00:00 2001
From: Mark Haines <mark.haines@matrix.org>
Date: Wed, 8 Jul 2015 11:16:00 +0100
Subject: [PATCH] Update the javascript bindings and demo to match the format
 of the identity key JSON

---
 include/olm/account.hh |  2 +-
 javascript/demo.html   | 10 ++++++++--
 javascript/olm_post.js | 21 ++++++++++++++++++---
 src/account.cpp        |  2 +-
 4 files changed, 28 insertions(+), 7 deletions(-)

diff --git a/include/olm/account.hh b/include/olm/account.hh
index 1a4778b..b51fc1e 100644
--- a/include/olm/account.hh
+++ b/include/olm/account.hh
@@ -96,7 +96,7 @@ struct Account {
         std::uint8_t const * device_id, std::size_t device_id_length,
         std::uint64_t valid_after_ts,
         std::uint64_t valid_until_ts,
-        std::uint8_t * identity_keys, std::size_t identity_keys_length
+        std::uint8_t * identity_json, std::size_t identity_json_length
     );
 
     OneTimeKey const * lookup_key(
diff --git a/javascript/demo.html b/javascript/demo.html
index cace119..5a32e96 100644
--- a/javascript/demo.html
+++ b/javascript/demo.html
@@ -29,10 +29,16 @@ document.addEventListener("DOMContentLoaded", function (event) {
     tasks.push(["alice", "Creating account", function() { alice.create() }]);
     tasks.push(["bob", "Creating account", function() { bob.create() }]);
     tasks.push(["alice", "Create outbound session", function() {
-        var bobs_keys_1 = JSON.parse(bob.identity_keys())[0];
+        var bobs_id_keys = JSON.parse(bob.identity_keys("bob", "bob_device", 0, 0));
+        var bobs_curve25519_key;
+        for (key in bobs_id_keys.keys) {
+            if (key.startsWith("curve25519:")) {
+                bobs_curve25519_key = bobs_id_keys.keys[key];
+            }
+        }
         var bobs_keys_2 = JSON.parse(bob.one_time_keys())[1];
         a_session.create_outbound(
-            alice, bobs_keys_1[1], bobs_keys_2[0], bobs_keys_2[1]
+            alice, bobs_curve25519_key, bobs_keys_2[0], bobs_keys_2[1]
         );
     }]);
     tasks.push(["alice", "Encrypt first message", function() {
diff --git a/javascript/olm_post.js b/javascript/olm_post.js
index 6ebd198..0494460 100644
--- a/javascript/olm_post.js
+++ b/javascript/olm_post.js
@@ -63,13 +63,28 @@ Account.prototype['create'] = restore_stack(function() {
     );
 });
 
-Account.prototype['identity_keys'] = restore_stack(function() {
+Account.prototype['identity_keys'] = restore_stack(function(
+    user_id, device_id, valid_after, valid_until
+) {
+    var user_id_array = array_from_string(user_id);
+    var device_id_array = array_from_string(device_id);
     var keys_length = account_method(
         Module['_olm_account_identity_keys_length']
-    )(this.ptr);
+    )(
+        this.ptr, user_id_array.length, device_id_array.length,
+        valid_after, valid_after / Math.pow(2, 32),
+        valid_until, valid_until / Math.pow(2, 32)
+    );
+    var user_id_buffer = stack(user_id_array);
+    var device_id_buffer = stack(device_id_array);
     var keys = stack(keys_length);
     account_method(Module['_olm_account_identity_keys'])(
-        this.ptr, keys, keys_length
+        this.ptr,
+        user_id_buffer, user_id_array.length,
+        device_id_buffer, device_id_array.length,
+        valid_after, valid_after / Math.pow(2, 32),
+        valid_until, valid_until / Math.pow(2, 32),
+        keys, keys_length
     );
     return Pointer_stringify(keys, keys_length);
 });
diff --git a/src/account.cpp b/src/account.cpp
index 1ca3b13..54edf6e 100644
--- a/src/account.cpp
+++ b/src/account.cpp
@@ -170,8 +170,8 @@ std::size_t olm::Account::get_identity_json_length(
 std::size_t olm::Account::get_identity_json(
     std::uint8_t const * user_id, std::size_t user_id_length,
     std::uint8_t const * device_id, std::size_t device_id_length,
-    std::uint64_t valid_until_ts,
     std::uint64_t valid_after_ts,
+    std::uint64_t valid_until_ts,
     std::uint8_t * identity_json, std::size_t identity_json_length
 ) {
 
-- 
GitLab