parent
2c92d69a6d
commit
3bd00f09fd
6 changed files with 264 additions and 29 deletions
@ -0,0 +1,193 @@ |
||||
;(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ |
||||
// GPG4Browsers - An OpenPGP implementation in javascript
|
||||
// Copyright (C) 2011 Recurity Labs GmbH
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
// License as published by the Free Software Foundation; either
|
||||
// version 3.0 of the License, or (at your option) any later version.
|
||||
//
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
// Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public
|
||||
// License along with this library; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
window = {}; // to make UMD bundles work
|
||||
|
||||
// Mozilla bind polyfill because phantomjs is stupid
|
||||
if (!Function.prototype.bind) { |
||||
Function.prototype.bind = function(oThis) { |
||||
if (typeof this !== "function") { |
||||
// closest thing possible to the ECMAScript 5 internal IsCallable function
|
||||
throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); |
||||
} |
||||
|
||||
var aArgs = Array.prototype.slice.call(arguments, 1), |
||||
fToBind = this, |
||||
FNOP = function() {}, |
||||
fBound = function() { |
||||
return fToBind.apply(this instanceof FNOP && oThis ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments))); |
||||
}; |
||||
|
||||
FNOP.prototype = this.prototype; |
||||
fBound.prototype = new FNOP(); |
||||
|
||||
return fBound; |
||||
}; |
||||
} |
||||
|
||||
importScripts('openpgp.js'); |
||||
|
||||
var MIN_SIZE_RANDOM_BUFFER = 40000; |
||||
var MAX_SIZE_RANDOM_BUFFER = 60000; |
||||
|
||||
window.openpgp.crypto.random.randomBuffer.init(MAX_SIZE_RANDOM_BUFFER); |
||||
|
||||
self.onmessage = function (event) { |
||||
var data = null, |
||||
err = null, |
||||
msg = event.data, |
||||
correct = false; |
||||
|
||||
switch (msg.event) { |
||||
case 'configure': |
||||
for (var i in msg.config) { |
||||
window.openpgp.config[i] = msg.config[i]; |
||||
} |
||||
break; |
||||
case 'seed-random': |
||||
if (!(msg.buf instanceof Uint8Array)) { |
||||
msg.buf = new Uint8Array(msg.buf); |
||||
} |
||||
window.openpgp.crypto.random.randomBuffer.set(msg.buf); |
||||
break; |
||||
case 'encrypt-message': |
||||
if (!msg.keys.length) { |
||||
msg.keys = [msg.keys]; |
||||
} |
||||
msg.keys = msg.keys.map(packetlistCloneToKey); |
||||
window.openpgp.encryptMessage(msg.keys, msg.text).then(function(data) { |
||||
response({event: 'method-return', data: data}); |
||||
}).catch(function(e) { |
||||
response({event: 'method-return', err: e.message}); |
||||
}); |
||||
break; |
||||
case 'sign-and-encrypt-message': |
||||
if (!msg.publicKeys.length) { |
||||
msg.publicKeys = [msg.publicKeys]; |
||||
} |
||||
msg.publicKeys = msg.publicKeys.map(packetlistCloneToKey); |
||||
msg.privateKey = packetlistCloneToKey(msg.privateKey); |
||||
window.openpgp.signAndEncryptMessage(msg.publicKeys, msg.privateKey, msg.text).then(function(data) { |
||||
response({event: 'method-return', data: data}); |
||||
}).catch(function(e) { |
||||
response({event: 'method-return', err: e.message}); |
||||
}); |
||||
break; |
||||
case 'decrypt-message': |
||||
msg.privateKey = packetlistCloneToKey(msg.privateKey); |
||||
msg.message = packetlistCloneToMessage(msg.message.packets); |
||||
window.openpgp.decryptMessage(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 'decrypt-and-verify-message': |
||||
msg.privateKey = packetlistCloneToKey(msg.privateKey); |
||||
if (!msg.publicKeys.length) { |
||||
msg.publicKeys = [msg.publicKeys]; |
||||
} |
||||
msg.publicKeys = msg.publicKeys.map(packetlistCloneToKey); |
||||
msg.message = packetlistCloneToMessage(msg.message.packets); |
||||
window.openpgp.decryptAndVerifyMessage(msg.privateKey, 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 '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 'generate-key-pair': |
||||
window.openpgp.generateKeyPair(msg.options).then(function(data) { |
||||
data.key = data.key.toPacketlist(); |
||||
response({event: 'method-return', data: data}); |
||||
}).catch(function(e) { |
||||
response({event: 'method-return', err: e.message}); |
||||
}); |
||||
break; |
||||
case 'decrypt-key': |
||||
try { |
||||
msg.privateKey = packetlistCloneToKey(msg.privateKey); |
||||
correct = msg.privateKey.decrypt(msg.password); |
||||
if (correct) { |
||||
data = msg.privateKey.toPacketlist(); |
||||
} else { |
||||
err = 'Wrong password'; |
||||
} |
||||
} catch (e) { |
||||
err = e.message; |
||||
} |
||||
response({event: 'method-return', data: data, err: err}); |
||||
break; |
||||
case 'decrypt-key-packet': |
||||
try { |
||||
msg.privateKey = packetlistCloneToKey(msg.privateKey); |
||||
msg.keyIds = msg.keyIds.map(window.openpgp.Keyid.fromClone); |
||||
correct = msg.privateKey.decryptKeyPacket(msg.keyIds, msg.password); |
||||
if (correct) { |
||||
data = msg.privateKey.toPacketlist(); |
||||
} else { |
||||
err = 'Wrong password'; |
||||
} |
||||
} catch (e) { |
||||
err = e.message; |
||||
} |
||||
response({event: 'method-return', data: data, err: err}); |
||||
break; |
||||
default: |
||||
throw new Error('Unknown Worker Event.'); |
||||
} |
||||
}; |
||||
|
||||
function response(event) { |
||||
if (window.openpgp.crypto.random.randomBuffer.size < MIN_SIZE_RANDOM_BUFFER) { |
||||
postMessage({event: 'request-seed'}); |
||||
} |
||||
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); |
||||
} |
||||
},{}]},{},[1]) |
||||
; |
Loading…
Reference in new issue