diff options
author | David Baker <dave@matrix.org> | 2018-09-21 16:01:51 +0100 |
---|---|---|
committer | David Baker <dave@matrix.org> | 2018-09-21 16:01:51 +0100 |
commit | 122867c45c7f41b82a550a9665d34b7dda1c3ffa (patch) | |
tree | 258bcabe939d5cc4275b71ac8d958767835a047d /javascript/olm_inbound_group_session.js | |
parent | ed02c217e6f7e95e495c241c8ff27ef6b5dd8417 (diff) |
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).
Diffstat (limited to 'javascript/olm_inbound_group_session.js')
-rw-r--r-- | javascript/olm_inbound_group_session.js | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/javascript/olm_inbound_group_session.js b/javascript/olm_inbound_group_session.js index 6bc745d..7d9e401 100644 --- a/javascript/olm_inbound_group_session.js +++ b/javascript/olm_inbound_group_session.js @@ -1,9 +1,3 @@ -/* The 'length' argument to Pointer_stringify doesn't work if the input includes - * characters >= 128; we therefore need to add a NULL character to all of our - * strings. This acts as a symbolic constant to help show what we're doing. - */ -var NULL_BYTE_PADDING_LENGTH = 1; - function InboundGroupSession() { var size = Module['_olm_inbound_group_session_size'](); this.buf = malloc(size); @@ -77,14 +71,14 @@ InboundGroupSession.prototype['decrypt'] = restore_stack(function( try { message_buffer = malloc(message.length); - Module['writeAsciiToMemory'](message, message_buffer, true); + writeAsciiToMemory(message, message_buffer, true); var max_plaintext_length = inbound_group_session_method( Module['_olm_group_decrypt_max_plaintext_length'] )(this.ptr, message_buffer, message.length); // caculating the length destroys the input buffer, so we need to re-copy it. - Module['writeAsciiToMemory'](message, message_buffer, true); + writeAsciiToMemory(message, message_buffer, true); plaintext_buffer = malloc(max_plaintext_length + NULL_BYTE_PADDING_LENGTH); var message_index = stack(4); @@ -100,14 +94,14 @@ InboundGroupSession.prototype['decrypt'] = restore_stack(function( // UTF8ToString requires a null-terminated argument, so add the // null terminator. - Module['setValue']( + setValue( plaintext_buffer+plaintext_length, 0, "i8" ); return { "plaintext": UTF8ToString(plaintext_buffer), - "message_index": Module['getValue'](message_index, "i32") + "message_index": getValue(message_index, "i32") } } finally { if (message_buffer !== undefined) { |