Mercurial > sat_docs
diff scripts/minifier/otr/sm-webworker.js @ 12:1596660ddf72
Add minifier script for otr.js and its dependencies
author | souliane <souliane@mailoo.org> |
---|---|
date | Wed, 03 Sep 2014 19:38:05 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/minifier/otr/sm-webworker.js Wed Sep 03 19:38:05 2014 +0200 @@ -0,0 +1,60 @@ +;(function (root) { + "use strict"; + + root.OTR = {} + root.crypto = { + randomBytes: function () { + throw new Error("Haven't seeded yet.") + } + } + + // default imports + var imports = [ + 'vendor/salsa20.js' + , 'vendor/bigint.js' + , 'vendor/crypto.js' + , 'vendor/eventemitter.js' + , 'lib/const.js' + , 'lib/helpers.js' + , 'lib/sm.js' + ] + + function wrapPostMessage(method) { + return function () { + postMessage({ + method: method + , args: Array.prototype.slice.call(arguments, 0) + }) + } + } + + var sm + onmessage = function (e) { + var data = e.data + switch (data.type) { + case 'seed': + if (data.imports) imports = data.imports + importScripts.apply(root, imports) + + // use salsa20 since there's no prng in webworkers + var state = new root.Salsa20( + data.seed.slice(0, 32), + data.seed.slice(32) + ) + root.crypto.randomBytes = function (n) { + return state.getBytes(n) + } + break + case 'init': + sm = new root.OTR.SM(data.reqs) + ;['trust','question', 'send', 'abort'].forEach(function (m) { + sm.on(m, wrapPostMessage(m)); + }) + break + case 'method': + sm[data.method].apply(sm, data.args) + break + } + } + +}(this)) \ No newline at end of file