Use generic AsyncProxy.delegate for all public apis
This commit is contained in:
parent
f5375ef700
commit
994b8d2354
|
@ -213,7 +213,7 @@ export function sign({ data, privateKeys }) {
|
||||||
privateKeys = toArray(privateKeys);
|
privateKeys = toArray(privateKeys);
|
||||||
|
|
||||||
if (asyncProxy) { // use web worker if available
|
if (asyncProxy) { // use web worker if available
|
||||||
return asyncProxy.sign({ data, privateKeys });
|
return asyncProxy.delegate('sign', { data, privateKeys });
|
||||||
}
|
}
|
||||||
|
|
||||||
return execute(() => {
|
return execute(() => {
|
||||||
|
@ -240,7 +240,7 @@ export function verify({ message, publicKeys }) {
|
||||||
publicKeys = toArray(publicKeys);
|
publicKeys = toArray(publicKeys);
|
||||||
|
|
||||||
if (asyncProxy) { // use web worker if available
|
if (asyncProxy) { // use web worker if available
|
||||||
return asyncProxy.verify({ message, publicKeys });
|
return asyncProxy.delegate('verify', { message, publicKeys });
|
||||||
}
|
}
|
||||||
|
|
||||||
return execute(() => ({
|
return execute(() => ({
|
||||||
|
@ -270,7 +270,7 @@ export function verify({ message, publicKeys }) {
|
||||||
*/
|
*/
|
||||||
export function encryptSessionKey({ sessionKey, algo, publicKeys, passwords }) {
|
export function encryptSessionKey({ sessionKey, algo, publicKeys, passwords }) {
|
||||||
if (asyncProxy) { // use web worker if available
|
if (asyncProxy) { // use web worker if available
|
||||||
return asyncProxy.encryptSessionKey({ sessionKey, algo, publicKeys, passwords });
|
return asyncProxy.delegate('encryptSessionKey', { sessionKey, algo, publicKeys, passwords });
|
||||||
}
|
}
|
||||||
|
|
||||||
return execute(() => ({
|
return execute(() => ({
|
||||||
|
@ -294,7 +294,7 @@ export function encryptSessionKey({ sessionKey, algo, publicKeys, passwords }) {
|
||||||
*/
|
*/
|
||||||
export function decryptSessionKey({ message, privateKey, sessionKey, password }) {
|
export function decryptSessionKey({ message, privateKey, sessionKey, password }) {
|
||||||
if (asyncProxy) { // use web worker if available
|
if (asyncProxy) { // use web worker if available
|
||||||
return asyncProxy.decryptSessionKey({ message, privateKey, sessionKey, password });
|
return asyncProxy.delegate('decryptSessionKey', { message, privateKey, sessionKey, password });
|
||||||
}
|
}
|
||||||
|
|
||||||
return execute(() => message.decryptSessionKey(privateKey, sessionKey, password), 'Error decrypting session key');
|
return execute(() => message.decryptSessionKey(privateKey, sessionKey, password), 'Error decrypting session key');
|
||||||
|
|
|
@ -167,78 +167,6 @@ function parseClonedPackets(data) {
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
AsyncProxy.prototype.encryptSessionKey = function({ sessionKey, algo, keys, passwords }) {
|
|
||||||
return this.execute(() => {
|
|
||||||
if(keys) {
|
|
||||||
keys = keys.length ? keys : [keys];
|
|
||||||
keys = keys.map(key => key.toPacketlist());
|
|
||||||
}
|
|
||||||
this.worker.postMessage({ event:'encrypt-session-key', sessionKey, algo, keys, passwords });
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
AsyncProxy.prototype.decryptSessionKey = function(privateKey, message) {
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
return self.execute(function() {
|
|
||||||
if(!(String.prototype.isPrototypeOf(privateKey) || typeof privateKey === 'string')) {
|
|
||||||
privateKey = privateKey.toPacketlist();
|
|
||||||
}
|
|
||||||
|
|
||||||
self.worker.postMessage({
|
|
||||||
event: 'decrypt-session-key',
|
|
||||||
privateKey: privateKey,
|
|
||||||
message: message
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
AsyncProxy.prototype.signClearMessage = function(privateKeys, text) {
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
return self.execute(function() {
|
|
||||||
if (!privateKeys.length) {
|
|
||||||
privateKeys = [privateKeys];
|
|
||||||
}
|
|
||||||
privateKeys = privateKeys.map(function(key) {
|
|
||||||
return key.toPacketlist();
|
|
||||||
});
|
|
||||||
self.worker.postMessage({
|
|
||||||
event: 'sign-clear-message',
|
|
||||||
privateKeys: privateKeys,
|
|
||||||
text: text
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
AsyncProxy.prototype.verifyClearSignedMessage = function(publicKeys, message) {
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
var promise = new Promise(function(resolve, reject) {
|
|
||||||
if (!publicKeys.length) {
|
|
||||||
publicKeys = [publicKeys];
|
|
||||||
}
|
|
||||||
publicKeys = publicKeys.map(function(key) {
|
|
||||||
return key.toPacketlist();
|
|
||||||
});
|
|
||||||
self.worker.postMessage({
|
|
||||||
event: 'verify-clear-signed-message',
|
|
||||||
publicKeys: publicKeys,
|
|
||||||
message: message
|
|
||||||
});
|
|
||||||
|
|
||||||
self.tasks.push({ resolve:function(data) {
|
|
||||||
data.signatures = data.signatures.map(function(sig) {
|
|
||||||
sig.keyid = type_keyid.fromClone(sig.keyid);
|
|
||||||
return sig;
|
|
||||||
});
|
|
||||||
resolve(data);
|
|
||||||
}, reject:reject });
|
|
||||||
});
|
|
||||||
|
|
||||||
return promise;
|
|
||||||
};
|
|
||||||
|
|
||||||
AsyncProxy.prototype.decryptKey = function(privateKey, password) {
|
AsyncProxy.prototype.decryptKey = function(privateKey, password) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
|
|
@ -69,64 +69,6 @@ self.onmessage = function (event) {
|
||||||
window.openpgp.crypto.random.randomBuffer.set(msg.buf);
|
window.openpgp.crypto.random.randomBuffer.set(msg.buf);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'generateKey':
|
|
||||||
case 'encrypt':
|
|
||||||
case 'decrypt':
|
|
||||||
// parse cloned packets
|
|
||||||
window.openpgp[msg.event](parseClonedPackets(opt)).then(function(data) {
|
|
||||||
// clone packets (for web worker structured cloning algorithm)
|
|
||||||
response({ event:'method-return', data:clonePackets(data) });
|
|
||||||
}).catch(function(e) {
|
|
||||||
response({ event:'method-return', err:e.message });
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'encrypt-session-key':
|
|
||||||
if(msg.keys) {
|
|
||||||
msg.keys = msg.keys.map(packetlistCloneToKey);
|
|
||||||
}
|
|
||||||
window.openpgp.encryptSessionKey(msg.sessionKey, msg.algo, msg.keys, msg.passwords).then(function(data) {
|
|
||||||
response({event: 'method-return', data: data});
|
|
||||||
}).catch(function(e) {
|
|
||||||
response({event: 'method-return', err: e.message});
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'decrypt-session-key':
|
|
||||||
if(!(String.prototype.isPrototypeOf(msg.privateKey) || typeof msg.privateKey === 'string')) {
|
|
||||||
msg.privateKey = packetlistCloneToKey(msg.privateKey);
|
|
||||||
}
|
|
||||||
msg.message = packetlistCloneToMessage(msg.message.packets);
|
|
||||||
window.openpgp.decryptSessionKey(msg.privateKey, msg.message).then(function(data) {
|
|
||||||
response({event: 'method-return', data: data});
|
|
||||||
}).catch(function(e) {
|
|
||||||
response({event: 'method-return', err: e.message});
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'sign-clear-message':
|
|
||||||
msg.privateKeys = msg.privateKeys.map(packetlistCloneToKey);
|
|
||||||
window.openpgp.signClearMessage(msg.privateKeys, msg.text).then(function(data) {
|
|
||||||
response({event: 'method-return', data: data});
|
|
||||||
}).catch(function(e) {
|
|
||||||
response({event: 'method-return', err: e.message});
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'verify-clear-signed-message':
|
|
||||||
if (!msg.publicKeys.length) {
|
|
||||||
msg.publicKeys = [msg.publicKeys];
|
|
||||||
}
|
|
||||||
msg.publicKeys = msg.publicKeys.map(packetlistCloneToKey);
|
|
||||||
var packetlist = window.openpgp.packet.List.fromStructuredClone(msg.message.packets);
|
|
||||||
msg.message = new window.openpgp.cleartext.CleartextMessage(msg.message.text, packetlist);
|
|
||||||
window.openpgp.verifyClearSignedMessage(msg.publicKeys, msg.message).then(function(data) {
|
|
||||||
response({event: 'method-return', data: data});
|
|
||||||
}).catch(function(e) {
|
|
||||||
response({event: 'method-return', err: e.message});
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'decrypt-key':
|
case 'decrypt-key':
|
||||||
try {
|
try {
|
||||||
msg.privateKey = packetlistCloneToKey(msg.privateKey);
|
msg.privateKey = packetlistCloneToKey(msg.privateKey);
|
||||||
|
@ -158,12 +100,28 @@ self.onmessage = function (event) {
|
||||||
response({event: 'method-return', data: data, err: err});
|
response({event: 'method-return', data: data, err: err});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'generateKey':
|
||||||
|
case 'encrypt':
|
||||||
|
case 'decrypt':
|
||||||
|
case 'sign':
|
||||||
|
case 'verify':
|
||||||
|
case 'encryptSessionKey':
|
||||||
|
case 'decryptSessionKey':
|
||||||
|
// parse cloned packets
|
||||||
|
window.openpgp[msg.event](parseClonedPackets(opt, msg.event)).then(function(data) {
|
||||||
|
// clone packets (for web worker structured cloning algorithm)
|
||||||
|
response({ event:'method-return', data:clonePackets(data) });
|
||||||
|
}).catch(function(e) {
|
||||||
|
response({ event:'method-return', err:e.message });
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new Error('Unknown Worker Event.');
|
throw new Error('Unknown Worker Event.');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function parseClonedPackets(options) {
|
function parseClonedPackets(options, method) {
|
||||||
if(options.publicKeys) {
|
if(options.publicKeys) {
|
||||||
options.publicKeys = options.publicKeys.map(packetlistCloneToKey);
|
options.publicKeys = options.publicKeys.map(packetlistCloneToKey);
|
||||||
}
|
}
|
||||||
|
@ -173,12 +131,30 @@ function parseClonedPackets(options) {
|
||||||
if(options.privateKey) {
|
if(options.privateKey) {
|
||||||
options.privateKey = packetlistCloneToKey(options.privateKey);
|
options.privateKey = packetlistCloneToKey(options.privateKey);
|
||||||
}
|
}
|
||||||
if (options.message) {
|
// parse message depending on method
|
||||||
options.message = packetlistCloneToMessage(options.message.packets);
|
if (options.message && method === 'verify') {
|
||||||
|
options.message = packetlistCloneToCleartextMessage(options.message);
|
||||||
|
} else if (options.message) {
|
||||||
|
options.message = packetlistCloneToMessage(options.message);
|
||||||
}
|
}
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function packetlistCloneToKey(packetlistClone) {
|
||||||
|
var packetlist = window.openpgp.packet.List.fromStructuredClone(packetlistClone);
|
||||||
|
return new window.openpgp.key.Key(packetlist);
|
||||||
|
}
|
||||||
|
|
||||||
|
function packetlistCloneToMessage(message) {
|
||||||
|
var packetlist = window.openpgp.packet.List.fromStructuredClone(message.packets);
|
||||||
|
return new window.openpgp.message.Message(packetlist);
|
||||||
|
}
|
||||||
|
|
||||||
|
function packetlistCloneToCleartextMessage(message) {
|
||||||
|
var packetlist = window.openpgp.packet.List.fromStructuredClone(message.packets);
|
||||||
|
return new window.openpgp.cleartext.CleartextMessage(message.text, packetlist);
|
||||||
|
}
|
||||||
|
|
||||||
function clonePackets(data) {
|
function clonePackets(data) {
|
||||||
if (data.key) {
|
if (data.key) {
|
||||||
data.key = data.key.toPacketlist();
|
data.key = data.key.toPacketlist();
|
||||||
|
@ -192,13 +168,3 @@ function response(event) {
|
||||||
}
|
}
|
||||||
postMessage(event);
|
postMessage(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
function packetlistCloneToKey(packetlistClone) {
|
|
||||||
var packetlist = window.openpgp.packet.List.fromStructuredClone(packetlistClone);
|
|
||||||
return new window.openpgp.key.Key(packetlist);
|
|
||||||
}
|
|
||||||
|
|
||||||
function packetlistCloneToMessage(packetlistClone) {
|
|
||||||
var packetlist = window.openpgp.packet.List.fromStructuredClone(packetlistClone);
|
|
||||||
return new window.openpgp.message.Message(packetlist);
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user