Skip to content
This repository has been archived by the owner on Apr 2, 2024. It is now read-only.

Commit

Permalink
Continues isolating OpenPGP.js functionality for #73
Browse files Browse the repository at this point in the history
  • Loading branch information
Niklas Femerstrand committed Jul 7, 2013
1 parent 5e17456 commit 647af61
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 17 deletions.
54 changes: 54 additions & 0 deletions js/rc_openpgpjs.crypto.js
Original file line number Diff line number Diff line change
Expand Up @@ -160,3 +160,57 @@ function decrypt(msg, privkey_armored, passphrase) {
return false;
}
}

function parseMsg(msg) {
return openpgp.read_message(msg);
}

function hasPrivateKey() {
return openpgp.keyring.hasPrivateKey();
}

function getPrivkeyCount() {
return openpgp.keyring.privateKeys.length;
}

function getFingerprint(i, private, niceformat) {
if(typeof(private) !== "undefined") {
private = false;
}

if(typeof(niceformat) == "undefined") {
alert("undefined");
niceformat = true;
}

if(private == false) {
fingerprint = util.hexstrdump(openpgp.keyring.publicKeys[i].obj.getFingerprint()).toUpperCase().substring(0, 8);
} else {
fingerprint = util.hexstrdump(openpgp.keyring.privateKeys[i].obj.getFingerprint()).toUpperCase().substring(0, 8);
}

if(niceformat) {
fingerprint = fingerprint.replace(/(.{2})/g, "$1 ");
} else {
fingerprint = "0x" + fingerprint.substring(0, 8);
}

return fingerprint;
}

function getPubkeyForAddress(address) {
var pubkey = openpgp.keyring.getPublicKeyForAddress(address);
return pubkey;
}

function getFingerprintForSender(sender) {
var pubkey = getPubkeyForAddress(sender);
var fingerprint = util.hexstrdump(pubkey[0].obj.getFingerprint()).toUpperCase().substring(8).replace(/(.{2})/g,"$1 ");
return fingerprint;
}

function getPrivkeyArmored(id) {
var keyid = openpgp.keyring.privateKeys[id].obj.getKeyId();
var privkey_armored = openpgp.keyring.getPrivateKeyForKeyId(keyid)[0].key.armored;
return privkey_armored;
}
31 changes: 14 additions & 17 deletions js/rc_openpgpjs.js
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ if(window.rcmail) {
* Processes received messages
*/
function processReceived() {
var msg = openpgp.read_message($("#messagebody div.message-part pre").html());
var msg = parseMsg($("#messagebody div.message-part pre").html());

// OpenPGP failed parsing the message, no action required.
if(!msg) {
Expand All @@ -111,27 +111,25 @@ if(window.rcmail) {
// TODO fix signature verification
if(msg[0].type === 2) return;

if(!openpgp.keyring.hasPrivateKey()) {
if(!hasPrivateKey()) {
rcmail.display_message(rcmail.gettext("no_key_imported", "rc_openpgpjs"), "error");
return false;
}

if(this.passphrase === "" && openpgp.keyring.privateKeys.length > 0) {
if(this.passphrase === "" && getPrivkeyCount() > 0) {
$("#openpgpjs_key_select").dialog("open");
return false;
}

// json string from set_passphrase, obj.id = privkey id, obj.passphrase = privkey passphrase
var passobj = JSON.parse(this.passphrase);

var keyid = openpgp.keyring.privateKeys[passobj.id].obj.getKeyId();
var privkey_armored = openpgp.keyring.getPrivateKeyForKeyId(keyid)[0].key.armored;

var privkey_armored = getPrivkeyArmored(passobj.id);
decrypted = decrypt(msg, privkey_armored, passobj.passphrase);

if(decrypted) {
$("#messagebody div.message-part pre").html("<strong>********* *BEGIN ENCRYPTED or SIGNED PART* *********</strong>\n" + escapeHtml(decrypted) + "\n<strong>********** *END ENCRYPTED or SIGNED PART* **********</strong>");
} else {
alert("Failed decrypt, this happens because set_passphrase is still missing some stuff.");
alert("Failed decrypt");
}

return true;
Expand All @@ -144,8 +142,7 @@ if(window.rcmail) {
*/
function showKeyInfo(msg) {
var sender = rcmail.env.sender.match(/<(.*)>$/)[1];
var pubkey = openpgp.keyring.getPublicKeyForAddress(sender);
var fingerprint = util.hexstrdump(pubkey[0].obj.getFingerprint()).toUpperCase().substring(8).replace(/(.{2})/g,"$1 ");
var fingerprint = getFingerprintForSender(sender);

if(typeof(this.getinfo) === "undefined") {
$(".headers-table").css( "float", "left" );
Expand Down Expand Up @@ -263,7 +260,7 @@ if(window.rcmail) {

for (var i = 0; i < recipients.length; i++) {
var recipient = recipients[i].replace(/(.+?<)/, "").replace(/>/, "");
var pubkey = openpgp.keyring.getPublicKeyForAddress(recipient);
var pubkey = getPubkeyForAddress(recipient);
if(typeof(pubkey[0]) != "undefined") {
pubkeys.push(pubkey[0].obj);
} else {
Expand Down Expand Up @@ -320,13 +317,13 @@ if(window.rcmail) {
!$("#openpgpjs_encrypt").is(":checked")) {

if(this.passphrase === "" &&
openpgp.keyring.privateKeys.length > 0) {
getPrivkeyCount() > 0) {
this.sendmail = true; // Global var to notify set_passphrase
$("#openpgpjs_key_select").dialog("open");
return false;
}

if(openpgp.keyring.privateKeys.length === 0) {
if(getPrivkeyCount() === 0) {
alert(rcmail.gettext("no_keys", "rc_openpgpjs"));
return false;
}
Expand Down Expand Up @@ -487,7 +484,7 @@ if(window.rcmail) {
* @param i {Integer} Used as openpgp.keyring[private|public]Keys[i]
*/
function select_key(i) {
fingerprint = util.hexstrdump(openpgp.keyring.privateKeys[i].obj.getKeyId()).toUpperCase().substring(8);
fingerprint = getFingerprint(i, true, false);
$("#openpgpjs_selected").html("<strong>" + rcmail.gettext("selected", "rc_openpgpjs") + ":</strong> " + fingerprint);
$("#openpgpjs_selected_id").val(i);
$("#passphrase").val("");
Expand All @@ -507,7 +504,7 @@ if(window.rcmail) {
// Selected set as $("#openpgpjs_selected_id").val(), then get that value from set_passphrase
for (var i = 0; i < openpgp.keyring.privateKeys.length; i++) {
for (var j = 0; j < openpgp.keyring.privateKeys[i].obj.userIds.length; j++) {
fingerprint = util.hexstrdump(openpgp.keyring.privateKeys[i].obj.getKeyId()).toUpperCase().substring(8);
fingerprint = getFingerprint(i, true, false);
person = escapeHtml(openpgp.keyring.privateKeys[i].obj.userIds[j].text);
$("#openpgpjs_key_select_list").append("<div class=\"clickme\" onclick=\"select_key(" + i + ");\">" + fingerprint + " " + person + "</div>");
}
Expand All @@ -528,7 +525,7 @@ if(window.rcmail) {
$("#openpgpjs_pubkeys tbody").empty();
for (var i = 0; i < openpgp.keyring.publicKeys.length; i++) {
var key_id = "0x" + util.hexstrdump(openpgp.keyring.publicKeys[i].obj.getKeyId()).toUpperCase().substring(8);
var fingerprint = util.hexstrdump(openpgp.keyring.publicKeys[i].obj.getFingerprint()).toUpperCase().substring(8).replace(/(.{2})/g,"$1 ");
var fingerprint = getFingerprint(i);
var person = escapeHtml(openpgp.keyring.publicKeys[i].obj.userIds[0].text);
var length_alg = getAlgorithmString(openpgp.keyring.publicKeys[i].obj);
var status = (openpgp.keyring.publicKeys[i].obj.verifyBasicSignatures() ? rcmail.gettext("valid", "rc_openpgpjs") : rcmail.gettext("invalid", "rc_openpgpjs"));
Expand All @@ -551,7 +548,7 @@ if(window.rcmail) {
for (var i = 0; i < openpgp.keyring.privateKeys.length; i++) {
for (var j = 0; j < openpgp.keyring.privateKeys[i].obj.userIds.length; j++) {
var key_id = "0x" + util.hexstrdump(openpgp.keyring.privateKeys[i].obj.getKeyId()).toUpperCase().substring(8);
var fingerprint = util.hexstrdump(openpgp.keyring.privateKeys[i].obj.getFingerprint()).toUpperCase().substring(8).replace(/(.{2})/g,"$1 ");
var fingerprint = getFingerprint(i, true);
var person = escapeHtml(openpgp.keyring.privateKeys[i].obj.userIds[j].text);
var length_alg = getAlgorithmString(openpgp.keyring.privateKeys[i].obj);
var del = "<a href='#' onclick='if(confirm(\"" + rcmail.gettext('delete_priv', 'rc_openpgpjs') + "\")) { openpgp.keyring.removePrivateKey(" + i + "); updateKeyManager(); }'>" + rcmail.gettext('delete', 'rc_openpgpjs') + "</a>";
Expand Down

0 comments on commit 647af61

Please sign in to comment.