Cleanup and document worker.js
This commit is contained in:
parent
ceee85ef35
commit
4fd9fd3c7f
|
@ -27,39 +27,72 @@ var MAX_SIZE_RANDOM_BUFFER = 60000;
|
|||
|
||||
openpgp.crypto.random.randomBuffer.init(MAX_SIZE_RANDOM_BUFFER);
|
||||
|
||||
/**
|
||||
* Handle messages from the main window.
|
||||
* @param {Object} event Contains event type and data
|
||||
*/
|
||||
self.onmessage = function(event) {
|
||||
var msg = event.data || {},
|
||||
options = msg.options || {};
|
||||
var msg = event.data || {};
|
||||
|
||||
switch (msg.event) {
|
||||
case 'configure':
|
||||
for (var i in msg.config) {
|
||||
openpgp.config[i] = msg.config[i];
|
||||
}
|
||||
configure(msg.config);
|
||||
break;
|
||||
|
||||
case 'seed-random':
|
||||
if (!(msg.buf instanceof Uint8Array)) {
|
||||
msg.buf = new Uint8Array(msg.buf);
|
||||
}
|
||||
openpgp.crypto.random.randomBuffer.set(msg.buf);
|
||||
seedRandom(msg.buf);
|
||||
break;
|
||||
|
||||
default:
|
||||
if (typeof openpgp[msg.event] !== 'function') {
|
||||
throw new Error('Unknown Worker Event');
|
||||
delegate(msg.event, msg.options || {});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Set config from main context to worker context.
|
||||
* @param {Object} config The openpgp configuration
|
||||
*/
|
||||
function configure(config) {
|
||||
for (var i in config) {
|
||||
openpgp.config[i] = config[i];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Seed the library with entropy gathered window.crypto.getRandomValues
|
||||
* as this api is only avalible in the main window.
|
||||
* @param {ArrayBuffer} buffer Some random bytes
|
||||
*/
|
||||
function seedRandom(buffer) {
|
||||
if (!(buffer instanceof Uint8Array)) {
|
||||
buffer = new Uint8Array(buffer);
|
||||
}
|
||||
openpgp.crypto.random.randomBuffer.set(buffer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generic proxy function that handles all commands from the public api.
|
||||
* @param {String} method The public api function to be delegated to the worker thread
|
||||
* @param {Object} options The api function's options
|
||||
*/
|
||||
function delegate(method, options) {
|
||||
if (typeof openpgp[method] !== 'function') {
|
||||
throw new Error('Unknown Worker Event');
|
||||
}
|
||||
// parse cloned packets
|
||||
openpgp[msg.event](openpgp.packet.clone.parseClonedPackets(options, msg.event)).then(function(data) {
|
||||
options = openpgp.packet.clone.parseClonedPackets(options, method);
|
||||
openpgp[method](options).then(function(data) {
|
||||
// clone packets (for web worker structured cloning algorithm)
|
||||
response({ event:'method-return', data:openpgp.packet.clone.clonePackets(data) });
|
||||
}).catch(function(e) {
|
||||
response({ event:'method-return', err:e.message });
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Respond to the main window.
|
||||
* @param {Object} event Contains event type and data
|
||||
*/
|
||||
function response(event) {
|
||||
if (openpgp.crypto.random.randomBuffer.size < MIN_SIZE_RANDOM_BUFFER) {
|
||||
self.postMessage({event: 'request-seed'});
|
||||
|
|
Loading…
Reference in New Issue
Block a user