From a5c174072990cd83f0ad21457132302dce5cdc20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Obernd=C3=B6rfer?= Date: Thu, 28 Feb 2013 10:11:53 +0100 Subject: [PATCH] V4 keys: prefer subkeys for encryption --- resources/openpgp.js | 15 +++++++++------ resources/openpgp.min.js | 20 ++++++++++---------- src/openpgp.msg.publickey.js | 13 ++++++++----- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/resources/openpgp.js b/resources/openpgp.js index a51d4709..8a0497e3 100644 --- a/resources/openpgp.js +++ b/resources/openpgp.js @@ -7353,7 +7353,7 @@ function openpgp_config() { keyserver: "keyserver.linux.it" // "pgp.mit.edu:11371" }; - this.versionstring ="OpenPGP.js v.1.20130213"; + this.versionstring ="OpenPGP.js v.1.20130228"; this.commentstring ="http://openpgpjs.org"; /** * reads the config out of the HTML5 local storage @@ -9110,16 +9110,19 @@ function openpgp_msg_publickey() { * @returns null if no encryption key has been found */ function getEncryptionKey() { - if (this.publicKeyPacket.publicKeyAlgorithm != 17 && this.publicKeyPacket.publicKeyAlgorithm != 3 - && this.publicKeyPacket.verifyKey()) - return this.publicKeyPacket; - else if (this.publicKeyPacket.version == 4) // V3 keys MUST NOT have subkeys. - for (var j = 0; j < this.subKeys.length; j++) + // V4: by convention subkeys are prefered for encryption service + // V3: keys MUST NOT have subkeys + for (var j = 0; j < this.subKeys.length; j++) if (this.subKeys[j].publicKeyAlgorithm != 17 && this.subKeys[j].publicKeyAlgorithm != 3 && this.subKeys[j].verifyKey()) { return this.subKeys[j]; } + // if no valid subkey for encryption, use primary key + if (this.publicKeyPacket.publicKeyAlgorithm != 17 && this.publicKeyPacket.publicKeyAlgorithm != 3 + && this.publicKeyPacket.verifyKey()) { + return this.publicKeyPacket; + } return null; } diff --git a/resources/openpgp.min.js b/resources/openpgp.min.js index 381c1a90..a198507e 100644 --- a/resources/openpgp.min.js +++ b/resources/openpgp.min.js @@ -285,7 +285,7 @@ JXG.Util.asciiCharCodeAt=function(b,a){var c=b.charCodeAt(a);if(255d?(a.push(String.fromCharCode(d)),c++):191d?(e=b.charCodeAt(c+1),a.push(String.fromCharCode((d&31)<<6|e&63)),c+=2):(e=b.charCodeAt(c+1),f=b.charCodeAt(c+2),a.push(String.fromCharCode((d&15)<<12|(e&63)<<6|f&63)),c+=3);return a.join("")}; JXG.Util.genUUID=function(){for(var b="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),a=Array(36),c=0,d,e=0;36>e;e++)8==e||13==e||18==e||23==e?a[e]="-":14==e?a[e]="4":(2>=c&&(c=33554432+16777216*Math.random()|0),d=c&15,c>>=4,a[e]=b[19==e?d&3|8:d]);return a.join("")}; -function openpgp_config(){this.config=null;this.default_config={prefer_hash_algorithm:2,encryption_cipher:9,compression:1,show_version:!0,show_comment:!0,integrity_protect:!0,composition_behavior:0,keyserver:"keyserver.linux.it"};this.versionstring="OpenPGP.js v.1.20130213";this.commentstring="http://openpgpjs.org";this.debug=!1;this.read=function(){var b=JSON.parse(window.localStorage.getItem("config"));null==b?(this.config=this.default_config,this.write()):this.config=b};this.write=function(){window.localStorage.setItem("config", +function openpgp_config(){this.config=null;this.default_config={prefer_hash_algorithm:2,encryption_cipher:9,compression:1,show_version:!0,show_comment:!0,integrity_protect:!0,composition_behavior:0,keyserver:"keyserver.linux.it"};this.versionstring="OpenPGP.js v.1.20130228";this.commentstring="http://openpgpjs.org";this.debug=!1;this.read=function(){var b=JSON.parse(window.localStorage.getItem("config"));null==b?(this.config=this.default_config,this.write()):this.config=b};this.write=function(){window.localStorage.setItem("config", JSON.stringify(this.config))}}var b64s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function s2r(b){var a,c,d,e="",f=0,g=0,h=b.length;for(d=0;d>2&63),a=(c&3)<<4):1==g?(e+=b64s.charAt(a|c>>4&15),a=(c&15)<<2):2==g&&(e+=b64s.charAt(a|c>>6&3),f+=1,0==f%60&&(e+="\n"),e+=b64s.charAt(c&63)),f+=1,0==f%60&&(e+="\n"),g+=1,3==g&&(g=0);0>6-e&255)),e=e+2&7,f=a<