From 122867c45c7f41b82a550a9665d34b7dda1c3ffa Mon Sep 17 00:00:00 2001 From: David Baker Date: Fri, 21 Sep 2018 16:01:51 +0100 Subject: WebAssembly support! Quite a lot going on in this PR: * Updates to support recent emscripten, switching to WASM which is now the default * Use emscripten's MODULARIZE option rather than wrapping it ourself, since doing so in pre-post js doesn't work anymore. * Most changes are moving the emscripten runtime functions to top-level calls rather than in the Module object. * Get rid of duplicated NULL_BYTE_PADDING_LENGTH * Fix ciphertext_length used without being declared * Fix things that caused the closure compiler to error, eg. using OLM_OPTIONS without a declaration. * Wait until module is inited to do OLM_ERROR = olm_error() The main BREAKING CHANGE here is that the module now needs to initialise asyncronously (because it has to load the wasm file). require()ing olm now gives a function which needs to be called to create an instance. The resulting object has a promise-like then() method that can be used to detect when the module is ready. (We could use MODULARIZE_INSTANCE to return the module directly as before, rather than the function, but then we don't get the .then() method). --- javascript/test/pk.spec.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'javascript/test/pk.spec.js') diff --git a/javascript/test/pk.spec.js b/javascript/test/pk.spec.js index aec90ac..9f7dbfd 100644 --- a/javascript/test/pk.spec.js +++ b/javascript/test/pk.spec.js @@ -16,7 +16,7 @@ limitations under the License. "use strict"; -var Olm = require('../olm'); +var Olm = require('../olm')(); if (!Object.keys) { Object.keys = function(o) { @@ -29,7 +29,11 @@ if (!Object.keys) { describe("pk", function() { var encryption, decryption; - beforeEach(function() { + beforeEach(function(done) { + Olm.then(function() { + done(); + }); + encryption = new Olm.PkEncryption(); decryption = new Olm.PkDecryption(); }); -- cgit v1.2.3 From 263b94428a24caaa5b899ed7f73b896620e6cdf4 Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 25 Sep 2018 17:13:29 +0100 Subject: Another day, another interface Change the interface again, hopefully this time a bit more normal. Now we wrap the emscripten module completely and just expose the high level objects. The olm library export is now imported as normal (ie. returns a module rather than a function returning a module) but has an `init` method which *must* be called. This returns a promise which resolves when the module is ready. It also rejects if the module failed to set up, unlike before (and unlike the promise-not-a-promise that emscripten returns). Generally catch failures to init the module. --- javascript/test/pk.spec.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'javascript/test/pk.spec.js') diff --git a/javascript/test/pk.spec.js b/javascript/test/pk.spec.js index 9f7dbfd..007882f 100644 --- a/javascript/test/pk.spec.js +++ b/javascript/test/pk.spec.js @@ -16,7 +16,7 @@ limitations under the License. "use strict"; -var Olm = require('../olm')(); +var Olm = require('../olm'); if (!Object.keys) { Object.keys = function(o) { @@ -30,12 +30,12 @@ describe("pk", function() { var encryption, decryption; beforeEach(function(done) { - Olm.then(function() { + Olm.init().then(function() { + encryption = new Olm.PkEncryption(); + decryption = new Olm.PkDecryption(); + done(); }); - - encryption = new Olm.PkEncryption(); - decryption = new Olm.PkDecryption(); }); afterEach(function () { -- cgit v1.2.3 From 0346145a813cfb719fdf218956cb2f29030134a8 Mon Sep 17 00:00:00 2001 From: David Baker Date: Tue, 2 Oct 2018 12:02:56 +0100 Subject: Work with PkDecryption keys by their private keys Change interface to allow the app to get the private part of the key and instantiate a decryption object from just the private part of the key. Changes the function generating a key from random bytes to be initialising a key with a private key (because it's exactly the same thing). Exports & imports private key parts as ArrayBuffer at JS level rather than base64 assuming we are moving that way in general. --- javascript/test/pk.spec.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'javascript/test/pk.spec.js') diff --git a/javascript/test/pk.spec.js b/javascript/test/pk.spec.js index 007882f..d155cf5 100644 --- a/javascript/test/pk.spec.js +++ b/javascript/test/pk.spec.js @@ -49,6 +49,20 @@ describe("pk", function() { } }); + it('should import & export keys from private parts', function () { + var alice_private = new Uint8Array([ + 0x77, 0x07, 0x6D, 0x0A, 0x73, 0x18, 0xA5, 0x7D, + 0x3C, 0x16, 0xC1, 0x72, 0x51, 0xB2, 0x66, 0x45, + 0xDF, 0x4C, 0x2F, 0x87, 0xEB, 0xC0, 0x99, 0x2A, + 0xB1, 0x77, 0xFB, 0xA5, 0x1D, 0xB9, 0x2C, 0x2A + ]); + var alice_public = decryption.init_with_private_key(alice_private); + expect(alice_public).toEqual("hSDwCYkwp1R0i33ctD73Wg2/Og0mOBr066SpjqqbTmo"); + + var alice_private_out = decryption.get_private_key(); + expect(alice_private_out).toEqual(alice_private); + }); + it('should encrypt and decrypt', function () { var TEST_TEXT='têst1'; var pubkey = decryption.generate_key(); -- cgit v1.2.3 From bad14db8dadac46fef2c1c7094c92831b4bed0fb Mon Sep 17 00:00:00 2001 From: Hubert Chathi Date: Mon, 9 Jul 2018 23:35:40 -0400 Subject: remove unneeded polyfill --- javascript/test/pk.spec.js | 8 -------- 1 file changed, 8 deletions(-) (limited to 'javascript/test/pk.spec.js') diff --git a/javascript/test/pk.spec.js b/javascript/test/pk.spec.js index aec90ac..0b27470 100644 --- a/javascript/test/pk.spec.js +++ b/javascript/test/pk.spec.js @@ -18,14 +18,6 @@ limitations under the License. var Olm = require('../olm'); -if (!Object.keys) { - Object.keys = function(o) { - var k=[], p; - for (p in o) if (Object.prototype.hasOwnProperty.call(o,p)) k.push(p); - return k; - } -} - describe("pk", function() { var encryption, decryption; -- cgit v1.2.3