@protontech/openpgp 4.10.8 → 5.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +311 -239
- package/dist/lightweight/bn.interface.min.mjs +3 -0
- package/dist/lightweight/bn.interface.min.mjs.map +1 -0
- package/dist/lightweight/bn.interface.mjs +340 -0
- package/dist/lightweight/bn.min.mjs +3 -0
- package/dist/lightweight/bn.min.mjs.map +1 -0
- package/dist/lightweight/bn.mjs +3434 -0
- package/dist/lightweight/elliptic.min.mjs +3 -0
- package/dist/lightweight/elliptic.min.mjs.map +1 -0
- package/dist/lightweight/elliptic.mjs +4313 -0
- package/dist/lightweight/openpgp.min.mjs +3 -0
- package/dist/lightweight/openpgp.min.mjs.map +1 -0
- package/dist/lightweight/openpgp.mjs +31375 -0
- package/dist/lightweight/ponyfill.es6.min.mjs +3 -0
- package/dist/lightweight/ponyfill.es6.min.mjs.map +1 -0
- package/dist/lightweight/ponyfill.es6.mjs +3831 -0
- package/dist/lightweight/web-streams-adapter.min.mjs +17 -0
- package/dist/lightweight/web-streams-adapter.min.mjs.map +1 -0
- package/dist/lightweight/web-streams-adapter.mjs +561 -0
- package/dist/node/openpgp.js +43943 -0
- package/dist/node/openpgp.min.js +17 -0
- package/dist/node/openpgp.min.js.map +1 -0
- package/dist/node/openpgp.min.mjs +17 -0
- package/dist/node/openpgp.min.mjs.map +1 -0
- package/dist/node/openpgp.mjs +43880 -0
- package/dist/openpgp.js +41077 -41609
- package/dist/openpgp.min.js +17 -2
- package/dist/openpgp.min.js.map +1 -0
- package/dist/openpgp.min.mjs +17 -0
- package/dist/openpgp.min.mjs.map +1 -0
- package/dist/openpgp.mjs +43868 -0
- package/lightweight/package.json +5 -0
- package/openpgp.d.ts +889 -0
- package/package.json +63 -57
- package/dist/compat/openpgp.js +0 -61152
- package/dist/compat/openpgp.min.js +0 -2
- package/dist/compat/openpgp.worker.js +0 -173
- package/dist/compat/openpgp.worker.min.js +0 -2
- package/dist/lightweight/elliptic.min.js +0 -5
- package/dist/lightweight/openpgp.js +0 -40071
- package/dist/lightweight/openpgp.min.js +0 -2
- package/dist/lightweight/openpgp.worker.js +0 -173
- package/dist/lightweight/openpgp.worker.min.js +0 -2
- package/dist/openpgp.worker.js +0 -173
- package/dist/openpgp.worker.min.js +0 -2
- package/src/cleartext.js +0 -220
- package/src/config/config.js +0 -232
- package/src/config/index.js +0 -7
- package/src/config/localStorage.js +0 -35
- package/src/crypto/aes_kw.js +0 -153
- package/src/crypto/cfb.js +0 -169
- package/src/crypto/cipher/aes.js +0 -27
- package/src/crypto/cipher/blowfish.js +0 -398
- package/src/crypto/cipher/cast5.js +0 -610
- package/src/crypto/cipher/des.js +0 -476
- package/src/crypto/cipher/index.js +0 -91
- package/src/crypto/cipher/twofish.js +0 -346
- package/src/crypto/cmac.js +0 -98
- package/src/crypto/crypto.js +0 -394
- package/src/crypto/eax.js +0 -172
- package/src/crypto/gcm.js +0 -141
- package/src/crypto/hash/index.js +0 -163
- package/src/crypto/hash/md5.js +0 -205
- package/src/crypto/index.js +0 -57
- package/src/crypto/ocb.js +0 -274
- package/src/crypto/pkcs1.js +0 -170
- package/src/crypto/pkcs5.js +0 -55
- package/src/crypto/public_key/dsa.js +0 -188
- package/src/crypto/public_key/elgamal.js +0 -137
- package/src/crypto/public_key/elliptic/curves.js +0 -385
- package/src/crypto/public_key/elliptic/ecdh.js +0 -414
- package/src/crypto/public_key/elliptic/ecdsa.js +0 -348
- package/src/crypto/public_key/elliptic/eddsa.js +0 -119
- package/src/crypto/public_key/elliptic/index.js +0 -34
- package/src/crypto/public_key/elliptic/indutnyKey.js +0 -85
- package/src/crypto/public_key/index.js +0 -28
- package/src/crypto/public_key/prime.js +0 -275
- package/src/crypto/public_key/rsa.js +0 -597
- package/src/crypto/random.js +0 -145
- package/src/crypto/signature.js +0 -137
- package/src/encoding/armor.js +0 -433
- package/src/encoding/base64.js +0 -96
- package/src/enums.js +0 -493
- package/src/hkp.js +0 -89
- package/src/index.js +0 -161
- package/src/key/factory.js +0 -326
- package/src/key/helper.js +0 -378
- package/src/key/index.js +0 -32
- package/src/key/key.js +0 -888
- package/src/key/subkey.js +0 -187
- package/src/key/user.js +0 -230
- package/src/keyring/index.js +0 -12
- package/src/keyring/keyring.js +0 -229
- package/src/keyring/localstore.js +0 -119
- package/src/lightweight_helper.js +0 -26
- package/src/message.js +0 -825
- package/src/openpgp.js +0 -717
- package/src/packet/all_packets.js +0 -116
- package/src/packet/clone.js +0 -189
- package/src/packet/compressed.js +0 -194
- package/src/packet/index.js +0 -20
- package/src/packet/literal.js +0 -168
- package/src/packet/marker.js +0 -62
- package/src/packet/one_pass_signature.js +0 -156
- package/src/packet/packet.js +0 -300
- package/src/packet/packetlist.js +0 -232
- package/src/packet/public_key.js +0 -280
- package/src/packet/public_key_encrypted_session_key.js +0 -161
- package/src/packet/public_subkey.js +0 -44
- package/src/packet/secret_key.js +0 -468
- package/src/packet/secret_subkey.js +0 -41
- package/src/packet/signature.js +0 -786
- package/src/packet/sym_encrypted_aead_protected.js +0 -189
- package/src/packet/sym_encrypted_integrity_protected.js +0 -139
- package/src/packet/sym_encrypted_session_key.js +0 -204
- package/src/packet/symmetrically_encrypted.js +0 -118
- package/src/packet/trust.js +0 -35
- package/src/packet/user_attribute.js +0 -94
- package/src/packet/userid.js +0 -87
- package/src/polyfills.js +0 -64
- package/src/signature.js +0 -73
- package/src/type/ecdh_symkey.js +0 -69
- package/src/type/kdf_params.js +0 -114
- package/src/type/keyid.js +0 -110
- package/src/type/mpi.js +0 -138
- package/src/type/oid.js +0 -110
- package/src/type/s2k.js +0 -203
- package/src/util.js +0 -836
- package/src/wkd.js +0 -84
- package/src/worker/async_proxy.js +0 -190
- package/src/worker/worker.js +0 -167
- package/test/crypto/aes_kw.js +0 -57
- package/test/crypto/cipher/aes.js +0 -86
- package/test/crypto/cipher/blowfish.js +0 -58
- package/test/crypto/cipher/cast5.js +0 -25
- package/test/crypto/cipher/des.js +0 -143
- package/test/crypto/cipher/index.js +0 -7
- package/test/crypto/cipher/twofish.js +0 -71
- package/test/crypto/crypto.js +0 -383
- package/test/crypto/eax.js +0 -150
- package/test/crypto/ecdh.js +0 -359
- package/test/crypto/elliptic.js +0 -251
- package/test/crypto/elliptic_data.js +0 -102
- package/test/crypto/hash/index.js +0 -5
- package/test/crypto/hash/md5.js +0 -16
- package/test/crypto/hash/ripemd.js +0 -14
- package/test/crypto/hash/sha.js +0 -20
- package/test/crypto/index.js +0 -14
- package/test/crypto/ocb.js +0 -183
- package/test/crypto/pkcs5.js +0 -39
- package/test/crypto/random.js +0 -79
- package/test/crypto/rsa.js +0 -180
- package/test/crypto/validate.js +0 -387
- package/test/general/armor.js +0 -408
- package/test/general/brainpool.js +0 -360
- package/test/general/decompression.js +0 -60
- package/test/general/ecc_nist.js +0 -115
- package/test/general/ecc_secp256k1.js +0 -242
- package/test/general/forwarding.js +0 -43
- package/test/general/hkp.js +0 -165
- package/test/general/index.js +0 -20
- package/test/general/key.js +0 -3491
- package/test/general/keyring.js +0 -336
- package/test/general/oid.js +0 -39
- package/test/general/openpgp.js +0 -2577
- package/test/general/packet.js +0 -950
- package/test/general/signature.js +0 -1715
- package/test/general/streaming.js +0 -944
- package/test/general/testInputs.js +0 -18
- package/test/general/util.js +0 -183
- package/test/general/wkd.js +0 -48
- package/test/general/x25519.js +0 -556
- package/test/unittests.js +0 -64
|
@@ -1,1715 +0,0 @@
|
|
|
1
|
-
const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : require('../../dist/openpgp');
|
|
2
|
-
|
|
3
|
-
const chai = require('chai');
|
|
4
|
-
chai.use(require('chai-as-promised'));
|
|
5
|
-
|
|
6
|
-
const expect = chai.expect;
|
|
7
|
-
|
|
8
|
-
describe("Signature", function() {
|
|
9
|
-
const priv_key_arm1 =
|
|
10
|
-
['-----BEGIN PGP PRIVATE KEY BLOCK-----',
|
|
11
|
-
'Version: GnuPG v1.4.11 (GNU/Linux)',
|
|
12
|
-
'',
|
|
13
|
-
'lQHhBFERnrMRBADmM0hIfkI3yosjgbWo9v0Lnr3CCE+8KsMszgVS+hBu0XfGraKm',
|
|
14
|
-
'ivcA2aaJimHqVYOP7gEnwFAxHBBpeTJcu5wzCFyJwEYqVeS3nnaIhBPplSF14Duf',
|
|
15
|
-
'i6bB9RV7KxVAg6aunmM2tAutqC+a0y2rDaf7jkJoZ9gWJe2zI+vraD6fiwCgxvHo',
|
|
16
|
-
'3IgULB9RqIqpLoMgXfcjC+cD/1jeJlKRm+n71ryYwT/ECKsspFz7S36z6q3XyS8Q',
|
|
17
|
-
'QfrsUz2p1fbFicvJwIOJ8B20J/N2/nit4P0gBUTUxv3QEa7XCM/56/xrGkyBzscW',
|
|
18
|
-
'AzBoy/AK9K7GN6z13RozuAS60F1xO7MQc6Yi2VU3eASDQEKiyL/Ubf/s/rkZ+sGj',
|
|
19
|
-
'yJizBACtwCbQzA+z9XBZNUat5NPgcZz5Qeh1nwF9Nxnr6pyBv7tkrLh/3gxRGHqG',
|
|
20
|
-
'063dMbUk8pmUcJzBUyRsNiIPDoEUsLjY5zmZZmp/waAhpREsnK29WLCbqLdpUors',
|
|
21
|
-
'c1JJBsObkA1IM8TZY8YUmvsMEvBLCCanuKpclZZXqeRAeOHJ0v4DAwK8WfuTe5B+',
|
|
22
|
-
'M2BOOeZbN8BpfiA1l//fMMHLRS3UvbLBv4P1+4SyvhyYTR7M76Q0xPc03MFOWHL+',
|
|
23
|
-
'S9VumbQWVGVzdDIgPHRlc3QyQHRlc3QuY29tPohiBBMRAgAiBQJREZ6zAhsDBgsJ',
|
|
24
|
-
'CAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRARJ5QDyxae+MXNAKCzWSDR3tMrTrDb',
|
|
25
|
-
'TAri73N1Xb3j1ACfSl9y+SAah2q7GvmiR1+6+/ekqJGdAVgEURGesxAEANlpMZjW',
|
|
26
|
-
'33jMxlKHDdyRFXtKOq8RreXhq00plorHbgz9zFEWm4VF53+E/KGnmHGyY5Cy8TKy',
|
|
27
|
-
'ZjaueZZ9XuG0huZg5If68irFfNZtxdA26jv8//PdZ0Uj+X6J3RVa2peMLDDswTYL',
|
|
28
|
-
'OL1ZO1fxdtDD40fdAiIZ1QyjwEG0APtz41EfAAMFBAC5/dtgBBPtHe8UjDBaUe4n',
|
|
29
|
-
'NzHuUBBp6XE+H7eqHNFCuZAJ7yqJLGVHNIaQR419cNy08/OO/+YUQ7rg78LxjFiv',
|
|
30
|
-
'CH7IzhfU+6yvELSbgRMicY6EnAP2GT+b1+MtFNa3lBGtBHcJla52c2rTAHthYZWk',
|
|
31
|
-
'fT5R5DnJuQ2cJHBMS9HWyP4DAwK8WfuTe5B+M2C7a/YJSUv6SexdGCaiaTcAm6g/',
|
|
32
|
-
'PvA6hw/FLzIEP67QcQSSTmhftQIwnddt4S4MyJJH3U4fJaFfYQ1zCniYJohJBBgR',
|
|
33
|
-
'AgAJBQJREZ6zAhsMAAoJEBEnlAPLFp74QbMAn3V4857xwnO9/+vzIVnL93W3k0/8',
|
|
34
|
-
'AKC8omYPPomN1E/UJFfXdLDIMi5LoA==',
|
|
35
|
-
'=LSrW',
|
|
36
|
-
'-----END PGP PRIVATE KEY BLOCK-----'].join("\n");
|
|
37
|
-
|
|
38
|
-
const priv_key_arm1_stripped =
|
|
39
|
-
['-----BEGIN PGP PRIVATE KEY BLOCK-----',
|
|
40
|
-
'Version: GnuPG v1.4.11 (GNU/Linux)',
|
|
41
|
-
'',
|
|
42
|
-
'lQGqBFERnrMRBADmM0hIfkI3yosjgbWo9v0Lnr3CCE+8KsMszgVS+hBu0XfGraKm',
|
|
43
|
-
'ivcA2aaJimHqVYOP7gEnwFAxHBBpeTJcu5wzCFyJwEYqVeS3nnaIhBPplSF14Duf',
|
|
44
|
-
'i6bB9RV7KxVAg6aunmM2tAutqC+a0y2rDaf7jkJoZ9gWJe2zI+vraD6fiwCgxvHo',
|
|
45
|
-
'3IgULB9RqIqpLoMgXfcjC+cD/1jeJlKRm+n71ryYwT/ECKsspFz7S36z6q3XyS8Q',
|
|
46
|
-
'QfrsUz2p1fbFicvJwIOJ8B20J/N2/nit4P0gBUTUxv3QEa7XCM/56/xrGkyBzscW',
|
|
47
|
-
'AzBoy/AK9K7GN6z13RozuAS60F1xO7MQc6Yi2VU3eASDQEKiyL/Ubf/s/rkZ+sGj',
|
|
48
|
-
'yJizBACtwCbQzA+z9XBZNUat5NPgcZz5Qeh1nwF9Nxnr6pyBv7tkrLh/3gxRGHqG',
|
|
49
|
-
'063dMbUk8pmUcJzBUyRsNiIPDoEUsLjY5zmZZmp/waAhpREsnK29WLCbqLdpUors',
|
|
50
|
-
'c1JJBsObkA1IM8TZY8YUmvsMEvBLCCanuKpclZZXqeRAeOHJ0v4DZQJHTlUBtBZU',
|
|
51
|
-
'ZXN0MiA8dGVzdDJAdGVzdC5jb20+iGIEExECACIFAlERnrMCGwMGCwkIBwMCBhUI',
|
|
52
|
-
'AgkKCwQWAgMBAh4BAheAAAoJEBEnlAPLFp74xc0AoLNZINHe0ytOsNtMCuLvc3Vd',
|
|
53
|
-
'vePUAJ9KX3L5IBqHarsa+aJHX7r796SokZ0BWARREZ6zEAQA2WkxmNbfeMzGUocN',
|
|
54
|
-
'3JEVe0o6rxGt5eGrTSmWisduDP3MURabhUXnf4T8oaeYcbJjkLLxMrJmNq55ln1e',
|
|
55
|
-
'4bSG5mDkh/ryKsV81m3F0DbqO/z/891nRSP5fondFVral4wsMOzBNgs4vVk7V/F2',
|
|
56
|
-
'0MPjR90CIhnVDKPAQbQA+3PjUR8AAwUEALn922AEE+0d7xSMMFpR7ic3Me5QEGnp',
|
|
57
|
-
'cT4ft6oc0UK5kAnvKoksZUc0hpBHjX1w3LTz847/5hRDuuDvwvGMWK8IfsjOF9T7',
|
|
58
|
-
'rK8QtJuBEyJxjoScA/YZP5vX4y0U1reUEa0EdwmVrnZzatMAe2FhlaR9PlHkOcm5',
|
|
59
|
-
'DZwkcExL0dbI/gMDArxZ+5N7kH4zYLtr9glJS/pJ7F0YJqJpNwCbqD8+8DqHD8Uv',
|
|
60
|
-
'MgQ/rtBxBJJOaF+1AjCd123hLgzIkkfdTh8loV9hDXMKeJgmiEkEGBECAAkFAlER',
|
|
61
|
-
'nrMCGwwACgkQESeUA8sWnvhBswCfdXjznvHCc73/6/MhWcv3dbeTT/wAoLyiZg8+',
|
|
62
|
-
'iY3UT9QkV9d0sMgyLkug',
|
|
63
|
-
'=GQsY',
|
|
64
|
-
'-----END PGP PRIVATE KEY BLOCK-----'].join("\n");
|
|
65
|
-
|
|
66
|
-
const pub_key_arm1 =
|
|
67
|
-
['-----BEGIN PGP PUBLIC KEY BLOCK-----',
|
|
68
|
-
'Version: GnuPG v1.4.11 (GNU/Linux)',
|
|
69
|
-
'',
|
|
70
|
-
'mQGiBFERlw4RBAD6Bmcf2w1dtUmtCLkdxeqZLArk3vYoQAjdibxA3gXVyur7fsWb',
|
|
71
|
-
'ro0jVbBHqOCtC6jDxE2l52NP9+tTlWeVMaqqNvUE47LSaPq2DGI8Wx1Rj6bF3mTs',
|
|
72
|
-
'obYEwhGbGh/MhJnME9AHODarvk8AZbzo0+k1EwrBWF6dTUBPfqO7rGU2ewCg80WV',
|
|
73
|
-
'x5pt3evj8rRK3jQ8SMKTNRsD/1PhTdxdZTdXARAFzcW1VaaruWW0Rr1+XHKKwDCz',
|
|
74
|
-
'i7HE76SO9qjnQfZCZG75CdQxI0h8GFeN3zsDqmhob2iSz2aJ1krtjM+iZ1FBFd57',
|
|
75
|
-
'OqCV6wmk5IT0RBN12ZzMS19YvzN/ONXHrmTZlKExd9Mh9RKLeVNw+bf6JsKQEzcY',
|
|
76
|
-
'JzFkBACX9X+hDYchO/2hiTwx4iOO9Fhsuh7eIWumB3gt+aUpm1jrSbas/QLTymmk',
|
|
77
|
-
'uZuQVXI4NtnlvzlNgWv4L5s5RU5WqNGG7WSaKNdcrvJZRC2dgbUJt04J5CKrWp6R',
|
|
78
|
-
'aIYal/81Ut1778lU01PEt563TcQnUBlnjU5OR25KhfSeN5CZY7QUVGVzdCA8dGVz',
|
|
79
|
-
'dEB0ZXN0LmNvbT6IYgQTEQIAIgUCURGXDgIbAwYLCQgHAwIGFQgCCQoLBBYCAwEC',
|
|
80
|
-
'HgECF4AACgkQikDlZK/UvLSspgCfcNaOpTg1W2ucR1JwBbBGvaERfuMAnRgt3/rs',
|
|
81
|
-
'EplqEakMckCtikEnpxYe',
|
|
82
|
-
'=b2Ln',
|
|
83
|
-
'-----END PGP PUBLIC KEY BLOCK-----'].join("\n");
|
|
84
|
-
|
|
85
|
-
const msg_arm1 =
|
|
86
|
-
['-----BEGIN PGP MESSAGE-----',
|
|
87
|
-
'Version: GnuPG v1.4.11 (GNU/Linux)',
|
|
88
|
-
'',
|
|
89
|
-
'hQEOA1N4OCSSjECBEAP/diDJCQn4e88193PgqhbfAkohk9RQ0v0MPnXpJbCRTHKO',
|
|
90
|
-
'8r9nxiAr/TQv4ZOingXdAp2JZEoE9pXxZ3r1UWew04czxmgJ8FP1ztZYWVFAWFVi',
|
|
91
|
-
'Tj930TBD7L1fY/MD4fK6xjEG7z5GT8k4tn4mLm/PpWMbarIglfMopTy1M/py2cID',
|
|
92
|
-
'/2Sj7Ikh3UFiG+zm4sViYc5roNbMy8ixeoKixxi99Mx8INa2cxNfqbabjblFyc0Z',
|
|
93
|
-
'BwmbIc+ZiY2meRNI5y/tk0gRD7hT84IXGGl6/mH00bsX/kkWdKGeTvz8s5G8RDHa',
|
|
94
|
-
'Za4HgLbXItkX/QarvRS9kvkD01ujHfj+1ZvgmOBttNfP0p8BQLIICqvg1eYD9aPB',
|
|
95
|
-
'+GtOZ2F3+k5VyBL5yIn/s65SBjNO8Fqs3aL0x+p7s1cfUzx8J8a8nWpqq/qIQIqg',
|
|
96
|
-
'ZJH6MZRKuQwscwH6NWgsSVwcnVCAXnYOpbHxFQ+j7RbF/+uiuqU+DFH/Rd5pik8b',
|
|
97
|
-
'0Dqnp0yfefrkjQ0nuvubgB6Rv89mHpnvuJfFJRInpg4lrHwLvRwdpN2HDozFHcKK',
|
|
98
|
-
'aOU=',
|
|
99
|
-
'=4iGt',
|
|
100
|
-
'-----END PGP MESSAGE-----'].join("\n");
|
|
101
|
-
|
|
102
|
-
const priv_key_arm2 =
|
|
103
|
-
['-----BEGIN PGP PRIVATE KEY BLOCK-----',
|
|
104
|
-
'Version: GnuPG v2.0.19 (GNU/Linux)',
|
|
105
|
-
'',
|
|
106
|
-
'lQH+BFJhL04BBADclrUEDDsm0PSZbQ6pml9FpzTyXiyCyDN+rMOsy9J300Oc10kt',
|
|
107
|
-
'/nyBej9vZSRcaW5VpNNj0iA+c1/w2FPf84zNsTzvDmuMaNHFUzky4/vkYuZra//3',
|
|
108
|
-
'+Ri7CF8RawSYQ/4IRbC9zqdBlzniyfQOW7Dp/LYe8eibnDSrmkQem0G0jwARAQAB',
|
|
109
|
-
'/gMDAu7L//czBpE40p1ZqO8K3k7UejemjsQqc7kOqnlDYd1Z6/3NEA/UM30Siipr',
|
|
110
|
-
'KjdIFY5+hp0hcs6EiiNq0PDfm/W2j+7HfrZ5kpeQVxDek4irezYZrl7JS2xezaLv',
|
|
111
|
-
'k0Fv/6fxasnFtjOM6Qbstu67s5Gpl9y06ZxbP3VpT62+Xeibn/swWrfiJjuGEEhM',
|
|
112
|
-
'bgnsMpHtzAz/L8y6KSzViG/05hBaqrvk3/GeEA6nE+o0+0a6r0LYLTemmq6FbaA1',
|
|
113
|
-
'PHo+x7k7oFcBFUUeSzgx78GckuPwqr2mNfeF+IuSRnrlpZl3kcbHASPAOfEkyMXS',
|
|
114
|
-
'sWGE7grCAjbyQyM3OEXTSyqnehvGS/1RdB6kDDxGwgE/QFbwNyEh6K4eaaAThW2j',
|
|
115
|
-
'IEEI0WEnRkPi9fXyxhFsCLSI1XhqTaq7iDNqJTxE+AX2b9ZuZXAxI3Tc/7++vEyL',
|
|
116
|
-
'3p18N/MB2kt1Wb1azmXWL2EKlT1BZ5yDaJuBQ8BhphM3tCRUZXN0IE1jVGVzdGlu',
|
|
117
|
-
'Z3RvbiA8dGVzdEBleGFtcGxlLmNvbT6IuQQTAQIAIwUCUmEvTgIbLwcLCQgHAwIB',
|
|
118
|
-
'BhUIAgkKCwQWAgMBAh4BAheAAAoJEEpjYTpNbkCUMAwD+gIK08qpEZSVas9qW+Ok',
|
|
119
|
-
'32wzNkwxe6PQgZwcyBqMQYZUcKagC8+89pMQQ5sKUGvpIgat42Tf1KLGPcvG4cDA',
|
|
120
|
-
'JZ6w2PYz9YHQqPh9LA+PAnV8m25TcGmKcKgvFUqQ3U53X/Y9sBP8HooRqfwwHcv9',
|
|
121
|
-
'pMgQmojmNbI4VHydRqIBePawnQH+BFJhL04BBADpH8+0EVolpPiOrXTKoBKTiyrB',
|
|
122
|
-
'UyxzodyJ8zmVJ3HMTEU/vidpQwzISwoc/ndDFMXQauq6xqBCD9m2BPQI3UdQzXnb',
|
|
123
|
-
'LsAI52nWCIqOkzM5NAKWoKhyXK9Y4UH4v9LAYQgl/stIISvCgG4mJ8lzzEBWvRdf',
|
|
124
|
-
'Qm2Ghb64/3V5NDdemwARAQAB/gMDAu7L//czBpE40iPcpLzL7GwBbWFhSWgSLy53',
|
|
125
|
-
'Md99Kxw3cApWCok2E8R9/4VS0490xKZIa5y2I/K8thVhqk96Z8Kbt7MRMC1WLHgC',
|
|
126
|
-
'qJvkeQCI6PrFM0PUIPLHAQtDJYKtaLXxYuexcAdKzZj3FHdtLNWCooK6n3vJlL1c',
|
|
127
|
-
'WjZcHJ1PH7USlj1jup4XfxsbziuysRUSyXkjn92GZLm+64vCIiwhqAYoizF2NHHG',
|
|
128
|
-
'hRTN4gQzxrxgkeVchl+ag7DkQUDANIIVI+A63JeLJgWJiH1fbYlwESByHW+zBFNt',
|
|
129
|
-
'qStjfIOhjrfNIc3RvsggbDdWQLcbxmLZj4sB0ydPSgRKoaUdRHJY0S4vp9ouKOtl',
|
|
130
|
-
'2au/P1BP3bhD0fDXl91oeheYth+MSmsJFDg/vZJzCJhFaQ9dp+2EnjN5auNCNbaI',
|
|
131
|
-
'beFJRHFf9cha8p3hh+AK54NRCT++B2MXYf+TPwqX88jYMBv8kk8vYUgo8128r1zQ',
|
|
132
|
-
'EzjviQE9BBgBAgAJBQJSYS9OAhsuAKgJEEpjYTpNbkCUnSAEGQECAAYFAlJhL04A',
|
|
133
|
-
'CgkQ4IT3RGwgLJe6ogQA2aaJEIBIXtgrs+8WSJ4k3DN4rRXcXaUZf667pjdD9nF2',
|
|
134
|
-
'3BzjFH6Z78JIGaxRHJdM7b05aE8YuzM8f3NIlT0F0OLq/TI2muYU9f/U2DQBuf+w',
|
|
135
|
-
'KTB62+PELVgi9MsXC1Qv/u/o1LZtmmxTFFOD35xKsxZZI2OJj2pQpqObW27M8Nlc',
|
|
136
|
-
'BQQAw2YA3fFc38qPK+PY4rZyTRdbvjyyX+1zeqIo8wn7QCQwXs+OGaH2fGoT35AI',
|
|
137
|
-
'SXuqKcWqoEuO7OBSEFThCXBfUYMC01OrqKEswPm/V3zZkLu01q12UMwZach28QwK',
|
|
138
|
-
'/YZly4ioND2tdazj17u2rU2dwtiHPe1iMqGgVMoQirfLc+k=',
|
|
139
|
-
'=lw5e',
|
|
140
|
-
'-----END PGP PRIVATE KEY BLOCK-----'].join('\n');
|
|
141
|
-
|
|
142
|
-
const pub_key_arm2 =
|
|
143
|
-
['-----BEGIN PGP PUBLIC KEY BLOCK-----',
|
|
144
|
-
'Version: GnuPG v2.0.19 (GNU/Linux)',
|
|
145
|
-
'',
|
|
146
|
-
'mI0EUmEvTgEEANyWtQQMOybQ9JltDqmaX0WnNPJeLILIM36sw6zL0nfTQ5zXSS3+',
|
|
147
|
-
'fIF6P29lJFxpblWk02PSID5zX/DYU9/zjM2xPO8Oa4xo0cVTOTLj++Ri5mtr//f5',
|
|
148
|
-
'GLsIXxFrBJhD/ghFsL3Op0GXOeLJ9A5bsOn8th7x6JucNKuaRB6bQbSPABEBAAG0',
|
|
149
|
-
'JFRlc3QgTWNUZXN0aW5ndG9uIDx0ZXN0QGV4YW1wbGUuY29tPoi5BBMBAgAjBQJS',
|
|
150
|
-
'YS9OAhsvBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQSmNhOk1uQJQwDAP6',
|
|
151
|
-
'AgrTyqkRlJVqz2pb46TfbDM2TDF7o9CBnBzIGoxBhlRwpqALz7z2kxBDmwpQa+ki',
|
|
152
|
-
'Bq3jZN/UosY9y8bhwMAlnrDY9jP1gdCo+H0sD48CdXybblNwaYpwqC8VSpDdTndf',
|
|
153
|
-
'9j2wE/weihGp/DAdy/2kyBCaiOY1sjhUfJ1GogF49rC4jQRSYS9OAQQA6R/PtBFa',
|
|
154
|
-
'JaT4jq10yqASk4sqwVMsc6HcifM5lSdxzExFP74naUMMyEsKHP53QxTF0Grqusag',
|
|
155
|
-
'Qg/ZtgT0CN1HUM152y7ACOdp1giKjpMzOTQClqCoclyvWOFB+L/SwGEIJf7LSCEr',
|
|
156
|
-
'woBuJifJc8xAVr0XX0JthoW+uP91eTQ3XpsAEQEAAYkBPQQYAQIACQUCUmEvTgIb',
|
|
157
|
-
'LgCoCRBKY2E6TW5AlJ0gBBkBAgAGBQJSYS9OAAoJEOCE90RsICyXuqIEANmmiRCA',
|
|
158
|
-
'SF7YK7PvFkieJNwzeK0V3F2lGX+uu6Y3Q/Zxdtwc4xR+me/CSBmsURyXTO29OWhP',
|
|
159
|
-
'GLszPH9zSJU9BdDi6v0yNprmFPX/1Ng0Abn/sCkwetvjxC1YIvTLFwtUL/7v6NS2',
|
|
160
|
-
'bZpsUxRTg9+cSrMWWSNjiY9qUKajm1tuzPDZXAUEAMNmAN3xXN/Kjyvj2OK2ck0X',
|
|
161
|
-
'W748sl/tc3qiKPMJ+0AkMF7Pjhmh9nxqE9+QCEl7qinFqqBLjuzgUhBU4QlwX1GD',
|
|
162
|
-
'AtNTq6ihLMD5v1d82ZC7tNatdlDMGWnIdvEMCv2GZcuIqDQ9rXWs49e7tq1NncLY',
|
|
163
|
-
'hz3tYjKhoFTKEIq3y3Pp',
|
|
164
|
-
'=h/aX',
|
|
165
|
-
'-----END PGP PUBLIC KEY BLOCK-----'].join('\n');
|
|
166
|
-
|
|
167
|
-
const pub_key_arm3 =
|
|
168
|
-
['-----BEGIN PGP PUBLIC KEY BLOCK-----',
|
|
169
|
-
'Version: GnuPG v2.0.19 (GNU/Linux)',
|
|
170
|
-
'',
|
|
171
|
-
'mQENBFKV0FUBCACtZliApy01KBGbGNB36YGH4lpr+5KoqF1I8A5IT0YeNjyGisOk',
|
|
172
|
-
'WsDsUzOqaNvgzQ82I3MY/jQV5rLBhH/6LiRmCA16WkKcqBrHfNGIxJ+Q+ofVBHUb',
|
|
173
|
-
'aS9ClXYI88j747QgWzirnLuEA0GfilRZcewII1pDA/G7+m1HwV4qHsPataYLeboq',
|
|
174
|
-
'hPA3h1EVVQFMAcwlqjOuS8+weHQRfNVRGQdRMm6H7166PseDVRUHdkJpVaKFhptg',
|
|
175
|
-
'rDoNI0lO+UujdqeF1o5tVZ0j/s7RbyBvdLTXNuBbcpq93ceSWuJPZmi1XztQXKYe',
|
|
176
|
-
'y0f+ltgVtZDEc7TGV5WDX9erRECCcA3+s7J3ABEBAAG0G0pTIENyeXB0byA8ZGlm',
|
|
177
|
-
'ZmllQGhvbWUub3JnPokBPwQTAQIAKQUCUpXQVQIbAwUJCWYBgAcLCQgHAwIBBhUI',
|
|
178
|
-
'AgkKCwQWAgMBAh4BAheAAAoJENvyI+hwU030yRAIAKX/mGEgi/miqasbbQoyK/CS',
|
|
179
|
-
'a7sRxgZwOWQLdi2xxpE5V4W4HJIDNLJs5vGpRN4mmcNK2fmJAh74w0PskmVgJEhP',
|
|
180
|
-
'dFJ14UC3fFPq5nbqkBl7hU0tDP5jZxo9ruQZfDOWpHKxOCz5guYJ0CW97bz4fChZ',
|
|
181
|
-
'NFDyfU7VsJQwRIoViVcMCipP0fVZQkIhhwpzQpmVmN8E0a6jWezTZv1YpMdlzbEf',
|
|
182
|
-
'H79l3StaOh9/Un9CkIyqEWdYiKvIYms9nENyehN7r/OKYN3SW+qlt5GaL+ws+N1w',
|
|
183
|
-
'6kEZjPFwnsr+Y4A3oHcAwXq7nfOz71USojSmmo8pgdN8je16CP98vw3/k6TncLS5',
|
|
184
|
-
'AQ0EUpXQVQEIAMEjHMeqg7B04FliUFWr/8C6sJDb492MlGAWgghIbnuJfXAnUGdN',
|
|
185
|
-
'oAzn0S+n93Y/qHbW6YcjHD4/G+kK3MuxthAFqcVjdHZQXK0rkhXO/u1co7v1cdtk',
|
|
186
|
-
'OTEcyOpyLXolM/1S2UYImhrml7YulTHMnWVja7xu6QIRso+7HBFT/u9D47L/xXrX',
|
|
187
|
-
'MzXFVZfBtVY+yoeTrOY3OX9cBMOAu0kuN9eT18Yv2yi6XMzP3iONVHtl6HfFrAA7',
|
|
188
|
-
'kAtx4ne0jgAPWZ+a8hMy59on2ZFs/AvSpJtSc1kw/vMTWkyVP1Ky20vAPHQ6Ej5q',
|
|
189
|
-
'1NGJ/JbcFgolvEeI/3uDueLjj4SdSIbLOXMAEQEAAYkBJQQYAQIADwUCUpXQVQIb',
|
|
190
|
-
'DAUJCWYBgAAKCRDb8iPocFNN9NLkB/wO4iRxia0zf4Kw2RLVZG8qcuo3Bw9UTXYY',
|
|
191
|
-
'lI0AutoLNnSURMLLCq6rcJ0BCXGj/2iZ0NBxZq3t5vbRh6uUv+hpiSxK1nF7AheN',
|
|
192
|
-
'4aAAzhbWx0UDTF04ebG/neE4uDklRIJLhif6+Bwu+EUeTlGbDj7fqGSsNe8g92w7',
|
|
193
|
-
'1e41rF/9CMoOswrKgIjXAou3aexogWcHvKY2D+1q9exORe1rIa1+sUGl5PG2wsEs',
|
|
194
|
-
'znN6qtN5gMlGY1ofWDY+I02gO4qzaZ/FxRZfittCw7v5dmQYKot9qRi2Kx3Fvw+h',
|
|
195
|
-
'ivFBpC4TWgppFBnJJnAsFXZJQcejMW4nEmOViRQXY8N8PepQmgsu',
|
|
196
|
-
'=ummy',
|
|
197
|
-
'-----END PGP PUBLIC KEY BLOCK-----'].join('\n');
|
|
198
|
-
|
|
199
|
-
const pub_revoked =
|
|
200
|
-
['-----BEGIN PGP PUBLIC KEY BLOCK-----',
|
|
201
|
-
'Version: GnuPG v2.0.19 (GNU/Linux)',
|
|
202
|
-
'',
|
|
203
|
-
'mQENBFKpincBCADhZjIihK15f3l+j87JgeLp9eUTSbn+g3gOFSR73TOMyBHMPt8O',
|
|
204
|
-
'KwuA+TN2sM86AooOR/2B2MjHBUZqrgeJe+sk5411yXezyYdQGZ8vlq/FeLeNF70D',
|
|
205
|
-
'JrvIC6tsEe2F9F7ICO7o7G+k5yveLaYQNU/okiP8Gj79XW3wN77+yAMwpQzBsrwa',
|
|
206
|
-
'UO/X4mDV59h1DdrTuN4g8SZhAmY/JfT7YCZuQ8ivOs9n7xPdbGpIQWGWjJLVWziC',
|
|
207
|
-
'7uvxN4eFOlCqvc6JwmS/xyYGKL2B3RcQuY+OlvQ3wxKFEGDfG73HtWBd2soB7/7p',
|
|
208
|
-
'w53mVcz5sLhkOWjMTj+VDDZ3jas+7VznaAbVABEBAAGJAToEIAECACQFAlKpj3od',
|
|
209
|
-
'HQNUZXN0aW5nIHJldm9rZSBjb21wbGV0ZSBrZXkACgkQO+K1SH0WBbOtJgf/XqJF',
|
|
210
|
-
'dfWJjXBPEdfDbnXW+OZcvVgUMEEKEKsS1MiB21BEQpsTiuOLLgDOnEKRDjT1Z9H/',
|
|
211
|
-
'6owkb1+iLOZRGcJIdXxxAi2W0hNwx3qSiYkJIaYIm6dhoTy77lAmrPGwjoBETflU',
|
|
212
|
-
'CdWWgYFUGQVNPnpCi0AizoHXX2S4zaVlLnDthss+/FtIiuiYAIbMzB902nhF0oKH',
|
|
213
|
-
'v5PTrm1IpbstchjHITtrRi4tdbyvpAmZFC6a+ydylijNyKkMeoMy0S+6tIAyaTym',
|
|
214
|
-
'V5UthMH/Kk2n3bWNY4YnjDcQpIPlPF1cEnqq2c47nYxHuYdGJsw9l1F88J0enL72',
|
|
215
|
-
'56LWk5waecsz6XOYXrQTVjMgS2V5IDx2M0BrZXkuY29tPokBMQQwAQIAGwUCUqmP',
|
|
216
|
-
'BRQdIFRlc3RpbmcgcmV2b2RlIHVpZAAKCRA74rVIfRYFszHUB/oCAV+IMzZF6uad',
|
|
217
|
-
'v0Gi+Z2qCY1Eqshdxv4i7J2G3174YGF9+0hMrHwsxBkVQ/oLZKBFjfP7Z1RZXxso',
|
|
218
|
-
'ts0dBho3XWZr3mrEk6Au6Ss+pbGNqq2XytV+CB3xY0DKX1Q0BJOEhgcSNn187jqd',
|
|
219
|
-
'XoKLuK/hy0Bk6YkXe1lv6HqkFxYGNB2MW0wSPjrfnjjHkM29bM0Q/JNVY4o/osmY',
|
|
220
|
-
'zoY/hc59fKBm5uBBL7kEtSkMO0KPVzqhvMCi5qW9/V9+vNn//WWOY+fAXYKa1cBo',
|
|
221
|
-
'aMykBfE2gGf/alIV9dFpHl+TkIT8lD8sY5dBmiKHN4D38PhuLdFWHXLe4ww7kqXt',
|
|
222
|
-
'JrD0bchKiQE/BBMBAgApBQJSqYp3AhsDBQkJZgGABwsJCAcDAgEGFQgCCQoLBBYC',
|
|
223
|
-
'AwECHgECF4AACgkQO+K1SH0WBbOOAwgAx9Qr6UciDbN2Bn1254YH6j5HZbVXGTA/',
|
|
224
|
-
'uQhZZGAYE/wDuZ5u8Z2U4giEZ3dwtblqRZ6WROmtELXn+3bGGbYjczHEFOKt4D/y',
|
|
225
|
-
'HtrjCtQX04eS+FfL453n7aaQbpmHou22UvV0hik+iagMbIrYnB6nqaui9k8HrGzE',
|
|
226
|
-
'1HE1AeC5UTlopEHb/KQRGLUmAlr8oJEhDVXLEq41exNTArJWa9QlimFZeaG+vcbz',
|
|
227
|
-
'2QarcmIXmZ3o+1ARwZKTK/20oCpF6/gUGnY3KMvpLYdW88Qznsp+7yWhpC1nchfW',
|
|
228
|
-
'7frQmuQa94yb5PN7kBJ83yF/SZiDggZ8YfcCf1DNcbw8bjPYyFNW3bkBDQRSqYp3',
|
|
229
|
-
'AQgA1Jgpmxwr2kmP2qj8FW9sQceylHJr4gUfSQ/4KPZbGFZhzK+xdEluBJOzxNbf',
|
|
230
|
-
'LQXhQOHbWFmlNrGpoVDawZbA5FL7w5WHYMmNY1AADmmP0uHbHqdOvOyz/boo3fU0',
|
|
231
|
-
'dcl0wOjo06vsUqLf8/3skQstUFjwLzjI2ebXWHXj5OSqZsoFvj+/P/NaOeVuAwFx',
|
|
232
|
-
'50vfUK19o40wsRoprgxmZOIL4uMioQ/V/QUr++ziahwqFwDQmqmj0bAzV/bIklSJ',
|
|
233
|
-
'jrLfs7amX8qiGPn8K5UyWzYMa2q9r0Srt/9wx+FoSRbqRvsqLFYoU3d745zX1W7o',
|
|
234
|
-
'dFcDddGMv5LMPnvNR+Qm7PUlowARAQABiQE0BCgBAgAeBQJSqY5XFx0DVGVzdGlu',
|
|
235
|
-
'ZyBzdWJrZXkgcmV2b2tlAAoJEDvitUh9FgWzsUoH/1MrYYo7aQErScnhbIVQ5qpB',
|
|
236
|
-
'qnqBTiyVGa3cqSPKUkT552dRs6TwsjFKnOs68MIZQ6qfliZE/ApKPQhxaHgmfWKI',
|
|
237
|
-
'Q09Qv04SKHqo9njX6E3q257DnvmQiv6c9PRA3G/p2doBrj3joaOVm/ZioiCZdf2W',
|
|
238
|
-
'l6akAf7j5DbcVRh8BQigM4EUhsVjBvGPYxqVNIM4aWHMTG62CaREa9g1PWOobASU',
|
|
239
|
-
'jX47B7/FFP4zCLkeb+znDMwc8jKWeUBp5sUGhWo74wFiD5Dp2Zz50qRi1u05nJXg',
|
|
240
|
-
'bIib7pwmH2CeDwmPRi/HRUrKBcqFzSYG5QVggQ5KMIU9M7zmvd8mDYE8MQbTLbaJ',
|
|
241
|
-
'ASUEGAECAA8FAlKpincCGwwFCQlmAYAACgkQO+K1SH0WBbPbnQgAxcYAS3YplyBI',
|
|
242
|
-
'ddNJQNvyrWnnuGXoGGKgkE8+LUR3rX3NK/c4pF7EFgrNxKIPrWZoIu7m1XNqoK3g',
|
|
243
|
-
'PwRXJfPPQWalVrhhOajtYipXumQVAe+q8DyxAZ5YJGrUvR9b96GRel9G+HsRlR1M',
|
|
244
|
-
'NV62ZXFdXVgg9FZJHDR8fa1Zy93xC0JSKu4ZoCrH5ybw+DPCngogDl4KwgdV5y4e',
|
|
245
|
-
'EAZpGDSq7PrdsgZTiSuepwVw116GWJm1zecmh6FdpZL/ZrE6EfYcCGJqJiVfDiCR',
|
|
246
|
-
'jgvGbcTzxnvrRmDevmJUdXBSAE11OYQuDGlhgFCU0o9cdX+k+QqP5wNycXhoJ+yk',
|
|
247
|
-
'pMiJM+NJAQ==',
|
|
248
|
-
'=ok+o',
|
|
249
|
-
'-----END PGP PUBLIC KEY BLOCK-----'].join('\n');
|
|
250
|
-
|
|
251
|
-
const pub_expired =
|
|
252
|
-
['-----BEGIN PGP PUBLIC KEY BLOCK-----',
|
|
253
|
-
'Comment: GPGTools - https://gpgtools.org',
|
|
254
|
-
'',
|
|
255
|
-
'mQINBFpcwc8BEAC3ywtlTJ1inmifeTrC85b2j+WRySworAUKobk/jmswSoLt720R',
|
|
256
|
-
'1J211Uu7IW7UBReoEhfNq+M0CAaoTxT7XPvd2O8lyn/RMAlnmFC0x3pyGrRYyRFd',
|
|
257
|
-
'ZuGaWsFdHT/hCOeXOHv7sV/UWjL4wfeSlGqGWzHy4QH718HOQciZ7UHcS5J9B09W',
|
|
258
|
-
't4TWcY+rTwl2GoFWLBHYCZZLnsQhvJqUTEHc63j+WV5M6oPNDNzqXa545ktss4Bq',
|
|
259
|
-
'L7efeMtAThDlMg4vmodNkHYu0g+RqsGb1kwBkCznrNpYNETqgalhn5fZ6uV2RaDR',
|
|
260
|
-
'WwFOm7ujGwQCzLSHcoDh4zqtWKkImMBEnwTFo0GTgXTTz0T565l5uqUvZ9UkJLXc',
|
|
261
|
-
'IKWpfzHPUPOCstTaVNcCiTw+nwu4BvvOVgOWridKirpxks9uvihnzcAyR5ey212q',
|
|
262
|
-
'HkFW1464qss4b9b4W399/KbOQ8Ngr1kUUeAoK13x7QKTmTwjE1Qt66370nFjk9Go',
|
|
263
|
-
'k0Z0Of90oxQXx2/8g4gufpoMloTNdK/pMzPd+KfePpiVKoxmFTWOqmYgiX/4YcKi',
|
|
264
|
-
'nQsJf++D9xsmAN6v9Ay1RqKmxiJgcuDvqcZ+FJdGatlpKfyEEsDRjAtMXSgw3BpH',
|
|
265
|
-
'xsfPViEsVblmSQBPvuloKbp8kNPsJe3MW0fLSWjSuNDppx+OJX6xq1MNkQARAQAB',
|
|
266
|
-
'tBlzdW5ueSA8c3VubnlAc3Vubnkuc3Vubnk+iQJUBBMBCgA+AhsDBQsJCAcDBRUK',
|
|
267
|
-
'CQgLBRYCAwEAAh4BAheAFiEE8XCJ+2Ua4cHedSGW7IB7EDeBZnQFAlpeFK8FCQAC',
|
|
268
|
-
'pGAACgkQ7IB7EDeBZnToTg//eVOfzHdKvKCTanqbBNDkChtwfHABR01HvowwIdwz',
|
|
269
|
-
'IXeGkAJcV2GaCFtcClYcWFPZq4PQerQc1SB62S8RkuiaWbgVET6adRqq1MVNMvrl',
|
|
270
|
-
'/RGJaW7JL0pG8J8cJ1l5Jq9WCdtH0TqfRG/4DkkD7Cgay4oMhPU5w4inoYbeysyH',
|
|
271
|
-
'FKmFIJfbRfoWd2vM3HYi8+2c7UqDtG9R8Xe5X/skYAflAiym/TYF4+H9+siIdk3D',
|
|
272
|
-
'5U3WLcwrI45ZsJatK2E4mFy9ne98kYM27QB4TeIuZ+8jQWECqpc3nyQ6UjRYOpAw',
|
|
273
|
-
'3jdYYAECmOKjxZJy6tVksLfZin07d4Ya/vgWz27uF3vjkxYywmuvonDyzIkwayTR',
|
|
274
|
-
'NZUbMXnC3yN+e8jtw/HMdQT8LYOxrW/192Y6RBJM1hCWQIaYJxDms9z4JoyYHX5c',
|
|
275
|
-
'tYgEcyMDfwGcsTFLnM+JYJqkOHUfKc3JHtiZmN8QO1TBEUgx18psEBiva3ilTMUG',
|
|
276
|
-
'Zr39gHRp/7fUSj3Vm+bpMOUs0vRdnd3/IGFUgZnTB5nUCCvbs4qLzi2cW9rqDliQ',
|
|
277
|
-
'PyIQKcvCFXFzXsZ31DHnT4OMP9hxpAdGaRhcNySf/Stq3n6tgJSi0IxGqrdCH93y',
|
|
278
|
-
'Ko9b9nRNvHHPoWnuGkAKsxDLm7V4LEGEJLTbYk1R+/M6ijaBnD9rIp3cV9RXtzcc',
|
|
279
|
-
'fuW5Ag0EWlzBzwEQAMML14fV1LUhO5xb0ZRj+ouBSofOY9Zbyjq4JN8qNXjrJJGR',
|
|
280
|
-
'GGWvdWUvUDTBynIm1vhIuArNvqEUdvXjSO/xISz6yXZXX/NrbD8MiCRRqYza2ONw',
|
|
281
|
-
'256XvxEt9H4gWnpa+cPkjzzG5tlMceMoE8UWiHC+ua3cadXdlMzxXbGBKrWWZkHv',
|
|
282
|
-
'kPcXV08wuGDPDNiS6syBSfk6l9qz4sZfgt8zAiNkM32JsCu2GkuYwCMXnc28XJOY',
|
|
283
|
-
'zqBIDcz7VUee41C0L5v7puSKwxvuZBVDJNVxDs/ufUFePEOhqpkTkJDroGh+3Qy0',
|
|
284
|
-
'ePzL8KrRtt/Lla6Qz6MckR7myXdJeVFQyza5gjhEi/i3afI3zELdFwHn14AEGxp3',
|
|
285
|
-
'FfmCM2w6Aiyy4JdBQ2ggC7rIOuElMkX7Am6lINQiIwNkYZVIL5UF7avlja4zp/Qm',
|
|
286
|
-
'3gyLNCANrZ+HsdQuSzOYRsyGgIM2FLqKBHKqF5VmWsHN2GdFHwnrWp7DwtPqHoat',
|
|
287
|
-
'kVotP0adzOAMC3McbRibkHXOtNXNYCz7yNCn6i9IY5KGj4y3uj7curs1LkYARPg8',
|
|
288
|
-
'hFrnKOFOBE/pCPUlJeaZAjJiQ6FIKrKNADlNwTVZ5puo/gCE/WxzjOA06prG62Un',
|
|
289
|
-
'+d5HUUmlZzjPQ44kfmUvMXyfqIiRboAtvdnZc81UlrXNmiewUY4PM3HYmmoHABEB',
|
|
290
|
-
'AAGJAjwEGAEKACYWIQTxcIn7ZRrhwd51IZbsgHsQN4FmdAUCWlzBzwIbDAUJB4Yf',
|
|
291
|
-
'gAAKCRDsgHsQN4FmdFQND/9/Xu0S6H7IVNPWQL7kXgh3VxAwMaS8RTueTPmTP+5A',
|
|
292
|
-
'HCld/20eTsHxWhZcISyDxkKgAnm7hMlY0S4yObFlKc7FRT32W9Ep2PEMc8Qe0Z2v',
|
|
293
|
-
'gqOEGWtb2iZZkLmNRFAj2PUHtOODufVqEPLx22DL+Wy3MnOU7IrxLjmMFUd91hkN',
|
|
294
|
-
'JmLNlolKxRkgH8NfPrpstMUzFDcbTsqIthI3yJlUh0gQaS7zElvWBGfCG2MQFZ4q',
|
|
295
|
-
'1xd9rXDaFmIf6+X9k7MNRrSv/uQ7cwW/36/sXdWV4tA/lZxjh+WRkhxu3vSCyP2v',
|
|
296
|
-
'kemT/cHBIcLdG7+4aTAML6Roqy/mNk1k9oO+g9yfty5RmVvROlrL7EIu4D0inC74',
|
|
297
|
-
'5XZ36mUR2U0jLN0IaSAmQp+Dxh87S1SxhoA6qi0mYroSSngR68y880nq5xIgBjQr',
|
|
298
|
-
'uoCHfcE/toiLkT8Zyjv7AMXsfuRFsW5VGkRuOceMgK+UPijEK/yAzbGTrj8hCrMM',
|
|
299
|
-
'K/M0OXg9T1W2kzILkVjpj2PyY5MQjoWQEzFRbDrjdXHBuSvyf+SI02QvG2KdOuvv',
|
|
300
|
-
'G6TOw3dj+jf1VgJBkNpt6NCIfXYQczuv8HSzqwtstQoHsIpdz7FjKaXR1fqr+Ikl',
|
|
301
|
-
'1Ze66O/1dHY4rt0l0IoMxHL93P3plUiy7wflxuSwLthPybAu7I4QGPC8qP0vm2Cm',
|
|
302
|
-
'2g==',
|
|
303
|
-
'=X7/F',
|
|
304
|
-
'-----END PGP PUBLIC KEY BLOCK-----'].join('\n');
|
|
305
|
-
|
|
306
|
-
const pub_latin1_msg = `-----BEGIN PGP PUBLIC KEY BLOCK-----
|
|
307
|
-
|
|
308
|
-
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
-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
-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
-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
-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
-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
-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
-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
-
/5YpSy3i6qvS2pOF6EZuEI2ceujroh+r2APK6PsgC0gQAVAEh8mdiXsBGhWh4RMj
|
|
317
|
-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
-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
-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
-
AQoAKgIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAUJEswDcQUCVLp7MgIZAQAK
|
|
321
|
-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
-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
-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
-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
-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
-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
-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
-
FJxcRl2ceb5pD70qIqI0OFHRpjXGrVLB6QYy580YmhAoUfiB825gsVzwcjgB/Prx
|
|
329
|
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
|
340
|
-
PKZFUqMmJ9jTdCdJ3Lw+oa4oBs5/tdsBhFYRqkRa4WTxzdlSPJ7EhC2y6JZLuYFY
|
|
341
|
-
IR9KrYVUFwoNFHPabEPMdSO1e9LxftQGm6BSO8Gmsy7D9S0jB2iq21drE0uvwG2J
|
|
342
|
-
2c8jqmEjjd1eyHwNO+XBvcTTav3n8ND1y7spHQ0i0VBToGysX+G57SAPDTXnKz4w
|
|
343
|
-
uXYn3s0u+/zslzhYMwDGy19t816Wf6j0DKm6FWPD53zlDL2MMh/3JJt6vh26JZ7b
|
|
344
|
-
jC8YfR2rAYHeHGwwNIPsqYMjLXb0gMM7WKbakTG4FagSozqdDX4UtMWR9dH/AAAz
|
|
345
|
-
2f8AADPUARAAAQEAAAAAAAAAAAAAAAD/2P/gABBKRklGAAEBAQBIAEgAAP/hAIBF
|
|
346
|
-
eGlmAABNTQAqAAAACAAFARIAAwAAAAEAAQAAARoABQAAAAEAAABKARsABQAAAAEA
|
|
347
|
-
AABSASgAAwAAAAEAAgAAh2kABAAAAAEAAABaAAAAAAAAAEgAAAABAAAASAAAAAEA
|
|
348
|
-
AqACAAQAAAABAAAAfaADAAQAAAABAAAAlgAAAAD/4QkhaHR0cDovL25zLmFkb2Jl
|
|
349
|
-
LmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENl
|
|
350
|
-
aGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5z
|
|
351
|
-
Om1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+IDxyZGY6UkRGIHhtbG5z
|
|
352
|
-
OnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5z
|
|
353
|
-
IyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiLz4gPC9yZGY6UkRGPiA8
|
|
354
|
-
L3g6eG1wbWV0YT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
355
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
356
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
357
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
358
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
359
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
360
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
361
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
362
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
363
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
364
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
365
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
366
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
367
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
368
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
369
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
370
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
371
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
372
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
373
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
374
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
375
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
376
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
377
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
378
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
379
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
380
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
381
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
382
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
383
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
384
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
385
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
386
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
387
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
388
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
389
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
390
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
391
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
392
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
393
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
394
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
395
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
396
|
-
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hw
|
|
397
|
-
YWNrZXQgZW5kPSJ3Ij8+AP/tADhQaG90b3Nob3AgMy4wADhCSU0EBAAAAAAAADhC
|
|
398
|
-
SU0EJQAAAAAAENQdjNmPALIE6YAJmOz4Qn7/4gzgSUNDX1BST0ZJTEUAAQEAAAzQ
|
|
399
|
-
YXBwbAIQAABtbnRyUkdCIFhZWiAH3wABAAEACwA7AC1hY3NwQVBQTAAAAAAAAAAA
|
|
400
|
-
AAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGwAAAAAAAAAAAAAAAAAAAAA
|
|
401
|
-
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFkZXNjAAABUAAAAGJkc2Nt
|
|
402
|
-
AAABtAAAAbhjcHJ0AAADbAAAACN3dHB0AAADkAAAABRyWFlaAAADpAAAABRnWFla
|
|
403
|
-
AAADuAAAABRiWFlaAAADzAAAABRyVFJDAAAD4AAACAxhYXJnAAAL7AAAACB2Y2d0
|
|
404
|
-
AAAMDAAAADBuZGluAAAMPAAAAD5jaGFkAAAMfAAAACxtbW9kAAAMqAAAAChiVFJD
|
|
405
|
-
AAAD4AAACAxnVFJDAAAD4AAACAxhYWJnAAAL7AAAACBhYWdnAAAL7AAAACBkZXNj
|
|
406
|
-
AAAAAAAAAAhEaXNwbGF5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
407
|
-
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
408
|
-
bWx1YwAAAAAAAAAiAAAADGhySFIAAAAQAAABqGtvS1IAAAAQAAABqG5iTk8AAAAQ
|
|
409
|
-
AAABqGlkAAAAAAAQAAABqGh1SFUAAAAQAAABqGNzQ1oAAAAQAAABqGRhREsAAAAQ
|
|
410
|
-
AAABqHVrVUEAAAAQAAABqGFyAAAAAAAQAAABqGl0SVQAAAAQAAABqHJvUk8AAAAQ
|
|
411
|
-
AAABqGVzRVMAAAAQAAABqGhlSUwAAAAQAAABqG5sTkwAAAAQAAABqGZpRkkAAAAQ
|
|
412
|
-
AAABqHpoVFcAAAAQAAABqHZpVk4AAAAQAAABqHNrU0sAAAAQAAABqHpoQ04AAAAQ
|
|
413
|
-
AAABqHJ1UlUAAAAQAAABqGZyRlIAAAAQAAABqG1zAAAAAAAQAAABqGNhRVMAAAAQ
|
|
414
|
-
AAABqHRoVEgAAAAQAAABqGVzWEwAAAAQAAABqGRlREUAAAAQAAABqGVuVVMAAAAQ
|
|
415
|
-
AAABqHB0QlIAAAAQAAABqHBsUEwAAAAQAAABqGVsR1IAAAAQAAABqHN2U0UAAAAQ
|
|
416
|
-
AAABqHRyVFIAAAAQAAABqGphSlAAAAAQAAABqHB0UFQAAAAQAAABqABTAE0AQgAx
|
|
417
|
-
ADkANAAwAFd0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBJbmMuLCAyMDE1AABYWVog
|
|
418
|
-
AAAAAAAA89gAAQAAAAEWCFhZWiAAAAAAAABwAAAAOREAAAPCWFlaIAAAAAAAAGI3
|
|
419
|
-
AAC3mgAAGRFYWVogAAAAAAAAJJ8AAA9VAAC2WmN1cnYAAAAAAAAEAAAAAAUACgAP
|
|
420
|
-
ABQAGQAeACMAKAAtADIANgA7AEAARQBKAE8AVABZAF4AYwBoAG0AcgB3AHwAgQCG
|
|
421
|
-
AIsAkACVAJoAnwCjAKgArQCyALcAvADBAMYAywDQANUA2wDgAOUA6wDwAPYA+wEB
|
|
422
|
-
AQcBDQETARkBHwElASsBMgE4AT4BRQFMAVIBWQFgAWcBbgF1AXwBgwGLAZIBmgGh
|
|
423
|
-
AakBsQG5AcEByQHRAdkB4QHpAfIB+gIDAgwCFAIdAiYCLwI4AkECSwJUAl0CZwJx
|
|
424
|
-
AnoChAKOApgCogKsArYCwQLLAtUC4ALrAvUDAAMLAxYDIQMtAzgDQwNPA1oDZgNy
|
|
425
|
-
A34DigOWA6IDrgO6A8cD0wPgA+wD+QQGBBMEIAQtBDsESARVBGMEcQR+BIwEmgSo
|
|
426
|
-
BLYExATTBOEE8AT+BQ0FHAUrBToFSQVYBWcFdwWGBZYFpgW1BcUF1QXlBfYGBgYW
|
|
427
|
-
BicGNwZIBlkGagZ7BowGnQavBsAG0QbjBvUHBwcZBysHPQdPB2EHdAeGB5kHrAe/
|
|
428
|
-
B9IH5Qf4CAsIHwgyCEYIWghuCIIIlgiqCL4I0gjnCPsJEAklCToJTwlkCXkJjwmk
|
|
429
|
-
CboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsLIgs5C1ELaQuAC5gLsAvI
|
|
430
|
-
C+EL+QwSDCoMQwxcDHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakNww3eDfgOEw4u
|
|
431
|
-
DkkOZA5/DpsOtg7SDu4PCQ8lD0EPXg96D5YPsw/PD+wQCRAmEEMQYRB+EJsQuRDX
|
|
432
|
-
EPURExExEU8RbRGMEaoRyRHoEgcSJhJFEmQShBKjEsMS4xMDEyMTQxNjE4MTpBPF
|
|
433
|
-
E+UUBhQnFEkUahSLFK0UzhTwFRIVNBVWFXgVmxW9FeAWAxYmFkkWbBaPFrIW1hb6
|
|
434
|
-
Fx0XQRdlF4kXrhfSF/cYGxhAGGUYihivGNUY+hkgGUUZaxmRGbcZ3RoEGioaURp3
|
|
435
|
-
Gp4axRrsGxQbOxtjG4obshvaHAIcKhxSHHscoxzMHPUdHh1HHXAdmR3DHeweFh5A
|
|
436
|
-
HmoelB6+HukfEx8+H2kflB+/H+ogFSBBIGwgmCDEIPAhHCFIIXUhoSHOIfsiJyJV
|
|
437
|
-
IoIiryLdIwojOCNmI5QjwiPwJB8kTSR8JKsk2iUJJTglaCWXJccl9yYnJlcmhya3
|
|
438
|
-
JugnGCdJJ3onqyfcKA0oPyhxKKIo1CkGKTgpaymdKdAqAio1KmgqmyrPKwIrNitp
|
|
439
|
-
K50r0SwFLDksbiyiLNctDC1BLXYtqy3hLhYuTC6CLrcu7i8kL1ovkS/HL/4wNTBs
|
|
440
|
-
MKQw2zESMUoxgjG6MfIyKjJjMpsy1DMNM0YzfzO4M/E0KzRlNJ402DUTNU01hzXC
|
|
441
|
-
Nf02NzZyNq426TckN2A3nDfXOBQ4UDiMOMg5BTlCOX85vDn5OjY6dDqyOu87LTtr
|
|
442
|
-
O6o76DwnPGU8pDzjPSI9YT2hPeA+ID5gPqA+4D8hP2E/oj/iQCNAZECmQOdBKUFq
|
|
443
|
-
QaxB7kIwQnJCtUL3QzpDfUPARANER0SKRM5FEkVVRZpF3kYiRmdGq0bwRzVHe0fA
|
|
444
|
-
SAVIS0iRSNdJHUljSalJ8Eo3Sn1KxEsMS1NLmkviTCpMcky6TQJNSk2TTdxOJU5u
|
|
445
|
-
TrdPAE9JT5NP3VAnUHFQu1EGUVBRm1HmUjFSfFLHUxNTX1OqU/ZUQlSPVNtVKFV1
|
|
446
|
-
VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1kaWWlZuFoHWlZaplr1W0VblVvlXDVchlzW
|
|
447
|
-
XSddeF3JXhpebF69Xw9fYV+zYAVgV2CqYPxhT2GiYfViSWKcYvBjQ2OXY+tkQGSU
|
|
448
|
-
ZOllPWWSZedmPWaSZuhnPWeTZ+loP2iWaOxpQ2maafFqSGqfavdrT2una/9sV2yv
|
|
449
|
-
bQhtYG25bhJua27Ebx5veG/RcCtwhnDgcTpxlXHwcktypnMBc11zuHQUdHB0zHUo
|
|
450
|
-
dYV14XY+dpt2+HdWd7N4EXhueMx5KnmJeed6RnqlewR7Y3vCfCF8gXzhfUF9oX4B
|
|
451
|
-
fmJ+wn8jf4R/5YBHgKiBCoFrgc2CMIKSgvSDV4O6hB2EgITjhUeFq4YOhnKG14c7
|
|
452
|
-
h5+IBIhpiM6JM4mZif6KZIrKizCLlov8jGOMyo0xjZiN/45mjs6PNo+ekAaQbpDW
|
|
453
|
-
kT+RqJIRknqS45NNk7aUIJSKlPSVX5XJljSWn5cKl3WX4JhMmLiZJJmQmfyaaJrV
|
|
454
|
-
m0Kbr5wcnImc951kndKeQJ6unx2fi5/6oGmg2KFHobaiJqKWowajdqPmpFakx6U4
|
|
455
|
-
pammGqaLpv2nbqfgqFKoxKk3qamqHKqPqwKrdavprFys0K1ErbiuLa6hrxavi7AA
|
|
456
|
-
sHWw6rFgsdayS7LCszizrrQltJy1E7WKtgG2ebbwt2i34LhZuNG5SrnCuju6tbsu
|
|
457
|
-
u6e8IbybvRW9j74KvoS+/796v/XAcMDswWfB48JfwtvDWMPUxFHEzsVLxcjGRsbD
|
|
458
|
-
x0HHv8g9yLzJOsm5yjjKt8s2y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB
|
|
459
|
-
00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp22vvbgNwF3IrdEN2W3hzeot8p
|
|
460
|
-
36/gNuC94UThzOJT4tvjY+Pr5HPk/OWE5g3mlucf56noMui86Ubp0Opb6uXrcOv7
|
|
461
|
-
7IbtEe2c7ijutO9A78zwWPDl8XLx//KM8xnzp/Q09ML1UPXe9m32+/eK+Bn4qPk4
|
|
462
|
-
+cf6V/rn+3f8B/yY/Sn9uv5L/tz/bf//cGFyYQAAAAAAAwAAAAJmZgAA8qcAAA1Z
|
|
463
|
-
AAAT0AAACg52Y2d0AAAAAAAAAAEAAQAAAAAAAAABAAAAAQAAAAAAAAABAAAAAQAA
|
|
464
|
-
AAAAAAABAABuZGluAAAAAAAAADYAAKPAAABUQAAATMAAAJmAAAAmgAAAD0AAAFBA
|
|
465
|
-
AABUQAACMzMAAjMzAAIzMwAAAAAAAAAAc2YzMgAAAAAAAQu3AAAFlv//81cAAAcp
|
|
466
|
-
AAD91///+7f///2mAAAD2gAAwPZtbW9kAAAAAAAATC0AAAaVVjg5RchujAAAAAAA
|
|
467
|
-
AAAAAAAAAAAAAAAA/8AAEQgAlgB9AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAA
|
|
468
|
-
AAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFB
|
|
469
|
-
BhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNE
|
|
470
|
-
RUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi
|
|
471
|
-
o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz
|
|
472
|
-
9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIB
|
|
473
|
-
AgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy
|
|
474
|
-
0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpz
|
|
475
|
-
dHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG
|
|
476
|
-
x8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICAwICAwQD
|
|
477
|
-
AwMEBQQEBAQFBwUFBQUFBwgHBwcHBwcICAgICAgICAoKCgoKCgsLCwsLDQ0NDQ0N
|
|
478
|
-
DQ0NDf/bAEMBAgICAwMDBgMDBg0JBwkNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0N
|
|
479
|
-
DQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDf/dAAQACP/aAAwDAQACEQMRAD8A/HD4
|
|
480
|
-
zajC3iQ6RHO91PYZFzMQETzWAO1FGcBRjJYkkmvMNE0271jV7PTLH/j5up0iiycA
|
|
481
|
-
Ox4JI6Y65r07Ufh5df8ACuJ/iXqs8n2i9nSWGHaMPHNLhpHY5PzZyoBHqa4Pwbf3
|
|
482
|
-
Ol+J9P1G0tTezW82+OBesj7WAH65/CvUx6lPE+0qqylqvS//AADzcDKCwzp0Hdwu
|
|
483
|
-
n25luP8AGWhXnhvxBe6NfSiee2kAeVc4kLgPuG4k98cntXNFMw+duX72zZn5umc4
|
|
484
|
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-
5dR8OXemtDE6OUmjuEO5gcqFO7AxzkZ9K6bwF8Q/C3izxLpE+jX6YluVR1c+XJGz
|
|
494
|
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
Bj6hl4/Kv5L9LLIC5wm0kEDqQfX8K/S79i39oJfCl1F8JPEUn/Eo1W5M+mTu+Ft7
|
|
511
|
-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
-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
-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
-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
-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
-
nIY0mtkYqOSRuPNWfC+gxpboUBMh4B46CvSrbSMIAFCtkcjnPv0r83qYqUpto/Ya
|
|
517
|
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-
46Fxms50pLWSOmOJitIs5DWbRmPmDqG5GK861tvJt3L8ZBwTx0HQ17JfyRTHerBo
|
|
533
|
-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
-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
-
AB0zX6BgLOkrH5JmcGqzbR9rfsP332H452k8jMkdxYXKHaNylyUADHsD2Jr9u3DE
|
|
536
|
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
CbyhcylGPJwnrxyPpXHCrKL00Z6SwftHyyOc0L4R+GJm3atrk15KXyVWTyoyPQsO
|
|
546
|
-
fyNdJe/BTTEgI0u8kiAGIxkMvXuec1ynjrw5qnhvwnoniPwrqNy/m3bx6jcQ+XcC
|
|
547
|
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
/MV+iVvoUbxRXEJ2SKAGOMqcdM5718MfBewMHju+YZDtZ2zKepw7vnPocCv0n8Pa
|
|
557
|
-
V9os187IGBn8q/K+LJOGPmkfuPAlFVMshUe5wNz58MTqgBbGWwNqgdcnnpXEeDre
|
|
558
|
-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
-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
-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
-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
-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
-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
-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
-
0GlS3NhCrSyQQR2MqIMgsFDFc9AckV3tSajBvQ8vDqLqyklqRTaLet4z0zTFJf8A
|
|
566
|
-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
-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
-
HALMSxQoRtwOxrB8Hahf2umyW0LEQs5LJ6kqAecZ59Oldto1hpNx4Fhvpo90yWjF
|
|
569
|
-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
-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
-
zH5QtfYfh3xBJqVpbJby53gbW67uN36jpX51xxlbjio1v5l+R+s+HGfRWDeHf2X+
|
|
572
|
-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
-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
-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
-
ntrmeGJGOV82VRz+JrD1vTrf5hbyrIy5w6uCPzB9qwqU1e510q1VLlnFnt9n4hR4
|
|
576
|
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-
rFQqTcVbodhb+I/htDC0zC2lMF1n73nPIinIUbiMgjj0riNf8YWl3LfHwrYXayST
|
|
590
|
-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
-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
-
x7AV3iO9tbSSuw+Tr6D1IrotVubeCL7PF8ufkAXoM9jXmmr3hEU9vvAGAAT03fXr
|
|
593
|
-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
-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
-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
-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
-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
-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
-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
-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
-
RahZXO0FxcQHdLjjIEqZVwOqmvO9LvXsTGLtRbOANpbDRnPXa/Q/Q4NfKZhhf3vO
|
|
602
|
-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
-
tD4iMd0zv+8QgbWPAHoRitNfEcTObh5UUbc7ck7Tj1Aya4p4dNanqSx19InRaqwZ
|
|
604
|
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
nkBhwB6YrTEKhlLKvyeg9f51E/8AyEfw/wAatt1P4V4/Q9yrFcwsekRyjrxw3v06
|
|
617
|
-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
-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
-
+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
-
gdOOc4aSMge+4da8W8I/8j/p/wDuXP8A6Aa9l1n/AJBq/wDXRP8A0IV9bQe6PyDG
|
|
621
|
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
laBHcaKWPbCvA8C1kyvxLp22sxXYT+/qWmrLAEGbfUi0bloPZ0yrPpb//FrJy8Sh
|
|
632
|
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
Z4fKxUKKvSsQURlQMC5ek/hokQINggmuFEQpkoc9K65TLUcf2UmWVPVi9YkDqJjY
|
|
644
|
-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
-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
-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
-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
-
OBVMxEPmF+8tKokZzZfc7cOfuCVDQde8qfyD6FBvuXoUGf4uILZnS+yaF3GjcwJj
|
|
649
|
-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
-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
-
lq8z6SvfygdCq5FId6beulKmIMnBMOS5I8tC/pemwzn/aNBgd7i6FGMVmDZBeb5d
|
|
652
|
-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
-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
-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
-
WPVMYDzj6X7I1A+nWeNiPlp2PoUUUvdCLisY1aU1wyTJa7wBsLARsrhXk5/R1pQt
|
|
656
|
-
Blk+CJ7ytHy6En8542bB/yC+Z9/zWbVuhg==
|
|
657
|
-
=jmT1
|
|
658
|
-
-----END PGP PUBLIC KEY BLOCK-----`;
|
|
659
|
-
|
|
660
|
-
const msg_sig_expired =
|
|
661
|
-
['-----BEGIN PGP MESSAGE-----',
|
|
662
|
-
'Comment: GPGTools - https://gpgtools.org',
|
|
663
|
-
'',
|
|
664
|
-
'owEBWwKk/ZANAwAKAeyAexA3gWZ0AawUYgloZWxsby50eHRaX2WpaGVsbG+JAjME',
|
|
665
|
-
'AAEKAB0WIQTxcIn7ZRrhwd51IZbsgHsQN4FmdAUCWl9lqQAKCRDsgHsQN4FmdCln',
|
|
666
|
-
'D/44x1bcrOXg+DbRStSrC75wFa+cvPEmaTZyqN6d7qlQCMxOcPlq6lbZ74QWfEq7',
|
|
667
|
-
'i1ZYHp4AU8jALw0QqBQQE5FvABleQKpVfY22s83Bqy+P0DB9ntpD+t+oZrxGCLmL',
|
|
668
|
-
'MbZJNFnGro48gHt+/OQKLuftiVwE2opHfgogVKNL74FmYA0hMItdzpn4OPNFkP8t',
|
|
669
|
-
'Iq/m0hkXlTAKqBPITVLv1FN16v+Sm1iC317eP/HOTYqVZdJN3svVF8ZBfg29a8p6',
|
|
670
|
-
'6nl67fZhXgrt0OB6KSNIZEwMTWjFAqi365mtTssqAA0un94+cQ/WvAC5QcMM8g5S',
|
|
671
|
-
'i3G7vny9AsXor+GDU1z7UDWs3wBV4mVRdj7bBIS6PK+6oe012aNpRObcI2bU2BT/',
|
|
672
|
-
'H/7uHZWfwEmpfvH9RVZgoeETA3vSx7MDrNyDt3gwv2hxOHEd7nnVQ3EKG33173o1',
|
|
673
|
-
'/5/oEmn2USujKGhHJ2Zo3aWNRuUWZlvBaYw+PwB2R0UiuJbi0KofNYPssNdpw4sg',
|
|
674
|
-
'Qs7Nb2/Ilo1zn5bDh+WDrUrn6zHKAfBytBPpwPFWPZ8W10HUlC5vMZSKH5/UZhj5',
|
|
675
|
-
'kLlUC1zKjFPpRhO27ImTJuImil4lR2/CFjB1duG3JGJQaYIq8RFJOjvTVY29wl0i',
|
|
676
|
-
'pFy6y1Ofv2lLHB9K7N7dvvee2nvpUMkLEL52oFQ6Jc7sdg==',
|
|
677
|
-
'=Q4tk',
|
|
678
|
-
'-----END PGP MESSAGE-----'].join('\n');
|
|
679
|
-
|
|
680
|
-
const flowcrypt_stripped_key =
|
|
681
|
-
['-----BEGIN PGP PRIVATE KEY BLOCK-----',
|
|
682
|
-
'',
|
|
683
|
-
'lQIVBFttsQgBEADZT3v1LUGqP/hhUWmjfHVh6MErZAqsmbUIgsUKCDpQ4hrRpot2',
|
|
684
|
-
'V3ZIMbbEGSjbUvyT/2quAtLRHx9/FK1MA3q0qVrUGmiXx78IiAuQ7sZOTjYXBDnq',
|
|
685
|
-
'lJBL3Ux416nIWMwQnYYWL+kvSOfi2C0oMTeAO+5fiLmnbTp8cmGdW8Ry9Z3NJ8Oi',
|
|
686
|
-
'HvjLyCbwYzMFEKS9qXN3wjO+4BIh4SB+MFOypeTshAI4NOEMU1x/ksXDK9G+M8J3',
|
|
687
|
-
'AO5g0Ex9pGrRII/7xFLTLqZh4CaOxTx4y1Mq8qjJSZvulRgL6BSL01ylk4xDMeGG',
|
|
688
|
-
'0S1ZitFKfIil90ZxEgI/kERN2UxeeEaK2d+wWhIOdhNZaNd+aueVQFJqxAtXOWld',
|
|
689
|
-
'S7wrTgtvR62b9pO67HNNNlSG731Xnk07rVd2f/cTcOn0bFECZu2KXtaYB9vaW8qD',
|
|
690
|
-
'nfuDHyFuYkc0azMTiMRLHnL+4Pyg/fDasRVG41VaBD09VlZRok3z5eQykoKPwmNS',
|
|
691
|
-
'qLrBXa16K4cNw1wJ4TOpZK5E0T1iU4Fgr9OM1GsAZ5W/kTyzw75HAhjUtffwnWcp',
|
|
692
|
-
'pSj8PqrViCNMRoo2sTKEX7Lo5nEpfjT4mQiWVVfLz+ye5aXyUS55ei9yijwVjzIE',
|
|
693
|
-
'DCMo6kKF/MlWG0s17bL7P+kDTkMEOFeBKC0S/bnf/fB7Ij8cmHtsceRBcwARAQAB',
|
|
694
|
-
'/wBlAEdOVQG0KFRlc3QgdXNlciAoT2ZmaWNlKSA8dGVzdC51c2VyQGdtYWlsLmNv',
|
|
695
|
-
'bT6JAlQEEwEIAD4WIQQALxvRgRjAtlVylG8gqXzIYKYwkwUCW22xCAIbAwUJAeEz',
|
|
696
|
-
'gAULCQgHAwUVCgkICwUWAwIBAAIeAQIXgAAKCRAgqXzIYKYwk0CYEACX9usCr/Bk',
|
|
697
|
-
'npdkQ9kSpLezL3gxI2yYpK2PPqqmgAAKsyapK7R7bLxAxtrWeSau0UorrUGV9LuA',
|
|
698
|
-
'8yCr0wWjqZyQISUmN8UJeeFmyee3IQRmZBJIRXUqHK4a1idAngAxOJMWHJ3170xF',
|
|
699
|
-
'w1uRDsxtyMAX9wD32iFfNFsOY6nCB8W49oTEif3pHWjBV4Z4vkp5MOfc9a7EepTx',
|
|
700
|
-
'MMh6VNrvJ9EE1GH6FdVBSqpL0ZZUlJCJohP41tBqTf9QvoPdna1HYPdFgqfbdml0',
|
|
701
|
-
'l92X0AM4qpcTmo9aoX9ymg4fpWFPmPMzlX+JzXo/pJeOcce8Xnm3czTfttnMxl9T',
|
|
702
|
-
'QJW1Tr6FM4QOAgcNVQ7CQNsFNKVB1A1xzWXLCmgCUnsnMmOTEmat9mxgZ85Vqqlq',
|
|
703
|
-
'zgyLDA0h4wU6tYTzwQVNPGO9AnWIN50ebB22Y/RDPxaYSc7xP7oUcPDouKDV1u2C',
|
|
704
|
-
'OmvWIEa2Dqp8yEsw4+QWUj3qVoQsdRXmy0UtJhH5ssgkd0h3iS6jMcI6ZOxMshOF',
|
|
705
|
-
'tXApRYe7pDdw5EdwrEUnWrq/TyZriy92xX1MGf/pjGxAz0KcKhD3tPa1Ff1pc0zJ',
|
|
706
|
-
'dVB3PyzCnPrwahNfs71IqAetf/3g3+kATCJ0Z8rYEc4g+M0vwvzfQdo31ODJUjnq',
|
|
707
|
-
'Ida89U0iQ6Li3Jiq1Wwk6CpxpzQvTKjwJZ0HRgRbbbEIARAAxuEJM5xU976PBMeI',
|
|
708
|
-
'HVcJosrcFzYlDG8vUKH/2vMEfBu5HfkVQ701wrpn5gyiRyjUkTompLS16RZQlDoo',
|
|
709
|
-
'wXKNQmGt5C/cw/fm0DFF1ZvDxtyG/oD1eJ9/+JB/QTKppYCNKOb9E+Gx8t0ax7tN',
|
|
710
|
-
'NKCpoQyQDoeVHLm8yf+BqDL3sSPp77V4+BoW3JOFjyuCZ8VM5ZlGeu0YtD1cKezD',
|
|
711
|
-
'/a16MSUKjS+06eC0YjAddOLjQM1TUxIEJ6oRkiRoADFRFmJHxrTN5SF0VR8wKiGP',
|
|
712
|
-
'r2mNDX8k5iG76PZvJEMYPSZFH6wX/4WCNgNOQzrqC2QQ2SERMkfwmR9peVnJswXL',
|
|
713
|
-
'7yeDy7SUR7JWOKV6YmsyySoUWcqs5PNE5XxxFi862Qzge8ccXPflVBI8YZZnHtyx',
|
|
714
|
-
'f/AYwnWVlbpGPRlx8BJ3+K8v3Lt3ezIwyW11Tgm2nYZQuV3aM/JhRs4RaqIp3G0D',
|
|
715
|
-
'ZtJLP6u8HHLSAk08RftpLT1onM2REZiMiw4o5w+eAsEMTOVgWo4s0W6d3ZCg+1v6',
|
|
716
|
-
'K8J9UM8JgdvqrfZuFsBUNAyFCqNycHY89R1usis4WWKJUoBh/jHL+4inCeiu/9pq',
|
|
717
|
-
'U9wg9e0/FMFsltZGJHDH/9ohgTZdlvrB9dFDKXEKpFnydG0WPsC6ko9bWsIg7dJ2',
|
|
718
|
-
'/OQECKetHE+s/cojEK4jpL9+wgsAEQEAAf4HAwLk886lftqoTMezJul7DJPduWMa',
|
|
719
|
-
'ZjAkyjh5DJH2Sljwcrq473s0388hNoHNSwZBuDnEFxbsxivGPaiIm/VN84FYFvgr',
|
|
720
|
-
'IRqIKOMEjaoj166rhadR3rOeCs6LJFTwBSMD+dO7zPo3eqAJBziQg7PqQ16DNLfu',
|
|
721
|
-
'i3V2ZOvND+EbGYzAcpTToE3Cc6EhN2zB/+aIUAEvWRX2AkIozLNNmcfNHL11VI3X',
|
|
722
|
-
'Rr3Z0eN9rkyOucVK9fwAR/3nDc7cLqFYgmU79DxHgHop7uWPtwP0/AAjzrhjNlXz',
|
|
723
|
-
'7+rO2baiBbBu+MDaJi8TiRPbz1D28972wzJidIYUzQMsKrZKfqooQGXtamkvTRuR',
|
|
724
|
-
'gTQgfspa671qwhni8WDDz9VQ0LlBothpAEBqlAtFe/nrUaEfLn5Im9ZI9lJ6SHoK',
|
|
725
|
-
'e4vAHqimmxg1SWfZNhpnghaqTE7KjrmgMM674NDhThvUxw1MZSe+3uq6v5nYN60O',
|
|
726
|
-
'rfSRYjuZpgO3cIJdDvGXv0vnuF2p9Z83pz3FS3dx33Weiss30pBt5pCvZKT8SAQp',
|
|
727
|
-
'ityaxxYtDDb1t0fKmd59DByNfLaHl9pOPIs6adYL8ojFA2Qhd4walTl2+nkuWz9A',
|
|
728
|
-
'tAUX9bKMG5SZe8DguQFtg/unM8HLcgWjycDrWg1EtJZAIHlZ0X4NMQiMjm0NjkC0',
|
|
729
|
-
'qifHfRoM2UL427t5nsFPTq23wDt9LjrKIfC/7GtOGaxU4HEjOokyNUnxI0aNR99o',
|
|
730
|
-
'mIHQyTJHttl9giYeMB/DPIFZfQkQMcnRTytGFddsMKQ99gu+SPPrTvvS31VOrvhw',
|
|
731
|
-
'8Y56n8kQJVLcBwi7FXsYgsbi6MbhUDWk9hGq+cBvYHlSpfyVRKDTgeHQjojsN03j',
|
|
732
|
-
'm0QOXFpwzTd/q38rZuTGw/w/96SjECSF9IeSJxA842OCx+pj1VxxR9MW7b7dEz4R',
|
|
733
|
-
'IBZ4Zd23GMy81LydtyqY2wkJtdjpKxs/LSE1Eym68s8f0uKQTHVaRD0frVyH6L2d',
|
|
734
|
-
'nI7aOggpEJc/kwX6q52VuVKG/1gC4taPePU3ieF4Mt602zIPoqmoIzLcoKYev4MA',
|
|
735
|
-
'DOhCYQcrFUoRT3o9aHN2MoGQvuRuaXWtDMD/SH9a57GEQ4czOjxDAfsxCtZb2j4h',
|
|
736
|
-
'yVdPLBYbYGBCe0KUYPc4lBOYN+ccLykdgg8cjHRHEyogyp50NBXP2oNJtuJSYock',
|
|
737
|
-
'YNeKWuhUD3PVrGQDAGGgoR9NEqj/RmzT/w5/1F1CfGG1udfs7XJ+/ON1diDPK6GF',
|
|
738
|
-
'7/+3RLryVDJOFTlh2qqDKDdqtPftVpWj70WloMlOEYh3XG6Naiu8RZ4gW9NDMDdu',
|
|
739
|
-
'W1jy1jwT9PXqTOjeOFRZWsdXbMunpc/naP+1JLBhhBbmICEmkjQvQcpQ0RRz+hTf',
|
|
740
|
-
'lVax2xmOd/nXKEhUXgtyayoU6ucBXYko+uutk25IyfWmAbnTGX6OOCZpGEBLaaTL',
|
|
741
|
-
'UAQLID60QT4Ae4VYGbQGxVCr/jF4t8TJjtYW4AN25HlWxpq8ua2SGJpPqPtZFgr/',
|
|
742
|
-
'b8Bn9VeelappW6ylJ8xHA9SiM6/AhrKySOPLnN39mE0odr/cBTK3vrzNmME7S4Tf',
|
|
743
|
-
'TZXCaGXIu15EvXErTYeMxoVasBWKX7/qjsQVVyj6BaSD8Hrk9gklr4nzC7HGCyu5',
|
|
744
|
-
'KOnlD3sJTaiARY16nZSQ5dqz8uMmRz4fqyMxt8owVLVAZLQznnp09phpFewIB74Q',
|
|
745
|
-
'2vIbmm4XZIwsBNiQB0JRei7KWg9mbQgzD21t31VdEMlu/tX4xrFTlmfdiCimc4I/',
|
|
746
|
-
'pUQMaX+1lRU5f7NZZS7LDA1kiQI8BBgBCAAmFiEEAC8b0YEYwLZVcpRvIKl8yGCm',
|
|
747
|
-
'MJMFAlttsQgCGwwFCQHhM4AACgkQIKl8yGCmMJNh6hAArmdLMGeBb8TmKGd8dQat',
|
|
748
|
-
'vZ7GEo0rTTF0bQ9j8zChRYy4lDDJUAnTV8ahtTAvNvsO0FLDWcfA796xa9Z9Z8pt',
|
|
749
|
-
'YCBaAE6crsOHaZjUfvjUSr9S6hWMdzovYOw6tGWL5LITqr0BoL5nu2lLBxuxxcaO',
|
|
750
|
-
'uM6BRdTsraxHTIlb0FBKyDJbkfchmjbHDSx5jDmzSBE8Z0BOgOZAB+Jj4t+j6orl',
|
|
751
|
-
'Zexs9A/vzj4bJALCvC/Fj0nFGzt5b1o0PlOSxvnRVtxiW90wwntTYg1TmVmBYA1L',
|
|
752
|
-
'q2k5CxW7kQ9Q+LaN9Mww6nJBJAswEVkcpzTdopp6zb/xoItwF+xfWKWhOlfbM+Uu',
|
|
753
|
-
'WfnJPZJ8OYK1xpOZcSLUy4PAmIJKh9vMcczZK0w3aEDS4mUdkqGuBZ65BQK8pjJK',
|
|
754
|
-
'CuHm3LjT1rXydNFIv5hF3SgcTLHZQe+cHb4lRP/IfipWmbBqr+4Pj/Mnz/TQR9gD',
|
|
755
|
-
'SQdUVPO3MJQPAe74/iy0s9m7aZUSzWzSMNrF8XDop8nMy9nrJT8tXwsO7JyKRkmc',
|
|
756
|
-
'TP7GnuqFfaZvsQPnowrTA1THly0CPgl6IrCSz+2tJTp8qbD+VMQL4bmgnUv5QpC1',
|
|
757
|
-
'iV31rdJFwON58YJEES4xfgWEnTUtLYr4VRDbLSBInEpvydm1c/92UwflE3VNF4W3',
|
|
758
|
-
'd35XgNkPLwvPJlk8lhP6ZamdB0YEW22xHgEQANR2RVdIzQ7T5avWMne5dayZLC5z',
|
|
759
|
-
'84GUQByULHtwbRsdtOz6hSvosb1kZKxebdxgwVTOgQXh1wQS/BN53XHA6raPoLoc',
|
|
760
|
-
'qAN0Is/AkDQiLlMwRdvlYAY5RE6EzsK4yhLffCSrdov0qmmCZEZ4YsFdOKRCl1+4',
|
|
761
|
-
'OE3ONBpU4N/48yXKba3+IQ8yKy8sRvxYf73SB6r/S9qIh94RvM/TSWZfT/VMDi47',
|
|
762
|
-
'GE2Hdh2s499MR9U8WCFWijq2/lTS44qgwI+pD9Y+tGE9mLgpo+gLfmklSL0pPHzW',
|
|
763
|
-
'oB4pFrQuaMB38Gl6UlxXKuXva2mJXOqyrtI9awOnsq8nwFTS62EHxLYlrT8Zw2ZP',
|
|
764
|
-
'ou7xjayO2IISCGawtXC8cRtbkHBdrKOT0eGofBHALZVZiiRFCing1yw1ETJEev54',
|
|
765
|
-
'OF/27riQGaIq5ftdA1jVTLDkSucaiNkGM5rG86X6FgOMcYnr2NDFesIp1lrhDyuj',
|
|
766
|
-
'VSAeagfcYhIBwBeMXIvcyYQV6uGORSOLZvmM5aXORAZBU/zz+ZWxoWZu67C9/zGf',
|
|
767
|
-
'6jpedpRZ0ZlDk4a6vdy+zqyXVgFpZssRY8aQeZOJP/D9UAT/Cpffm6yw7SU1kY+b',
|
|
768
|
-
'x6ZUH/sP1uwAzp1H11nHbg8RvoWjfq0aNPdcoeGcHq8w3XI5ygHWYOf0FsI51kCo',
|
|
769
|
-
'vgaelhsFnh6xa0D3ABEBAAH+BwMCfVtrVpU1RSjHycjdFwHo+IOYCV7GbYQhM5sU',
|
|
770
|
-
'zmIB8jqAbvpPxT61hLDOq5wpmBLMMdPIjcku2yUNnFBFM7GInKexOiotjAcnkRNo',
|
|
771
|
-
'96rY9e1r+tnV7ZFXenaqwE/TP2i051AnXAUB3BY2dnua9Xs11r0Q9awB9lh/9jpK',
|
|
772
|
-
'0piXJTtLRz2JD9stKF5NDVEWeOewOoUOO/bhHmCSnxd08gIZA+CPUSHMuvdqkKye',
|
|
773
|
-
'VgSzKO17F3jFN6eHilO+0OLiM7ryfIGJgrUrqv8wGet5KLGE7WkvFp3nCZJIQ17R',
|
|
774
|
-
'z1LlVvpWEiuziSwSiY/kHxYODhiV38K/00/UzVD+RwzEOsfo6Aygpw7Hx6ersvzE',
|
|
775
|
-
'WocNKfMKjl3o5KNOHjNeh5s8gXclYDJ6CcAQhAL0dw8/8Ym0wWZxRs3cOj65JLIR',
|
|
776
|
-
'vMNaMp3kk7UzoFdOrKECQ0dbGQQFdsg21jdBVQN2rma1+8IL4BIgc+VolnIT0Pq8',
|
|
777
|
-
'XAAeOjD0z4rgosZ/wZx4lVQuhW9Aut9QoR/ectc9sB3vR6mSVTJejZpzf8X0Hrii',
|
|
778
|
-
'uYsIaHmT4fAl0ij4eShI1eVsWldMYxNfzPpOPLfU2VHwDx8ibD3WMRU2pEmleGV9',
|
|
779
|
-
'tboMKq3raqar1syVXaDT0toiBHIAbToL3q0hWvWYWwHUiGnd4a4XgmvUgRxgtnTo',
|
|
780
|
-
'6xEqKoWToYAAdn6496acd84T39bN4l+3aN7P+u+vTqljucfgUmqBdKltzk5GePFP',
|
|
781
|
-
'XptDV3keIcKoP6Pzzju9MWWIYTu7y8SR1NHeKLoGpece3weoD0D/jk+WYTiBH14k',
|
|
782
|
-
't7hCnfvsvw1cartYn5AWYBJ7t45dQ8ZfYl2sEFHmFYfKoK8capU1ueTYHrez5MIK',
|
|
783
|
-
'Uc0gm1yDPGZN6Uf67orr2e3uT8WEEo8unjmtN5KDij7EoujVsJ+A3aSZjCgsHr2o',
|
|
784
|
-
'93iyrJp/7yNMEFBjefmMcE0hrXLxz9S7MDDyzy76NS2/8hZ59wfD5EK2yvm0fe2n',
|
|
785
|
-
'DGB+coGb05RUAgMwra3SJdhS7jd3vz8ymrgiu6L9qchwE55aiZW/bQJeKXkJxuIB',
|
|
786
|
-
'9WFRd+WrHOHPwv9Bop1nvRrVHZLXqoC0BoalUcyntHxKYeyucNYCTOW0DnBMI+kL',
|
|
787
|
-
'CmXfroMjzGD13xTvFYeHxVOWHZqTdU0DU42DPXDDrRuNnbZgSVNNGxQDysaeIS9f',
|
|
788
|
-
'3+8cWfdMQk1rAxzJeqqnXtakxCyO8BzJMxobuJ89iE+WC8kho3nl/MSe8LnBU2/3',
|
|
789
|
-
'7yTjl7ChG37y4vlnrTGMtMiaZNDpP6u3JY9/L1kHAOGJ0vFXmwnvDf2orAc2wh9r',
|
|
790
|
-
'QJolJqUQ3z4c/ACD69AuuNWk+USC386IDxdHkRH+c8exN9zPG35qGkmWoH9T+lZk',
|
|
791
|
-
'CNC/LrvBJKuYAwl+XyVb2gEITERT3jr9TO3rkE/1fdRVemeK5gPLW13b7cKtwnq6',
|
|
792
|
-
'q/Un8XNxP6KeTW51A91dL71l60TMW/owYtMeOJ1140bG2KrQWeuojnNvk4V6nxlZ',
|
|
793
|
-
'uwg+a87IyedsWKX8gRtpUcAqV3yt2l4XGyAag7e50EZnkDIm5TPGgds1jLItAYcb',
|
|
794
|
-
'CmUl4iVP5QxkFdgKQXr3AsV5kWAi/WegDfaj/7FBu5ffosF8YdyhohOY5amxYC2y',
|
|
795
|
-
'dw3VdkfgZohyHZs76T7sheQwtIzVNEYhK/9H/tr4OK13qRHlS7FcdZ+cw+t/Sj9b',
|
|
796
|
-
'tRaBi2+IFTBtJg2th50pYieZx58Lrly5o70K/WgnqQyJEEgKxqb77a3MC73AFku6',
|
|
797
|
-
'j5Krk4atOku6d4kEcgQYAQgAJhYhBAAvG9GBGMC2VXKUbyCpfMhgpjCTBQJbbbEe',
|
|
798
|
-
'AhsCBQkB4TOAAkAJECCpfMhgpjCTwXQgBBkBCAAdFiEE2ANmjqFLjSRek7Ly7paV',
|
|
799
|
-
'EPkPkswFAlttsR4ACgkQ7paVEPkPkswAyw/9FeHay1S7acuJWpnOrn/dncExOpTu',
|
|
800
|
-
'vUv7KT7dphPFooftGGC1wH2gd49Cw/p5REfyD7kHrdNxW8Gm1j5/WVDdsGHf2Bnr',
|
|
801
|
-
'ZDJPUQ0U1GFRXgHM6gJuVvWP9nQCpsnWxbQ/p5ior3H+RIKI1dlCUzD2NKdHVKDw',
|
|
802
|
-
'8OmX6AL3hM8CpHrv79bSKPh6Mz3eS8XSLLV4nU9p2bkxllKaAzNutP8cL/y1mRNC',
|
|
803
|
-
'TrQt6j/5k4kWuj+rKDGaFIPA28tNPZLyy5Mp23dXk7dCfTZAcWKdSUraUE1Vke3M',
|
|
804
|
-
'0AhwU6J10GDL8eqPx4g1ihakZVC9mf/BxqjEpYJQZVju1s4dhIWFHij9GWycp7M7',
|
|
805
|
-
'X3Y35BCzpslTxS/OKlEV+U/kb8MnXhRcmh9ItMOZfHo2/YqGVKPL9/ETPmORNNP9',
|
|
806
|
-
'QR+N0a6nAGH9fc9FZybYw4c3hiCtD985e3QIYJpT0QQej4IdqjH1IpoRgSHnBnWw',
|
|
807
|
-
'tHMUOvKK33WCOybCECR/8Gn1ocCLQPQszMLRBbMqnAA29amIOJZXVsMF5LYytqUd',
|
|
808
|
-
'2+ctEx3wciaYZmIgl3VzEBcjNKLWJ60x9UIM0lhOKtbJ5bAp+VYHEV04t8yEcnWd',
|
|
809
|
-
'l1SwMqbFg/Jot9DqXFaj/o6iYAwQyqGUvWJr99Qf/3HjS3zCEnGJsIaQZhKi0K/a',
|
|
810
|
-
'ImPTfGFlLuzMh+mYpw/+P+1qKBbrPIF269epUq+npApAU72IpbwwuJ06n4FwVstW',
|
|
811
|
-
'd0n3SxOEiiuQIcpVgEtFbbEizVsq86obhJf5fCsJlQghDxkslIntBBwz8jrWbDUw',
|
|
812
|
-
'iec0+fsI3OfPeMcqdqP2+Swzka/3JWKoHm6K6+7O4G5c8XB2Dt93pZVD9/CDkc4M',
|
|
813
|
-
'lSgmP00xfsO090OMGAVI/+v7+A4NMzCnJF9tWLF2ykfZhMRLfPvyr9880yWZOBRf',
|
|
814
|
-
'iuotS7oP+LIPfoq2txWNXfjDHvnQDTIHLhoM2HMdzI5qMkLax1bcgGT2uuogA+JI',
|
|
815
|
-
'bQ+9gO7VoqHi1qWb7MPzyaTk4Wxl9oP9qYo28m4xrgJ+bPz/cCgeY8Li4L8ds9cb',
|
|
816
|
-
'Q69OJhPncMYjrWx7dtB5AP9zdYaYjHejuSgI9s0J9Zum8QrCI/HdPZLIVIuuHywd',
|
|
817
|
-
'b77w5v0a+vXw7qCBXpEPEsRbExn6FjC2bGunbdAw5S+MTZSkTpCJUHoxKIxFiOUe',
|
|
818
|
-
'7F6lEBizbbSpIIRZMcwqB9gMxtRE2JrNntSVpHiBXKMSRXh/416hG7Gwf2hxppPw',
|
|
819
|
-
'hBr9NrB2VFHtdaWf2YqBGb7c1xusmEuGLcGUqFGCXo/g/lOSPijea91puCf9bgKy',
|
|
820
|
-
'0P7n+O0V3W1QpkI4ne5TE2vBFUFo9K5IFe4qBI1JPjbLTfOI2lojx8P12+lqWug=',
|
|
821
|
-
'=NbaL',
|
|
822
|
-
'-----END PGP PRIVATE KEY BLOCK-----'].join("\n");
|
|
823
|
-
|
|
824
|
-
const signature_with_critical_notation = `-----BEGIN PGP MESSAGE-----
|
|
825
|
-
|
|
826
|
-
owGbwMvMwMH4oOW7S46CznTG09xJDDE3Wl1KUotLuDousDAwcjBYiSmyXL+48d6x
|
|
827
|
-
U1PSGUxcj8IUszKBVMpMaWAAAgEGZpAeh9SKxNyCnFS95PzcytRiBi5OAZjyXXzM
|
|
828
|
-
f8WYLqv7TXP61Sa4rqT12CI3xaN73YS2pt089f96odCKaEPnWJ3iSGmzJaW/ug10
|
|
829
|
-
2Zo8Wj2k4s7t8wt4H3HtTu+y5UZfV3VOO+l//sdE/o+Lsub8FZH7/eOq7OnbNp4n
|
|
830
|
-
vwjE8mqJXetNMfj8r2SCyvkEnlVRYR+/mnge+ib56FdJ8uKtqSxyvgA=
|
|
831
|
-
=fRXs
|
|
832
|
-
-----END PGP MESSAGE-----`;
|
|
833
|
-
|
|
834
|
-
const signature_with_non_human_readable_notations = `-----BEGIN PGP SIGNATURE-----
|
|
835
|
-
|
|
836
|
-
wncEARYKAB8FAl2TS9MYFAAAAAAADAADdGVzdEBrZXkuY29tAQIDAAoJEGZ9
|
|
837
|
-
gtV/iL8hrhMBAOQ/UgqRTbx1Z8inGmRdUx1cJU1SR4Pnq/eJNH/CFk5DAP0Q
|
|
838
|
-
hUhMKMuiM3pRwdIyDOItkUWQmjEEw7/XmhgInkXsCw==
|
|
839
|
-
=ZGXr
|
|
840
|
-
-----END PGP SIGNATURE-----
|
|
841
|
-
`;
|
|
842
|
-
|
|
843
|
-
it('Testing signature checking on CAST5-enciphered message', async function() {
|
|
844
|
-
const { reject_message_hash_algorithms } = openpgp.config;
|
|
845
|
-
Object.assign(openpgp.config, { reject_message_hash_algorithms: new Set([openpgp.enums.hash.md5, openpgp.enums.hash.ripemd]) });
|
|
846
|
-
try {
|
|
847
|
-
const priv_key = (await openpgp.key.readArmored(priv_key_arm1)).keys[0];
|
|
848
|
-
const pub_key = (await openpgp.key.readArmored(pub_key_arm1)).keys[0];
|
|
849
|
-
const msg = await openpgp.message.readArmored(msg_arm1);
|
|
850
|
-
await priv_key.decrypt("abcd");
|
|
851
|
-
const decrypted = await openpgp.decrypt({ privateKeys: priv_key, publicKeys:[pub_key], message:msg });
|
|
852
|
-
expect(decrypted.data).to.exist;
|
|
853
|
-
expect(decrypted.signatures[0].valid).to.be.true;
|
|
854
|
-
expect(decrypted.signatures[0].signature.packets.length).to.equal(1);
|
|
855
|
-
} finally {
|
|
856
|
-
Object.assign(openpgp.config, { reject_message_hash_algorithms });
|
|
857
|
-
}
|
|
858
|
-
});
|
|
859
|
-
|
|
860
|
-
it('Supports decrypting with GnuPG stripped-key extension', async function() {
|
|
861
|
-
const { reject_message_hash_algorithms } = openpgp.config;
|
|
862
|
-
Object.assign(openpgp.config, { reject_message_hash_algorithms: new Set([openpgp.enums.hash.md5, openpgp.enums.hash.ripemd]) });
|
|
863
|
-
try {
|
|
864
|
-
// exercises the GnuPG s2k type 1001 extension:
|
|
865
|
-
// the secrets on the primary key have been stripped.
|
|
866
|
-
const priv_key_gnupg_ext = (await openpgp.key.readArmored(priv_key_arm1_stripped)).keys[0];
|
|
867
|
-
const priv_key_gnupg_ext_2 = (await openpgp.key.readArmored(priv_key_arm1_stripped)).keys[0];
|
|
868
|
-
const pub_key = (await openpgp.key.readArmored(pub_key_arm1)).keys[0];
|
|
869
|
-
const message = await openpgp.message.readArmored(msg_arm1);
|
|
870
|
-
const primaryKey_packet = priv_key_gnupg_ext.primaryKey.write();
|
|
871
|
-
expect(priv_key_gnupg_ext.isDecrypted()).to.be.false;
|
|
872
|
-
await priv_key_gnupg_ext.decrypt("abcd");
|
|
873
|
-
await priv_key_gnupg_ext_2.decrypt("abcd");
|
|
874
|
-
expect(priv_key_gnupg_ext.isDecrypted()).to.be.true;
|
|
875
|
-
const msg = await openpgp.decrypt({ message, privateKeys: [priv_key_gnupg_ext], publicKeys: [pub_key] });
|
|
876
|
-
expect(msg.signatures).to.exist;
|
|
877
|
-
expect(msg.signatures).to.have.length(1);
|
|
878
|
-
expect(msg.signatures[0].valid).to.be.true;
|
|
879
|
-
expect(msg.signatures[0].signature.packets.length).to.equal(1);
|
|
880
|
-
await expect(openpgp.sign({ message: openpgp.message.fromText('test'), privateKeys: [priv_key_gnupg_ext] })).to.eventually.be.rejectedWith('Missing private key parameters');
|
|
881
|
-
await expect(openpgp.reformatKey({ userIds: { name: 'test' }, privateKey: priv_key_gnupg_ext })).to.eventually.be.rejectedWith('Missing private key parameters');
|
|
882
|
-
await expect(openpgp.reformatKey({ userIds: { name: 'test' }, privateKey: priv_key_gnupg_ext_2, passphrase: 'test' })).to.eventually.be.rejectedWith('Missing private key parameters');
|
|
883
|
-
await priv_key_gnupg_ext.encrypt("abcd");
|
|
884
|
-
expect(priv_key_gnupg_ext.isDecrypted()).to.be.false;
|
|
885
|
-
const primaryKey_packet2 = priv_key_gnupg_ext.primaryKey.write();
|
|
886
|
-
expect(primaryKey_packet).to.deep.equal(primaryKey_packet2);
|
|
887
|
-
} finally {
|
|
888
|
-
Object.assign(openpgp.config, { reject_message_hash_algorithms });
|
|
889
|
-
}
|
|
890
|
-
});
|
|
891
|
-
|
|
892
|
-
it('Supports signing with GnuPG stripped-key extension', async function() {
|
|
893
|
-
const priv_key_gnupg_ext = (await openpgp.key.readArmored(flowcrypt_stripped_key)).keys[0];
|
|
894
|
-
await priv_key_gnupg_ext.decrypt('FlowCrypt');
|
|
895
|
-
const sig = await openpgp.sign({ message: openpgp.message.fromText('test'), privateKeys: [priv_key_gnupg_ext], date: new Date('2018-12-17T03:24:00') });
|
|
896
|
-
expect(sig.data).to.match(/-----END PGP MESSAGE-----\r\n$/);
|
|
897
|
-
});
|
|
898
|
-
|
|
899
|
-
it('Supports non-human-readable notations', async function() {
|
|
900
|
-
const { packets: [signature] } = await openpgp.message.readArmored(signature_with_non_human_readable_notations);
|
|
901
|
-
// There are no human-readable notations so `notations` property does not
|
|
902
|
-
// expose the `test@key.com` notation.
|
|
903
|
-
expect(Object.keys(signature.notations).length).to.equal(0);
|
|
904
|
-
expect(signature.notations['test@key.com']).to.equal(undefined);
|
|
905
|
-
|
|
906
|
-
// The notation is readable through `rawNotations` property:
|
|
907
|
-
expect(signature.rawNotations.length).to.equal(1);
|
|
908
|
-
const notation = signature.rawNotations[0];
|
|
909
|
-
expect(notation.name).to.equal('test@key.com');
|
|
910
|
-
expect(notation.value).to.deep.equal(Uint8Array.from([0x01, 0x02, 0x03]));
|
|
911
|
-
expect(notation.humanReadable).to.equal(false);
|
|
912
|
-
});
|
|
913
|
-
|
|
914
|
-
it('Checks for critical bit in non-human-readable notations', async function() {
|
|
915
|
-
try {
|
|
916
|
-
openpgp.config.tolerant = false;
|
|
917
|
-
await openpgp.message.readArmored(`-----BEGIN PGP SIGNATURE-----
|
|
918
|
-
|
|
919
|
-
wsEfBAABCABJBYJfKDH0K5QAAAAAAB0ABXVua25vd25AdGVzdHMuc2VxdW9pYS1w
|
|
920
|
-
Z3Aub3JndmFsdWUWIQTRpm4aI7GCyZgPeIz7/MgqAV5zMAAKCRD7/MgqAV5zMLBK
|
|
921
|
-
C/9Vdte8yq8QFp7Bo3mWWXiUDJ2vOdEpJs9PB12hN97wewjFKWvKcWRHofBrK+0v
|
|
922
|
-
P4/sixMjqSXB75iz/lzCbPjkmgmaGKN6Smq6Pj5kIdpWIdtfjNoa+OEn1emrxpY1
|
|
923
|
-
dT0Pe7r8w3Y/JmfK1ZoFfiq5YBP+rsjmAXf6BQ9RH+kMUsOgOVCjqzI5vPibTD91
|
|
924
|
-
Aefm7XS35Wlj/O/zFXR9tiZyE/dKIujohB3bsV6sAmYzPxZVuZCYaj+6afRlAuWg
|
|
925
|
-
IYs+aFmldMg4p1t1Ab/bRHbBxIlzhtbNE6IyOfc17mgOcjQzVJBc/EaxD7S3KjU2
|
|
926
|
-
4aFmOaLyWDrvAJu1Ror2b+zekEiq90CnCtAUiAq6/qbWlGCGX4zFKWyHousDJcEB
|
|
927
|
-
1n0xDkFUhndisMZanaU3S1hwzawMnpHi1RHI2a/etPPk0Ryrzo2rFi8ZdAHLWY6o
|
|
928
|
-
4ymAWpppg47NhCwuYh/EG5G1P4ccxksRj1GX2r5HxH8ZeAQWWdviINErgrUONWHy
|
|
929
|
-
bwM=
|
|
930
|
-
=0x2S
|
|
931
|
-
-----END PGP SIGNATURE-----`);
|
|
932
|
-
throw new Error('openpgp.message.readArmored should throw but it did not.');
|
|
933
|
-
} catch (e) {
|
|
934
|
-
expect(e.message).to.equal('Unknown critical notation: unknown@tests.sequoia-pgp.org');
|
|
935
|
-
} finally {
|
|
936
|
-
openpgp.config.tolerant = true;
|
|
937
|
-
}
|
|
938
|
-
});
|
|
939
|
-
|
|
940
|
-
it('Verify V4 signature. Hash: SHA1. PK: RSA. Signature Type: 0x00 (binary document)', async function() {
|
|
941
|
-
const { reject_message_hash_algorithms } = openpgp.config;
|
|
942
|
-
Object.assign(openpgp.config, { reject_message_hash_algorithms: new Set([openpgp.enums.hash.md5, openpgp.enums.hash.ripemd]) });
|
|
943
|
-
try {
|
|
944
|
-
const signedArmor =
|
|
945
|
-
['-----BEGIN PGP MESSAGE-----',
|
|
946
|
-
'Version: GnuPG v2.0.19 (GNU/Linux)',
|
|
947
|
-
'',
|
|
948
|
-
'owGbwMvMwMT4oOW7S46CznTGNeZJLCWpFSVBU3ZGF2fkF5Uo5KYWFyemp3LlAUUV',
|
|
949
|
-
'cjLzUrneTp3zauvaN9O26L9ZuOFNy4LXyydwcXXMYWFgZGJgY2UCaWXg4hSAmblK',
|
|
950
|
-
'nPmfsXYxd58Ka9eVrEnSpzilr520fXBrJsf2P/oTqzTj3hzyLG0o3TTzxFfrtOXf',
|
|
951
|
-
'cw6U57n3/Z4X0pEZ68C5/o/6NpPICD7fuEOz3936raZ6wXGzueY8pfPnVjY0ajAc',
|
|
952
|
-
'PtJzvvqj+ubYaT1sK9wWhd9lL3/V+9Zuua9QjOWC22buchsCroh8fLoZAA==',
|
|
953
|
-
'=VH8F',
|
|
954
|
-
'-----END PGP MESSAGE-----'].join('\n');
|
|
955
|
-
|
|
956
|
-
const sMsg = await openpgp.message.readArmored(signedArmor);
|
|
957
|
-
const pub_key = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
958
|
-
const verified = await sMsg.verify([pub_key]);
|
|
959
|
-
openpgp.stream.pipe(sMsg.getLiteralData(), new WritableStream());
|
|
960
|
-
expect(verified).to.exist;
|
|
961
|
-
expect(verified).to.have.length(1);
|
|
962
|
-
expect(await verified[0].verified).to.be.true;
|
|
963
|
-
expect((await verified[0].signature).packets.length).to.equal(1);
|
|
964
|
-
} finally {
|
|
965
|
-
Object.assign(openpgp.config, { reject_message_hash_algorithms });
|
|
966
|
-
}
|
|
967
|
-
});
|
|
968
|
-
|
|
969
|
-
it('Verify signature of signed and encrypted message from GPG2 with openpgp.decrypt', async function() {
|
|
970
|
-
const msg_armor =
|
|
971
|
-
['-----BEGIN PGP MESSAGE-----',
|
|
972
|
-
'Version: GnuPG v2.0.19 (GNU/Linux)',
|
|
973
|
-
'',
|
|
974
|
-
'hIwD4IT3RGwgLJcBBADEBdm+GEW7IV1K/Bykg0nB0WYO08ai7/8/+Y/O9xu6RiU0',
|
|
975
|
-
'q7/jWuKms7kSjw9gxMCjf2dGnAuT4Cg505Kj5WfeBuHh618ovO8qo4h0qHyp1/y3',
|
|
976
|
-
'o1P0IXPAb+LGJOeO7DyM9Xp2AOBiIKOVWzFTg+MBZOc+XZEVx3FioHfm9SSDudLA',
|
|
977
|
-
'WAEkDakCG6MRFj/7SmOiV8mQKH+YPMKT69eDZW7hjINabrpM2pdRU7c9lC7CMUBx',
|
|
978
|
-
'Vj7wZsQBMASSC8f2rhpGA2iKvYMsmW3g9R1xkvj1MXWftSPUS4jeNTAgEwvvF6Af',
|
|
979
|
-
'cP+OYSXKlTbwfEr73ES2O3/IFE9sHRjPqWaxWuv4DDQ5YfIxE54C1aE8Aq5/QaIH',
|
|
980
|
-
'v38TUSia0yEMCc/tJd58DikkT07AF162tcx9Ro0ZjhudyuvUyXIfPfxA+XWR2pdz',
|
|
981
|
-
'ifxyV4zia9RvaCUY8vXGM+gQJ3NNXx2LkZA3kWUEyxFVL1Vl/XUQY0M6U+uccSk4',
|
|
982
|
-
'eMXm6eyEWDcj0lBRckqKoKo1w/uan11jPuHsnRz6jO9DsuKEz79UDgI=',
|
|
983
|
-
'=cFi7',
|
|
984
|
-
'-----END PGP MESSAGE-----'].join('\n');
|
|
985
|
-
|
|
986
|
-
const plaintext = 'short message\nnext line\n한국어/조선말';
|
|
987
|
-
const esMsg = await openpgp.message.readArmored(msg_armor);
|
|
988
|
-
const pubKey = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
989
|
-
const privKey = (await openpgp.key.readArmored(priv_key_arm2)).keys[0];
|
|
990
|
-
|
|
991
|
-
await Promise.all(esMsg.getEncryptionKeyIds().map(keyId => privKey.decrypt('hello world', keyId)));
|
|
992
|
-
|
|
993
|
-
return openpgp.decrypt({ privateKeys: privKey, publicKeys:[pubKey], message:esMsg }).then(function(decrypted) {
|
|
994
|
-
expect(decrypted.data).to.exist;
|
|
995
|
-
expect(decrypted.data).to.equal(plaintext);
|
|
996
|
-
expect(decrypted.signatures).to.have.length(1);
|
|
997
|
-
expect(decrypted.signatures[0].valid).to.be.true;
|
|
998
|
-
expect(decrypted.signatures[0].signature.packets.length).to.equal(1);
|
|
999
|
-
});
|
|
1000
|
-
});
|
|
1001
|
-
|
|
1002
|
-
it('Verify signed message with two one pass signatures', async function() {
|
|
1003
|
-
const msg_armor =
|
|
1004
|
-
['-----BEGIN PGP MESSAGE-----',
|
|
1005
|
-
'Version: GnuPG v2.0.19 (GNU/Linux)',
|
|
1006
|
-
'',
|
|
1007
|
-
'owGbwMvMwMF4+5Pyi4Jg3y8ME8DcBy3fXXIUdKYzrjFNYilJrSgJmsXDXJyRX1Si',
|
|
1008
|
-
'kJtaXJyYnsqVBxRVyMnMS+V6O3XOq61r30zbov9m4YY3LQteL5/QMYeFgZGDgY2V',
|
|
1009
|
-
'CaSRgYtTAGZiYxYLwySbQk07ptZel6gmjrKyBWsyWdkOG3oscLBdIpXXfDdb6fNv',
|
|
1010
|
-
'8ULN5L1ed+xNo79P2dBotWud6vn7e9dtLJ7o12PunnvEz8gyyvP4/As/los0xsnZ',
|
|
1011
|
-
'H+8ublrhvGtLxJUZuUKZO6QdHq2Nepuw8OrfiMXPBDQXXpV2q11Ze+rD3lndgv/C',
|
|
1012
|
-
'bJQNOhll0J0H839jFvt/16m20h/ZmDoWqJywapnypjdIjcXr+7rJFess40yenV7Q',
|
|
1013
|
-
'2LSu/EX6Aq29x+dv+GPUMfuhTNE3viWWUR4PD6T7XfmdViUwmSf8fkRNUn/t3a2n',
|
|
1014
|
-
'cq46Xr36seCor/OLp0atSZwHrjx2SU5zPLheZn+zw/0d1/YZnD7AEeP9s/Cuycyv',
|
|
1015
|
-
'CZ5HZNKufvB8fsh+dfdSXW0GfqkPfxk36Vw8ufpjaoZDyt2nxxg/6D4KS3UvZzv3',
|
|
1016
|
-
'axdLZ9yd0OJNZv4P501If24W4vTGz6nI7Ser8Yd2PiOvE5MWMT0wLZQ+zPX1sv0/',
|
|
1017
|
-
's8PvkyWmVM0O0fB/ZSHovHNNPffDg/rWhzOmXQ9/7vTn477F+aWm5sYzJ75/BQA=',
|
|
1018
|
-
'=+L0S',
|
|
1019
|
-
'-----END PGP MESSAGE-----'].join('\n');
|
|
1020
|
-
|
|
1021
|
-
const plaintext = 'short message\nnext line\n한국어/조선말';
|
|
1022
|
-
const sMsg = await openpgp.message.readArmored(msg_armor);
|
|
1023
|
-
const pubKey2 = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1024
|
-
const pubKey3 = (await openpgp.key.readArmored(pub_key_arm3)).keys[0];
|
|
1025
|
-
|
|
1026
|
-
const keyids = sMsg.getSigningKeyIds();
|
|
1027
|
-
|
|
1028
|
-
expect(pubKey2.getKeys(keyids[1])).to.not.be.empty;
|
|
1029
|
-
expect(pubKey3.getKeys(keyids[0])).to.not.be.empty;
|
|
1030
|
-
|
|
1031
|
-
return sMsg.verify([pubKey2, pubKey3]).then(async verifiedSig => {
|
|
1032
|
-
expect(await openpgp.stream.readToEnd(sMsg.getText())).to.equal(plaintext);
|
|
1033
|
-
expect(verifiedSig).to.exist;
|
|
1034
|
-
expect(verifiedSig).to.have.length(2);
|
|
1035
|
-
expect(await verifiedSig[0].verified).to.be.true;
|
|
1036
|
-
expect(await verifiedSig[1].verified).to.be.true;
|
|
1037
|
-
expect((await verifiedSig[0].signature).packets.length).to.equal(1);
|
|
1038
|
-
expect((await verifiedSig[1].signature).packets.length).to.equal(1);
|
|
1039
|
-
});
|
|
1040
|
-
});
|
|
1041
|
-
|
|
1042
|
-
it('Verify fails with signed message with critical notations', async function() {
|
|
1043
|
-
let testFailed = true;
|
|
1044
|
-
try {
|
|
1045
|
-
openpgp.config.tolerant = false;
|
|
1046
|
-
const sMsg = await openpgp.message.readArmored(signature_with_critical_notation);
|
|
1047
|
-
const pub_key = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1048
|
-
const verified = await sMsg.verify([pub_key]);
|
|
1049
|
-
await verified[0].verified;
|
|
1050
|
-
testFailed = false;
|
|
1051
|
-
} catch (e) {
|
|
1052
|
-
expect(e.message).to.equal('Unknown critical notation: test@example.com');
|
|
1053
|
-
} finally {
|
|
1054
|
-
openpgp.config.tolerant = true;
|
|
1055
|
-
}
|
|
1056
|
-
// fail the test if execution does not throw an exception
|
|
1057
|
-
expect(testFailed).to.be.true;
|
|
1058
|
-
});
|
|
1059
|
-
|
|
1060
|
-
it('Verify succeeds with known signed message with critical notations', async function() {
|
|
1061
|
-
openpgp.config.tolerant = false;
|
|
1062
|
-
openpgp.config.known_notations.push('test@example.com');
|
|
1063
|
-
try {
|
|
1064
|
-
const sMsg = await openpgp.message.readArmored(signature_with_critical_notation);
|
|
1065
|
-
const pub_key = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1066
|
-
const verified = await sMsg.verify([pub_key]);
|
|
1067
|
-
openpgp.stream.pipe(sMsg.getLiteralData(), new WritableStream());
|
|
1068
|
-
expect(await verified[0].verified).to.be.true;
|
|
1069
|
-
} finally {
|
|
1070
|
-
openpgp.config.known_notations.pop();
|
|
1071
|
-
openpgp.config.tolerant = true;
|
|
1072
|
-
}
|
|
1073
|
-
});
|
|
1074
|
-
|
|
1075
|
-
it('Verify cleartext signed message with two signatures with openpgp.verify', async function() {
|
|
1076
|
-
const msg_armor =
|
|
1077
|
-
['-----BEGIN PGP SIGNED MESSAGE-----',
|
|
1078
|
-
'Hash: SHA256',
|
|
1079
|
-
'',
|
|
1080
|
-
'short message',
|
|
1081
|
-
'next line',
|
|
1082
|
-
'한국어/조선말',
|
|
1083
|
-
'-----BEGIN PGP SIGNATURE-----',
|
|
1084
|
-
'Version: GnuPG v2.0.19 (GNU/Linux)',
|
|
1085
|
-
'',
|
|
1086
|
-
'iJwEAQEIAAYFAlKcju8ACgkQ4IT3RGwgLJci6gP/dCmIraUa6AGpJxzGfK+jYpjl',
|
|
1087
|
-
'G0KunFyGmyPxeJVnPi2bBp3EPIbiayQ71CcDe9DKpF046tora07AA9eo+/YbvJ9P',
|
|
1088
|
-
'PWeScw3oj/ejsmKQoDBGzyDMFUphevnhgc5lENjovJqmiu6FKjNmADTxcZ/qFTOq',
|
|
1089
|
-
'44EWTgdW3IqXFkNpKjeJARwEAQEIAAYFAlKcju8ACgkQ2/Ij6HBTTfQi6gf9HxhE',
|
|
1090
|
-
'ycLDhQ8iyC090TaYwsDytScU2vOMiI5rJCy2tfDV0pfn+UekYGMnKxZTpwtmno1j',
|
|
1091
|
-
'mVOlieENszz5IcehS5TYwk4lmRFjoba+Z8qwPEYhYxP29GMbmRIsH811sQHFTigo',
|
|
1092
|
-
'LI2t4pSSSUpAiXd9y6KtvkWcGGn8IfkNHCEHPh1ov28QvH0+ByIiKYK5N6ZB8hEo',
|
|
1093
|
-
'0uMYhKQPVJdPCvMkAxQCRPw84EvmxuJ0HMCeSB9tHQXpz5un2m8D9yiGpBQPnqlW',
|
|
1094
|
-
'vCCq7fgaUz8ksxvQ9bSwv0iIIbbBdTP7Z8y2c1Oof6NDl7irH+QCeNT7IIGs8Smn',
|
|
1095
|
-
'BEzv/FqkQAhjy3Krxg==',
|
|
1096
|
-
'=3Pkl',
|
|
1097
|
-
'-----END PGP SIGNATURE-----'].join('\n');
|
|
1098
|
-
|
|
1099
|
-
const plaintext = 'short message\nnext line\n한국어/조선말';
|
|
1100
|
-
const csMsg = await openpgp.cleartext.readArmored(msg_armor);
|
|
1101
|
-
const pubKey2 = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1102
|
-
const pubKey3 = (await openpgp.key.readArmored(pub_key_arm3)).keys[0];
|
|
1103
|
-
|
|
1104
|
-
const keyids = csMsg.getSigningKeyIds();
|
|
1105
|
-
|
|
1106
|
-
expect(pubKey2.getKeys(keyids[0])).to.not.be.empty;
|
|
1107
|
-
expect(pubKey3.getKeys(keyids[1])).to.not.be.empty;
|
|
1108
|
-
|
|
1109
|
-
return openpgp.verify({ publicKeys:[pubKey2, pubKey3], message:csMsg }).then(function(cleartextSig) {
|
|
1110
|
-
expect(cleartextSig).to.exist;
|
|
1111
|
-
expect(cleartextSig.data).to.equal(plaintext);
|
|
1112
|
-
expect(cleartextSig.signatures).to.have.length(2);
|
|
1113
|
-
expect(cleartextSig.signatures[0].valid).to.be.true;
|
|
1114
|
-
expect(cleartextSig.signatures[1].valid).to.be.true;
|
|
1115
|
-
expect(cleartextSig.signatures[0].signature.packets.length).to.equal(1);
|
|
1116
|
-
expect(cleartextSig.signatures[1].signature.packets.length).to.equal(1);
|
|
1117
|
-
});
|
|
1118
|
-
});
|
|
1119
|
-
|
|
1120
|
-
it('Verify latin-1 signed message', async function() {
|
|
1121
|
-
const latin1Binary = openpgp.util.hex_to_Uint8Array('48e46c6cf62057e86c74');
|
|
1122
|
-
const message = openpgp.message.fromBinary(latin1Binary);
|
|
1123
|
-
|
|
1124
|
-
message.appendSignature(`-----BEGIN PGP SIGNATURE-----
|
|
1125
|
-
|
|
1126
|
-
iQIzBAEBCAAdFiEET5+J9VBawdGiYGMc2xGHud1faTsFAl5lE/AACgkQ2xGHud1f
|
|
1127
|
-
aTtIuw//YWrVaXLyP8sGBc0uUSLxQbmfQQYV8Oq8Vsg+jV4orc73wmEy8+Nj5m2g
|
|
1128
|
-
fFEPaWy07dfDBtv874XCsZmCM+ZhwkGaT9lwcCxkxNZeywTE5JRS1/6Ky3G4gDZ/
|
|
1129
|
-
QozTXr/ZNPXF6bBENqhfqeO2xkD577bjiPu5wLcu3/RR39YnWp5zQu9ynJbpwobz
|
|
1130
|
-
HHQW5TgSUgi/9tInQ+cc7vMkHzfe2Zg45HkyaStBW1x7Fm9FLv8GNw1R2jVbUlsX
|
|
1131
|
-
SEL7yPrsZAmgyu1ifMrTTY4vunuUNUFiGZN9UC75b7s4tjKkvJ0sfdQusC0vmcE0
|
|
1132
|
-
Wq7dAoeX72B94TITuXldDGIfL01smycm+mEvf/kXxQg81wj4la72IzhdWeC6r4PF
|
|
1133
|
-
558QDEtZy984iL8RJKpbjwgsxyvfM9zf9qtmuNdscbZaZsx9LRe21uaKhX8yJsAU
|
|
1134
|
-
jCgyjM5e7CMdvBUyxrpGzS+mP/rh77r2TXkg6u2+8Nj4osxwkfxvDIGpJfaIWl2a
|
|
1135
|
-
sNQ4Bsgm6rcNYaxUVbOsBFJddBb503KpTX5aK8TuC6AINg6bV6rmfj2Jc/QX4eHb
|
|
1136
|
-
Xgm6EyJo74z5R7YvA3XdUZf1sfwfoMLbbUqpeHEZOcWy4vrS79Omx1MyPxKHPiXU
|
|
1137
|
-
PAAeuQTUrcJdZeJ86eQ9cCUB216HCwSKOWTQRzL+hBWKXij4WD4=
|
|
1138
|
-
=ZEFm
|
|
1139
|
-
-----END PGP SIGNATURE-----`);
|
|
1140
|
-
|
|
1141
|
-
const pubKey = (await openpgp.key.readArmored(pub_latin1_msg)).keys[0];
|
|
1142
|
-
|
|
1143
|
-
return message.verify([pubKey]).then(async verifiedSig => {
|
|
1144
|
-
expect(await openpgp.stream.readToEnd(message.getLiteralData())).to.equal(latin1Binary);
|
|
1145
|
-
expect(verifiedSig).to.exist;
|
|
1146
|
-
expect(verifiedSig).to.have.length(1);
|
|
1147
|
-
expect(await verifiedSig[0].verified).to.be.true;
|
|
1148
|
-
expect((await verifiedSig[0].signature).packets.length).to.equal(1);
|
|
1149
|
-
});
|
|
1150
|
-
});
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
it('Verify cleartext signed message with trailing spaces from GPG', async function() {
|
|
1154
|
-
const { reject_message_hash_algorithms } = openpgp.config;
|
|
1155
|
-
Object.assign(openpgp.config, { reject_message_hash_algorithms: new Set([openpgp.enums.hash.md5, openpgp.enums.hash.ripemd]) });
|
|
1156
|
-
try {
|
|
1157
|
-
const msg_armor =
|
|
1158
|
-
`-----BEGIN PGP SIGNED MESSAGE-----
|
|
1159
|
-
Hash: SHA1
|
|
1160
|
-
|
|
1161
|
-
space:
|
|
1162
|
-
space and tab: \t
|
|
1163
|
-
no trailing space
|
|
1164
|
-
|
|
1165
|
-
tab:\t
|
|
1166
|
-
tab and space:\t
|
|
1167
|
-
-----BEGIN PGP SIGNATURE-----
|
|
1168
|
-
Version: GnuPG v1
|
|
1169
|
-
|
|
1170
|
-
iJwEAQECAAYFAlrZzCQACgkQ4IT3RGwgLJeWggP+Pb33ubbELIzg9/imM+zlR063
|
|
1171
|
-
g0FbG4B+RGZNFSbaDArUgh9fdVqBy8M9vvbbDMBalSiQxY09Lrasfb+tsomrygbN
|
|
1172
|
-
NisuPRa5phPhn1bB4hZDb2ed/iK41CNyU7QHuv4AAvLC0mMamRnEg0FW2M2jZLGh
|
|
1173
|
-
zmuVOdNuWQqxT9Sqa84=
|
|
1174
|
-
=bqAR
|
|
1175
|
-
-----END PGP SIGNATURE-----`;
|
|
1176
|
-
|
|
1177
|
-
const plaintext = 'space: \nspace and tab: \t\nno trailing space\n \ntab:\t\ntab and space:\t ';
|
|
1178
|
-
const csMsg = await openpgp.cleartext.readArmored(msg_armor);
|
|
1179
|
-
const pubKey = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1180
|
-
|
|
1181
|
-
const keyids = csMsg.getSigningKeyIds();
|
|
1182
|
-
|
|
1183
|
-
expect(pubKey.getKeys(keyids[0])).to.not.be.empty;
|
|
1184
|
-
|
|
1185
|
-
const cleartextSig = await openpgp.verify({ publicKeys:[pubKey], message:csMsg });
|
|
1186
|
-
expect(cleartextSig).to.exist;
|
|
1187
|
-
expect(cleartextSig.data).to.equal(plaintext.replace(/[ \t]+$/mg, ''));
|
|
1188
|
-
expect(cleartextSig.signatures).to.have.length(1);
|
|
1189
|
-
expect(cleartextSig.signatures[0].valid).to.be.true;
|
|
1190
|
-
expect(cleartextSig.signatures[0].signature.packets.length).to.equal(1);
|
|
1191
|
-
} finally {
|
|
1192
|
-
Object.assign(openpgp.config, { reject_message_hash_algorithms });
|
|
1193
|
-
}
|
|
1194
|
-
});
|
|
1195
|
-
|
|
1196
|
-
function tests() {
|
|
1197
|
-
it('Verify signed message with trailing spaces from GPG', async function() {
|
|
1198
|
-
const msg_armor =
|
|
1199
|
-
`-----BEGIN PGP MESSAGE-----
|
|
1200
|
-
Version: GnuPG v1
|
|
1201
|
-
|
|
1202
|
-
owGbwMvMyMT4oOW7S46CznTG01El3MUFicmpxbolqcUlUTev14K5Vgq8XGCGQmJe
|
|
1203
|
-
ikJJYpKVAicvV16+QklRYmZOZl66AliWl0sBqBAkzQmmwKohBnAqdMxhYWRkYmBj
|
|
1204
|
-
ZQIZy8DFKQCztusM8z+Vt/svG80IS/etn90utv/T16jquk69zPvp6t9F16ryrwpb
|
|
1205
|
-
kfVlS5Xl38KnVYxWvIor0nao6WUczA4vvZX9TXPWnnW3tt1vbZoiqWUjYjjjhuKG
|
|
1206
|
-
4DtmMTuL3TW6/zNzVfWp/Q11+71O8RGnXMsBvWM6mSqX75uLiPo6HRaUDHnvrfCP
|
|
1207
|
-
yYDnCgA=
|
|
1208
|
-
=15ki
|
|
1209
|
-
-----END PGP MESSAGE-----`;
|
|
1210
|
-
|
|
1211
|
-
const plaintext = 'space: \nspace and tab: \t\nno trailing space\n \ntab:\t\ntab and space:\t ';
|
|
1212
|
-
const sMsg = await openpgp.message.readArmored(msg_armor);
|
|
1213
|
-
const pubKey = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1214
|
-
|
|
1215
|
-
const keyids = sMsg.getSigningKeyIds();
|
|
1216
|
-
|
|
1217
|
-
expect(pubKey.getKeys(keyids[0])).to.not.be.empty;
|
|
1218
|
-
|
|
1219
|
-
return openpgp.verify({ publicKeys: [pubKey], message: sMsg }).then(function(cleartextSig) {
|
|
1220
|
-
expect(cleartextSig).to.exist;
|
|
1221
|
-
expect(openpgp.util.Uint8Array_to_str(openpgp.util.nativeEOL(cleartextSig.data))).to.equal(plaintext);
|
|
1222
|
-
expect(cleartextSig.signatures).to.have.length(1);
|
|
1223
|
-
expect(cleartextSig.signatures[0].valid).to.equal(!openpgp.config.reject_message_hash_algorithms.has(openpgp.enums.hash.sha1));
|
|
1224
|
-
expect(cleartextSig.signatures[0].signature.packets.length).to.equal(1);
|
|
1225
|
-
});
|
|
1226
|
-
});
|
|
1227
|
-
|
|
1228
|
-
it('Streaming verify signed message with trailing spaces from GPG', async function() {
|
|
1229
|
-
const msg_armor =
|
|
1230
|
-
`-----BEGIN PGP MESSAGE-----
|
|
1231
|
-
Version: GnuPG v1
|
|
1232
|
-
|
|
1233
|
-
owGbwMvMyMT4oOW7S46CznTG01El3MUFicmpxbolqcUlUTev14K5Vgq8XGCGQmJe
|
|
1234
|
-
ikJJYpKVAicvV16+QklRYmZOZl66AliWl0sBqBAkzQmmwKohBnAqdMxhYWRkYmBj
|
|
1235
|
-
ZQIZy8DFKQCztusM8z+Vt/svG80IS/etn90utv/T16jquk69zPvp6t9F16ryrwpb
|
|
1236
|
-
kfVlS5Xl38KnVYxWvIor0nao6WUczA4vvZX9TXPWnnW3tt1vbZoiqWUjYjjjhuKG
|
|
1237
|
-
4DtmMTuL3TW6/zNzVfWp/Q11+71O8RGnXMsBvWM6mSqX75uLiPo6HRaUDHnvrfCP
|
|
1238
|
-
yYDnCgA=
|
|
1239
|
-
=15ki
|
|
1240
|
-
-----END PGP MESSAGE-----`.split('');
|
|
1241
|
-
|
|
1242
|
-
const plaintext = 'space: \nspace and tab: \t\nno trailing space\n \ntab:\t\ntab and space:\t ';
|
|
1243
|
-
const sMsg = await openpgp.message.readArmored(new ReadableStream({
|
|
1244
|
-
async pull(controller) {
|
|
1245
|
-
await new Promise(setTimeout);
|
|
1246
|
-
controller.enqueue(msg_armor.shift());
|
|
1247
|
-
if (!msg_armor.length) controller.close();
|
|
1248
|
-
}
|
|
1249
|
-
}));
|
|
1250
|
-
const pubKey = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1251
|
-
|
|
1252
|
-
const keyids = sMsg.getSigningKeyIds();
|
|
1253
|
-
|
|
1254
|
-
expect(pubKey.getKeys(keyids[0])).to.not.be.empty;
|
|
1255
|
-
|
|
1256
|
-
return openpgp.verify({ publicKeys: [pubKey], message: sMsg }).then(async function(cleartextSig) {
|
|
1257
|
-
expect(cleartextSig).to.exist;
|
|
1258
|
-
expect(openpgp.util.Uint8Array_to_str(openpgp.util.nativeEOL(await openpgp.stream.readToEnd(cleartextSig.data)))).to.equal(plaintext);
|
|
1259
|
-
expect(cleartextSig.signatures).to.have.length(1);
|
|
1260
|
-
if (!openpgp.config.reject_message_hash_algorithms.has(openpgp.enums.hash.sha1)) {
|
|
1261
|
-
expect(await cleartextSig.signatures[0].verified).to.be.true;
|
|
1262
|
-
} else {
|
|
1263
|
-
await expect(cleartextSig.signatures[0].verified).to.be.rejectedWith('Insecure message hash algorithm: SHA1');
|
|
1264
|
-
}
|
|
1265
|
-
expect((await cleartextSig.signatures[0].signature).packets.length).to.equal(1);
|
|
1266
|
-
});
|
|
1267
|
-
});
|
|
1268
|
-
|
|
1269
|
-
it('Verify signed message with missing signature packet', async function() {
|
|
1270
|
-
const msg_armor =
|
|
1271
|
-
`-----BEGIN PGP MESSAGE-----
|
|
1272
|
-
Version: OpenPGP.js v3.1.3
|
|
1273
|
-
Comment: https://openpgpjs.org
|
|
1274
|
-
|
|
1275
|
-
yFgBO8LLzMjE+KDlu0uOgs50xtNRJdzFBYnJqcW6JanFJVE3r9eCuVYKvFxg
|
|
1276
|
-
hkJiXopCSWKSlQInL1devkJJUWJmTmZeugJYlpdLAagQJM0JpsCqIQZwKgAA
|
|
1277
|
-
|
|
1278
|
-
=D6TZ
|
|
1279
|
-
-----END PGP MESSAGE-----`;
|
|
1280
|
-
|
|
1281
|
-
const plaintext = 'space: \nspace and tab: \t\nno trailing space\n \ntab:\t\ntab and space:\t ';
|
|
1282
|
-
const sMsg = await openpgp.message.readArmored(msg_armor);
|
|
1283
|
-
const pubKey = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1284
|
-
|
|
1285
|
-
const keyids = sMsg.getSigningKeyIds();
|
|
1286
|
-
|
|
1287
|
-
expect(pubKey.getKeys(keyids[0])).to.not.be.empty;
|
|
1288
|
-
|
|
1289
|
-
return openpgp.verify({ publicKeys: [pubKey], message: sMsg }).then(async function(cleartextSig) {
|
|
1290
|
-
expect(cleartextSig).to.exist;
|
|
1291
|
-
expect(openpgp.util.Uint8Array_to_str(openpgp.util.nativeEOL(await openpgp.stream.readToEnd(cleartextSig.data)))).to.equal(plaintext);
|
|
1292
|
-
expect(cleartextSig.signatures).to.have.length(0);
|
|
1293
|
-
});
|
|
1294
|
-
});
|
|
1295
|
-
|
|
1296
|
-
it('Streaming verify signed message with missing signature packet', async function() {
|
|
1297
|
-
const msg_armor =
|
|
1298
|
-
`-----BEGIN PGP MESSAGE-----
|
|
1299
|
-
Version: OpenPGP.js v3.1.3
|
|
1300
|
-
Comment: https://openpgpjs.org
|
|
1301
|
-
|
|
1302
|
-
yFgBO8LLzMjE+KDlu0uOgs50xtNRJdzFBYnJqcW6JanFJVE3r9eCuVYKvFxg
|
|
1303
|
-
hkJiXopCSWKSlQInL1devkJJUWJmTmZeugJYlpdLAagQJM0JpsCqIQZwKgAA
|
|
1304
|
-
|
|
1305
|
-
=D6TZ
|
|
1306
|
-
-----END PGP MESSAGE-----`.split('');
|
|
1307
|
-
|
|
1308
|
-
const plaintext = 'space: \nspace and tab: \t\nno trailing space\n \ntab:\t\ntab and space:\t ';
|
|
1309
|
-
const sMsg = await openpgp.message.readArmored(new ReadableStream({
|
|
1310
|
-
async pull(controller) {
|
|
1311
|
-
await new Promise(setTimeout);
|
|
1312
|
-
controller.enqueue(msg_armor.shift());
|
|
1313
|
-
if (!msg_armor.length) controller.close();
|
|
1314
|
-
}
|
|
1315
|
-
}));
|
|
1316
|
-
const pubKey = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1317
|
-
|
|
1318
|
-
const keyids = sMsg.getSigningKeyIds();
|
|
1319
|
-
|
|
1320
|
-
expect(pubKey.getKeys(keyids[0])).to.not.be.empty;
|
|
1321
|
-
|
|
1322
|
-
return openpgp.verify({ publicKeys: [pubKey], message: sMsg }).then(async function(cleartextSig) {
|
|
1323
|
-
expect(cleartextSig).to.exist;
|
|
1324
|
-
expect(openpgp.util.Uint8Array_to_str(openpgp.util.nativeEOL(await openpgp.stream.readToEnd(cleartextSig.data)))).to.equal(plaintext);
|
|
1325
|
-
expect(cleartextSig.signatures).to.have.length(1);
|
|
1326
|
-
await expect(cleartextSig.signatures[0].verified).to.be.rejectedWith('Corresponding signature packet missing');
|
|
1327
|
-
expect((await cleartextSig.signatures[0].signature).packets.length).to.equal(0);
|
|
1328
|
-
});
|
|
1329
|
-
});
|
|
1330
|
-
}
|
|
1331
|
-
|
|
1332
|
-
tests();
|
|
1333
|
-
|
|
1334
|
-
tryTests('With Worker', tests, {
|
|
1335
|
-
if: typeof window !== 'undefined' && window.Worker,
|
|
1336
|
-
before: async function() {
|
|
1337
|
-
await openpgp.initWorker({ path: '../dist/openpgp.worker.js' });
|
|
1338
|
-
},
|
|
1339
|
-
after: function() {
|
|
1340
|
-
openpgp.destroyWorker();
|
|
1341
|
-
}
|
|
1342
|
-
});
|
|
1343
|
-
|
|
1344
|
-
let reject_message_hash_algorithms;
|
|
1345
|
-
tryTests('Accept SHA-1 signatures', tests, {
|
|
1346
|
-
if: true,
|
|
1347
|
-
before: function() {
|
|
1348
|
-
({ reject_message_hash_algorithms } = openpgp.config);
|
|
1349
|
-
Object.assign(openpgp.config, { reject_message_hash_algorithms: new Set([openpgp.enums.hash.md5, openpgp.enums.hash.ripemd]) });
|
|
1350
|
-
},
|
|
1351
|
-
after: function() {
|
|
1352
|
-
Object.assign(openpgp.config, { reject_message_hash_algorithms });
|
|
1353
|
-
}
|
|
1354
|
-
});
|
|
1355
|
-
|
|
1356
|
-
it('Sign text with openpgp.sign and verify with openpgp.verify leads to same string cleartext and valid signatures', async function() {
|
|
1357
|
-
const plaintext = 'short message\nnext line \n한국어/조선말';
|
|
1358
|
-
const pubKey = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1359
|
-
const privKey = (await openpgp.key.readArmored(priv_key_arm2)).keys[0];
|
|
1360
|
-
await privKey.decrypt('hello world');
|
|
1361
|
-
|
|
1362
|
-
return openpgp.sign({ privateKeys:[privKey], message: openpgp.cleartext.fromText(plaintext) }).then(async function(signed) {
|
|
1363
|
-
|
|
1364
|
-
const csMsg = await openpgp.cleartext.readArmored(signed.data);
|
|
1365
|
-
return openpgp.verify({ publicKeys:[pubKey], message:csMsg });
|
|
1366
|
-
|
|
1367
|
-
}).then(function(cleartextSig) {
|
|
1368
|
-
expect(cleartextSig).to.exist;
|
|
1369
|
-
expect(cleartextSig.data).to.equal(plaintext.replace(/[ \t\r]+$/mg, ''));
|
|
1370
|
-
expect(cleartextSig.signatures).to.have.length(1);
|
|
1371
|
-
expect(cleartextSig.signatures[0].valid).to.be.true;
|
|
1372
|
-
expect(cleartextSig.signatures[0].signature.packets.length).to.equal(1);
|
|
1373
|
-
});
|
|
1374
|
-
});
|
|
1375
|
-
|
|
1376
|
-
it('Sign text with openpgp.sign and verify with openpgp.verify leads to same string cleartext and valid signatures -- escape armored message', async function() {
|
|
1377
|
-
const plaintext = pub_key_arm2;
|
|
1378
|
-
const pubKey = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1379
|
-
const privKey = (await openpgp.key.readArmored(priv_key_arm2)).keys[0];
|
|
1380
|
-
await privKey.decrypt('hello world');
|
|
1381
|
-
|
|
1382
|
-
return openpgp.sign({ privateKeys:[privKey], message: openpgp.cleartext.fromText(plaintext) }).then(async function(signed) {
|
|
1383
|
-
|
|
1384
|
-
const csMsg = await openpgp.cleartext.readArmored(signed.data);
|
|
1385
|
-
return openpgp.verify({ publicKeys:[pubKey], message:csMsg });
|
|
1386
|
-
|
|
1387
|
-
}).then(function(cleartextSig) {
|
|
1388
|
-
expect(cleartextSig).to.exist;
|
|
1389
|
-
expect(cleartextSig.data).to.equal(plaintext);
|
|
1390
|
-
expect(cleartextSig.signatures).to.have.length(1);
|
|
1391
|
-
expect(cleartextSig.signatures[0].valid).to.be.true;
|
|
1392
|
-
expect(cleartextSig.signatures[0].signature.packets.length).to.equal(1);
|
|
1393
|
-
});
|
|
1394
|
-
});
|
|
1395
|
-
|
|
1396
|
-
it('Sign text with openpgp.sign and verify with openpgp.verify leads to same string cleartext and valid signatures -- trailing spaces', async function() {
|
|
1397
|
-
const plaintext = 'space: \nspace and tab: \t\nno trailing space\n \ntab:\t\ntab and space:\t ';
|
|
1398
|
-
const pubKey = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1399
|
-
const privKey = (await openpgp.key.readArmored(priv_key_arm2)).keys[0];
|
|
1400
|
-
await privKey.decrypt('hello world');
|
|
1401
|
-
|
|
1402
|
-
return openpgp.sign({ privateKeys:[privKey], message: openpgp.cleartext.fromText(plaintext) }).then(async function(signed) {
|
|
1403
|
-
|
|
1404
|
-
const csMsg = await openpgp.cleartext.readArmored(signed.data);
|
|
1405
|
-
return openpgp.verify({ publicKeys:[pubKey], message:csMsg });
|
|
1406
|
-
|
|
1407
|
-
}).then(function(cleartextSig) {
|
|
1408
|
-
expect(cleartextSig).to.exist;
|
|
1409
|
-
expect(cleartextSig.data).to.equal(plaintext.replace(/[ \t]+$/mg, ''));
|
|
1410
|
-
expect(cleartextSig.signatures).to.have.length(1);
|
|
1411
|
-
expect(cleartextSig.signatures[0].valid).to.be.true;
|
|
1412
|
-
expect(cleartextSig.signatures[0].signature.packets.length).to.equal(1);
|
|
1413
|
-
});
|
|
1414
|
-
});
|
|
1415
|
-
|
|
1416
|
-
it('Sign text with openpgp.sign and verify with openpgp.verify leads to same bytes cleartext and valid signatures - armored', async function() {
|
|
1417
|
-
const plaintext = openpgp.util.str_to_Uint8Array('short message\nnext line \n한국어/조선말');
|
|
1418
|
-
const pubKey = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1419
|
-
const privKey = (await openpgp.key.readArmored(priv_key_arm2)).keys[0];
|
|
1420
|
-
await privKey.decrypt('hello world');
|
|
1421
|
-
|
|
1422
|
-
return openpgp.sign({ privateKeys:[privKey], message: openpgp.message.fromBinary(plaintext) }).then(async function(signed) {
|
|
1423
|
-
|
|
1424
|
-
const csMsg = await openpgp.message.readArmored(signed.data);
|
|
1425
|
-
return openpgp.verify({ publicKeys:[pubKey], message:csMsg });
|
|
1426
|
-
|
|
1427
|
-
}).then(async function(cleartextSig) {
|
|
1428
|
-
expect(cleartextSig).to.exist;
|
|
1429
|
-
expect(cleartextSig.data).to.deep.equal(plaintext);
|
|
1430
|
-
expect(cleartextSig.signatures).to.have.length(1);
|
|
1431
|
-
expect(cleartextSig.signatures[0].valid).to.be.true;
|
|
1432
|
-
expect(cleartextSig.signatures[0].signature.packets.length).to.equal(1);
|
|
1433
|
-
});
|
|
1434
|
-
});
|
|
1435
|
-
|
|
1436
|
-
it('Sign text with openpgp.sign and verify with openpgp.verify leads to same bytes cleartext and valid signatures - not armored', async function() {
|
|
1437
|
-
const plaintext = openpgp.util.str_to_Uint8Array('short message\nnext line \n한국어/조선말');
|
|
1438
|
-
const pubKey = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1439
|
-
const privKey = (await openpgp.key.readArmored(priv_key_arm2)).keys[0];
|
|
1440
|
-
await privKey.decrypt('hello world');
|
|
1441
|
-
|
|
1442
|
-
return openpgp.sign({ privateKeys:[privKey], message: openpgp.message.fromBinary(plaintext), armor:false }).then(function(signed) {
|
|
1443
|
-
|
|
1444
|
-
const csMsg = signed.message;
|
|
1445
|
-
return openpgp.verify({ publicKeys:[pubKey], message:csMsg });
|
|
1446
|
-
|
|
1447
|
-
}).then(function(cleartextSig) {
|
|
1448
|
-
expect(cleartextSig).to.exist;
|
|
1449
|
-
expect(cleartextSig.data).to.deep.equal(plaintext);
|
|
1450
|
-
expect(cleartextSig.signatures).to.have.length(1);
|
|
1451
|
-
expect(cleartextSig.signatures[0].valid).to.be.true;
|
|
1452
|
-
expect(cleartextSig.signatures[0].signature.packets.length).to.equal(1);
|
|
1453
|
-
});
|
|
1454
|
-
});
|
|
1455
|
-
|
|
1456
|
-
it('Should verify cleartext message correctly when using a detached cleartext signature and binary literal data', async function () {
|
|
1457
|
-
const plaintext = 'short message\nnext line \n한국어/조선말';
|
|
1458
|
-
const pubKey = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1459
|
-
const privKey = (await openpgp.key.readArmored(priv_key_arm2)).keys[0];
|
|
1460
|
-
await privKey.decrypt('hello world');
|
|
1461
|
-
return openpgp.sign({ privateKeys:[privKey], message: openpgp.message.fromText(plaintext), detached: true}).then(async function(signed) {
|
|
1462
|
-
const signature = await openpgp.signature.readArmored(signed.signature);
|
|
1463
|
-
return openpgp.verify({ publicKeys:[pubKey], message: openpgp.message.fromBinary(openpgp.util.encode_utf8(plaintext)), signature: signature });
|
|
1464
|
-
}).then(function(cleartextSig) {
|
|
1465
|
-
expect(cleartextSig).to.exist;
|
|
1466
|
-
expect(cleartextSig.signatures).to.have.length(1);
|
|
1467
|
-
expect(cleartextSig.signatures[0].valid).to.be.true;
|
|
1468
|
-
expect(cleartextSig.signatures[0].signature.packets.length).to.equal(1);
|
|
1469
|
-
});
|
|
1470
|
-
});
|
|
1471
|
-
|
|
1472
|
-
it('Should verify cleartext message correctly when using a detached binary signature and text literal data', async function () {
|
|
1473
|
-
const plaintext = 'short message\nnext line \n한국어/조선말';
|
|
1474
|
-
const plaintextArray = openpgp.util.encode_utf8(plaintext);
|
|
1475
|
-
const pubKey = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1476
|
-
const privKey = (await openpgp.key.readArmored(priv_key_arm2)).keys[0];
|
|
1477
|
-
await privKey.decrypt('hello world');
|
|
1478
|
-
return openpgp.sign({ privateKeys:[privKey], message:openpgp.message.fromBinary(plaintextArray), detached: true}).then(async function(signed) {
|
|
1479
|
-
const signature = await openpgp.signature.readArmored(signed.signature);
|
|
1480
|
-
return openpgp.verify({ publicKeys:[pubKey], message: openpgp.message.fromText(plaintext), signature: signature });
|
|
1481
|
-
}).then(function(cleartextSig) {
|
|
1482
|
-
expect(cleartextSig).to.exist;
|
|
1483
|
-
expect(cleartextSig.signatures).to.have.length(1);
|
|
1484
|
-
expect(cleartextSig.signatures[0].valid).to.be.true;
|
|
1485
|
-
expect(cleartextSig.signatures[0].signature.packets.length).to.equal(1);
|
|
1486
|
-
});
|
|
1487
|
-
});
|
|
1488
|
-
|
|
1489
|
-
it('Should verify encrypted cleartext message correctly when encrypting binary literal data with a canonical text signature', async function () {
|
|
1490
|
-
const plaintext = 'short message\nnext line \n한국어/조선말';
|
|
1491
|
-
const pubKey = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1492
|
-
const privKey = (await openpgp.key.readArmored(priv_key_arm2)).keys[0];
|
|
1493
|
-
await Promise.all([privKey.primaryKey.decrypt('hello world'), privKey.subKeys[0].keyPacket.decrypt('hello world')]);
|
|
1494
|
-
return openpgp.sign({ privateKeys:[privKey], message: openpgp.message.fromText(plaintext), detached: true}).then(async function(signed) {
|
|
1495
|
-
const signature = await openpgp.signature.readArmored(signed.signature);
|
|
1496
|
-
return openpgp.encrypt({ message: openpgp.message.fromBinary(openpgp.util.encode_utf8(plaintext)), publicKeys: [pubKey], signature })
|
|
1497
|
-
}).then(async ({ data }) => {
|
|
1498
|
-
const csMsg = await openpgp.message.readArmored(data);
|
|
1499
|
-
return openpgp.decrypt({ message: csMsg, privateKeys: [ privKey ], publicKeys: [ pubKey ] });
|
|
1500
|
-
}).then(function(cleartextSig) {
|
|
1501
|
-
expect(cleartextSig).to.exist;
|
|
1502
|
-
expect(cleartextSig.signatures).to.have.length(1);
|
|
1503
|
-
expect(cleartextSig.signatures[0].valid).to.be.true;
|
|
1504
|
-
expect(cleartextSig.signatures[0].signature.packets.length).to.equal(1);
|
|
1505
|
-
});
|
|
1506
|
-
});
|
|
1507
|
-
|
|
1508
|
-
it('Verify test with expired verification public key', async function() {
|
|
1509
|
-
const pubKey = (await openpgp.key.readArmored(pub_expired)).keys[0];
|
|
1510
|
-
const message = await openpgp.message.readArmored(msg_sig_expired);
|
|
1511
|
-
return openpgp.verify({ publicKeys:[pubKey], message:message }).then(function(verified) {
|
|
1512
|
-
expect(verified).to.exist;
|
|
1513
|
-
expect(verified.signatures).to.have.length(1);
|
|
1514
|
-
expect(verified.signatures[0].valid).to.be.true;
|
|
1515
|
-
expect(verified.signatures[0].signature.packets.length).to.equal(1);
|
|
1516
|
-
});
|
|
1517
|
-
});
|
|
1518
|
-
|
|
1519
|
-
it('Verify test with expired verification public key and disable expiration checks using null date', async function() {
|
|
1520
|
-
const pubKey = (await openpgp.key.readArmored(pub_expired)).keys[0];
|
|
1521
|
-
const message = await openpgp.message.readArmored(msg_sig_expired);
|
|
1522
|
-
return openpgp.verify({ publicKeys:[pubKey], message:message, date: null }).then(function(verified) {
|
|
1523
|
-
expect(verified).to.exist;
|
|
1524
|
-
expect(verified.signatures).to.have.length(1);
|
|
1525
|
-
expect(verified.signatures[0].valid).to.be.true;
|
|
1526
|
-
expect(verified.signatures[0].signature.packets.length).to.equal(1);
|
|
1527
|
-
});
|
|
1528
|
-
});
|
|
1529
|
-
|
|
1530
|
-
// TODO add test with multiple revocation signatures
|
|
1531
|
-
it('Verify primary key revocation signatures', async function() {
|
|
1532
|
-
const pubKey = (await openpgp.key.readArmored(pub_revoked)).keys[0];
|
|
1533
|
-
await expect(pubKey.revocationSignatures[0].verify(
|
|
1534
|
-
pubKey.primaryKey, openpgp.enums.signature.key_revocation, {key: pubKey.primaryKey}
|
|
1535
|
-
)).to.eventually.be.true;
|
|
1536
|
-
});
|
|
1537
|
-
|
|
1538
|
-
// TODO add test with multiple revocation signatures
|
|
1539
|
-
it('Verify subkey revocation signatures', async function() {
|
|
1540
|
-
const pubKey = (await openpgp.key.readArmored(pub_revoked)).keys[0];
|
|
1541
|
-
await expect(pubKey.subKeys[0].revocationSignatures[0].verify(
|
|
1542
|
-
pubKey.primaryKey, openpgp.enums.signature.subkey_revocation, {key: pubKey.primaryKey, bind: pubKey.subKeys[0].keyPacket}
|
|
1543
|
-
)).to.eventually.be.true;
|
|
1544
|
-
});
|
|
1545
|
-
|
|
1546
|
-
it('Verify key expiration date', async function() {
|
|
1547
|
-
const pubKey = (await openpgp.key.readArmored(pub_revoked)).keys[0];
|
|
1548
|
-
|
|
1549
|
-
expect(pubKey).to.exist;
|
|
1550
|
-
expect(pubKey.users[0].selfCertifications[0].keyNeverExpires).to.be.false;
|
|
1551
|
-
expect(pubKey.users[0].selfCertifications[0].keyExpirationTime).to.equal(5*365*24*60*60);
|
|
1552
|
-
});
|
|
1553
|
-
|
|
1554
|
-
it('Write unhashed subpackets', async function() {
|
|
1555
|
-
let pubKey = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1556
|
-
expect(pubKey.users[0].selfCertifications).to.exist;
|
|
1557
|
-
pubKey = (await openpgp.key.readArmored(pubKey.armor())).keys[0];
|
|
1558
|
-
expect(pubKey.users[0].selfCertifications).to.exist;
|
|
1559
|
-
});
|
|
1560
|
-
|
|
1561
|
-
it('Write V4 signatures', async function() {
|
|
1562
|
-
const pubKey = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1563
|
-
const pubKey2 = (await openpgp.key.readArmored(pubKey.armor())).keys[0];
|
|
1564
|
-
expect(pubKey2).to.exist;
|
|
1565
|
-
expect(pubKey.users[0].selfCertifications).to.eql(pubKey2.users[0].selfCertifications);
|
|
1566
|
-
});
|
|
1567
|
-
|
|
1568
|
-
it('Verify a detached signature using appendSignature', async function() {
|
|
1569
|
-
const detachedSig = ['-----BEGIN PGP SIGNATURE-----',
|
|
1570
|
-
'Version: GnuPG v1.4.13 (Darwin)',
|
|
1571
|
-
'Comment: GPGTools - https://gpgtools.org',
|
|
1572
|
-
'Comment: Using GnuPG with Thunderbird - https://www.enigmail.net/',
|
|
1573
|
-
'',
|
|
1574
|
-
'iQEcBAEBCgAGBQJTqH5OAAoJENf7k/zfv8I8oFoH/R6EFTw2CYUQoOKSAQstWIHp',
|
|
1575
|
-
'fVVseLOkFbByUV5eLuGVBNI3DM4GQ6C7dGntKAn34a1iTGcAIZH+fIhaZ2WtNdtA',
|
|
1576
|
-
'R+Ijn8xDjbF/BWvcTBOaRvgw9b8viPxhkVYa3PioHYz6krt/LmFqFdp/phWZcqR4',
|
|
1577
|
-
'jzWMX55h4FOw3YBNGiz2NuIg+iGrFRWPYgd8NVUmJKReZHs8C/6HGz7F4/A24k6Y',
|
|
1578
|
-
'7xms9D6Er+MhspSl+1dlRdHjtXiRqC5Ld1hi2KBKc6YzgOLpVw5l9sffbnH+aRG4',
|
|
1579
|
-
'dH+2J5U3elqBDK1i3GyG8ixLSB0FGW9+lhYNosZne2xy8SbQKdgsnTBnWSGevP0=',
|
|
1580
|
-
'=xiih',
|
|
1581
|
-
'-----END PGP SIGNATURE-----'].join('\r\n');
|
|
1582
|
-
|
|
1583
|
-
const content = ['Content-Type: multipart/mixed;',
|
|
1584
|
-
' boundary="------------070307080002050009010403"',
|
|
1585
|
-
'',
|
|
1586
|
-
'This is a multi-part message in MIME format.',
|
|
1587
|
-
'--------------070307080002050009010403',
|
|
1588
|
-
'Content-Type: text/plain; charset=ISO-8859-1',
|
|
1589
|
-
'Content-Transfer-Encoding: quoted-printable',
|
|
1590
|
-
'',
|
|
1591
|
-
'test11',
|
|
1592
|
-
'',
|
|
1593
|
-
'--------------070307080002050009010403',
|
|
1594
|
-
'Content-Type: application/macbinary;',
|
|
1595
|
-
' name="test.bin"',
|
|
1596
|
-
'Content-Transfer-Encoding: base64',
|
|
1597
|
-
'Content-Disposition: attachment;',
|
|
1598
|
-
' filename="test.bin"',
|
|
1599
|
-
'',
|
|
1600
|
-
'dGVzdGF0dGFjaG1lbnQ=',
|
|
1601
|
-
'--------------070307080002050009010403--',
|
|
1602
|
-
''].join('\r\n');
|
|
1603
|
-
|
|
1604
|
-
const publicKeyArmored = '-----BEGIN PGP PUBLIC KEY BLOCK-----\r\nVersion: OpenPGP.js v.1.20131116\r\nComment: Whiteout Mail - https://whiteout.io\r\n\r\nxsBNBFKODs4BB/9iOF4THsjQMY+WEpT7ShgKxj4bHzRRaQkqczS4nZvP0U3g\r\nqeqCnbpagyeKXA+bhWFQW4GmXtgAoeD5PXs6AZYrw3tWNxLKu2Oe6Tp9K/XI\r\nxTMQ2wl4qZKDXHvuPsJ7cmgaWqpPyXtxA4zHHS3WrkI/6VzHAcI/y6x4szSB\r\nKgSuhI3hjh3s7TybUC1U6AfoQGx/S7e3WwlCOrK8GTClirN/2mCPRC5wuIft\r\nnkoMfA6jK8d2OPrJ63shy5cgwHOjQg/xuk46dNS7tkvGmbaa+X0PgqSKB+Hf\r\nYPPNS/ylg911DH9qa8BqYU2QpNh9jUKXSF+HbaOM+plWkCSAL7czV+R3ABEB\r\nAAHNLVdoaXRlb3V0IFVzZXIgPHNhZmV3aXRobWUudGVzdHVzZXJAZ21haWwu\r\nY29tPsLAXAQQAQgAEAUCUo4O2gkQ1/uT/N+/wjwAAN2cB/9gFRmAfvEQ2qz+\r\nWubmT2EsSSnjPMxzG4uyykFoa+TaZCWo2Xa2tQghmU103kEkQb1OEjRjpgwJ\r\nYX9Kghnl8DByM686L5AXnRyHP78qRJCLXSXl0AGicboUDp5sovaa4rswQceH\r\nvcdWgZ/mgHTRoiQeJddy9k+H6MPFiyFaVcFwegVsmpc+dCcC8yT+qh8ZIbyG\r\nRJU60PmKKN7LUusP+8DbSv39zCGJCBlVVKyA4MzdF5uM+sqTdXbKzOrT5DGd\r\nCZaox4s+w16Sq1rHzZKFWfQPfKLDB9pyA0ufCVRA3AF6BUi7G3ZqhZiHNhMP\r\nNvE45V/hS1PbZcfPVoUjE2qc1Ix1\r\n=7Wpe\r\n-----END PGP PUBLIC KEY BLOCK-----';
|
|
1605
|
-
const publicKeys = (await openpgp.key.readArmored(publicKeyArmored)).keys;
|
|
1606
|
-
|
|
1607
|
-
// Text
|
|
1608
|
-
const msg = openpgp.message.fromText(content);
|
|
1609
|
-
await msg.appendSignature(detachedSig);
|
|
1610
|
-
return msg.verify(publicKeys).then(async result => {
|
|
1611
|
-
openpgp.stream.pipe(msg.getLiteralData(), new WritableStream());
|
|
1612
|
-
expect(await result[0].verified).to.be.true;
|
|
1613
|
-
});
|
|
1614
|
-
});
|
|
1615
|
-
|
|
1616
|
-
it('Detached signature signing and verification', async function() {
|
|
1617
|
-
const msg = openpgp.message.fromText('hello');
|
|
1618
|
-
const pubKey2 = (await openpgp.key.readArmored(pub_key_arm2)).keys[0];
|
|
1619
|
-
const privKey2 = (await openpgp.key.readArmored(priv_key_arm2)).keys[0];
|
|
1620
|
-
await privKey2.decrypt('hello world');
|
|
1621
|
-
|
|
1622
|
-
const opt = {numBits: 512, userIds: { name:'test', email:'a@b.com' }, passphrase: null};
|
|
1623
|
-
if (openpgp.util.getWebCryptoAll()) { opt.numBits = 2048; } // webkit webcrypto accepts minimum 2048 bit keys
|
|
1624
|
-
return openpgp.generateKey(opt).then(function(gen) {
|
|
1625
|
-
const generatedKey = gen.key;
|
|
1626
|
-
return msg.signDetached([generatedKey, privKey2]).then(detachedSig => {
|
|
1627
|
-
return msg.verifyDetached(detachedSig, [generatedKey.toPublic(), pubKey2]).then(async result => {
|
|
1628
|
-
expect(await result[0].verified).to.be.true;
|
|
1629
|
-
expect(await result[1].verified).to.be.true;
|
|
1630
|
-
});
|
|
1631
|
-
});
|
|
1632
|
-
});
|
|
1633
|
-
});
|
|
1634
|
-
|
|
1635
|
-
it('Sign message with key without password', function() {
|
|
1636
|
-
const opt = {numBits: 512, userIds: { name:'test', email:'a@b.com' }, passphrase: null};
|
|
1637
|
-
if (openpgp.util.getWebCryptoAll()) { opt.numBits = 2048; } // webkit webcrypto accepts minimum 2048 bit keys
|
|
1638
|
-
return openpgp.generateKey(opt).then(function(gen) {
|
|
1639
|
-
const key = gen.key;
|
|
1640
|
-
let message = openpgp.message.fromText('hello world');
|
|
1641
|
-
message = message.sign([key]);
|
|
1642
|
-
expect(message).to.exist;
|
|
1643
|
-
});
|
|
1644
|
-
});
|
|
1645
|
-
|
|
1646
|
-
it('Verify signed key', async function() {
|
|
1647
|
-
const signedArmor = [
|
|
1648
|
-
'-----BEGIN PGP PUBLIC KEY BLOCK-----',
|
|
1649
|
-
'Version: GnuPG v1',
|
|
1650
|
-
'',
|
|
1651
|
-
'mI0EUmEvTgEEANyWtQQMOybQ9JltDqmaX0WnNPJeLILIM36sw6zL0nfTQ5zXSS3+',
|
|
1652
|
-
'fIF6P29lJFxpblWk02PSID5zX/DYU9/zjM2xPO8Oa4xo0cVTOTLj++Ri5mtr//f5',
|
|
1653
|
-
'GLsIXxFrBJhD/ghFsL3Op0GXOeLJ9A5bsOn8th7x6JucNKuaRB6bQbSPABEBAAG0',
|
|
1654
|
-
'JFRlc3QgTWNUZXN0aW5ndG9uIDx0ZXN0QGV4YW1wbGUuY29tPoi5BBMBAgAjBQJS',
|
|
1655
|
-
'YS9OAhsvBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQSmNhOk1uQJQwDAP6',
|
|
1656
|
-
'AgrTyqkRlJVqz2pb46TfbDM2TDF7o9CBnBzIGoxBhlRwpqALz7z2kxBDmwpQa+ki',
|
|
1657
|
-
'Bq3jZN/UosY9y8bhwMAlnrDY9jP1gdCo+H0sD48CdXybblNwaYpwqC8VSpDdTndf',
|
|
1658
|
-
'9j2wE/weihGp/DAdy/2kyBCaiOY1sjhUfJ1GogF49rCIRgQQEQIABgUCVuXBfQAK',
|
|
1659
|
-
'CRARJ5QDyxae+O0fAJ9hUQPejXvZv6VW1Q3/Pm3+x2wfJACgwFg9NlrPPfejoC1w',
|
|
1660
|
-
'P+z+vE5NFA24jQRSYS9OAQQA6R/PtBFaJaT4jq10yqASk4sqwVMsc6HcifM5lSdx',
|
|
1661
|
-
'zExFP74naUMMyEsKHP53QxTF0GrqusagQg/ZtgT0CN1HUM152y7ACOdp1giKjpMz',
|
|
1662
|
-
'OTQClqCoclyvWOFB+L/SwGEIJf7LSCErwoBuJifJc8xAVr0XX0JthoW+uP91eTQ3',
|
|
1663
|
-
'XpsAEQEAAYkBPQQYAQIACQUCUmEvTgIbLgCoCRBKY2E6TW5AlJ0gBBkBAgAGBQJS',
|
|
1664
|
-
'YS9OAAoJEOCE90RsICyXuqIEANmmiRCASF7YK7PvFkieJNwzeK0V3F2lGX+uu6Y3',
|
|
1665
|
-
'Q/Zxdtwc4xR+me/CSBmsURyXTO29OWhPGLszPH9zSJU9BdDi6v0yNprmFPX/1Ng0',
|
|
1666
|
-
'Abn/sCkwetvjxC1YIvTLFwtUL/7v6NS2bZpsUxRTg9+cSrMWWSNjiY9qUKajm1tu',
|
|
1667
|
-
'zPDZXAUEAMNmAN3xXN/Kjyvj2OK2ck0XW748sl/tc3qiKPMJ+0AkMF7Pjhmh9nxq',
|
|
1668
|
-
'E9+QCEl7qinFqqBLjuzgUhBU4QlwX1GDAtNTq6ihLMD5v1d82ZC7tNatdlDMGWnI',
|
|
1669
|
-
'dvEMCv2GZcuIqDQ9rXWs49e7tq1NncLYhz3tYjKhoFTKEIq3y3Pp',
|
|
1670
|
-
'=fvK7',
|
|
1671
|
-
'-----END PGP PUBLIC KEY BLOCK-----'
|
|
1672
|
-
].join('\n');
|
|
1673
|
-
|
|
1674
|
-
const signedKey = (await openpgp.key.readArmored(signedArmor)).keys[0];
|
|
1675
|
-
const signerKey = (await openpgp.key.readArmored(priv_key_arm1)).keys[0];
|
|
1676
|
-
return signedKey.verifyPrimaryUser([signerKey]).then(signatures => {
|
|
1677
|
-
expect(signatures[0].valid).to.be.null;
|
|
1678
|
-
expect(signatures[0].keyid.toHex()).to.equal(signedKey.getKeyId().toHex());
|
|
1679
|
-
expect(signatures[1].valid).to.be.true;
|
|
1680
|
-
expect(signatures[1].keyid.toHex()).to.equal(signerKey.getKeyId().toHex());
|
|
1681
|
-
});
|
|
1682
|
-
});
|
|
1683
|
-
|
|
1684
|
-
it('Verify signed UserIDs and User Attributes', async function() {
|
|
1685
|
-
const armoredKeyWithPhoto = `-----BEGIN PGP PUBLIC KEY BLOCK-----
|
|
1686
|
-
|
|
1687
|
-
mI0EW1CJGAEEAM+BzuFzcYk9HttmDbjGexQ8dfme074Q5PuHas3PBISPm0AwmnDM
|
|
1688
|
-
tzjlcrrg2VGuLqHvNF600w2ZgOo2gElNYCOas1q/fVFuIgJ4SUduNOEe/JnIW4uP
|
|
1689
|
-
iEGU9l6zOVVgTc/nGVpZdvHgvOL8nl9BKHtWEnMD3Du7UYAm+Avshu9jABEBAAG0
|
|
1690
|
-
AViI1AQTAQoAPhYhBKcH118Rrg0wLBrTk5IyMikCym+4BQJbUIkYAhsDBQkDwmcA
|
|
1691
|
-
BQsJCAcDBRUKCQgLBRYDAgEAAh4BAheAAAoJEJIyMikCym+4K8oEAJc7YFiNau6V
|
|
1692
|
-
HTVK4cTvWU5MuYiejejFZai4ELUJy+WF6cZYrLuF/z/kRt8B7hpumXChPCUlT0q7
|
|
1693
|
-
FWypQtA3leu83DGMXqhfS80h2S1+VLmDVVWKQXOwgOb44jT9F08bDU5QK08SkjF8
|
|
1694
|
-
/EirIy8ANzdwCA4rHytIS2yx6tLlthvX0cBwwG4BEAABAQAAAAAAAAAAAAAAAP/Y
|
|
1695
|
-
/+AAEEpGSUYAAQEAAAEAAQAA/9sAQwABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
|
|
1696
|
-
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB/9sAQwEBAQEB
|
|
1697
|
-
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
|
|
1698
|
-
AQEBAQEBAQEBAQEB/8AAEQgAAQABAwEiAAIRAQMRAf/EABUAAQEAAAAAAAAAAAAA
|
|
1699
|
-
AAAAAAAK/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/EABQBAQAAAAAAAAAAAAAAAAAA
|
|
1700
|
-
AAD/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwC/gAH/2YjUBBMB
|
|
1701
|
-
CgA+FiEEpwfXXxGuDTAsGtOTkjIyKQLKb7gFAltQimUCGwMFCQPCZwAFCwkIBwMF
|
|
1702
|
-
FQoJCAsFFgMCAQACHgECF4AACgkQkjIyKQLKb7gm/wQAiyZF89qr8hf3XQNJ6Ir/
|
|
1703
|
-
QtaniPcesjrYCIE47ZfeDYpBTPeiMm295o2dZXVJS4ItllYsplASw5DJiIMnQKlJ
|
|
1704
|
-
mbXakYFzzclTa/JrKzFYCy/DPT95xK+633omgrIUgJodizoKJE7XeB2U6aRUJJ4O
|
|
1705
|
-
iTuGu4fEU1UligAXSrZmCdE=
|
|
1706
|
-
=VK6I
|
|
1707
|
-
-----END PGP PUBLIC KEY BLOCK-----`;
|
|
1708
|
-
|
|
1709
|
-
const key = (await openpgp.key.readArmored(armoredKeyWithPhoto)).keys[0];
|
|
1710
|
-
for (const user of key.users) {
|
|
1711
|
-
await user.verify(key.primaryKey);
|
|
1712
|
-
}
|
|
1713
|
-
});
|
|
1714
|
-
|
|
1715
|
-
});
|