aboutsummaryrefslogtreecommitdiff
path: root/javascript/olm_pk.js
diff options
context:
space:
mode:
authorDavid Baker <dave@matrix.org>2018-09-21 16:01:51 +0100
committerDavid Baker <dave@matrix.org>2018-09-21 16:01:51 +0100
commit122867c45c7f41b82a550a9665d34b7dda1c3ffa (patch)
tree258bcabe939d5cc4275b71ac8d958767835a047d /javascript/olm_pk.js
parented02c217e6f7e95e495c241c8ff27ef6b5dd8417 (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_pk.js')
-rw-r--r--javascript/olm_pk.js20
1 files changed, 10 insertions, 10 deletions
diff --git a/javascript/olm_pk.js b/javascript/olm_pk.js
index 2542707..25e0fee 100644
--- a/javascript/olm_pk.js
+++ b/javascript/olm_pk.js
@@ -35,9 +35,9 @@ PkEncryption.prototype['encrypt'] = restore_stack(function(
) {
var plaintext_buffer, ciphertext_buffer, plaintext_length;
try {
- plaintext_length = Module['lengthBytesUTF8'](plaintext)
+ plaintext_length = lengthBytesUTF8(plaintext)
plaintext_buffer = malloc(plaintext_length + 1);
- Module['stringToUTF8'](plaintext, plaintext_buffer, plaintext_length + 1);
+ stringToUTF8(plaintext, plaintext_buffer, plaintext_length + 1);
var random_length = pk_encryption_method(
Module['_olm_pk_encrypt_random_length']
)();
@@ -50,7 +50,7 @@ PkEncryption.prototype['encrypt'] = restore_stack(function(
Module['_olm_pk_mac_length']
)(this.ptr);
var mac_buffer = stack(mac_length + NULL_BYTE_PADDING_LENGTH);
- Module['setValue'](
+ setValue(
mac_buffer+mac_length,
0, "i8"
);
@@ -58,7 +58,7 @@ PkEncryption.prototype['encrypt'] = restore_stack(function(
Module['_olm_pk_key_length']
)();
var ephemeral_buffer = stack(ephemeral_length + NULL_BYTE_PADDING_LENGTH);
- Module['setValue'](
+ setValue(
ephemeral_buffer+ephemeral_length,
0, "i8"
);
@@ -72,12 +72,12 @@ PkEncryption.prototype['encrypt'] = restore_stack(function(
);
// UTF8ToString requires a null-terminated argument, so add the
// null terminator.
- Module['setValue'](
+ setValue(
ciphertext_buffer+ciphertext_length,
0, "i8"
);
return {
- "ciphertext": Module['UTF8ToString'](ciphertext_buffer),
+ "ciphertext": UTF8ToString(ciphertext_buffer),
"mac": Pointer_stringify(mac_buffer),
"ephemeral": Pointer_stringify(ephemeral_buffer)
};
@@ -169,9 +169,9 @@ PkDecryption.prototype['decrypt'] = restore_stack(function (
) {
var plaintext_buffer, ciphertext_buffer, plaintext_max_length;
try {
- ciphertext_length = Module['lengthBytesUTF8'](ciphertext)
+ var ciphertext_length = lengthBytesUTF8(ciphertext)
ciphertext_buffer = malloc(ciphertext_length + 1);
- Module['stringToUTF8'](ciphertext, ciphertext_buffer, ciphertext_length + 1);
+ stringToUTF8(ciphertext, ciphertext_buffer, ciphertext_length + 1);
var ephemeralkey_array = array_from_string(ephemeral_key);
var ephemeralkey_buffer = stack(ephemeralkey_array);
var mac_array = array_from_string(mac);
@@ -190,11 +190,11 @@ PkDecryption.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 Module['UTF8ToString'](plaintext_buffer);
+ return UTF8ToString(plaintext_buffer);
} finally {
if (plaintext_buffer !== undefined) {
// don't leave a copy of the plaintext in the heap.