fork-openpgpjs/test/general/key.js

1487 lines
90 KiB
JavaScript

'use strict';
var openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : require('../../dist/openpgp');
var chai = require('chai'),
expect = chai.expect;
describe('Key', function() {
var twoKeys =
['-----BEGIN PGP PUBLIC KEY BLOCK-----',
'Version: GnuPG v2.0.19 (GNU/Linux)',
'',
'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',
'PepQmgsu',
'=w6wd',
'-----END PGP PUBLIC KEY BLOCK-----'].join("\n");
var pub_revoked =
['-----BEGIN PGP PUBLIC KEY BLOCK-----',
'Version: GnuPG v2.0.19 (GNU/Linux)',
'',
'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',
'pMiJM+NJAQ==',
'=ok+o',
'-----END PGP PUBLIC KEY BLOCK-----'].join('\n');
var pub_v3 =
['-----BEGIN PGP PUBLIC KEY BLOCK-----',
'Version: SKS 1.1.3',
'',
'mQENAy9J/w4AAAEIALBDDD4vWqG/Jg59ghhMYAa+E7ECCTv2At8hxsM5cMP8P9sMLjs+GMfD',
'IdQSOqlQXbunYADvM1l/h2fOuUMoYFIIGaUsO5Daxvd9uWceM4DVzhXMeJZb9wc5jEJEF21+',
'qidKj5OGsMyTrg++mn4Gh/aFXvvy3N3KWaQpPfNi3NRZUpNLz0IlfbXVBQGD6reLoxPptJun',
'NqpClyRiesgq8HCscmB2oQo+b9KzSSgzU9qQJA4SljMYVmJ2sDE/sjREI8iKL8lIgUMhJG9q',
'NggWjuxFTpVcGKkuQFJIvdL+UhTVvEBuqw6n4cmFAzfZ/AInJM032qLtsaIf5begFKI3up0A',
'BRGJARUDBSAxm7HC5begFKI3up0BAbdDB/0TOcI0ec+OPxC5RTZAltgIgyUc0yOjHoTD/yBh',
'WjZdQ9YVrLGMWTW4fjhm4rFnppVZKS/N71bwI76SnN9zO4pPfx86aQPR7StmSLJxB+cfh2GL',
'gudJoG9ifhJWdNYMUD/yhA0TpJkdHMD5yTDE5Ce/PqKLviiX9C5MPW0AT1MDvafQlzeUXfb5',
'1a71vQNPw7W1NBAVZRwztm7TNUaxWMFuOmUtOJpq4F/qDQTIHW2zGPJvl47rpf6JSiyIyU70',
'l0deiQcZOXPC80tgInhNoBrz3zbEXhXRJo1fHkr2YSLclpJaoUOHsPxoyrNB28ASL5ZknPwI',
'Zx3+cFxaGpRprfSdtCFKb2huIEEuIFBlcnJ5IDxwZXJyeUBwaG9lbml4Lm5ldD6JARUDBRAv',
'Sf8k5begFKI3up0BAcbGB/0eLod2qrQxoE2/RUWQtqklOPUj/p/ZTmvZm8BgsdIflb0AMeey',
'9o8AbxyAgA3pcrcCjcye79M1Ma2trEvRksvs8hViuq3BXXjDbjPZi3wTtKSvbAC022OV52Sb',
'8/sgiTGp7xC8QMqS8w4ZeKoxJGh1TVMYrevUA8a2Rr5aDqrR3EA4rifSHwkVjJWOPF69xiKt',
'IVA0LcYJvGsPOQCf2ag+nOcnDrF4dvcmg6XZ/RyLepve+1qkhXsA/oq+yHoaqWfe+bwgssk/',
'qw1aEUk7Di8x7vY+cfjvWaazcYGw8kkIwSSqqIq0pkKFz2xDDfSaDJl6OW/2GUK0wDpJmYZo',
'PN40iJUDBRAvSgDsU5OkROGu2G8BAeUqBACbC45t4+wYxWCxxp81pkFRb8RWBvEvbXI+Spwd',
'4NcKs8jc5OVC8V02yiq4KbKFDRxdw2OWpUCSRAJe1gjsfFrZ+2RivpKk06kbAYthES03MjXg',
'cfcV3z2d7IWanJzdcOlzsHzPe1+RoUAaqBjvcqPRCGRlk0ogkYHyWYxElc6574iVAwUQL9iL',
'CXr7ES8bepftAQGPywP/d9GSpEmS7LLIqazl4rgN1nkXN5KqduiH8Whu3xcBrdOAn7IYnGTp',
'O+Ag4qwKKH+y/ke9CeZL6AnrU9c0pux150dHsDeHtpTPyInkjgKI7BofprydvpiFNd0nlAi4',
'J4SAEYr3q92Qn/IiKpnLgo6Ls/GFb7q6y1O/2LL8PC2zrYU=',
'=eoGb',
'-----END PGP PUBLIC KEY BLOCK-----'].join('\n');
var pub_sig_test =
['-----BEGIN PGP PUBLIC KEY BLOCK-----',
'Version: GnuPG v2.0.19 (GNU/Linux)',
'',
'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',
'yeSTTh8ZnzRiwuUH1t90E7w=',
'=e8xo',
'-----END PGP PUBLIC KEY BLOCK-----'].join('\n');
var priv_key_rsa =
['-----BEGIN PGP PRIVATE KEY BLOCK-----',
'Version: GnuPG v2.0.19 (GNU/Linux)',
'',
'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',
'=lw5e',
'-----END PGP PRIVATE KEY BLOCK-----'].join('\n');
var user_attr_key =
['-----BEGIN PGP PUBLIC KEY BLOCK-----',
'Version: GnuPG v2.0.22 (GNU/Linux)',
'',
'mI0EUmEvTgEEANyWtQQMOybQ9JltDqmaX0WnNPJeLILIM36sw6zL0nfTQ5zXSS3+',
'fIF6P29lJFxpblWk02PSID5zX/DYU9/zjM2xPO8Oa4xo0cVTOTLj++Ri5mtr//f5',
'GLsIXxFrBJhD/ghFsL3Op0GXOeLJ9A5bsOn8th7x6JucNKuaRB6bQbSPABEBAAG0',
'JFRlc3QgTWNUZXN0aW5ndG9uIDx0ZXN0QGV4YW1wbGUuY29tPoi5BBMBAgAjBQJS',
'YS9OAhsvBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQSmNhOk1uQJQwDAP6',
'AgrTyqkRlJVqz2pb46TfbDM2TDF7o9CBnBzIGoxBhlRwpqALz7z2kxBDmwpQa+ki',
'Bq3jZN/UosY9y8bhwMAlnrDY9jP1gdCo+H0sD48CdXybblNwaYpwqC8VSpDdTndf',
'9j2wE/weihGp/DAdy/2kyBCaiOY1sjhUfJ1GogF49rDRwc7BzAEQAAEBAAAAAAAA',
'AAAAAAAA/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQN',
'DAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/',
'2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy',
'MjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAFABQDASIAAhEBAxEB/8QAHwAAAQUB',
'AQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQID',
'AAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0',
'NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKT',
'lJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl',
'5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL',
'/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHB',
'CSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpj',
'ZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3',
'uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIR',
'AxEAPwD3+iiigAooooA//9mIuQQTAQIAIwUCUzxDqQIbLwcLCQgHAwIBBhUIAgkK',
'CwQWAgMBAh4BAheAAAoJEEpjYTpNbkCU9PEEAKMMaXjhGdgDISBXAAEVXL6MB3x1',
'd/7zBdnUljh1gM34TSKvbeZf7h/1DNgLbJFfSF3KiLViiqRVOumIkjwNIMZPqYtu',
'WoEcElY50mvTETzOKemCt1GYI0GhOY2uZOVRtQLrkX0CB9r5hEQalkrnjNKlbghj',
'LfOYu1uARF16cZUWuI0EUmEvTgEEAOkfz7QRWiWk+I6tdMqgEpOLKsFTLHOh3Inz',
'OZUnccxMRT++J2lDDMhLChz+d0MUxdBq6rrGoEIP2bYE9AjdR1DNedsuwAjnadYI',
'io6TMzk0ApagqHJcr1jhQfi/0sBhCCX+y0ghK8KAbiYnyXPMQFa9F19CbYaFvrj/',
'dXk0N16bABEBAAGJAT0EGAECAAkFAlJhL04CGy4AqAkQSmNhOk1uQJSdIAQZAQIA',
'BgUCUmEvTgAKCRDghPdEbCAsl7qiBADZpokQgEhe2Cuz7xZIniTcM3itFdxdpRl/',
'rrumN0P2cXbcHOMUfpnvwkgZrFEcl0ztvTloTxi7Mzx/c0iVPQXQ4ur9Mjaa5hT1',
'/9TYNAG5/7ApMHrb48QtWCL0yxcLVC/+7+jUtm2abFMUU4PfnEqzFlkjY4mPalCm',
'o5tbbszw2VwFBADDZgDd8Vzfyo8r49jitnJNF1u+PLJf7XN6oijzCftAJDBez44Z',
'ofZ8ahPfkAhJe6opxaqgS47s4FIQVOEJcF9RgwLTU6uooSzA+b9XfNmQu7TWrXZQ',
'zBlpyHbxDAr9hmXLiKg0Pa11rOPXu7atTZ3C2Ic97WIyoaBUyhCKt8tz6Q==',
'=MVfN',
'-----END PGP PUBLIC KEY BLOCK-----'].join('\n');
var pgp_desktop_pub =
['-----BEGIN PGP PUBLIC KEY BLOCK-----',
'Version: Encryption Desktop 10.3.0 (Build 9307)',
'',
'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',
'=dVeR',
'-----END PGP PUBLIC KEY BLOCK-----'].join('\n');
var pgp_desktop_priv =
['-----BEGIN PGP PRIVATE KEY BLOCK-----',
'Version: Encryption Desktop 10.3.0 (Build 9307)',
'',
'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',
'5g==',
'=63Nq',
'-----END PGP PRIVATE KEY BLOCK-----'].join('\n');
var rsa_ecc_pub =
['pub rsa4096/C9DEDC77 2015-10-17 [expires: 2018-10-16]',
'uid Google Security Team <security@google.com>',
'sub nistp384/70C16E3C 2015-10-17 [expires: 2018-10-16]',
'sub rsa4096/50CB43FB 2015-10-17 [expires: 2018-10-16]',
'sub nistp384/102D9086 2015-10-17 [expires: 2018-10-16]',
'sub rsa4096/DFC40367 2015-10-17 [expires: 2018-10-16]',
'',
'-----BEGIN PGP PUBLIC KEY BLOCK-----',
'Version: GnuPG v2',
'',
'mQINBFYiIB8BEACxs55+7GG6ONQV3UFYf36UDSVFbuvNB5V1NaEnkY0t+RVMigLR',
'Zdl0HHsiaTKfKs4jqjLQAoR6Fcre9jlEhatotRg3AvHV1XYebxRlzdfXxyD0d6i9',
'Quc1zbca0T8F1C5c7xfYP5g9iKWn5yFtHC3S7mLeOg7Ltx84bTo8AF7bHGA3uIQf',
'uCtE8l6Z57HTeaf2IR/893jLOir8lvmTef83m/+e1j6ZwmKxxZO2s+aGKre6Fqsz',
'Oo89CpWKNrdZ3IN8+Y4udZNlr7u0os7ffY0shfbLrqt+eVEu4EHfbpQTJxvalZJK',
'tEnGtV8S7Z3dcPcimxvO7HZu7Wz8VnRzY/AZtee4fC+i2yBu1rWKgY3V1tFKdxVr',
'KDnmS5MBgBAxv69mM3bf8QPinL4mtIQ65/Dt4ksJuysRmGwQ8LkjSLQCMMepnjBs',
'/63wJ3e4wN1LCwnJonA2f8gZQHNeGPUhVVd/dWFDtmQaLwKFcI0GS/DiUPBIJir5',
'DWnrEedtlcSLlwwcUglFsG4Sds/tLr+z5yE88ZrDrIlX9fb9cCAsDq7c8/NCzgvw',
'kFez14sXgGhMz6ZfFzM49o0XwlvAeuSJRWBvnKonxM7/laqv4gK0zur3a6+D6qCN',
'vt9iWO/YG+0Fvhmyxe34/Q71nXWc9t5aLcokmYLGY1Dpzf9oB8hDRdMCAQARAQAB',
'tCpHb29nbGUgU2VjdXJpdHkgVGVhbSA8c2VjdXJpdHlAZ29vZ2xlLmNvbT6JAjwE',
'EwEIACYFAlYiIB8CGwEFCQWjmoAFCwkIBwIGFQgJCgsCAxYCAQIeAQIXgAAKCRC4',
'5BBcyd7cd8MzD/9YdMVZniQH4qBKxLFIoYGfLzCEI0S9IVUA37wrZ4YiRODSJRMf',
'El6oVfTO/g8xpeQlDgHj1w2IDoSkeQrY+7rf9H41sGGOBDGXSQT+7Z7XFH2mPPvC',
'cqYqR32BDNDkO/LL1BzzRlQvNmnGHxo098sqTgb7hoVsP+qFoem7JUMpcAV1KrUo',
'P81haV8a/25ouWFZu5P68WFh861TyIjIYLQCns2fG+zlKFGN9Uynv6E5+Qk7dmni',
'XnHRaiYZP9+wux6zm5a5wD/h6Iv4hyg/0Vnx5SyH8QOm3Qm6pkUciQkSmZQvf0r7',
'HTLk19V1WtAp64YyUgnp9P/dq1bkclZcmWgZwVf88P8Cjm1BLh9RMdy6F+lVuUbz',
'0JtOyxFtxfZ7ooNzYf8cZbq3IkJtFW22BcHm7jK7fpkwqVvTeK7TS1nvbUjMW4Qw',
'bcFUJnA5TPkJanoNH9DCya7/PhbAI9hwyOcCsCOIfbIpj06izxxUXu0MJb+9k5US',
'n7wRLwVsrt21V/PZoqvKMehqZTsVCsWZOzwf7UUY+WGZqT3uORopg9vadj1nSmLA',
'+HprKhS9m3PA0vWbNvp0NQUWoanUjtpnCBuLk05H2GNgnRMnL0pEIkF2sTaCRjnY',
'zLSo9QuzrvTgZ4McfcZ28MDuRR4JfS+LZ8AhopdjtR7VTG9IAxfq5JORpokCHAQQ',
'AQgABgUCViIlJAAKCRDHiaFvb01lGfBgEACw5hlr7fWwSvYf1/Dfs1w5WyKc8cJs',
'2370rVOzauVnRsFXTcl1D4iYnC2Uu2CwTcbD5pFKikpJnhDxzd6Ub5XapJrA06lu',
'uGGExhCV3QKJVOrKJyZ+eWh5wu4UbDxSCvLQI/FLV6uLrbauAQpoFBBw2A8epRbY',
'hqDdJ+EWgt57KfzsAc12jQ2HYGDIrdV35g3D4QANDLl69XLlSuyAHDMKRTs0rXje',
'H6ds+/s9khKcCwkzOCAJSZHg83rRpLMkN0Izr3ZQB932Ybr7ZvdbkjHS6YhYfXzm',
'1PIyFq9TikArz8YFcLQEgE6mph+jfEXMEzbg8G0+Wvrl0C0XHJWiCvl7feAxftGV',
'w0HPWvNTemD7BCtTVEkIh5IOeB+rzdnFaW84PSYmwoPW6a4aOhQ5Y8QyshCA2fnP',
'eyQACNpvj4nCJNdvyJAm2+5U/TnCEyl7zizm++sJTxAilqXxH5ubppaldmcRYLWZ',
'pHN+Aup+yiotDRO4s9QunDC6vTGf4Zbe4xN+rL9vlaIH4dU700xFCNY5yCPqIst+',
'pLwZo6FduJLsjE71z8UINxr4q0jXDaMyMm70xcDRDhvTPZTP/i3rFrM95x4Q/das',
'ebNidE0mel0vHJ/5411OrRTCQ5fgv1i7ukZbVATWMOkYTpiYKv+sWPZg3uNxlqHo',
'BmIunwzFda9LD7hvBFYiIcMTBSuBBAAiAwMEAeDSwQIRp955OGPU5A242FIJp91t',
't1+YAVblSkJ+APKCdgEXeIcDheRcozUt5pOvGdibnaPotPCxdUc9QWYV8CFadyZg',
'QOM57kCSnhTutzPccOLnSJVNy9sUbV91lMzBiQKlBBgBCAAPBQJWIiHDAhsCBQkF',
'o5qAAIoJELjkEFzJ3tx3fyAEGRMJAAYFAlYiIcMACgkQaEJ4Y3DBbjzLUwF+IF0t',
'U0CuCwddi9EYW3d66Q9dJv2H7V6oPNJ98mukzGUb7bBZhGdtFn1IGr3nSPgbAX4p',
'AHfWy+JFh0zlM7HFJPECPtBi1UvuNFxvIZj/FeV/jdqaE2KLwO/9Gv3rPMQ2TurH',
'WhAAo/ubNGuGZ+r/NI/Z/l9vLKfPVIiR3xtrehyV5GmMGXECoT9hME0jhg5RlSzK',
'qxZkPgVmQclD3smbudp79rtK6T18DjlA84aXut+5ZhKiVPcyUK80UqNw7/3t/NsM',
'xXv8z73O8glx3jXGv1zIYW8PHdeJOr7nX89dsM0ibgf7Ti3fdhygMA3nu/sbmrHL',
'nQ3cix72qGQkMURjBRcSSJu2hMZjDNSPgOPOEABefxIyWG4kQwRRUXPePeJOVa6d',
'QBJPh755bsbl3kQ0tG3NL9nDNq42M8QGDWnMpP9F8nmFSCw+RTUT5SminWsGhovW',
'rG25/gkWrRZhMAAm0Bf3y+yMDWdsrnUCOQsgihQcH8i+V1AMfZgjJKPg1vtFdDCh',
'uGtH3vJSEEhPZjTBBzIQx3etKoVDP8WtNZN5jeh84FYHsivLxSUiPQ//Jk3cnBLx',
'/0f5Wrimwk7eUi4ueNUyFSWv+soi/FpcnDSvbVMVY2sIXI8aFFDv8U6+EPMyijAf',
'tWRR4yA8tx0APRh/5z5T9sKj/n+jBZkQXBSKDnI7U4fmTBgh/sPeH61/zOuJBt6G',
'9tfOmomf9TiTVQdD8T3HpEfJV5rrOFj8fic8OKSWp29jnoP57bIEprSgVTcrlK5b',
'yr5qDMKEh2P7pgWfLWQsSG4a0iwJUsq5NGOsluzeH4aqDs25Ag0EViIh5QEQALcO',
'QFtQojykqZmX/oKgAcRhiNM9NZbz3FGED69jesy3VOZxBeiCHO3vkHW9h6s88VuM',
'qiC1JfZcH/Kkw+XAC+GtYxRMxZhDQ8pIh4PAFnaWRp5kAmmxS+k6O4tEQogOgh0k',
'29P4+w63cgjw8mvb8acKOyMOCXLgnVNak614ogAFnrCakfA4WQOPGoqrey7z0XKJ',
'LTbt28W2RALbSoC6KE7KTsx63Jng4Yr5q+elVOqzaSFPeloiC2R05CF6pCsVKX7D',
'P0HFjcCk7/W8czeKOQWM62edgL4Y3c/x/g/PutAkLOrX/Wt1MejKeXT9QaNAA6QW',
'qASkzK6L1FGrCzaf6cVZrhBdGdIatqYxpfY3I6tTtlN/5BGieFYXmZsP7t/p7TMv',
'Jv2oJYtL1qsapQcnE9WOiARRb34hcnfA3UOet9W8vJqCGUYKZbJPyk5eLGuFVuDX',
'6tnqUgoTkWRhsYNFqop2GnfZIl4a8doZ05oQQlKeRBw8pgnRCRq1fq28Yc4FqiXn',
'Lfdts5016hc8U0KimMzvRBlSKTLEHC6febqq3XHDR7nHHrXxY29BVFD8r3izkT71',
'Xb3Ql8NGvuWcnTS9j5L1EXkFv0wzFSUS5FUNU3JoNO5JsPl+YVczU6RX/QoDzpsx',
'mJ7ctY0yeSEY2YXvuS6gQXDALx5D9zyCMTj8TrvTABEBAAGJBEQEGAEIAA8FAlYi',
'IeUCGwIFCQWjmoACKQkQuOQQXMne3HfBXSAEGQEIAAYFAlYiIeUACgkQD8lB2VDL',
'Q/tq9g/+N+kTlYxpQCvgvjJEM+VLVqUIv7wBqrZXawcrti8DBtVCcuvHYGjVmPqB',
'OGyp6TNQTX5RQfo64TTh78BnG9Tf08oGv5nzXHxRdk92XZzzS2tq24j1OGiZhhYp',
'JcFjzBx3qRhYmvN2ZkuCL48tthjKBx/SjfcGV185meNIZWzg67hmo7Szlbpo4lN6',
'aLOxVAZelZjH3bFwpMp198ZEuE0B9RzhuJmhrtpl6dLtcQ8rsgy0EdwYons61GU2',
'gnpn39kpCRSnmbMYqRfTyHo/pVLxz7XR98MrvB6am9wVE42PQV+viyHLB2pRquGZ',
'CSCfMrzE38MMJ3BJAcwx6YcAItaBQXaWYEyE/ixr4OvEA+jC4n0Nq8Pik/oUc+7I',
'2LWAZ50VrE+HroNVomFMMUvp+RZ0S/+J4DuuiwAxnN4oacYQVKqDt7D0V+8da+ee',
'87ghOrL5xTjG1yEgd3Q9VDbh8gWGtVWevdnAldZzDvYsVsJW4N8YunVOLZZ0+24R',
'X9LUsJ6Fry7oP4kvOFGFegVC123x7HDrR9333Eq4H59xHXyDQo0O7NvCph8RfSdj',
'/ouYP/D1/gkS45ladT89qePrwXT6j8DTqkMmrUbXVXtc9tBWXgNB0nacX68TywP9',
'LigrBsDiPdwYszKKuZWCEhex5BQo4Pfw8OBHqkENQdMmUgW1zcE4aQ/+Ioq5lvlH',
'OpZmPGC3xegT0kVC0kVeK12x3dTCc6ydkWanXrCJrCXNnboV34naszTl+Qt75TyB',
'XqFJamwxjA5K/COmAZTAcW4svGRhqhAMg02tfkrL5a84lImOVmpGbvUAQWBXNKXV',
'aeOmKVEvO6e/JBVKDQL5h+ePJ1csq8I5P5zelgXWgVkFvlq0H1MrF3eU780A1hLB',
'Q4O8eJ+zoCLYaR6lBvZTsfVtsdIuIodiJudYB9GUDMcalB7wj/CUN06R/UcDK4HG',
'qGb/ynS/cK5giZE6v2BNA7PYUNcdr6hO51l3g7CwswZTnx79xyPhWsnOw9MUymyv',
'/Nm73QX/k635cooVPAaJOPSiEsboqDCuiAfuEamdrT00fUfqCkepI3m0JAJFtoqm',
'o9agQBSywkZ0Tjuf9NfB7jBWxIyt1gc9vmiCSlnbdDyK/Ze17PhDdkj2kT8p47bN',
'l2IBk48xkrDq7HfMNOXC50jyiELs+8+NIfwICBJRyMpCQWAs9d+XBnzRzLXmEA/1',
'ScdNX0guOOSrTsfIgctO0EWnAYo8PfF9XebZMhTsOhHmq4AAqWFBYxAQa6lGBBcU',
'fZ0dHylTnuiR5phXMyWYWplZsHOVaHnhoGz1KJkpqYEH7fp38ERdcRiz7nwoyfYz',
'Jl5qaAebTt8kYtJm3Jn8aJCAjPwtArRzkHO4cwRWIiISEgUrgQQAIgMDBNbEs2RY',
'eWTLtXrcTUYDhMVzZwsTVJPvgQqtS+UnmPA7+qLEjSInHFfUE0yQEYsCTzP3g9mr',
'UOte0x/i+u7bmvxYo58SZ51bEd4/IbKecgSJbwLkhHR2HeHh3MsuW8lVtAMBCQmJ',
'AiUEGAEIAA8FAlYiIhICGwwFCQWjmoAACgkQuOQQXMne3HfJkA/9FIOskOWRjm4e',
'UuocsD1Rwglk3nWUAJ5krHcKI6/LrKP0OdOnrXrd65FYwpYvhf6/6OCg+NXvQ7T/',
'rFs+Cfi+Llko5gDWVEcyPOreN/E9R7rVPxYeqWryELFFXL4eWGA6mXRW3Ab3L6pb',
'6MwRUWsSfXjaW1uyRPqbJm0ygpVYpVNF9VmI5DvMEHjfNSxHkD3xDWZuUHJ+zswK',
'uAeRtEgYkzARZtYGBiMuCjULD29cYHaaySxY94Be/WvZI6HnCoXSgQ8LCpTGkiSL',
'9cLtYIDxq8DmzJhiQkQItxzJRPUTMDZUR+SSNAqxL0K5ohuNzZW8hDfkdudZ4Pr6',
'u+sMVHCIG5sL6IHF35dsoUceCML/rTrM/3JYPADuleTmKfv2Dt78FL4s2CNxcBfI',
'SHjYCquIb5xyc8m222ya8eF2CoSoC1XhChoGjcIbKvHxcK/PgGgrFLI1NaJRN8vR',
'qCiW1bPNg8cAyLAb5pdtutlsxrhvRlRc65qNBEJ711Gymd54DOK6vW6DRFQPZLxW',
'MoElc/Mio4X3FA+40kKXXUcBA3Y2qi1vhCottZIXd+37HZZc0WwoLxv+qvwB19IE',
'SRuRhJyHnuYXHX7Y+GwDz7/7bzxRrEEhcQfzcWp4qhoFc8uCScj98kMeEiW3AQmU',
'ayyFDmvqEREd2cSpUbrIJVLT2aEOfKe5Ag0EViIiPwEQAMminwtRlkfMZCotqAo2',
'GOmJb6gSbJ9GPFaWDBZVMXR8tHmbFlXwsVmuSkV0BS7hnE3N0dbvv5hAv9uNjnqA',
'vxjP1aSfPNWVOVYSLl6ywUBDasGiiyxf503ggI7nIv4tBpmmh0MITwjyvdHSl0nt',
'fC7GrdFxTX9Ww655oep3152a33eaos1i3CZqB9+zuyqfe4NWbyaYBoCfESXtmEY4',
'AbMFy/xYB6liRJsxCeOo4u+is4jrICwGyMZCOsgswciMIh3x3/K1aa/v4DS/T96V',
'8BTqYeSS9nIGTkz2jLIRXK43wX07DpsoeQvUvWjmfaqUvQluixvwdE/IJ6O92PiC',
'+0U1CYP5KM0+fpdh2BhaxHJrs2b4NEsYHuheeZ485HrCX8ZamUMzj2+bC0q/OYHP',
'UtABk96gjXPmTfme16knDFlRJFPZytQ36p9lGYTCUIMwyxjMfi9E+HnhoJfsqlbk',
'kDseDEB2nU9SJb8NRPmMURVo+yayqcyFUJ4ZimJJ1MpGvlHj6mdxzIdJjzoT541H',
'WKz+SvVSjCRVFNCjvmQk31/BiPmCf62+KYOpv1tkOankrYc1yX6kt92+JmG6vIQT',
'u1Lqbp46jkydyG4BAkv9l8EfUMyPaLglTTMotc62rwtPEWnPoFAcV6ZjTxwMx029',
'hzFIp5tjvoxz7AkuGbi3yoXhABEBAAGJAiUEGAEIAA8FAlYiIj8CGwwFCQWjmoAA',
'CgkQuOQQXMne3HdgVQ/9GjK+aYHgcuGFw1bX8EfSZjmEvdnuePT0Fv9Padqs236P',
'COmQcU/1EtXhrgO8NzuPb83IasJWyvo4xagCnCiAJ+uk4P4rK6Sbb3VZ+Hm1SyOF',
'SF3P7JuaSC03k0aD03s2JxSbZoqupoKkEfLlat0J9HoqquNdjUZ2+4aETcZcsXt1',
'WVGkzbgwqJbLiuaRKLOvJjMICQA5zhljy7WcIOzIkWyhxhpzZ+a9kdXXWJLI0nkB',
'jT/5UYT3DNODssrNEfayzxZbvf3Dtl/OIrmKQpgWtVOaiLcxI9FzUN6pGxAlBdP2',
'rmj0MPQIpa17T76d5P/VZrR/SYeEsPaPjGBZFOAW1yTef0mXKQ0mc0nwTGHNYjrs',
'tkBUh/F9ErKN/++UN7pDc5ORVCbg5Z1gd3UIL16lsYnNyq1O0cdWgW+xCUMLVKb5',
'Q9f59ld3/yNF5XPyPNH9Ybb5kQJjYsDaIa+NPg9YLZ8DdONgqZyWgKiW5klMSk5Q',
'1+pxcXjT13eX5L0Ru/w3UjsSaCQOA/OuNep7Nwg29tWogTOSkhwC92Zpjd5PfoJi',
'j3EuhPUeTupRYM58jib/b9/1mQ1+wVyDEpIxTDjU0x1u4E59HcAu0naLNGd9bJMw',
'EeiVzNNyKUihENSQh9nsPniQvXgF3pPGQ8ZpS+9R9NyYQID5t3W8UrLpguvAE2U=',
'=Q/kB',
'-----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',
'',
'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',
'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) {
openpgp.config.tolerant = true;
var pubKeys = openpgp.key.readArmored(rsa_ecc_pub);
expect(pubKeys).to.exist;
expect(pubKeys.err).to.not.exist;
expect(pubKeys.keys).to.have.length(1);
expect(pubKeys.keys[0].primaryKey.getKeyId().toHex()).to.equal('b8e4105cc9dedc77');
done();
});
it('Parsing armored text with RSA key and ECC subkey in non-tolerant mode', function(done) {
openpgp.config.tolerant = false;
var pubKeys = openpgp.key.readArmored(rsa_ecc_pub);
expect(pubKeys).to.exist;
expect(pubKeys.err).to.exist;
done();
});
var multi_uid_key =
['-----BEGIN PGP PUBLIC KEY BLOCK-----',
'Version: GnuPG v1',
'',
'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',
'ljIYQms3pCv1ja6bLlNKpPII',
'=qxBI',
'-----END PGP PUBLIC KEY BLOCK-----'].join('\n');
var wrong_key =
['-----BEGIN PGP PUBLIC KEY BLOCK-----',
'Version: OpenPGP.js v0.9.0',
'',
'xk0EUlhMvAEB/2MZtCUOAYvyLFjDp3OBMGn3Ev8FwjzyPbIF0JUw+L7y2XR5',
'RVGvbK88unV3cU/1tOYdNsXI6pSp/Ztjyv7vbBUAEQEAAc0pV2hpdGVvdXQg',
'VXNlciA8d2hpdGVvdXQudGVzdEB0LW9ubGluZS5kZT7CXAQQAQgAEAUCUlhM',
'vQkQ9vYOm0LN/0wAAAW4Af9C+kYW1AvNWmivdtr0M0iYCUjM9DNOQH1fcvXq',
'IiN602mWrkd8jcEzLsW5IUNzVPLhrFIuKyBDTpLnC07Loce1',
'=6XMW',
'-----END PGP PUBLIC KEY BLOCK-----'].join('\n');
it('Parsing armored text with two keys', function(done) {
var pubKeys = openpgp.key.readArmored(twoKeys);
expect(pubKeys).to.exist;
expect(pubKeys.err).to.not.exist;
expect(pubKeys.keys).to.have.length(2);
expect(pubKeys.keys[0].primaryKey.getKeyId().toHex()).to.equal('4a63613a4d6e4094');
expect(pubKeys.keys[1].primaryKey.getKeyId().toHex()).to.equal('dbf223e870534df4');
done();
});
it('Testing key ID and fingerprint for V3 and V4 keys', function(done) {
var pubKeysV4 = openpgp.key.readArmored(twoKeys);
expect(pubKeysV4).to.exist;
expect(pubKeysV4.err).to.not.exist;
expect(pubKeysV4.keys).to.have.length(2);
var pubKeyV4 = pubKeysV4.keys[0];
expect(pubKeyV4).to.exist;
var pubKeysV3 = openpgp.key.readArmored(pub_v3);
expect(pubKeysV3).to.exist;
expect(pubKeysV3.err).to.not.exist;
expect(pubKeysV3.keys).to.have.length(1);
var pubKeyV3 = pubKeysV3.keys[0];
expect(pubKeyV3).to.exist;
expect(pubKeyV4.primaryKey.getKeyId().toHex()).to.equal('4a63613a4d6e4094');
expect(pubKeyV4.primaryKey.getFingerprint()).to.equal('f470e50dcb1ad5f1e64e08644a63613a4d6e4094');
expect(pubKeyV3.primaryKey.getKeyId().toHex()).to.equal('e5b7a014a237ba9d');
expect(pubKeyV3.primaryKey.getFingerprint()).to.equal('a44fcee620436a443bc4913640ab3e49');
done();
});
it('Create new key ID with fromId()', function() {
var pubKeyV4 = openpgp.key.readArmored(twoKeys).keys[0];
var keyId = pubKeyV4.primaryKey.getKeyId();
var newKeyId = keyId.constructor.fromId(keyId.toHex());
expect(newKeyId.toHex()).to.equal(keyId.toHex());
});
it('Testing key method getSubkeyPackets', function(done) {
var pubKeys = openpgp.key.readArmored(pub_sig_test);
expect(pubKeys).to.exist;
expect(pubKeys.err).to.not.exist;
expect(pubKeys.keys).to.have.length(1);
var pubKey = pubKeys.keys[0];
expect(pubKey).to.exist;
var packetlist = new openpgp.packet.List();
packetlist.read(openpgp.armor.decode(pub_sig_test).data);
var subkeys = pubKey.getSubkeyPackets();
expect(subkeys).to.exist;
expect(subkeys).to.have.length(2);
expect(subkeys[0].getKeyId().equals(packetlist[8].getKeyId())).to.be.true;
expect(subkeys[1].getKeyId().equals(packetlist[11].getKeyId())).to.be.true;
done();
});
it('Verify status of revoked subkey', function(done) {
var pubKeys = openpgp.key.readArmored(pub_sig_test);
expect(pubKeys).to.exist;
expect(pubKeys.err).to.not.exist;
expect(pubKeys.keys).to.have.length(1);
var pubKey = pubKeys.keys[0];
expect(pubKey).to.exist;
expect(pubKey.subKeys).to.exist;
expect(pubKey.subKeys).to.have.length(2);
var status = pubKey.subKeys[0].verify(pubKey.primaryKey);
expect(status).to.equal(openpgp.enums.keyStatus.revoked);
done();
});
it('Evaluate key flags to find valid encryption key packet', function() {
var pubKeys = openpgp.key.readArmored(pub_sig_test);
expect(pubKeys).to.exist;
expect(pubKeys.err).to.not.exist;
expect(pubKeys.keys).to.have.length(1);
var pubKey = pubKeys.keys[0];
// remove subkeys
pubKey.subKeys = null;
// primary key has only key flags for signing
var keyPacket = pubKey.getEncryptionKeyPacket();
expect(keyPacket).to.not.exist;
});
it('Method getExpirationTime V4 Key', function() {
var pubKey = openpgp.key.readArmored(twoKeys).keys[1];
expect(pubKey).to.exist;
expect(pubKey).to.be.an.instanceof(openpgp.key.Key);
expect(pubKey.getExpirationTime().toISOString()).to.be.equal('2018-11-26T10:58:29.000Z');
});
it('Method getExpirationTime V4 SubKey', function() {
var pubKey = openpgp.key.readArmored(twoKeys).keys[1];
expect(pubKey).to.exist;
expect(pubKey).to.be.an.instanceof(openpgp.key.Key);
expect(pubKey.subKeys[0].getExpirationTime().toISOString()).to.be.equal('2018-11-26T10:58:29.000Z');
});
it('update() - throw error if fingerprints not equal', function() {
var keys = openpgp.key.readArmored(twoKeys).keys;
expect(keys[0].update.bind(keys[0], keys[1])).to.throw('Key update method: fingerprints of keys not equal');
});
it('update() - merge revocation signature', function() {
var source = openpgp.key.readArmored(pub_revoked).keys[0];
var dest = openpgp.key.readArmored(pub_revoked).keys[0];
expect(source.revocationSignature).to.exist;
dest.revocationSignature = null;
dest.update(source);
expect(dest.revocationSignature).to.exist.and.be.an.instanceof(openpgp.packet.Signature);
});
it('update() - merge user', function() {
var source = openpgp.key.readArmored(pub_sig_test).keys[0];
var dest = openpgp.key.readArmored(pub_sig_test).keys[0];
expect(source.users[1]).to.exist;
dest.users.pop();
dest.update(source);
expect(dest.users[1]).to.exist;
expect(dest.users[1].userId).to.equal(source.users[1].userId);
});
it('update() - merge user - other and revocation certification', function() {
var source = openpgp.key.readArmored(pub_sig_test).keys[0];
var dest = openpgp.key.readArmored(pub_sig_test).keys[0];
expect(source.users[1].otherCertifications).to.exist;
expect(source.users[1].revocationCertifications).to.exist;
dest.users[1].otherCertifications = null;
dest.users[1].revocationCertifications.pop();
dest.update(source);
expect(dest.users[1].otherCertifications).to.exist.and.to.have.length(1);
expect(dest.users[1].otherCertifications[0].signature).to.equal(source.users[1].otherCertifications[0].signature);
expect(dest.users[1].revocationCertifications).to.exist.and.to.have.length(2);
expect(dest.users[1].revocationCertifications[1].signature).to.equal(source.users[1].revocationCertifications[1].signature);
});
it('update() - merge subkey', function() {
var source = openpgp.key.readArmored(pub_sig_test).keys[0];
var dest = openpgp.key.readArmored(pub_sig_test).keys[0];
expect(source.subKeys[1]).to.exist;
dest.subKeys.pop();
dest.update(source);
expect(dest.subKeys[1]).to.exist;
expect(dest.subKeys[1].subKey.getKeyId().toHex()).to.equal(source.subKeys[1].subKey.getKeyId().toHex());
});
it('update() - merge subkey - revocation signature', function() {
var source = openpgp.key.readArmored(pub_sig_test).keys[0];
var dest = openpgp.key.readArmored(pub_sig_test).keys[0];
expect(source.subKeys[0].revocationSignature).to.exist;
dest.subKeys[0].revocationSignature = null;
dest.update(source);
expect(dest.subKeys[0].revocationSignature).to.exist;
expect(dest.subKeys[0].revocationSignature.signature).to.equal(dest.subKeys[0].revocationSignature.signature);
});
it('update() - merge private key into public key', function() {
var source = openpgp.key.readArmored(priv_key_rsa).keys[0];
var dest = openpgp.key.readArmored(twoKeys).keys[0];
expect(dest.isPublic()).to.be.true;
dest.update(source);
expect(dest.isPrivate()).to.be.true;
expect(source.verifyPrimaryKey()).to.equal(dest.verifyPrimaryKey());
expect(source.users[0].verify(source.primaryKey)).to.equal(dest.users[0].verify(dest.primaryKey));
expect(source.subKeys[0].verify(source.primaryKey)).to.equal(dest.subKeys[0].verify(dest.primaryKey));
});
it('update() - merge private key into public key - no subkeys', function() {
var source = openpgp.key.readArmored(priv_key_rsa).keys[0];
var dest = openpgp.key.readArmored(twoKeys).keys[0];
source.subKeys = null;
dest.subKeys = null;
expect(dest.isPublic()).to.be.true;
dest.update(source);
expect(dest.isPrivate()).to.be.true;
expect(source.verifyPrimaryKey()).to.equal(dest.verifyPrimaryKey());
expect(source.users[0].verify(source.primaryKey)).to.equal(dest.users[0].verify(dest.primaryKey));
});
it('update() - merge private key into public key - mismatch throws error', function() {
var source = openpgp.key.readArmored(priv_key_rsa).keys[0];
var dest = openpgp.key.readArmored(twoKeys).keys[0];
source.subKeys = null;
expect(dest.subKeys).to.exist;
expect(dest.isPublic()).to.be.true;
expect(dest.update.bind(dest, source)).to.throw('Cannot update public key with private key if subkey mismatch');
});
it('update() - merge subkey binding signatures', function() {
var source = openpgp.key.readArmored(pgp_desktop_pub).keys[0];
var dest = openpgp.key.readArmored(pgp_desktop_priv).keys[0];
expect(source.subKeys[0].bindingSignatures[0]).to.exist;
expect(source.subKeys[0].verify(source.primaryKey)).to.equal(openpgp.enums.keyStatus.valid);
expect(dest.subKeys[0].bindingSignatures[0]).to.not.exist;
dest.update(source);
expect(dest.subKeys[0].bindingSignatures[0]).to.exist;
expect(dest.subKeys[0].verify(source.primaryKey)).to.equal(openpgp.enums.keyStatus.valid);
});
it('getPreferredSymAlgo() - one key - AES256', function() {
var key1 = openpgp.key.readArmored(twoKeys).keys[0];
var prefAlgo = openpgp.key.getPreferredSymAlgo([key1]);
expect(prefAlgo).to.equal(openpgp.enums.symmetric.aes256);
});
it('getPreferredSymAlgo() - two key - AES128', function() {
var keys = openpgp.key.readArmored(twoKeys).keys;
var key1 = keys[0];
var key2 = keys[1];
key2.getPrimaryUser().selfCertificate.preferredSymmetricAlgorithms = [6,7,3];
var prefAlgo = openpgp.key.getPreferredSymAlgo([key1, key2]);
expect(prefAlgo).to.equal(openpgp.enums.symmetric.aes128);
});
it('getPreferredSymAlgo() - two key - one without pref', function() {
var keys = openpgp.key.readArmored(twoKeys).keys;
var key1 = keys[0];
var key2 = keys[1];
key2.getPrimaryUser().selfCertificate.preferredSymmetricAlgorithms = null;
var prefAlgo = openpgp.key.getPreferredSymAlgo([key1, key2]);
expect(prefAlgo).to.equal(openpgp.config.encryption_cipher);
});
it('Preferences of generated key', function(done) {
var testPref = function(key) {
// key flags
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.sign_data).to.equal(keyFlags.sign_data);
expect(key.subKeys[0].bindingSignatures[0].keyFlags[0] & keyFlags.encrypt_communication).to.equal(keyFlags.encrypt_communication);
expect(key.subKeys[0].bindingSignatures[0].keyFlags[0] & keyFlags.encrypt_storage).to.equal(keyFlags.encrypt_storage);
var sym = openpgp.enums.symmetric;
expect(key.users[0].selfCertifications[0].preferredSymmetricAlgorithms).to.eql([sym.aes256, sym.aes128, sym.aes192, sym.cast5, sym.tripledes]);
var hash = openpgp.enums.hash;
expect(key.users[0].selfCertifications[0].preferredHashAlgorithms).to.eql([hash.sha256, hash.sha512, hash.sha1]);
var compr = openpgp.enums.compression;
expect(key.users[0].selfCertifications[0].preferredCompressionAlgorithms).to.eql([compr.zlib, compr.zip]);
expect(key.users[0].selfCertifications[0].features).to.eql(openpgp.config.integrity_protect ? [1] : null); // modification detection
};
var opt = {numBits: 512, userIds: 'test <a@b.com>', passphrase: 'hello'};
if (openpgp.util.getWebCryptoAll()) { opt.numBits = 2048; } // webkit webcrypto accepts minimum 2048 bit keys
openpgp.generateKey(opt).then(function(key) {
testPref(key.key);
testPref(openpgp.key.readArmored(key.publicKeyArmored).keys[0]);
done();
});
});
it('User attribute packet read & write', function() {
var key = openpgp.key.readArmored(user_attr_key).keys[0];
var key2 = openpgp.key.readArmored(key.armor()).keys[0];
expect(key.users[1].userAttribute).eql(key2.users[1].userAttribute);
});
it('getPrimaryUser()', function() {
var key = openpgp.key.readArmored(pub_sig_test).keys[0];
var primUser = key.getPrimaryUser();
expect(primUser).to.exist;
expect(primUser.user.userId.userid).to.equal('Signature Test <signature@test.com>');
expect(primUser.selfCertificate).to.be.an.instanceof(openpgp.packet.Signature);
});
it('Generated key is not unlocked by default', function(done) {
var opt = {numBits: 512, userIds: 'test <a@b.com>', passphrase: '123'};
if (openpgp.util.getWebCryptoAll()) { opt.numBits = 2048; } // webkit webcrypto accepts minimum 2048 bit keys
var key;
openpgp.generateKey(opt).then(function(newKey) {
key = newKey;
return openpgp.message.fromText('hello').encrypt([key.key]);
}).then(function(msg) {
return msg.decrypt(key.key);
}).catch(function(err) {
expect(err.message).to.equal('Private key is not decrypted.');
done();
});
});
it('Generate key - single userid', function(done) {
var userId = 'test <a@b.com>';
var opt = {numBits: 512, userIds: userId, passphrase: '123'};
if (openpgp.util.getWebCryptoAll()) { opt.numBits = 2048; } // webkit webcrypto accepts minimum 2048 bit keys
openpgp.generateKey(opt).then(function(key) {
key = key.key;
expect(key.users.length).to.equal(1);
expect(key.users[0].userId.userid).to.equal(userId);
done();
}).catch(done);
});
it('Generate key - multi userid', function(done) {
var userId1 = 'test <a@b.com>';
var userId2 = 'test <b@c.com>';
var opt = {numBits: 512, userIds: [userId1, userId2], passphrase: '123'};
if (openpgp.util.getWebCryptoAll()) { opt.numBits = 2048; } // webkit webcrypto accepts minimum 2048 bit keys
openpgp.generateKey(opt).then(function(key) {
key = key.key;
expect(key.users.length).to.equal(2);
expect(key.users[0].userId.userid).to.equal(userId1);
expect(key.users[0].selfCertifications[0].isPrimaryUserID).to.be.true;
expect(key.users[1].userId.userid).to.equal(userId2);
expect(key.users[1].selfCertifications[0].isPrimaryUserID).to.be.null;
done();
}).catch(done);
});
it('Encrypt key with new passphrase', function(done) {
var userId = 'test <a@b.com>';
var opt = {numBits: 512, userIds: userId, passphrase: 'passphrase'};
if (openpgp.util.getWebCryptoAll()) { opt.numBits = 2048; } // webkit webcrypto accepts minimum 2048 bit keys
openpgp.generateKey(opt).then(function(key) {
key = key.key;
var armor1 = key.armor();
var armor2 = key.armor();
expect(armor1).to.equal(armor2);
expect(key.decrypt('passphrase')).to.be.true;
expect(key.primaryKey.isDecrypted).to.be.true;
key.encrypt('new_passphrase');
expect(key.primaryKey.isDecrypted).to.be.false;
expect(key.decrypt('passphrase')).to.be.false;
expect(key.primaryKey.isDecrypted).to.be.false;
expect(key.decrypt('new_passphrase')).to.be.true;
expect(key.primaryKey.isDecrypted).to.be.true;
var armor3 = key.armor();
expect(armor3).to.not.equal(armor1);
done();
}).catch(done);
});
it('Generate key - ensure keyExpirationTime works', function(done) {
var expect_delta = 365 * 24 * 60 * 60;
var userId = 'test <a@b.com>';
var opt = {numBits: 512, userIds: userId, passphrase: '123', keyExpirationTime: expect_delta};
if (openpgp.util.getWebCryptoAll()) { opt.numBits = 2048; } // webkit webcrypto accepts minimum 2048 bit keys
openpgp.generateKey(opt).then(function(key) {
key = key.key;
var expiration = key.getExpirationTime();
expect(expiration).to.exist;
var actual_delta = (new Date(expiration) - new Date()) / 1000;
expect(Math.abs(actual_delta - expect_delta)).to.be.below(60);
done();
}).catch(done);
});
it('Sign and verify key - primary user', function(done) {
var key = openpgp.key.readArmored(pub_sig_test).keys[0];
var privateKey = openpgp.key.readArmored(priv_key_rsa).keys[0];
privateKey.decrypt('hello world');
key = key.signPrimaryUser([privateKey]);
var signatures = key.verifyPrimaryUser([privateKey]);
expect(signatures.length).to.equal(2);
expect(signatures[0].keyid.toHex()).to.equal(key.getSigningKeyPacket().getKeyId().toHex());
expect(signatures[0].valid).to.be.null;
expect(signatures[1].keyid.toHex()).to.equal(privateKey.getSigningKeyPacket().getKeyId().toHex());
expect(signatures[1].valid).to.be.true;
done();
});
it('Sign key and verify with wrong key - primary user', function(done) {
var key = openpgp.key.readArmored(pub_sig_test).keys[0];
var privateKey = openpgp.key.readArmored(priv_key_rsa).keys[0];
var wrongKey = openpgp.key.readArmored(wrong_key).keys[0];
privateKey.decrypt('hello world');
key = key.signPrimaryUser([privateKey]);
var signatures = key.verifyPrimaryUser([wrongKey]);
expect(signatures.length).to.equal(2);
expect(signatures[0].keyid.toHex()).to.equal(key.getSigningKeyPacket().getKeyId().toHex());
expect(signatures[0].valid).to.be.null;
expect(signatures[1].keyid.toHex()).to.equal(privateKey.getSigningKeyPacket().getKeyId().toHex());
expect(signatures[1].valid).to.be.null;
done();
});
it('Sign and verify key - all users', function(done) {
var key = openpgp.key.readArmored(multi_uid_key).keys[0];
var privateKey = openpgp.key.readArmored(priv_key_rsa).keys[0];
privateKey.decrypt('hello world');
key = key.signAllUsers([privateKey]);
var signatures = key.verifyAllUsers([privateKey]);
expect(signatures.length).to.equal(4);
expect(signatures[0].userid).to.equal(key.users[0].userId.userid);
expect(signatures[0].keyid.toHex()).to.equal(key.getSigningKeyPacket().getKeyId().toHex());
expect(signatures[0].valid).to.be.null;
expect(signatures[1].userid).to.equal(key.users[0].userId.userid);
expect(signatures[1].keyid.toHex()).to.equal(privateKey.getSigningKeyPacket().getKeyId().toHex());
expect(signatures[1].valid).to.be.true;
expect(signatures[2].userid).to.equal(key.users[1].userId.userid);
expect(signatures[2].keyid.toHex()).to.equal(key.getSigningKeyPacket().getKeyId().toHex());
expect(signatures[2].valid).to.be.null;
expect(signatures[3].userid).to.equal(key.users[1].userId.userid);
expect(signatures[3].keyid.toHex()).to.equal(privateKey.getSigningKeyPacket().getKeyId().toHex());
expect(signatures[3].valid).to.be.true;
done();
});
it('Sign key and verify with wrong key - all users', function(done) {
var key = openpgp.key.readArmored(multi_uid_key).keys[0];
var privateKey = openpgp.key.readArmored(priv_key_rsa).keys[0];
var wrongKey = openpgp.key.readArmored(wrong_key).keys[0];
privateKey.decrypt('hello world');
key = key.signAllUsers([privateKey]);
var signatures = key.verifyAllUsers([wrongKey]);
expect(signatures.length).to.equal(4);
expect(signatures[0].userid).to.equal(key.users[0].userId.userid);
expect(signatures[0].keyid.toHex()).to.equal(key.getSigningKeyPacket().getKeyId().toHex());
expect(signatures[0].valid).to.be.null;
expect(signatures[1].userid).to.equal(key.users[0].userId.userid);
expect(signatures[1].keyid.toHex()).to.equal(privateKey.getSigningKeyPacket().getKeyId().toHex());
expect(signatures[1].valid).to.be.null;
expect(signatures[2].userid).to.equal(key.users[1].userId.userid);
expect(signatures[2].keyid.toHex()).to.equal(key.getSigningKeyPacket().getKeyId().toHex());
expect(signatures[2].valid).to.be.null;
expect(signatures[3].userid).to.equal(key.users[1].userId.userid);
expect(signatures[3].keyid.toHex()).to.equal(privateKey.getSigningKeyPacket().getKeyId().toHex());
expect(signatures[3].valid).to.be.null;
done();
});
it('Reformat key without passphrase', function(done) {
var userId1 = 'test1 <a@b.com>';
var userId2 = 'test2 <b@a.com>';
var opt = {numBits: 512, userIds: userId1};
if (openpgp.util.getWebCryptoAll()) { opt.numBits = 2048; } // webkit webcrypto accepts minimum 2048 bit keys
openpgp.generateKey(opt).then(function(key) {
key = key.key
expect(key.users.length).to.equal(1);
expect(key.users[0].userId.userid).to.equal(userId1);
expect(key.primaryKey.isDecrypted).to.be.true;
opt.privateKey = key;
opt.userIds = userId2;
openpgp.reformatKey(opt).then(function(newKey) {
newKey = newKey.key
expect(newKey.users.length).to.equal(1);
expect(newKey.users[0].userId.userid).to.equal(userId2);
expect(newKey.primaryKey.isDecrypted).to.be.true;
done();
}).catch(done);
}).catch(done);
});
it('Reformat and encrypt key', function(done) {
var userId1 = 'test1 <a@b.com>';
var userId2 = 'test2 <b@c.com>';
var userId3 = 'test3 <c@d.com>';
var opt = {numBits: 512, userIds: userId1};
if (openpgp.util.getWebCryptoAll()) { opt.numBits = 2048; } // webkit webcrypto accepts minimum 2048 bit keys
openpgp.generateKey(opt).then(function(key) {
key = key.key
opt.privateKey = key;
opt.userIds = [userId2, userId3];
opt.passphrase = '123';
openpgp.reformatKey(opt).then(function(newKey) {
newKey = newKey.key
expect(newKey.users.length).to.equal(2);
expect(newKey.users[0].userId.userid).to.equal(userId2);
expect(newKey.primaryKey.isDecrypted).to.be.false;
newKey.decrypt('123');
expect(newKey.primaryKey.isDecrypted).to.be.true;
done();
}).catch(done);
}).catch(done);
});
it('Sign and encrypt with reformatted key', function(done) {
var userId1 = 'test1 <a@b.com>';
var userId2 = 'test2 <b@a.com>';
var opt = {numBits: 512, userIds: userId1};
if (openpgp.util.getWebCryptoAll()) { opt.numBits = 2048; } // webkit webcrypto accepts minimum 2048 bit keys
openpgp.generateKey(opt).then(function(key) {
key = key.key
opt.privateKey = key;
opt.userIds = userId2;
openpgp.reformatKey(opt).then(function(newKey) {
newKey = newKey.key
openpgp.encrypt({data: 'hello', publicKeys: newKey.toPublic(), privateKeys: newKey, armor: true}).then(function(encrypted) {
openpgp.decrypt({message: openpgp.message.readArmored(encrypted.data), privateKey: newKey, publicKeys: newKey.toPublic()}).then(function(decrypted) {
expect(decrypted.data).to.equal('hello');
expect(decrypted.signatures[0].valid).to.be.true;
done();
}).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();
});
});