Merge pull request #565 from FlowCrypt/master

work with multiple binding signatures per subkey #527
This commit is contained in:
Bart Butler 2017-07-21 22:02:04 -07:00 committed by GitHub
commit 93bbf0faca
2 changed files with 472 additions and 35 deletions

View File

@ -130,7 +130,7 @@ Key.prototype.packetlist2structure = function(packetlist) {
util.print_debug('Dropping subkey binding signature without preceding subkey packet'); util.print_debug('Dropping subkey binding signature without preceding subkey packet');
continue; continue;
} }
subKey.bindingSignature = packetlist[i]; subKey.bindingSignatures.push(packetlist[i]);
break; break;
case enums.signature.key_revocation: case enums.signature.key_revocation:
this.revocationSignature = packetlist[i]; this.revocationSignature = packetlist[i];
@ -903,7 +903,7 @@ function SubKey(subKeyPacket) {
return new SubKey(subKeyPacket); return new SubKey(subKeyPacket);
} }
this.subKey = subKeyPacket; this.subKey = subKeyPacket;
this.bindingSignature = null; this.bindingSignatures = [];
this.revocationSignature = null; this.revocationSignature = null;
} }
@ -915,7 +915,9 @@ SubKey.prototype.toPacketlist = function() {
var packetlist = new packet.List(); var packetlist = new packet.List();
packetlist.push(this.subKey); packetlist.push(this.subKey);
packetlist.push(this.revocationSignature); packetlist.push(this.revocationSignature);
packetlist.push(this.bindingSignature); for(var i = 0; i < this.bindingSignatures.length; i++) {
packetlist.push(this.bindingSignatures[i]);
}
return packetlist; return packetlist;
}; };
@ -925,8 +927,15 @@ SubKey.prototype.toPacketlist = function() {
* @return {Boolean} * @return {Boolean}
*/ */
SubKey.prototype.isValidEncryptionKey = function(primaryKey) { SubKey.prototype.isValidEncryptionKey = function(primaryKey) {
return this.verify(primaryKey) === enums.keyStatus.valid && if(this.verify(primaryKey) !== enums.keyStatus.valid) {
isValidEncryptionKeyPacket(this.subKey, this.bindingSignature); return false;
}
for(var i = 0; i < this.bindingSignatures.length; i++) {
if(isValidEncryptionKeyPacket(this.subKey, this.bindingSignatures[i])) {
return true;
}
}
return false;
}; };
/** /**
@ -935,8 +944,15 @@ SubKey.prototype.isValidEncryptionKey = function(primaryKey) {
* @return {Boolean} * @return {Boolean}
*/ */
SubKey.prototype.isValidSigningKey = function(primaryKey) { SubKey.prototype.isValidSigningKey = function(primaryKey) {
return this.verify(primaryKey) === enums.keyStatus.valid && if(this.verify(primaryKey) !== enums.keyStatus.valid) {
isValidSigningKeyPacket(this.subKey, this.bindingSignature); return false;
}
for(var i = 0; i < this.bindingSignatures.length; i++) {
if(isValidSigningKeyPacket(this.subKey, this.bindingSignatures[i])) {
return true;
}
}
return false;
}; };
/** /**
@ -956,24 +972,39 @@ SubKey.prototype.verify = function(primaryKey) {
Date.now() > (this.subKey.created.getTime() + this.subKey.expirationTimeV3*24*3600*1000)) { Date.now() > (this.subKey.created.getTime() + this.subKey.expirationTimeV3*24*3600*1000)) {
return enums.keyStatus.expired; return enums.keyStatus.expired;
} }
// check subkey binding signature // check subkey binding signatures (at least one valid binding sig needed)
if (!this.bindingSignature) { for(var i = 0; i < this.bindingSignatures.length; i++) {
return enums.keyStatus.invalid; var isLast = (i === this.bindingSignatures.length - 1);
var sig = this.bindingSignatures[i];
// check binding signature is not expired
if(sig.isExpired()) {
if(isLast) {
return enums.keyStatus.expired; // last expired binding signature
} else {
continue;
}
}
// check binding signature can verify
if (!(sig.verified || sig.verify(primaryKey, {key: primaryKey, bind: this.subKey}))) {
if(isLast) {
return enums.keyStatus.invalid; // last invalid binding signature
} else {
continue;
}
}
// check V4 expiration time
if (this.subKey.version === 4) {
if(sig.keyNeverExpires === false && Date.now() > (this.subKey.created.getTime() + sig.keyExpirationTime*1000)) {
if(isLast) {
return enums.keyStatus.expired; // last V4 expired binding signature
} else {
continue;
}
}
}
return enums.keyStatus.valid; // found a binding signature that passed all checks
} }
if (this.bindingSignature.isExpired()) { return enums.keyStatus.invalid; // no binding signatures to check
return enums.keyStatus.expired;
}
if (!(this.bindingSignature.verified ||
this.bindingSignature.verify(primaryKey, {key: primaryKey, bind: this.subKey}))) {
return enums.keyStatus.invalid;
}
// check V4 expiration time
if (this.subKey.version === 4 &&
this.bindingSignature.keyNeverExpires === false &&
Date.now() > (this.subKey.created.getTime() + this.bindingSignature.keyExpirationTime*1000)) {
return enums.keyStatus.expired;
}
return enums.keyStatus.valid;
}; };
/** /**
@ -981,7 +1012,17 @@ SubKey.prototype.verify = function(primaryKey) {
* @return {Date|null} * @return {Date|null}
*/ */
SubKey.prototype.getExpirationTime = function() { SubKey.prototype.getExpirationTime = function() {
return getExpirationTime(this.subKey, this.bindingSignature); var highest;
for(var i = 0; i < this.bindingSignatures.length; i++) {
var current = getExpirationTime(this.subKey, this.bindingSignatures[i]);
if(current === null) {
return null;
}
if(!highest || current > highest) {
highest = current;
}
}
return highest;
}; };
/** /**
@ -1001,11 +1042,14 @@ SubKey.prototype.update = function(subKey, primaryKey) {
subKey.subKey.tag === enums.packet.secretSubkey) { subKey.subKey.tag === enums.packet.secretSubkey) {
this.subKey = subKey.subKey; this.subKey = subKey.subKey;
} }
// binding signature // update missing binding signatures
if (!this.bindingSignature && subKey.bindingSignature && if(this.bindingSignatures.length < subKey.bindingSignatures.length) {
(subKey.bindingSignature.verified || for(var i = this.bindingSignatures.length; i < subKey.bindingSignatures.length; i++) {
subKey.bindingSignature.verify(primaryKey, {key: primaryKey, bind: this.subKey}))) { var newSig = subKey.bindingSignatures[i];
this.bindingSignature = subKey.bindingSignature; if (newSig.verified || newSig.verify(primaryKey, {key: primaryKey, bind: this.subKey})) {
this.bindingSignatures.push(newSig);
}
}
} }
// revocation signature // revocation signature
if (!this.revocationSignature && subKey.revocationSignature && !subKey.revocationSignature.isExpired() && if (!this.revocationSignature && subKey.revocationSignature && !subKey.revocationSignature.isExpired() &&

View File

@ -527,6 +527,393 @@ describe('Key', function() {
'=Q/kB', '=Q/kB',
'-----END PGP PUBLIC KEY BLOCK-----'].join('\n'); '-----END PGP PUBLIC KEY BLOCK-----'].join('\n');
var valid_binding_sig_among_many_expired_sigs_pub = [
'-----BEGIN PGP PUBLIC KEY BLOCK-----',
'Version: SKS 1.1.5',
'Comment: Hostname: pgp.surfnet.nl',
'',
'mQINBEjaaZcBEADFRLX4hqrrQmA4CSfwwbtgJ5y65G1EsJzl+vLpcno5kbj2bkXNKQyJ/DKS',
'F7SrTJITrR34i/XfWMS+R+nmCPioUfOMWZ3rW589GvJeTk2TnDrhgOa3Zhd/I3ZSNdM1h5/N',
'k0o4yRNYfF/c8uPb6SgdEdJPeypR6KNH5WUmPLgS9IZSAg8UeuO+6XWhjnckX/RqB0bRK1ck',
'pszm/dbMXe4bqYna9t8vFIPqxLgOCSwK8iHXX/6dp5usAiENJTeKD2FRfp0wvC9oXX2C1frO',
'tkd+nFGcP8s8FlImDk7kcMT66/3xa0yYXX6R3DzKr/Mxd/59AObsLyn/zKRPZrkS8iYTSJBj',
'2RiKscwHjaVjWDnaoHGn57IJep+TP8F3u5so5fCU7jvGdGFf4KHqm8aRF02FMnlzAUWPY95X',
'lvXLW3X/7nRoeeUNqCliz6oNSWd2rYA3GiIQbnnK1OspRMDJX0hm13JXtHJ3/zt5+bRAx6O9',
'qCIRJ8sZHwYZqiRy/TeAB2pcjJonlkRXCKv+hPs5RyXJ4hGxQ4VzWvrsxBdwoUE/i/08TEHI',
'Go1BYO3aDI7S5qdGS5FVEuJOqNpsvQBWTaM+se58h1nzo6AHqUPylhxFB9JD5W3jYQm6Zm1W',
'YLXT5Qv32EZ/YVZXIfmy7XQhRHpnByEVBkTMpNXp/yO4ievKIQARAQABtCBHZXJnZWx5IFJp',
'c2tvIDxyaXNrb0BkZWJpYW4ub3JnPohGBBARAgAGBQJMkJ8pAAoJEPDcjgCyjFmVqnUAn2R0',
'YLuvi5OOvZqOS5gjfbrI5+f/AKC35TvmuvmBC3GPpuhzSSft2YN18YhGBBMRAgAGBQJMj84C',
'AAoJEDeV6MWh5zK7emAAnR23IjrT2QWsgRmEG233QZLFTk73AJ4pNFJMbny8S1N/vKceY7kp',
'0b3P4YhGBBMRAgAGBQJMj9f4AAoJEK/U2aFyX5baWJoAoJ9KiIiH9LQhrIM4WmzgvXliTZk7',
'AKCB8xoELkbOT3Ki8tG1XpgaPamG04hGBBMRAgAGBQJMkSjEAAoJEHzFRR6iRMhYoy8AoJmx',
'mnni59ZQmahs/ExAPR3IVtafAJ0fxBIUhW6RloNFAJRayeCeMzE4HIhGBBMRAgAGBQJMl2QT',
'AAoJELdNBMI86NwC3j0AoLTYGT13jgIuM/mLG8gRjVdXtpRZAJ40Got/r3X3eYzsvw7WPfJC',
'BtD2/ohGBBMRCAAGBQJMj5U2AAoJEAPuA6HOXVToDCIAn15jfxWQrdw2mX7y86OALsPLjHVT',
'AJ9goQnSvay1scdvup8ZrcoIJqgzEIhKBBMRAgAKBQJMjfl9AwUCeAAKCRA7Q+sY7go1x7nk',
'AKCgkaJ6LnJzMJwdCky9mF7q8HkkmgCgmqGB0UvotcbNxl8jGEKlIoZ2/KmJARwEEwECAAYF',
'AkyPmoUACgkQo6aYZEqvgs5a3wgAmnmHLIjeZ7MctXQhJZ+RnF33HWsodbyAuWkwv7Hp9/MW',
'XF8wZ2LiqxKHA1Dh3IH9hCoSnTW3fUj8O7XSlYm/BDCpqpX6XSjMORbdAgujNlqHPo2YF8GW',
'OXpMERw3Osj43+9HjtcNKsNu1zjvpZkMUDLZLgfsfA0Mzy6MaFpclAd/L/+UO8rikS466Kcm',
'Rt/f80Eyd+ZJ46M8MDx83ICBGBDCJ3YDJudmavcVI0PhQUSc2Gf0WmZFm1IOGy8ptqgATGe6',
'W4qDBPN6oIeP56D2k5NJf/t+Hs0lTAzC6TW4g65iFY/UJhsdkspbPlkNW2O9Lm/sPIwAeiHG',
'lFzEcEn6mokBIAQTAQIACgUCSRcRPgMFAngACgkQ/xBWHlU8XWVqxgf/cL2izub7/N8/5vCP',
'kiWfEkFfaw7YTAPcSpsSqCRUZ5FEqtxtSuLWeHE2Ru9IgL4AXaPVR1No1IU/snApyhHkmhxo',
'yR6MQ8tX2GtPLBOkHvpPUB5H9BvqKYpQFVD+7RpX8GoZ1iCUAKRaA/wjt0yshgLtV4PYLj4g',
'9anFtabsq6zj0HWKj6m7GpAWi8mC2D1DLzm5XhI2zBkGneigz5TM79L0NQiOk8edVsyfx5gS',
'8w75AlxZg2tSSVTcJPe1lOLDK10fBpuQs4KXxXWm9pGj5CimhYFqzdcQbO72bpukq01Xivfm',
'FBfrDGfyJ3quNeFkMWO6JN6da2JM84m2kKq8UIkCFAQTAQgACgUCVzT1JgMFAXgACgkQQrIx',
'b3AEmZeQxQ+bBmuHnHq2pAZYvuaG8UaTm+2smak5WZ/aO9pTXnVOBf4NQG4yOy9dorkO+Rzl',
'W87ngoX3EDr2m8Vu1HYbuvZIT/xfTF9F4F/rnMTnU5jYK5/iLO2SFbZ1O5rBtPHjMLFClrkY',
'pb4kuYIN2zKT4fFrPFWr7bXooJdvVp7uzjy7mEFKt0+Bl4vamNSTponPS2RXBM9hnnsF9jQU',
'VixuMDO3ookE+tAh7F8Tw5ED3afftDbcWxkb0H2o9l8nCcqzeMkqYeTYfZ0PWA+mTtsNQQCE',
'T2Obh4n0i4PdGalwWUL1ilT7pCsFA+jzzr5svzYka9Ooq+ixEOR0RrpAc5VT4Ew/xdEQE71W',
'kQv7+VifEBMkj4rEBxmbWOhpKWCOt2OXRJ0qwP+62ePEzYG5qk2J6zGLLsDbRdeEb0jFR8/E',
'SViR1x0826Gi1tf1TGXgDc4mbmApTkW5eyoX9Gi6+WycbDW/ZxwzzMqhGHA9RE1I6Z8XLN2g',
'9XHhHSkg8Sc6ZJ33iExsA/7SbYuCZAnyCH82ytp6bPM54JaL5mh1Jj/i7CDWwAY0opWepUd2',
'JZ0TD7uiyr1vG47X2G8tebeZPoq5k52YWQkfXPLFHl15UxsIaVjtX4zDbWk/daMt05A81NoK',
'tPKfhVnG4w5v1WFBaIMPLlh5Nez/6PiJAhwEEAECAAYFAlIjSkUACgkQ6Q0uQVDqZNVpMQ//',
'UpaQursIX6zfdbWUb2xuXa5Fy2e1vp7WsBPtGhpER2OSG+v6CtMdm6ryWptwRK3G2w3WljS4',
'blOv4SfUwKTp7JtftqhfMTYc0mzbzUOqdTPfGKEBgun4fRDxNAwFyGrtfKWbu42M1LAmwfTM',
's8irZVgfcPXCpKtwgfU/upTaldRoO9s8A+IQK2RezNqNiSrFjtlF1VvBaOSVowwOB3HzODTc',
'8BUolL/UeH6dnYXR8zMiZJq0uxGqWj+zDqa4SsRVWJ0K9/RjWAXsJZ9xwcKxzuL34E61EFyj',
'j8fqcJv7fwxXCDoPJN15wP8mzrL+TdJeev+HtgvWQ4W+Pi14X5aIUqs2ndQcmB7l5tsjx4uZ',
'r8JGPwVNO2U3JkJ5KRvEzx7s/ijc8B+587dIfTaYK741Dcr1VhcyGWLnm4SPQHzXNjTighve',
'10V0wLqCbTQw+sbJSePPy9J8fFOtAIMWmc2/WNjeqkk7bTqx0cKYuanLxrlv4GQdz+W56qBY',
'HteFFjxdmCE4tgFdMbzDIwTo6iGBJdvOnTUgXi5FOWL9uwVL6KnbtNHk0DJZtXubP4jLXfwZ',
'3jPfe17pk2HnzaK7yxkP5DKeYExalGUj8jP74MaUIXQSyDY16YkERU3csMxejqJ0x+6eC+V4',
'vC9KTeW6aD938GgurvnMoFPAarp0BYScXpuJAhwEEAECAAYFAlIjTa8ACgkQdiVFHxXISzI1',
'mA//eT6PlzFAgtwicZYCLou7DtHznnBfMWjw4vPNX5igH0LRftWuDzgok/CDkLSAUa8r3VkB',
'rPLovqyriirbs2r7gRAz6JIgnO/mbFWiMUi+g5g2fkhPpwWBNGUrfyhArJ63p4poQh4rOhoJ',
'ePNKF3fL5cNYnNn+d+sHuW0z2u3XWwyGp8ERgJHe1T2D5qrsHKUYn+ySrGxwcXdG7h/9/YTu',
'6RYgLjjKG8vC6HFL/pRLWdtgEQ2aefYZ+oRW2vvwk7FFNikiJlqSE9Ur9SdT8yev+Vk8k8Kx',
'OKKo6g+hC5aaSZB5obr38z7QHAuqRuaYhnDiruwRjQbbkURkGz9Tz/q7GyJmapE2lbVD/GcW',
'XqKgq4os+UToQL/MsZG0b3jtrkUbLrrq5sID5gWJvBcMTX7Mc0fidTnoTLZ9rgk+GUeEpNbQ',
'4O6H6Ro3Rm+kIuK3Ln0xvSd//4B6hsPWb+FzQLTAOWwAQCX+1Gu11sR9HMlbYGz9JpN32Ydi',
'duWP+yhH+UrDGiPgOWaURygB4dPdU+MPlFvKtZaOPECEjwDVnrwdceu4is3BpuC3M4Gim1cr',
'U05wqzmMh7Ffg8hLLrOnmfkoNT8RfKwrZNgwRl47CUSOII8ZRdCY0EJsLYwGmZhsS3lxKjE8',
'Tl8rKRzaXekkfzk08TV+44J6BK2+gFT0fOEngR2JAhwEEAEIAAYFAlDypPMACgkQVa0UFSHn',
'ZN+ViBAAoVVxmZRoQZfQcVA4hI+Fsx98lDLnL5K8VR9EFsK36biZdlmfsq1mWP4MXvCfTbQ8',
'eM0vpSX1SuJnK4bTDSHKxehyYfbeHDIgVGjhnc0FXunKI8LMJ+QfJOUhJx6hSTl+bJd8jiwB',
'DGrOC+eRF8uvEcoLlfnvD0qgzulird9blG3ANssHXpmX7Lu022r8dmpgdbBWM7vz2cxSOrwh',
'nqP8HC4O8qBH//8FpHJCSARoqHK0QN0XQJSmnxw6jNq47iZ5wQZl5srTioGb2iSBGjH9Flmj',
'qq6dxnNzClrnAZdqmE743gCB9pdf/axlDFQd0HXTjpCefjXsZ3MzvqkMVZ7vQs+QVbVbHC8w',
'wMCJ6kLvl2VpHgzkFMGSEJqn4xyrarbMTi2aMJdTp4SiNQeWArYNjTJFPOzffReB3zzv5XYY',
'FeDVvmf+6BV41Hula9rrXCGOHHDQ+TqHTRvvCtmdEu5d6UPChzyuK0889iE7qs9J1IVgqCn/',
'ztBvI6+7epYwvQ7rzMQWUbQ592I2h2fQc7sX481QpQpu7Gpir+U3OlUbQGBIKZOr1j2DGJ4c',
'G5WzHDFzHr6c3cC4LODxkYGfks013/QR+Ytwh2o957IsKFd411oIjuQC2Rv5+Vm3LtnBokF7',
'izZDIFitOF2djsQdJz8DZvyZaogNV1cA01Op29G38IGJAhwEEwECAAYFAlUT4L4ACgkQOsj3',
'Fkd+2yMLTQ//UM6ZlOHbQ2xfWIXtpXPsMznMPFW6adT/REyQvIrBIB3pRBtgG17buZetEgkB',
'fVcxEZi3S1VGsNB4WX1lVkBVNf5HgobFus13UpJqKf2UCMGkDWPIm8uDGcC4UCxh01GC8JLI',
'ZjbKC8v+KBa9af1mbreAK6rx/rd+hvhXSeRHfM7wNatZmKvLWzomJcuhbML+JW2nMqBFTCdO',
'Ts5V576aycWBKDlB7Udwie/8EJQnrB0DQG8dsVWFb8G4NmrqNj+6nc1y0oBmhyebeOpLDdxy',
'JzwEQsEUL91GzxQql1Vb0ILhzPnuI1rvzhMgxG5LKzrot2XaNHHVnLbPb+9umYb7Mfx+OPDD',
'Z+bOFBUbvCvIIdKcqScpFAhwCOUycafX0MzQoRUKwMs9DeNgdeWymRx14A19FSx7+E0ppEyg',
'WoauvoQLtGJn4tnSjxw+k2J2aV8njfDHwoHjIS7EYMa+TY39jKJEGrPzjqiP59w/ZfVoEr28',
'UJEd0YPGNzYsmI06sVvKsFq9dTJ6Xsv0pROGpbtji4VrXpGO8EresoDc8hiD37mvQFCA15Qk',
'c3og+Lg6UpwlfTTAnR/InjlBG6NUa/n9E2eHUVa886RyUNAn4kLehJl3RgeqnGIQCuT5XsXg',
'4CA3c5wWplFxEFIPn4E6RrTKnAs3PMkidGDdaLaIGbvQpiGJAiAEEwECAAoFAklaLHEDBQJ4',
'AAoJEKR8icvBZ+/vt+kP/2QgOiW+XPdrH9xmRgD12dpOkC/lRlaKddPanEj8wMNO11UMpH3J',
'wrQtRWEryLm954Y2cOjdkXwtEd59ywbegGmRiyalv8fvlEHlgQHXa3kYimcqsSVSspX6iwRr',
'LltR2d3Qk3pgHWP5uUP9fFekISF1RDqxkzKoFcqiQJZt79DZ47EdIdgOrDpJWekGtvLpqRyh',
'uddm5PJjjfK2WuPAFJ9TtsQfbcmTmrMsamYACiXmcgynmDfH2gSAv/JPKSVGSkcM/JOk7EuG',
'mVuh5WDGKr9iObzkVQL2H70piPueIN9FVOKG+0WIlIAwhnHmzYw0/WGjfxX9oXIveq3C5ztS',
'1QMmvEB5OPiUqYhhSsIwu1UzGOO/BNbkx86B3Q5n+Kq/ioyx/0HUHUyHjivzn/B3iY/f1bX2',
'HG+U0wy5mpU4sXiP4q7QQ2ok5J0TrhGKnHE+C7HYTzAnLeN9pWUYbqpEfzcfWnz4kzneG6Pf',
'21xXcwYJsdnfO2vRnmXVQvUBaGAFjMLr50rBoZd9mrXJFLdruy67VXY77DQFq9udhNpa0jV0',
'O91+Ia9vm6OPdjztJGwkgwyGz0Cmq7DWMY7JTCWauDalZCII71TOuCiBtNtXfDCcaKfqyzc/',
'AeQkUUNxz331MSI+88BwSiUKyteWPuTf2B9LJ2s3SKxQMB+5JCLIUYkLiQI2BBMBAgAgBQJI',
'2mmXAhsBBgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQKTAQAQAAM0RlFA/7ByMGATtbsXLO',
'0iKsryhdk8m8I1Up4TMJWNwnBhT1mXfPgZdz7ipG7hpqG7bLgs07AL2dTThsVTLTYW2KMzWl',
'bxRUA1TBr1aL67WyuRpzQ/HatN8Zif6BBd3DlPifsYgyfqfjAEdAqzrZg87+HgswTffSJxjl',
'ihONSvWIGIv9Mz1WQdkD9K43Cw1ECaENtEWD4HMhNXsu+T8Fb/0ODqei27mUeTjwSAxGax90',
'F/0TiZ1s8CQkm+D34NoL1Xq7bOYf6ilGdga0N3dK8xrJY/t8NiwEBognZQtgK1ZcB7Umk7YO',
'USdLLIAC9TECAowzIlA7pkhCWLYa+yT1WZkScwM3QQdjAS9q6RkuXdrgXIiI+URSILeodzDr',
'TYC5OBFBb5Dgo9BaKE9MYuP+ULpduSwyBPTTMJEnujXDxJrByfrE5UOPp+o2lgv4IHYWgBx5',
'zGpKEV16iwvqnMj30AbOmU98bHtO9dEdm3d4HmwXsyvej/Gv+7mpmkkE3rl305NL+2awPj/+',
'/yOLED3lVq91P1ASPxFg6ZQDDDmwNkTQ0JrD6eoDGz8gT36iKHn9KC8ttohUqtlovhm0xK8b',
'ipbzzb7hHrIeCm/kGy/gke7nMriyYDEhc8EqEp+XdmAMfPEp/ODTovpZ8VBsvGt3TfE0sblR',
'W5UoFpjcqfkAQqu9kq9FZn60IUdlcmdlbHkgUmlza8OzIDxnZXJnZWx5QHJpc2tvLmh1PohG',
'BBARAgAGBQJMkJ8pAAoJEPDcjgCyjFmV+AoAnjy9IKwZQ0+54NqTGxzb5ZNGSM/qAKC2xRyM',
'KAjI8VdHLLziINrIKE+sWohGBBMRAgAGBQJMj84BAAoJEDeV6MWh5zK7dyYAoIfANrzBIQM4',
'eDRL0mXMuOT5926cAJ986qQCzQt6QQgn/0Ns7zkigo1GJYhGBBMRAgAGBQJMj9f0AAoJEK/U',
'2aFyX5baJfAAnAg/nOsO6EikUIk6ekH331Efc3x7AJ9o7S5WiLRenTGvUjEXmd02roazdohG',
'BBMRAgAGBQJMkSjEAAoJEHzFRR6iRMhYKhoAmwQBL0Lf98SeJHzYTnWg8eMedEZKAJ96swor',
'dMnqO08tuvRGY/pm/yli4ohGBBMRAgAGBQJMl2QTAAoJELdNBMI86NwCNpkAn2C2YLEmoctO',
'EPM3UzWYPOts5Lc4AJwNYg9ZgDdP2n2qP2b3lAI772d47IhGBBMRCAAGBQJMj5UzAAoJEAPu',
'A6HOXVTox1QAoJgoMrlLj90FZilEwk/Gbk4nCMhAAJ94IVvUf5xxIpQ4y2U1zrfcQaXUh4hK',
'BBMRAgAKBQJMjfl9AwUCeAAKCRA7Q+sY7go1x03jAJ0eAf0skWwKC0Yyl3e1/oVbCz4DzACg',
'japgZAPpovSgTXnhH/+zRCB2WhKJARwEEwECAAYFAkyPmoQACgkQo6aYZEqvgs5tpAf+IDTe',
'AzS3SrXdjG3qBxFlNZK68HUP2B+oNzdOxBVSwkB667ohgKEaFwk8idxncV1hXnYxbEQPFbgf',
'yLsyJbYN7wS1u8HgaEgCloEgYt88ubO+2+p9FDKSXp/lYx4Wd/QMZjWE+jmZjek+1r+JMqiK',
'1nP9auHFvSlIpEJKvsxe1IOC8ctriukBejBDPYHqqjIXNmXL+UsJ7BTF81KSXrD6QRCKWU2b',
'vem0M61XnXOe+8aRF+pc6rfDe2W9OQSwrFtwYX6gqbxX3G9Mh7cj4TwBvxqAyH0yRkd15quc',
'vtIFx1UPFEfumKEEHVI3QhM1ymF9HvM2Fkco1+6WYsWeYB0fhIkBHAQTAQIABgUCTJCQtAAK',
'CRAChoMH9nXSZ0yUB/4kklK8mSci9yY/p+Jp+PVA5+Ts6GysWeOkk9yuRB7vs1jjN3eNus4T',
'0LkyKcVG5hp0tgGpjqErfAfHNq5OI3HAhF6TR6EPWt4IeMAbOJRNljqmG1MGb6SJc6elKaw8',
'8bx8UwsLOtKsMLP0O2pN9EQ9HN5AErqZ7WG+oUZwTB4eHmo60KayUuM5VmX6akurWSaU9Ky9',
'OBVtOXHgxHtmV4ZcszzVWOTpNbFVHLZ4OA/WeF0uP0H8tn56dn/qzMCDyhRv+U7fOnfyr+/b',
'bWtNwKqdVXxA4D6YFTOoAJfY5nZukLL9HDNcRngiOyxj/XCrKRpDbyqJgoV3vJ1MQ31h4cdX',
'iQEgBBMBAgAKBQJJFxEyAwUCeAAKCRD/EFYeVTxdZYFXB/oDxz8Sa3k5AZ85deLqvs2rsUGh',
'aSjEz3ur1SFIiEgIJTlmCiJlhqMBoo0g8au/J/HQzOSvjIcB9wSuevPyWCEr19Nqju1ZXvUG',
'u7dqf68j5stNMb9hyYv6lfI0S/sOFV13RsotkPqI/HhP74wLVGDOvJK8vfardy9BRRchOS8r',
'/Aqkv/Y4IOlJhA73qmhaQ6/INBZ4nQVWkFZWje7M2bMZ7ly63XtLsXqXsooW6kcXEjY08Yzi',
'FHdElmFZzc3k0wPVNWm0BO/442ig42sLJn7OqrttF9/Nz6YVTYAZQwmU/EG6Ay3j0F27gLTc',
'jt5uwZ1C6oDKZ6bEuwfOefHHE5LhiQIUBBMBCAAKBQJXNPUZAwUBeAAKCRBCsjFvcASZlw53',
'D5sH9Xdq0OMT0jGjBg5KOB4M8Xdd3ujH3NHZEPLCndDFAFsSReKWT9JNptbKXP3nHzxxSppM',
'/qxGuIfqGeKkAbs1AJxFPwlLYYT+J9n1TKKpRsjjYL8Bn9LAdLbDa0x5WMT47d9xnQm1d1e9',
'wXAF8IF72VBADGb/qFl+55wBRT+0ZEFkia28ssj6ZAZOZNADUYT1X6D6YMGANG3SBXnUkMMh',
'fjsulqa0okYgDOpy0gvrVeJsZxqWYJY5KJur+LfcHT1K7jhv5YOQzA31+7Dh8xCjhbyqhtGt',
'iTxvYbx4FzyAareDHwcYce027dT7GaUmF32u9hwtFYn2kwCZL2Flg37Qr99ac+ezKqjgSSYm',
'QGt0KrfLFF2/odtHMING8zg9fog+FZsoG/Pm4QEJPKI9EWoRFXsFdzVhWDEZWHYbOaaWJZ4v',
'a4aCxNLLvG9NRhn1djPWlneElhmzjhRykG8Nvs4CWmJ8gS6/i2Fo6EvgHwzYplz5uh46Fdg1',
'B6f0/j1hEMgSjQo3QXTiDvZX5td4yayLwySDBBS4a+QAbqBeGWxSWNVSlAIFU4oZg8whmhu3',
'CCTucJChf8pIiLyIWv0y8NCLs3UG9JV+W8o64jamFj0yvcg3iUdUr5D/vC+PNKP6kkNcWN/8',
'WnDaBO3ILLaF2BQ2+ABz7IkCHAQQAQIABgUCUiNKRQAKCRDpDS5BUOpk1Ur8EACNKNvTVkJ/',
'6JzbgUalfI4gLE8krzxzwDpSxfCg2k9m5UQUCe3DjwSxiOUflAraIbEdM4/RoAVZ8C9TiHuG',
'WWuSDk4fCbp7hs9vyAYz31N+981dGYJfhFB/+aMUFnlXQ8liQXK0LUDSlemMjqDRtYHwpqJv',
'nGhHMudTywW1cWt8/z41qY8Kz+6hjUdJVoejgUYpU6sQHb3rzM2SKjM3ZbCm3y4ogoThaCI9',
'iJxHg/8UzZoaDn83ZBSFcVO2SNrIRlYBl0LioLnoKuDwWCzcD52Iaj4cwTj2wG4c2ouN/KPw',
'nebaLwHqRxL6qJSGrQzAzV3qcUiURyd3aDRc/vZSfVgex4uWB9EgbZVfhPRd+Aswtxs16S6q',
'Nzx4LLG6b3+t7LxslJV5a226mk228ZK8jkCe1pHHrd8L6PQ5oNknC5kaYTUS3y2aZFRGK8lx',
'UtIVW5an9Vq9sexdsCKCTgWcgMGpcS5bnIAkvCpKUVpyF84JJdL9ekz/okVZASI2fdQmEM+x',
'wk8LqGczhrPWfr2nQBsVKTnl1vrNbSem1P9D52fGt+qMKz9kUHwXIUMUOpQnFXiYnOLXwHGh',
'Q3Bg9MnRKjSOlDuldAmFZQkATXIH5esCq6GKk4leKV2Js/rWxHcj6ULwPTS6lvRs2adnzm7z',
'p0E4ewyjkH3xCCcCLZNQTfgvcYkCHAQQAQIABgUCUiNNrwAKCRB2JUUfFchLMhEZEACeDKfm',
'cNuNAEhigjsx22nVeNQpNgYqRkU5FoItt7C4rH2ZDUvpZh3fs7fs+HCqE+2XdxRE+wugFHt0',
'Wjv4Iph5T6e7CWRat2qexsMNh8BB5k8w29fGe8getAVIv8jrhLc4wTFBZb2PQXQIuvYcSl2W',
'gx6yPfosEpbVfxWV84V+O+2Faxfsy39N/qYC5vqpnMQy79QxrF76zfp+I107gZgbkyiWV88z',
'CMOKs/JGbsTZ+GWzBONEKvRvfIalDLvnz/nQV0jYGOAhwPOTDhtagIJnvwZsfdCCYhbPU9v+',
'qFovwDUYdGK+cc7mSq0TX93FY1ItFsYflvkIJt6cLh/0fhgxRtC7qOfqc+KEXHxtpLvy6yQo',
'AiimL7ft6i1BXRSKQhuu2eJd4L6urq7cix2h4w998lQUAunogPL6SXqDwzwx52TZLfaQZRjI',
'PO4C0VpguKw4dKBnLzg/pNlaoYDk2fCLDkip+JEl751g4k0HqyQCPtYOkgpyQapIu+TdFbBE',
'OZ9Rbcv1YWRCDM7RElZ5M5x6SD/cZ0EcsMS6vIDsUJcowNq2zqd+AOMlb/jeOLfTYkJETEhH',
'JneP5HuH5xjRe+vQiHOuvyeLc6ipGa/UbYwNOetbrjHD1rv2V1ensJUfRVnNH1sYiJ06Hgr2',
'bAM5zWbA11pPEVd9Yz3MceUZJdl1VokCHAQQAQgABgUCUPKk8wAKCRBVrRQVIedk3x+1D/47',
'utZR6egAOcyjityyP9qtyt3l+HJYVlCxVNf9n0Y3va2qGmNn0sKv7QfCOfmZRL8jusBJeZ3I',
'57HOcraygCfAkm5Gf6tfVHWSNkaosoG4bf4rV0LLLwlDAZIxxgts7XoQbZReIyAEeK30M389',
'WM8+YmHANKWFdHQDQT1/0PK/AiVDLevPHyjx1u4tUaDEHbZZ+BGpPbIOhLrzX3Ca3lMWxX7m',
'xdlo5dpmwGkftfi7C3HlFbJTQVDSu5dvAOQvKF40JYUAdhjwkIYUrNIwCe1whIYzYPmqaBt9',
'hfD9Xrg4mDZfM5GA18b9b5wEANgLLzcbd/y2lHdLAytMaIuRxTc0LukJMyhLqlp3cDtL+H++',
'PKfVeV53DIsT3ygNieO883wvFfAVQyVx/H3s4j2KuZWXJ1NfpKlaKJxAA62ikDQp7vr8A1D+',
'4+inx3dd9VNqr4vpwRWqI759CTue4e36RkqedP7v0NWxzVlGAcGxcdVuNoNUPj5ZfNve2I+h',
'rOl3XVxTEKCkOt154SRD7Myx6K4EmpDLZ95C0hWnDgj1VwsOALILCXuwnyyIQ7nqzb2GFjEE',
'9CI65Vwe02JC4KSGTcrzuoSZQMB9yE6lrZw+U8GC4lMK1Q69+GZ72ylo45FO+7nyAVdOSFPp',
'JhUGaD1lG6q9JY+HyKhyhYAkXCVhQb3qpIkCHAQTAQIABgUCVRPhrAAKCRA6yPcWR37bIxH/',
'EACvuQOUDgoaO0eFBexa+IQBCPuKherPqgkzSW1C+gRkSkD2ufCHFN0AXpSimD/CCiX7ktG/',
'n+OczXEVyLwsFrrHRLDo+oq5rEKagH9aTg2RsGsvydFpplM7sreBlp7Add44Meu9Em5xPUDI',
'vu5fJcG1JZrwB7zrzPTC4SwgvWCbMVFwD4t0mCMm0jPR0LLw3rTQw7scpp4uscLXy9ZvzCyW',
'5a9ZR0sOCQADwSvh86aYsrakHcxHKZ2QAmUDul3gtzS5A8dyoPFv+nj9TMTMH2HnppcXcfR9',
'wWoL1MPi3+2M2D/CBhewjnPvdkhQANpfIRnvkyJeGwVRFAcmqod+H12kDK2hFOeT98NIp1TZ',
'RsikODYzVtnScWV1GqrH/rJ6+eo9TId81jDCILDQ2StqqMFXd7Gb2H5HrFSS4Nv1CNOmYRF3',
'66DFxGn73qf0rF07mYz4t95Ts7QVwwJdhm9vjdZhYZakHfm9imuwZWC8HIad+G+IqfzJnOwu',
'Ugi9zck2ecx/4qU786UJTnLtOWkbyvBfezInMgko7dtS2FQxoIzJjQSX3uLPJqAwcIpBoXdd',
'1vQZ4D9Bok095sv0hCm2DeuhMSYqE3lnMBakmkJWIfKxEuzcFSagRkPBGPlw6BY3ernj2i9j',
'sNvDZrmGlP1SCTw4atSosT9PL21Wg+CNMZH/eokCIAQTAQIACgUCSVoscQMFAngACgkQpHyJ',
'y8Fn7+/76w/7BZk816oLn/TOhTWchWbW+EB67NFPGkUpRU7Ff7NxVA2v+zW/EqZQLp6J555q',
'0dd4BGAKj5b3xxCMRZG21ecuuWbLTucr2ctHPySYhTIjDRES7d8uq6wzQoML7t+MIAN2UtEa',
'Or+2tIV0sRYsNn3/nvZQaQpPuiVA0nmiHC+h33SpM9LV9WQuoRoMfWxg82CYiPb0m4vBDX19',
'apa5u/wBudc7uQZE+5xSMhktctifQHB1EogRGGb+Ju/dlB4JpqsX61fFchzwYAj57QrgnGqA',
'tUtrlCCyboYOzo1MMjeiBLyuKv6P5vipEPb9IjdE5EDI6fOJCRyBcceAyW7zId17gvf/b9c+',
'sw8jPeFR2HjfRqg/jKevhGPg19I9wX/JHGpZdQdg9Ra1is235XKOpgZhcZ0cPXlCN9qvzN20',
'BZeFn1XDSvF//pBPIL71psYJLKh56z6HUUSLdMQ/Bzl5jOeb/09VYslmksQt2ap2wBeMlRms',
'g9/H49X0RUtaVtEo0fJE0ymrrtFyOqZLxRGWxKylN9WUbvLOlPZ1wJ7ygvqV88y9WiQ7VRUd',
'+p84CxzEH7f7gApGAJUVZDs9yeoJlyCRa9pU5VdeiMJXYmep32XGNuh+3g861yNWmNhNQNxs',
'Ilmjjla+IlN8W8uRpvavtf9zp3InoO8A62BnnPY2mgJw5H6JAjYEEwECACAFAkjaaZcCGwEG',
'CwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRApMBABAAAzRGvID/oDXwiTuS5YDVLqaoCQkBD2',
'fHuUA4NZyUglkqUHlajshy2X++TCdlbLXLdAWTBvBQQ9MeyRAa3QgTOBP468OMo7BPs6BwZq',
'dCkCn/v+5jPSUHASgWsIPUjQRvnongNana3XtnsRFEWn/WGhNd584zRYBlR8urvCAOeukjpN',
'gaQe5uPQazFWXVqPUlqicsDW8PhjmSsRD65XU3mRUW9tvOOwsSWevSwXA7Swb5B1sQQaHEZS',
'9UB8mLpRnZD+Pev5Ccm8dXCLbreSnBkVJYSAbu+LkKSW7+qFsomvGeLDHWbdJDdeP0/mRu9A',
'wYNmknaQAQ9Duwqj/uqNnZFbUT9SDz+qAp7YuJZrAGyw/Yi7xZqENMshmZG+TnSAXYeqrKm/',
'CpC5oKZswEa5J0F1KgPQRFGrEu7AhgS5QI7deXe9rivKhULSEb8tge5U/xs4cXA3dQekNUHw',
'B3pt/+twBHAY61wwicbl6KSsguZUpANlOVEPirEFt+TqAOKGmD8aGl90nRqS5jfaxoSlydjY',
'ACg4sxxcnXggvJITyjkKDAF5hTpONceS2JrvgL7VaK4I1Y5/tIR3zsWL7VxhbcTZHtbfxKbe',
'revGb2b5JaFn+W1i4TyX2XgFf4JM8EVjofeLfDuV8L8PTzp5DBOJ5VzaduxChn/53+WDYyG2',
'KoGbWlbxUjjhdLkBDQRMjqDCAQgAvuI7bbA6k0agNge7akRDkNjuvNyQrq6GtzY/8wF7eQ8i',
'cHXFhj1zk3DZvL5JFr2Qr9GIUq9qYMCMkmabkuO1EXBTfO8hJRShNkLVXbmQJUbNZ14yZRY4',
'tQ95H8y+Jm6E2ZGgn4qwF8IeDVgziKToGlGleeaj/RWV2NXM+RC6kOTocN41b1fLV1Z32QjZ',
'dKMTPgraOgAmJg1msDB+Y/aPx0lU5aYDGmtE0IdE5O3nqBL/J29gbkAdrGcO2HEjyLNo3qDj',
'rfVcQRWt2bGB9K0ko6ZHPRFh9Nn7WFMcEti2gtRd+wKPG9VnBNn9QJN1evQkLKDcPNbC/obj',
'foKxNN66TQARAQABiQIlBBgBAgAPBQJMjqDCAhsMBQkDwmcAAAoJECkwEAEAADNEoMgP/0A0',
'/Vz5LpQTXNAU+H+1vTH2d4Ao4gXp1sxQd+ncTekOKu7BIPr+6iXcXPQBNNHNYvoLGpfwr6b/',
'wjnFnEl6bDg8YKJ6nmfT6QYxHb0YiSa6NoODcmoI5DphswPfAfxZpmAgwHVMxUY5ICIH/uyG',
'AheM2y6TDyC6+fp52VIrjBO0FiJ1n8x89Z07eCZrIJi5FSR2Y+Cm8E5yAZFWiy5jcYW6pWVd',
'a4/EXkddVL/kUhpWyC+SWBzIi16d3Oj7b+ABjROxNENsY5KUAXNapyHQDe9k8vsA3H0YrDqm',
'vPZykOXKMB+kvcT0Tod1SSCo9jcdKWffJaMJkftbtJVNLDlpArFDMMPM4iolfsycDHl/bEFO',
'TZMd/YKDLjIk4XjcSwfabyZSAdJ1RYxHmTSz/Y6RPKJoQt3bBNUVpYY9r3aTfB+jRhuyNewo',
'dy2tMxToHfyyjZBoe/Uxa+NFL+Ije/6yz/L3oKcrlW0IuVnq+C/3xgDP2yVdu8b7yavKhrtk',
'6G5mWtzMxJ4aVcLJz/z7CAIk/GXFdql8z6sdyID5eFwD0f7/9sW+WeR/bCOLdjK4kunpGPXh',
'Z4CGczXgWpBNlaS9EHHLSjcVY0LhIzCGM/wRlfxkFmvYlMRaK8sTPqHhnyhyAbruX8xLN412',
'NmtuGVz/0Qrq+gdN7uRNOoj/bnV5+QetuQENBFBQ1/8BCADMfFdRm0eyB6fKYA/GHzU7AQo3',
'VCcqT/ZLRKQ6hHIGf2RPk4H7PgqwTsGFSP/ugnCW67M+iivYQxT5lEH9iOUzLqd5jG2oOu1F',
'uNSjcMQt3Br6KK3xOS9W2GfwD/9hzDDW7PBr7zVmlKTPnEboOLuoCrRBKm4cKgPensn/nSE0',
'RasgMI9vh4ECXiuMU5eJkvvIiA1RuzkjSjbzT0kj0hr8z7kV+zTOCrvpsSMPbsO2ctigpwqR',
'OKMZeAfZVxE4uECC9jR7jp/OoId7dC9xH3gQnmKBO2j+GJC3OkQQCixHp6hE02KNO3DPcMzs',
'xDJ/MTPczKNZcczELnsc+Ofbzp7vABEBAAGJAiUEGAECAA8FAlBQ1/8CGwwFCQPCZwAACgkQ',
'KTAQAQAAM0SlQg//dxds8eavW1ku379sHv5KriwxAWnjtnn82oGyw3VitE6eUCKQlu3NKP4y',
'JstXAocrOSJI9RkwyxeyNnPYyxdoYcCeOSZv0Bp/CPqfVmS8lSkMvoC8PDvHS1uRSd/U94Ea',
'onDFDJk7UHXyWLPlmvEdLzYv1VFgaaP3osEevLIdDN0AirBWqsog7VTxQ0McuEbdphi/DgUr',
'yq3f0TbzpqTofRQSmJPdHDhpKraAWyPRcd3/zqWQD479S/4PEP1TB0ZhHO8pfNS3e/ao3LQ4',
'AV+P6lzBaSaXjxkQY556v//BXlLfYO2PDEP4iruBOsKb8Td1lpR/N7bPNDhzaePpZErtREbc',
'URzHfdM9WAWx1b6YC+nPCZbMFayrQySDiJjKRl7ECmPbr4Rly+RZUTEFdl8IwrStw9Tn+K0R',
'WZznQNXgHXub1Nzdm9JkoOysckteuvKX4iD/OaYe2TpZhb+2vHbK0/FcYcBTCmKt+sPDXJFB',
'j6aAoHsnLgJhAD0HjvTRQ1ReWJw7/GQXWAd/BmtXUugDhuRjGa2E4QNOg5LFrHzPr5YzAowb',
'3BOzDfzYf/NJ+K5PLunnydRgF8+Ii6b8mfgjxIKto2ktOZI2h/qMtrfoFTJrbC8B0MTnXWLG',
'vhHfZMqkMbV0u3gpCWTFlfQokSNsq5P8EompQ4LXF5fPkDScFFC5AaIETI6ghhEEAMVT7o0p',
'KTJFLMlD8UNPXrtvcXP+GMKpqINkhGeFrYLee+xjDUKWA8QTpSvLWLC25+SR+QB8FuC++W37',
'KkyPt/qGSdFd/KbUg276LGZwvR4qY2lYfkognSzAQP3WVsFnQyLdEl29U5ekKUC24n/iBr9t',
'aegVtgwbIwTT0rUDwUrLAKDGjtx5zArRlmmKjpQehHMMeYZ7ywP/bfFfvGKuiNYX6xTOVjXM',
'nWriIgCMClJbrv027WeYysCFKLHw1TWKIRA7U14+hEPn/bofekogFdu7CvZfgrl1equAWbJb',
'JHrshFfFKAB0Lt+1NPswSmweJFMD0tw/VjFiUAmZTyciMI+xg+IwjbbtLPRK37heWO+aQ4ka',
'GSvLB9AD/A74voTaSfRj4nOblB6GJ3QmNZjwE6/aXkQDIoAP8VsEWd74CNnqD1wo4f0ygf/4',
'MqX+1Umu2sPD18TL9LSgtenXvuydr3Mns+EZU+JAN5bpgYzNNQ1A+nQDdQkTxUWrrv/cpGJi',
'D/F1mWIm7YLGk8FgsFsXiVHtCtV+Bj4iqSNYiQJtBBgBAgAPBQJMjqCGAhsCBQkDwmcAAFIJ',
'ECkwEAEAADNERyAEGRECAAYFAkyOoIYACgkQf41LQiDQqqzTtwCcD26fPDM9UfUZdLXyicKR',
'aqszp/MAnR6MDrZZQXueYWZiu5qEbTxiuz9rhX8P/iDuYOsnu2cqr5QM6ef4qEpYpEklGDDL',
'kZtqjO8SHfKnw02u1/2or5hSP1BgTI2um8mEh+wHTr5Lk0vH0tIQM3vxHK0yuZPMvY5woZ5Q',
'si3NiOkhpxTIHm9qgPXHUHq27enklQkFMZ8H/ZOeU5fs3/RbBUcFWctGDbTnH+VLieeZD6qf',
'JNUmimIuQgZ/WzofdFIN2C4LbEuYn4G2guP9SOW15ODQqTblc2hq6s9haHI0q66sZVdNlNF7',
'DGBMByx2GrjY+2eg0+CmnoyWWrWNLzD0fZZ76BJADv1maII2LTTbMeCJlX9+3lF6WSE9L//j',
'az4aLBDsEBu4uhRNLoLRhnf/49WsYdszSeMit/dws4NgccPh/adg5htiylzJ34EvGSvLyp+0',
'/w/DSjr+CzA/YE4djj0cYb4u5+ieGnQd0icH4jbSDuvDsjBxAltgwS7s8nC3qunBnyQkGOkU',
'SJfb9aDyirWe2tTofeQvkVYzBhDoFYJW3SUhvgfHn7MAt4ASnZPPuoANy0fgPVlTT5DJMO8a',
'vyCBODhxMNxy0R3TIsDKhJC9Q6nK9sqdrjPESQmUB7rGmBpgsehAMUel4O2PunzqpbWxbJhH',
'JxWGLfn6H7OcatvQBZ6JSEmOQeKC5S/VI0IKOhdWQhnYVIV2+NFEV5YUDzQHWfQPWfKpXC2q',
'kYaxuQGiBFBQ2H4RBAC4HzyqrT2LBSPd/TI5vGQRkq4hMWkUpauNfk4yeBboSX+VKogT727a',
'wjqK3duT+9i2tJrXuWtpcSxfd/fpxzBJFKPc74VFAxv+qcjhpcFPqGJqi462ZJ95+xS3OgdD',
'/APNYbxhq8G/kCTajhvFhJa3vc44Yujcx7Jfrfx2aAPTcwCgl/+rgacSHreqpbvA6Uj/hSyk',
'A/kD/2xzJQ2xk4qLbgI0GR8qUJyD8N0dmnHBjli4LkBGDTfdqGgIF3b8dtTqz0L9KXO+/viM',
'tVC126CEeKImRfi2MlPtb7G5hMUUTA/1P6IaQ8shmLRZm4Gf1BBW0BD1cgdZEDPLkKH+USpj',
'sL1M8EemPUsbjN5g4iVNI7oAh7e46MlRA/4nYV4vSw+4I5joT+ulv5T7bTDqB4+bDI7ErOI1',
'oRiy4wuEs+M5WVEfUln1RvZgPPKvq2/QwcGbWzR1TMeejD5u2lPqiKoyzm5RIAsJoRWaF3cy',
'dzT96ZNDddyExauj0HAc89DPdmUQFkQ8NdrBXxPUvfd9MZfBzeQPyYqDO5Ky04kCbQQYAQIA',
'DwUCUFDYfgIbAgUJA8JnAABSCRApMBABAAAzREcgBBkRAgAGBQJQUNh+AAoJECS169uLmF75',
'BR0AmwXNQcxRgqEtu60/P5zFHgO7X2DPAKCWVKYZa+tfWZK3i0zj7buK4dc4Iaj2D/4gLUyv',
'FT3dVMF2HXOsrvU13b51D0BgXt83aPGQr/qu21pbz9sRvF3c8ZHNU1xYDrl1hNEUZhuSZ3Pq',
't/PqlAB3QESGoaaD6Gs5S7HWA4eMDqwRB9kv6XYp+rmvaoQwOUkLkdt4s6yD9oeaiqQZgzgJ',
'RknOfw0bIBqlwgtJW8Cua2ck5DXU9AWjgSaBKtNTOp5sTHgcBpY0SUxLVKxKcBojDGMdTee1',
'JMAPFja2bNQmXpjw1D3r4uvTxK926LrMpgOD+2FCwfYOa/wwvMMfV6XgZGcFBorQg8z6FlZB',
'K2wR+IhC8CItpA+VLeqDNIYQibnm9bCSi7letvawqwOn+i0olRhRZjcvEOwmAXgs5FJ7ZMFj',
'XyGI/ubI7txwdxA4/VyqmbmlrlKDOzYkeqoVSPoBbguow47kaVXqNU4UQ9FabxH1OI6//VMP',
'tgwDe0QXzGXpXMq6ZFhLyzvYED5hSqR2xSClPSoKC7MlSG4KzbH2qBEHMovEKDeHYPuItWOb',
'OmPbl/gtsBBfa0o2e6IBa7Q+FO+GMfpfxSV0r7dmTgcYeh01K/9LxpjVjhItqHR74EZa8PLg',
'iRKySlUX22FAyJhIziH/IfwTRdpJMORcX1PnWPTcylcTQWFkZRAas3G4DtIJCKA+TPvI8+nf',
'/1t7stf1elT8KFXsr6fw3K1CQRntg7kCDQRT/iGPARAAur2r9TFFGdcr3AGBFC92qPwGUTI3',
'inFdFc5lFZ6iZ5E/CAZXJvxfnBDmKuiOQVudzgzvTx/EYYUnbGwVVWSwtz3LV56/szHdnwEr',
'm5zmO6MarQWdiF6io5pLyMYngBegTrJ/dGq3OpRMf/sWhqPeN3WsIQz5rk5HLoiIQb8jO1Io',
'TbrUX3zXU2eFle90n2NZ73jkMKt+n0efdgRtN5qkUl3KRcEyb5ZWQn72AZo9DKqk2Kk7ehfG',
'Tw9PO3d6u8NXLEnub8qfaPQTqHfFR3k2hg7A6i8iAzhAxjUueJxnL6RNk+O4KrdQNeHCQ6g5',
'2zVxKBajISfz36GlwmQg9NT4meARWhDC1YP6EUMv4Y3zEL1OgD3irYR5UeBOnrGj6udO3ZCD',
'18JRmtcDEkuYGrDC5L/C6Wb1KDjRlv6YMk/Yx16ARfN9yog9/E0+xNqtRpa4SPSn9q/F3qtI',
'h2cZP+QvT6fbQ9MVnFtY6VqOhhzPVSoOThz8VP63OVGk9qA/JSFdfWl13Hs5mlnvj9219Vuz',
'4pelY84pgOkO+oyNnJ/e2QlJOeX8rFv0mvBzFDYUMCzA6kANWV5AplXjpNRuW2xIyfmu1v3r',
'qgVne8JnNPVc3MO3Bc3Qn7qBOuDwNRQIJByJudHlhg1F1AHoXuDZVP4PFDGFrpBzXC/WX3iS',
'MpjGYF8AEQEAAYkCJQQYAQIADwIbDAUCV72DRgUJBKyvsAAKCRApMBABAAAzRClhEAC7HN7Q',
'MeMeoxwZe85k5b/JIdNDe34Zs6JR/s7vB3vjGx2xBt8ScLEm6g8/T/3VXVpV0xXP1ufHwl1D',
'wwUxTEiDv78M6Vwe/vTz0C2zkMOcDwQ3VVGpACnsB0rAAsohXS0eK18Xjy/iNsMOzmDSNmvI',
'zYaZSkoxjbw7zpaCp0JQS+zUcUrQ4dfVlAKxqXC3xCpePKbzXU+KjZG5MH0rXfc3xvamW3//',
'0G22UML6tVZHZx2orNWo1T64t3oPfsowWWMjFZ7/yQnt5YrvQEp8gyyOIuSBlIEtGjHkbUAY',
'v/KsKerhxX0BlfR6c6TAqZHYGauqj0M/sZCIB9cja9PNqNgct5wqpvTIHfculx/aMUPtTJt2',
'LBKZwZwY4AR5E2UarqhhqqtKQMbnLm9QiilQCMhvragdNdS+zwdpn3UuKwhSq0DZouMwHVuQ',
'PBcRu5AnI9sOGeWraiQ3Gk0+qyMJY6DOeK8+5bsYOpBnZTUEYi5IxAsN9kwNxpsf7V4IuFXt',
'/Bovm5B6iGS85sH6pqtbT3skuWDWJvQzee5JZjtARRO+OJl0Ppa+AQQSMrVcZYaq4R2h3eOI',
'5J6qRTmTZPAFs/HDiE/KTL0CeAyH2bBrRAh2aWd/YhtwY3C6yYr1aqOQozX1M6wxswjnn8Ed',
'C74BmDbi5TMZG6SLxqVL+hCB63Oz94kCJQQYAQIADwIbDAUCWL1oDwUJBayUfgAKCRApMBAB',
'AAAzRFfAD/oDkNZ4dWs3jMicA1mMkO8fb0tILtE/4DuSMkEqYsYrZAxFvXbpjbWLb6yhsV/h',
'imceSkGN3x3Gx8UkLdGgqnNPkdm+eEJiOsF8Jmar+mx3y+tCZ1vrQwRzELKqI7cpn80uzZWu',
'dUrpLVSHl0ktWfduuGwDEnKBVCagDLTELullaV4eRm+bxey20Y9HP4PYbRu0iIE8YdI76FR5',
'yh/wnl9nykiY6842LqxZR03Pujz9Sgn4nO8c9TIlSKmbaQalfR5K/R0hY3a5RfIvjTyzNPae',
'TqWeMizu7m4tpqZax2d0uZr/pGH7G0NqOLeJiRnslTXxXQ8v0uCjuKHgANu24GXMmc8Or6kT',
'VMelhb51wHEyi3+PLtjisAZGvJjRWeoHbu81nuDL5ZiVY+sAjhEPY7ockS2KLvSgrxiFLK52',
'LN1UWXUqBETrxG6Qb5Qp6Y0+wBIePIBzdjuHzLIXGcubKJ22erxzrFM7a1ti/QrBEv/XrRkJ',
'cLZxEqEJCbEDBkhB3DBLfAMSRsoTdCk6JbYUlGvN/U9SZoYu8jiFHnL/0Zbnn0xKFYuzwaWk',
'aQoxdjIrFcedP9wqHBKc17TbiwKegzZlAu07DamNCSa9urNDZ8ONlXF5tD88reIsePyU3Bnq',
'XtlnZj8mgwfIek19zoCpQDT/iuK0rSoz707L46gevbwJxokCJQQYAQIADwUCU/4hjwIbDAUJ',
'A8JnAAAKCRApMBABAAAzRDFUD/9ZFJsK9hFxoPGFfDZAkMnM2j1XiyYM3ydonLGTzgGNfUAn',
'b8YxZoOPteYMokji4ecg8z5ceGiTR73jdZZR0dvRi3l9b/zjr2y5wBF5jZlgJmbwYt0CGkd9',
'o6ayuj3SV5hQcsuaMS4zlqUXQ6MCcJcgY8X73SYn1nIjWUMdlWWOlfdKah7zpSavMO0fPY3M',
'jYrQ4cWV6DxRghTveSpVLT8zd/Tpt6lyEla+BPa7p4m6XiXbpavF9P5KH0p3Zs3vlfYxCL7f',
'PgX8RjlVMSHplgTnga8DGTrTCuKQMoRhUXyqwF3RQHQVAnFFl0re7ebFkwGmAkt5XtHUkNgv',
'U9DKqfqWCu094or8dfjxM39s/4E8C51RO8RipBGZhJlJVWjfKdWtkigSIqwCLg8vM1QJBq8d',
'mPwDOwKcnx6DDrXAKRkrQAFNRGfeK0dH5XxsNRdI94PvRTiHLH6qcvlxDjWB1aWffvKjEcEz',
'X5i5LiwzaZRtiHwaX7rTB4s38cEDCw69+hH7AzoWZZY/cKhTIxhxXz3PZgXJhRpaSy8eU3d1',
'rh+tn/KV0AjnMviRCzIjAsjuUzw5F+5J+l1//KjX246Yn+0rWKgYj8sN67QOR7EO9kF7Xwph',
'zyPPbUy7KiseBJibYV/cgKnpJkF16oofDY+fnuoIq3DcA5mmyR64F/l2yiXAabkCDQRT/iJ+',
'ARAAsZijXS+AmD6UAuBKobuLofTE79Kkqcxw/yDY1GuKo+xOum21oO3K13OuXqTdQkUZYeh2',
'ZELtgBnbAKGdEuBjSk9bNPtv5i0+FFAvuFM68vv4jm8s8YSx8rUaXaTRyZv+84yiVW7cpGDs',
'BqkVk2+2Mb8xyQHc0PWsKpEOoCEMBV0SpzTcsvxlohPefmpL4TkzTs+rVoAq13uXFCuqlPG+',
'i3gbFv0YxQqPePHHOaEiBfHHeHJCdfUmsyPNBFiCvgU8o5+0Uow+H8hcqJD4cm4gy8OemWEy',
'h+KwBv6Ap+Cl72chW7+64dkTMrgpXIqYq80wxbEOglBdCCLWDw9BLtYrD7r2nWgQQXM7hnQP',
'DNhhb6nVSlUODfDEdSZAyTxEg/fT5i5ZnLW4vhwP72DhfHuM6IGpxqHxxTq5/4X8vcgeAf+o',
'qdQBpfWIH4htpJYap4JaN6EptaNu1Z7V0A+kWSp6BFndjVlnFuAerVTLIPY6ruHAAxrSPVdD',
'iiAHwZU9RAWJWFJM/NCQD+l8QQ3djutv4s6XmWJCtewneui8f5looTJTaAD97ucki0fNNRDj',
'0HJIBeM4HqDa0G1gkck29l04r8CRVrzSLG/oZ6wCibthN+a43xDg4JLaXQAImBvacbQ1PErt',
'IzJaIiN1P2yJZ0pa26pcKsozRIwhJhZ/ZwSM6PsAEQEAAYkERAQYAQIADwIbAgUCV72DiAUJ',
'BKyu/wIpwV0gBBkBAgAGBQJT/iJ+AAoJEDX/U/iSc289dHYQAIVLcUpdhs33DTWGflT2Xfbm',
'K+Tussg39L2c6pN0EIqM7+nInHdAz/+F3lcyHAAHUmM9sc6b+419IlYVRrlJ71OAixlvailU',
'2bPSALNvbYLfh9oTO/co4LxZ01ON9giFg/tKbI1B5CjIVXDezLFoMqN7OS/TfqieSFb6AKuY',
'1y/aWIZfO7WRKbpfrJOpWU2uk/r6w3EhC36YT6y9tQE7PJbyh1nGqNWftRAB5jS7HEyIyXgl',
'twnyY5pweqfXqp+eCDDCt8na7T1zZl1Wt8FPNPis9KgRyphRnEJLFB4G5nfvMVl97NnTfITB',
'yUNdPagqmxJD6GvqN1uWU2cVFpP+mZEjGC37zgq5lbCevm4IjGhJDlrCi/u5LIr+brsF667p',
'9XqXb3xFiyVasD4S+MyoNpgtPlV/u0teKccWFPBSi23GR+SSdylwZ6mYAYYKILYAsfZKQJYk',
'Izw8+e1R05myw7PrtPYIn0XYLZo+oV+kOVZT0OjIdNEQsLdWJInxYDCAJMiaJBB7eGFREogr',
'Q0zCVwK0v+48C58M0ovoAYIrcb82pk/5wjZSomIl0Lu3vz7T72DzHwExQ7qiZCdZjrxfurzI',
'yBjuhmJP6l0VduBRBxSQ8mGR+QMAtMJq4g7UdUipAT7A7+/dF+5MFUgmrjrFVIPH7I7Faj/n',
'Chq7VXTpS6asCRApMBABAAAzRA0jD/4o26XlJiaYGAf6DtixejEXpj/PVRe2cDjQkTCnxnX5',
'ZDDioCVFm0B7KZzcftGimZexA6La37SgDffbfI0dLZGateEeVgJa/zdakfjd8SG0HJxKHXBV',
'G5x0G/0sWL9uBTtGjUGp44Y8zfey+h77V6KOOO1+rBnYYIgjsD8/P9OsIiHMhlSc7Mh9g4AT',
'ERdWNIu52SHsWtNyqO7iqgWHFEKGfHPC0lCGtFGDR3/8KrQ0eeZsmVUM2W5wOrbjvaPQAZSM',
'5YHkTQj5HmlBxZ3kHJ8y0HMjJw+IVheOaEkX4rTcOkt+041IeAIq3bC/kWvKgjQI4NAiUnXU',
'hJC+yYcJH01fDBbyYDH5ORy9TYZX4WZpIbP+/2WThMsydAkndmeDsb2wi08w53a4hEHnrlBW',
'hr18+pMtkhh03wgrZR982nacCHnX5EmQzmBJFyl0oYMJjPSKthzuHcDD3ecVWEEtqNwOP6Yv',
'47MgkFYn0QMYlocyw+mFZml0O5vegS35NrI05iTyuv+yo60aHDGSUvovXQ62gbUcfxLQcBt8',
'5/6wyOw6bilpPQpiDFuJuNq2W4eUqZjFQR1oxr60eXyh/8RKjP++JwgaRHajHFvLiEvxjUNF',
'daii1hRGv0OoewDXmLUjZlAfvB0yYsUTYOQfyn3ghn7pLRrsmzulk7kiSM529Sw+iokERAQY',
'AQIADwIbAgUCWL1oPQUJBayTvQIpwV0gBBkBAgAGBQJT/iJ+AAoJEDX/U/iSc289dHYQAIVL',
'cUpdhs33DTWGflT2XfbmK+Tussg39L2c6pN0EIqM7+nInHdAz/+F3lcyHAAHUmM9sc6b+419',
'IlYVRrlJ71OAixlvailU2bPSALNvbYLfh9oTO/co4LxZ01ON9giFg/tKbI1B5CjIVXDezLFo',
'MqN7OS/TfqieSFb6AKuY1y/aWIZfO7WRKbpfrJOpWU2uk/r6w3EhC36YT6y9tQE7PJbyh1nG',
'qNWftRAB5jS7HEyIyXgltwnyY5pweqfXqp+eCDDCt8na7T1zZl1Wt8FPNPis9KgRyphRnEJL',
'FB4G5nfvMVl97NnTfITByUNdPagqmxJD6GvqN1uWU2cVFpP+mZEjGC37zgq5lbCevm4IjGhJ',
'DlrCi/u5LIr+brsF667p9XqXb3xFiyVasD4S+MyoNpgtPlV/u0teKccWFPBSi23GR+SSdylw',
'Z6mYAYYKILYAsfZKQJYkIzw8+e1R05myw7PrtPYIn0XYLZo+oV+kOVZT0OjIdNEQsLdWJInx',
'YDCAJMiaJBB7eGFREogrQ0zCVwK0v+48C58M0ovoAYIrcb82pk/5wjZSomIl0Lu3vz7T72Dz',
'HwExQ7qiZCdZjrxfurzIyBjuhmJP6l0VduBRBxSQ8mGR+QMAtMJq4g7UdUipAT7A7+/dF+5M',
'FUgmrjrFVIPH7I7Faj/nChq7VXTpS6asCRApMBABAAAzROhLD/4uw5sm/oLdy1tOOU3kG4zi',
'Nor/LeGR/GPwm/owtCcUvP9G7frFoGxTMKfMhbpC2Sc5IdlSg+F5Q+GrS7pKisL89ke0NVV3',
'fX/BB/7fW1CcFpCZt0Ro2Ty6nU1WtLxtdMqOO1hgnFRtWfapgwroWtxUstgKvv33/SY+n6LK',
'SM2rYTQk0AcY/hNn0n6EdkpcK3uECZVgJhKNr7s4T71ONQKx9TC2aDBD4OmCQIVtZWR8xWVO',
'TtC4DFPE2elCPxez5gepw8NVr22D2+7dqaMNg3RhOOM28vurUpQ4/6+c0jehJv3+oYbmbdU/',
'YBhQcQzOTnoe25aRqip9UjRRr2s0MXMHnW4C2NLHsYM+UBSDuZEmiPXQS8P7iZ33ph+hVI2w',
'EMv7KhP9LeZxewcjHzTQGHS8yaACnFGUHehwey81c+NNnevWOr1UiWZCZcpBON1tSIVwh8WO',
'NQfClT4LgK+tyN60ITtLn39PBmc8rCRV2dnzbwmj5Jpm+/bxht6KPo27w+9WIl739os5phIL',
'4Sxznm6emsrgCO/mcX2aP4ejq/UTLh+7C59POfqWHOZL4m3VKKUs/CxuBRXIv5jHVm4n48sP',
'WBUa7H8RefMrzK9uraqhL6SPyQe/4oOo8i8Z0nJOmVtUI6kZKRtkKyXKYhLCFRAEkBfoLwv5',
'MJg57DQu/HLSU4kERAQYAQIADwUCU/4ifgIbAgUJA8JnAAIpCRApMBABAAAzRMFdIAQZAQIA',
'BgUCU/4ifgAKCRA1/1P4knNvPXR2EACFS3FKXYbN9w01hn5U9l325ivk7rLIN/S9nOqTdBCK',
'jO/pyJx3QM//hd5XMhwAB1JjPbHOm/uNfSJWFUa5Se9TgIsZb2opVNmz0gCzb22C34faEzv3',
'KOC8WdNTjfYIhYP7SmyNQeQoyFVw3syxaDKjezkv036onkhW+gCrmNcv2liGXzu1kSm6X6yT',
'qVlNrpP6+sNxIQt+mE+svbUBOzyW8odZxqjVn7UQAeY0uxxMiMl4JbcJ8mOacHqn16qfnggw',
'wrfJ2u09c2ZdVrfBTzT4rPSoEcqYUZxCSxQeBuZ37zFZfezZ03yEwclDXT2oKpsSQ+hr6jdb',
'llNnFRaT/pmRIxgt+84KuZWwnr5uCIxoSQ5awov7uSyK/m67Beuu6fV6l298RYslWrA+EvjM',
'qDaYLT5Vf7tLXinHFhTwUottxkfkkncpcGepmAGGCiC2ALH2SkCWJCM8PPntUdOZssOz67T2',
'CJ9F2C2aPqFfpDlWU9DoyHTRELC3ViSJ8WAwgCTImiQQe3hhURKIK0NMwlcCtL/uPAufDNKL',
'6AGCK3G/NqZP+cI2UqJiJdC7t78+0+9g8x8BMUO6omQnWY68X7q8yMgY7oZiT+pdFXbgUQcU',
'kPJhkfkDALTCauIO1HVIqQE+wO/v3RfuTBVIJq46xVSDx+yOxWo/5woau1V06UumrPiUD/0b',
'MK0knrkFGbSm0P9E11mQDvUd0S5T4IYai1l82n7nKWfXeF7gC/G4j9S5/ZloaYY0jTHKomOW',
'uDl0JKf3ILaQi97HqkyE4B6fL0m0Fw1rUjz7ksWPdwbQ4iyJYKx1zwNXYclLpNffZYtAy3tG',
'jQduZBHBXov9HTVcyaHf53kCHCOuJzuDjYXQHAKGYZ7nXpkGhFXf8KhyOIyNejpqnCggXSxc',
'Pj5xzXEmC+IKwSI4OCb2df9yIZjQQHd8N4peebuP4OiEWSYTkHMx645Mw5l+Mc/4UcXDTqMr',
'ftt0tpoRbE59h05g+Bt1EovJ+154syTXAg7lgnjtfGt63CPKx91Vvh0JWIB2kMasJuOMRi4l',
'h8ziwuAa3i31TYgCWvyxwyDcCt97b8UGRKCH4LL9nR/C58yOS17CtnZX9fz/CwQ3zHJcHeFE',
'5lsksm6kCODrqOH70gQAMvGU5QOHnzV+U18Efy/d3gpWhjaDAYaHBYunxNNXdUH1cWtsjldb',
'HjVhQVbnB03zocspBH9npH/8e0uNT99IwhBwlFo4+VkDVRBCZehnHWtbNiiEL0BgnjM9CpZs',
'a9SckNMyBKkWqxbhqkYKhw8h7x/IfVbI1kudsCmikT0UugznaDo41XlQfXQz477Rp80o9Xya',
'MDP0g/Hm9QAsR1g4TrOakqSw1g3p+YqPgA==',
'=Lpo7',
'-----END PGP PUBLIC KEY BLOCK-----'].join('\n');
it('Parsing armored text with RSA key and ECC subkey in tolerant mode', function(done) { it('Parsing armored text with RSA key and ECC subkey in tolerant mode', function(done) {
openpgp.config.tolerant = true; openpgp.config.tolerant = true;
var pubKeys = openpgp.key.readArmored(rsa_ecc_pub); var pubKeys = openpgp.key.readArmored(rsa_ecc_pub);
@ -798,11 +1185,11 @@ describe('Key', function() {
it('update() - merge subkey binding signatures', function() { it('update() - merge subkey binding signatures', function() {
var source = openpgp.key.readArmored(pgp_desktop_pub).keys[0]; var source = openpgp.key.readArmored(pgp_desktop_pub).keys[0];
var dest = openpgp.key.readArmored(pgp_desktop_priv).keys[0]; var dest = openpgp.key.readArmored(pgp_desktop_priv).keys[0];
expect(source.subKeys[0].bindingSignature).to.exist; expect(source.subKeys[0].bindingSignatures[0]).to.exist;
expect(source.subKeys[0].verify(source.primaryKey)).to.equal(openpgp.enums.keyStatus.valid); expect(source.subKeys[0].verify(source.primaryKey)).to.equal(openpgp.enums.keyStatus.valid);
expect(dest.subKeys[0].bindingSignature).to.not.exist; expect(dest.subKeys[0].bindingSignatures[0]).to.not.exist;
dest.update(source); dest.update(source);
expect(dest.subKeys[0].bindingSignature).to.exist; expect(dest.subKeys[0].bindingSignatures[0]).to.exist;
expect(dest.subKeys[0].verify(source.primaryKey)).to.equal(openpgp.enums.keyStatus.valid); expect(dest.subKeys[0].verify(source.primaryKey)).to.equal(openpgp.enums.keyStatus.valid);
}); });
@ -836,8 +1223,8 @@ describe('Key', function() {
var keyFlags = openpgp.enums.keyFlags; var keyFlags = openpgp.enums.keyFlags;
expect(key.users[0].selfCertifications[0].keyFlags[0] & keyFlags.certify_keys).to.equal(keyFlags.certify_keys); expect(key.users[0].selfCertifications[0].keyFlags[0] & keyFlags.certify_keys).to.equal(keyFlags.certify_keys);
expect(key.users[0].selfCertifications[0].keyFlags[0] & keyFlags.sign_data).to.equal(keyFlags.sign_data); expect(key.users[0].selfCertifications[0].keyFlags[0] & keyFlags.sign_data).to.equal(keyFlags.sign_data);
expect(key.subKeys[0].bindingSignature.keyFlags[0] & keyFlags.encrypt_communication).to.equal(keyFlags.encrypt_communication); expect(key.subKeys[0].bindingSignatures[0].keyFlags[0] & keyFlags.encrypt_communication).to.equal(keyFlags.encrypt_communication);
expect(key.subKeys[0].bindingSignature.keyFlags[0] & keyFlags.encrypt_storage).to.equal(keyFlags.encrypt_storage); expect(key.subKeys[0].bindingSignatures[0].keyFlags[0] & keyFlags.encrypt_storage).to.equal(keyFlags.encrypt_storage);
var sym = openpgp.enums.symmetric; var sym = openpgp.enums.symmetric;
expect(key.users[0].selfCertifications[0].preferredSymmetricAlgorithms).to.eql([sym.aes256, sym.aes128, sym.aes192, sym.cast5, sym.tripledes]); expect(key.users[0].selfCertifications[0].preferredSymmetricAlgorithms).to.eql([sym.aes256, sym.aes128, sym.aes192, sym.cast5, sym.tripledes]);
var hash = openpgp.enums.hash; var hash = openpgp.enums.hash;
@ -1089,5 +1476,11 @@ describe('Key', function() {
}).catch(done); }).catch(done);
}).catch(done); }).catch(done);
}); });
it('Find a valid subkey binding signature among many invalid ones', function(done) {
var k = openpgp.key.readArmored(valid_binding_sig_among_many_expired_sigs_pub).keys[0];
expect(k.getEncryptionKeyPacket()).to.not.be.null;
done();
});
}); });