Tweak the javascript bindings so that they will work with Node.js

This commit is contained in:
Mark Haines 2015-07-14 16:45:00 +01:00
parent 36d17d1cb2
commit bede3a8499
2 changed files with 34 additions and 4 deletions

View file

@ -15,7 +15,7 @@ function array_from_string(string) {
function random_stack(size) { function random_stack(size) {
var ptr = stack(size); var ptr = stack(size);
var array = new Uint8Array(Module['HEAPU8'].buffer, ptr, size); var array = new Uint8Array(Module['HEAPU8'].buffer, ptr, size);
window.crypto.getRandomValues(array); get_random_values(array);
return ptr; return ptr;
} }
@ -139,7 +139,7 @@ Account.prototype['unpickle'] = restore_stack(function(key, pickle) {
var key_array = array_from_string(key); var key_array = array_from_string(key);
var key_buffer = stack(key_array); var key_buffer = stack(key_array);
var pickle_array = array_from_string(pickle); var pickle_array = array_from_string(pickle);
var pickle_buffer = stack(pickle_length); var pickle_buffer = stack(pickle_array);
account_method(Module['_olm_unpickle_account'])( account_method(Module['_olm_unpickle_account'])(
this.ptr, key_buffer, key_array.length, pickle_buffer, this.ptr, key_buffer, key_array.length, pickle_buffer,
pickle_array.length pickle_array.length
@ -280,5 +280,7 @@ Session.prototype['decrypt'] = restore_stack(function(
return Pointer_stringify(plaintext_buffer, plaintext_length); return Pointer_stringify(plaintext_buffer, plaintext_length);
}); });
return {"Account": Account, "Session": Session}; olm_exports["Account"] = Account;
olm_exports["Session"] = Session;
}(); }();

View file

@ -1 +1,29 @@
Olm = function() { var olm_exports = {};
var get_random_values;
if (typeof(window) !== 'undefined') {
// We've been imported directly into a browser.
window["Olm"] = olm_exports;
get_random_values = function(buf) {
window.crypto.getRandomValues(buf);
};
} else if (global.window) {
// We're running with browserify
global.window["Olm"] = olm_exports;
get_random_values = function(buf) {
window.crypto.getRandomValues(buf);
};
} else if (module["exports"]) {
// We're running in node.
module["exports"] = olm_exports;
var nodeCrypto = require("crypto");
get_random_values = function(buf) {
var bytes = nodeCrypto.randomBytes(buf.length);
buf.set(bytes);
}
} else {
throw new Error("Cannot find global to attach library to");
}
var init = function() {
var module; // Shadow the Node 'module' object so that emscripten won't try
// to fiddle with it.