@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.
Files changed (173) hide show
  1. package/README.md +311 -239
  2. package/dist/lightweight/bn.interface.min.mjs +3 -0
  3. package/dist/lightweight/bn.interface.min.mjs.map +1 -0
  4. package/dist/lightweight/bn.interface.mjs +340 -0
  5. package/dist/lightweight/bn.min.mjs +3 -0
  6. package/dist/lightweight/bn.min.mjs.map +1 -0
  7. package/dist/lightweight/bn.mjs +3434 -0
  8. package/dist/lightweight/elliptic.min.mjs +3 -0
  9. package/dist/lightweight/elliptic.min.mjs.map +1 -0
  10. package/dist/lightweight/elliptic.mjs +4313 -0
  11. package/dist/lightweight/openpgp.min.mjs +3 -0
  12. package/dist/lightweight/openpgp.min.mjs.map +1 -0
  13. package/dist/lightweight/openpgp.mjs +31375 -0
  14. package/dist/lightweight/ponyfill.es6.min.mjs +3 -0
  15. package/dist/lightweight/ponyfill.es6.min.mjs.map +1 -0
  16. package/dist/lightweight/ponyfill.es6.mjs +3831 -0
  17. package/dist/lightweight/web-streams-adapter.min.mjs +17 -0
  18. package/dist/lightweight/web-streams-adapter.min.mjs.map +1 -0
  19. package/dist/lightweight/web-streams-adapter.mjs +561 -0
  20. package/dist/node/openpgp.js +43943 -0
  21. package/dist/node/openpgp.min.js +17 -0
  22. package/dist/node/openpgp.min.js.map +1 -0
  23. package/dist/node/openpgp.min.mjs +17 -0
  24. package/dist/node/openpgp.min.mjs.map +1 -0
  25. package/dist/node/openpgp.mjs +43880 -0
  26. package/dist/openpgp.js +41077 -41609
  27. package/dist/openpgp.min.js +17 -2
  28. package/dist/openpgp.min.js.map +1 -0
  29. package/dist/openpgp.min.mjs +17 -0
  30. package/dist/openpgp.min.mjs.map +1 -0
  31. package/dist/openpgp.mjs +43868 -0
  32. package/lightweight/package.json +5 -0
  33. package/openpgp.d.ts +889 -0
  34. package/package.json +63 -57
  35. package/dist/compat/openpgp.js +0 -61152
  36. package/dist/compat/openpgp.min.js +0 -2
  37. package/dist/compat/openpgp.worker.js +0 -173
  38. package/dist/compat/openpgp.worker.min.js +0 -2
  39. package/dist/lightweight/elliptic.min.js +0 -5
  40. package/dist/lightweight/openpgp.js +0 -40071
  41. package/dist/lightweight/openpgp.min.js +0 -2
  42. package/dist/lightweight/openpgp.worker.js +0 -173
  43. package/dist/lightweight/openpgp.worker.min.js +0 -2
  44. package/dist/openpgp.worker.js +0 -173
  45. package/dist/openpgp.worker.min.js +0 -2
  46. package/src/cleartext.js +0 -220
  47. package/src/config/config.js +0 -232
  48. package/src/config/index.js +0 -7
  49. package/src/config/localStorage.js +0 -35
  50. package/src/crypto/aes_kw.js +0 -153
  51. package/src/crypto/cfb.js +0 -169
  52. package/src/crypto/cipher/aes.js +0 -27
  53. package/src/crypto/cipher/blowfish.js +0 -398
  54. package/src/crypto/cipher/cast5.js +0 -610
  55. package/src/crypto/cipher/des.js +0 -476
  56. package/src/crypto/cipher/index.js +0 -91
  57. package/src/crypto/cipher/twofish.js +0 -346
  58. package/src/crypto/cmac.js +0 -98
  59. package/src/crypto/crypto.js +0 -394
  60. package/src/crypto/eax.js +0 -172
  61. package/src/crypto/gcm.js +0 -141
  62. package/src/crypto/hash/index.js +0 -163
  63. package/src/crypto/hash/md5.js +0 -205
  64. package/src/crypto/index.js +0 -57
  65. package/src/crypto/ocb.js +0 -274
  66. package/src/crypto/pkcs1.js +0 -170
  67. package/src/crypto/pkcs5.js +0 -55
  68. package/src/crypto/public_key/dsa.js +0 -188
  69. package/src/crypto/public_key/elgamal.js +0 -137
  70. package/src/crypto/public_key/elliptic/curves.js +0 -385
  71. package/src/crypto/public_key/elliptic/ecdh.js +0 -414
  72. package/src/crypto/public_key/elliptic/ecdsa.js +0 -348
  73. package/src/crypto/public_key/elliptic/eddsa.js +0 -119
  74. package/src/crypto/public_key/elliptic/index.js +0 -34
  75. package/src/crypto/public_key/elliptic/indutnyKey.js +0 -85
  76. package/src/crypto/public_key/index.js +0 -28
  77. package/src/crypto/public_key/prime.js +0 -275
  78. package/src/crypto/public_key/rsa.js +0 -597
  79. package/src/crypto/random.js +0 -145
  80. package/src/crypto/signature.js +0 -137
  81. package/src/encoding/armor.js +0 -433
  82. package/src/encoding/base64.js +0 -96
  83. package/src/enums.js +0 -493
  84. package/src/hkp.js +0 -89
  85. package/src/index.js +0 -161
  86. package/src/key/factory.js +0 -326
  87. package/src/key/helper.js +0 -378
  88. package/src/key/index.js +0 -32
  89. package/src/key/key.js +0 -888
  90. package/src/key/subkey.js +0 -187
  91. package/src/key/user.js +0 -230
  92. package/src/keyring/index.js +0 -12
  93. package/src/keyring/keyring.js +0 -229
  94. package/src/keyring/localstore.js +0 -119
  95. package/src/lightweight_helper.js +0 -26
  96. package/src/message.js +0 -825
  97. package/src/openpgp.js +0 -717
  98. package/src/packet/all_packets.js +0 -116
  99. package/src/packet/clone.js +0 -189
  100. package/src/packet/compressed.js +0 -194
  101. package/src/packet/index.js +0 -20
  102. package/src/packet/literal.js +0 -168
  103. package/src/packet/marker.js +0 -62
  104. package/src/packet/one_pass_signature.js +0 -156
  105. package/src/packet/packet.js +0 -300
  106. package/src/packet/packetlist.js +0 -232
  107. package/src/packet/public_key.js +0 -280
  108. package/src/packet/public_key_encrypted_session_key.js +0 -161
  109. package/src/packet/public_subkey.js +0 -44
  110. package/src/packet/secret_key.js +0 -468
  111. package/src/packet/secret_subkey.js +0 -41
  112. package/src/packet/signature.js +0 -786
  113. package/src/packet/sym_encrypted_aead_protected.js +0 -189
  114. package/src/packet/sym_encrypted_integrity_protected.js +0 -139
  115. package/src/packet/sym_encrypted_session_key.js +0 -204
  116. package/src/packet/symmetrically_encrypted.js +0 -118
  117. package/src/packet/trust.js +0 -35
  118. package/src/packet/user_attribute.js +0 -94
  119. package/src/packet/userid.js +0 -87
  120. package/src/polyfills.js +0 -64
  121. package/src/signature.js +0 -73
  122. package/src/type/ecdh_symkey.js +0 -69
  123. package/src/type/kdf_params.js +0 -114
  124. package/src/type/keyid.js +0 -110
  125. package/src/type/mpi.js +0 -138
  126. package/src/type/oid.js +0 -110
  127. package/src/type/s2k.js +0 -203
  128. package/src/util.js +0 -836
  129. package/src/wkd.js +0 -84
  130. package/src/worker/async_proxy.js +0 -190
  131. package/src/worker/worker.js +0 -167
  132. package/test/crypto/aes_kw.js +0 -57
  133. package/test/crypto/cipher/aes.js +0 -86
  134. package/test/crypto/cipher/blowfish.js +0 -58
  135. package/test/crypto/cipher/cast5.js +0 -25
  136. package/test/crypto/cipher/des.js +0 -143
  137. package/test/crypto/cipher/index.js +0 -7
  138. package/test/crypto/cipher/twofish.js +0 -71
  139. package/test/crypto/crypto.js +0 -383
  140. package/test/crypto/eax.js +0 -150
  141. package/test/crypto/ecdh.js +0 -359
  142. package/test/crypto/elliptic.js +0 -251
  143. package/test/crypto/elliptic_data.js +0 -102
  144. package/test/crypto/hash/index.js +0 -5
  145. package/test/crypto/hash/md5.js +0 -16
  146. package/test/crypto/hash/ripemd.js +0 -14
  147. package/test/crypto/hash/sha.js +0 -20
  148. package/test/crypto/index.js +0 -14
  149. package/test/crypto/ocb.js +0 -183
  150. package/test/crypto/pkcs5.js +0 -39
  151. package/test/crypto/random.js +0 -79
  152. package/test/crypto/rsa.js +0 -180
  153. package/test/crypto/validate.js +0 -387
  154. package/test/general/armor.js +0 -408
  155. package/test/general/brainpool.js +0 -360
  156. package/test/general/decompression.js +0 -60
  157. package/test/general/ecc_nist.js +0 -115
  158. package/test/general/ecc_secp256k1.js +0 -242
  159. package/test/general/forwarding.js +0 -43
  160. package/test/general/hkp.js +0 -165
  161. package/test/general/index.js +0 -20
  162. package/test/general/key.js +0 -3491
  163. package/test/general/keyring.js +0 -336
  164. package/test/general/oid.js +0 -39
  165. package/test/general/openpgp.js +0 -2577
  166. package/test/general/packet.js +0 -950
  167. package/test/general/signature.js +0 -1715
  168. package/test/general/streaming.js +0 -944
  169. package/test/general/testInputs.js +0 -18
  170. package/test/general/util.js +0 -183
  171. package/test/general/wkd.js +0 -48
  172. package/test/general/x25519.js +0 -556
  173. package/test/unittests.js +0 -64
@@ -1,408 +0,0 @@
1
- const openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp : require('../../dist/openpgp');
2
-
3
- const chai = require('chai');
4
-
5
- const { expect } = chai;
6
-
7
- describe("ASCII armor", function() {
8
-
9
- function getArmor(headers, signatureHeaders) {
10
- return ['-----BEGIN PGP SIGNED MESSAGE-----']
11
- .concat(headers)
12
- .concat(
13
- ['',
14
- 'sign this',
15
- '-----BEGIN PGP SIGNATURE-----']
16
- )
17
- .concat(signatureHeaders || ['Version: GnuPG v2.0.22 (GNU/Linux)'])
18
- .concat(
19
- ['',
20
- 'iJwEAQECAAYFAlMrPj0ACgkQ4IT3RGwgLJfYkQQAgHMQieazCVdfGAfzQM69Egm5',
21
- 'HhcQszODD898wpoGCHgiNdNo1+5nujQAtXnkcxM+Vf7onfbTvUqut/siyO3fzqhK',
22
- 'LQ9DiQUwJMBE8nOwVR7Mpc4kLNngMTNaHAjZaVaDpTCrklPY+TPHIZnu0B6Ur+6t',
23
- 'skTzzVXIxMYw8ihbHfk=',
24
- '=e/eA',
25
- '-----END PGP SIGNATURE-----']
26
- ).join('\n');
27
- }
28
-
29
- it('Parse cleartext signed message', async function () {
30
- let msg = getArmor(['Hash: SHA1']);
31
- msg = await openpgp.cleartext.readArmored(msg);
32
- expect(msg).to.be.an.instanceof(openpgp.cleartext.CleartextMessage);
33
- });
34
-
35
- it('Exception if mismatch in armor header and signature', async function () {
36
- let msg = getArmor(['Hash: SHA256']);
37
- msg = openpgp.cleartext.readArmored(msg);
38
- await expect(msg).to.be.rejectedWith(Error, /Hash algorithm mismatch in armor header and signature/);
39
- });
40
-
41
- it('Exception if no header and non-MD5 signature', async function () {
42
- let msg = getArmor(null);
43
- msg = openpgp.cleartext.readArmored(msg);
44
- await expect(msg).to.be.rejectedWith(Error, /If no "Hash" header in cleartext signed message, then only MD5 signatures allowed/);
45
- });
46
-
47
- it('Exception if unknown hash algorithm', async function () {
48
- let msg = getArmor(['Hash: LAV750']);
49
- msg = openpgp.cleartext.readArmored(msg);
50
- await expect(msg).to.be.rejectedWith(Error, /Unknown hash algorithm in armor header/);
51
- });
52
-
53
- it('Multiple hash values', async function () {
54
- let msg = getArmor(['Hash: SHA1, SHA256']);
55
- msg = await openpgp.cleartext.readArmored(msg);
56
- expect(msg).to.be.an.instanceof(openpgp.cleartext.CleartextMessage);
57
- });
58
-
59
- it('Multiple hash header lines', async function () {
60
- let msg = getArmor(['Hash: SHA1', 'Hash: SHA256']);
61
- msg = await openpgp.cleartext.readArmored(msg);
62
- expect(msg).to.be.an.instanceof(openpgp.cleartext.CleartextMessage);
63
- });
64
-
65
- it('Non-hash header line throws exception', async function () {
66
- let msg = getArmor(['Hash: SHA1', 'Comment: could be anything']);
67
- msg = openpgp.cleartext.readArmored(msg);
68
- await expect(msg).to.be.rejectedWith(Error, /Only "Hash" header allowed in cleartext signed message/);
69
- });
70
-
71
- it('Multiple wrong hash values', async function () {
72
- let msg = getArmor(['Hash: SHA512, SHA256']);
73
- msg = openpgp.cleartext.readArmored(msg);
74
- await expect(msg).to.be.rejectedWith(Error, /Hash algorithm mismatch in armor header and signature/);
75
- });
76
-
77
- it('Multiple wrong hash values', async function () {
78
- let msg = getArmor(['Hash: SHA512, SHA256']);
79
- msg = openpgp.cleartext.readArmored(msg);
80
- await expect(msg).to.be.rejectedWith(Error, /Hash algorithm mismatch in armor header and signature/);
81
- });
82
-
83
- it('Filter whitespace in blank line', async function () {
84
- let msg =
85
- ['-----BEGIN PGP SIGNED MESSAGE-----',
86
- 'Hash: SHA1',
87
- ' \f\r\t\u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000',
88
- 'sign this',
89
- '-----BEGIN PGP SIGNATURE-----',
90
- 'Version: GnuPG v2.0.22 (GNU/Linux)',
91
- '',
92
- 'iJwEAQECAAYFAlMrPj0ACgkQ4IT3RGwgLJfYkQQAgHMQieazCVdfGAfzQM69Egm5',
93
- 'HhcQszODD898wpoGCHgiNdNo1+5nujQAtXnkcxM+Vf7onfbTvUqut/siyO3fzqhK',
94
- 'LQ9DiQUwJMBE8nOwVR7Mpc4kLNngMTNaHAjZaVaDpTCrklPY+TPHIZnu0B6Ur+6t',
95
- 'skTzzVXIxMYw8ihbHfk=',
96
- '=e/eA',
97
- '-----END PGP SIGNATURE-----'].join('\n');
98
-
99
- msg = await openpgp.cleartext.readArmored(msg);
100
- expect(msg).to.be.an.instanceof(openpgp.cleartext.CleartextMessage);
101
- });
102
-
103
- it('Exception if improperly formatted armor header - plaintext section', async function () {
104
- let msg = getArmor(['Hash:SHA256']);
105
- msg = openpgp.cleartext.readArmored(msg);
106
- await expect(msg).to.be.rejectedWith(Error, /Improperly formatted armor header/);
107
- msg = getArmor(['Ha sh: SHA256']);
108
- msg = openpgp.cleartext.readArmored(msg);
109
- await expect(msg).to.be.rejectedWith(Error, /Only "Hash" header allowed in cleartext signed message/);
110
- msg = getArmor(['Hash SHA256']);
111
- msg = openpgp.cleartext.readArmored(msg);
112
- await expect(msg).to.be.rejectedWith(Error, /Improperly formatted armor header/);
113
- });
114
-
115
- it('Exception if improperly formatted armor header - signature section', async function () {
116
- await Promise.all(['Space : trailing', 'Space :switched', ': empty', 'none', 'Space:missing'].map(async function (invalidHeader) {
117
- await expect(openpgp.cleartext.readArmored(getArmor(['Hash: SHA1'], [invalidHeader]))).to.be.rejectedWith(Error, /Improperly formatted armor header/);
118
- }));
119
- });
120
-
121
- it('Ignore unknown armor header - signature section', async function () {
122
- const validHeaders = ['Version: BCPG C# v1.7.4114.6375', 'Independent Reserve Pty. Ltd. 2017: 1.0.0.0'];
123
- expect(await openpgp.cleartext.readArmored(getArmor(['Hash: SHA1'], validHeaders))).to.be.an.instanceof(openpgp.cleartext.CleartextMessage);
124
- await Promise.all(['A: Hello', 'Ab: 1.2.3', 'Abcd: #!/yah', 'Acd 123 5.6.$.8: Hello', '_: Hello', '*: Hello', '* & ## ?? ()(): Hello', '( ): Weird'].map(async function (validHeader) {
125
- expect(await openpgp.cleartext.readArmored(getArmor(['Hash: SHA1'], [validHeader]))).to.be.an.instanceof(openpgp.cleartext.CleartextMessage);
126
- }));
127
- });
128
-
129
- it('Exception if wrong armor header type', async function () {
130
- let msg =
131
- ['-----BEGIN PGP SIGNED MESSAGE\u2010\u2010\u2010\u2010\u2010\nHash:SHA1\n\nIs this properly-----',
132
- '',
133
- 'sign this',
134
- '-----BEGIN PGP SIGNNATURE-----',
135
- 'Version: GnuPG v2.0.22 (GNU/Linux)',
136
- '',
137
- 'iJwEAQECAAYFAlMrPj0ACgkQ4IT3RGwgLJfYkQQAgHMQieazCVdfGAfzQM69Egm5',
138
- 'HhcQszODD898wpoGCHgiNdNo1+5nujQAtXnkcxM+Vf7onfbTvUqut/siyO3fzqhK',
139
- 'LQ9DiQUwJMBE8nOwVR7Mpc4kLNngMTNaHAjZaVaDpTCrklPY+TPHIZnu0B6Ur+6t',
140
- 'skTzzVXIxMYw8ihbHfk=',
141
- '=e/eA',
142
- '-----END PGP SIGNNATURE-----'].join('\n');
143
-
144
- msg = openpgp.cleartext.readArmored(msg);
145
- await expect(msg).to.be.rejectedWith(Error, /Unknown ASCII armor type/);
146
- });
147
-
148
- it('Armor checksum validation - mismatch', async function () {
149
- const privKey =
150
- ['-----BEGIN PGP PRIVATE KEY BLOCK-----',
151
- 'Version: OpenPGP.js v0.3.0',
152
- 'Comment: https://openpgpjs.org',
153
- '',
154
- 'xbYEUubX7gEBANDWhzoP+Tr/IyRSv++vl5jBesQIPTYGQBdzF4YDnGEBABEB',
155
- 'AAH+CQMIfzdw4/PKNl5gVXdtfDFdSIN8yJT2rbeg3+SsWexXZNNdRaONWaiB',
156
- 'Z5cG9Q6+BoXKsEshIdcYOgwsAgRxlPpRA34Vvmg2QBk7PhdrkbK7aqENsJ1w',
157
- 'dIlLD6p9GmLE20yVff58/fMiUtPRgsD83SpKTAX6EM1ulpkuQQNjmrVc5qc8',
158
- '7AMdF80JdW5kZWZpbmVkwj8EEAEIABMFAlLm1+4JEBD8MASZrpALAhsDAAAs',
159
- 'QgD8CUrwv7Hrp/INR0/UvAvzS52VztREQwQWTJMrgTNHBGjHtgRS5tfuAQEA',
160
- 'nys9SaSgR+l6iZc/M8hGIUmbuahE2/+mtw+/l0RO+WcAEQEAAf4JAwjr39Yi',
161
- 'FzjxImDN1IoYVsonA9M+BtIIJHafuQUHjyEr1paJJK5xS6KlyGgpMTXTD6y/',
162
- 'qxS3ZSPPzHGRrs2CmkVEiPmurn9Ed05tb0y9OnJkWtuh3z9VVq9d8zHzuENa',
163
- 'bUfli+P/v+dRaZ+1rSOxUFbFYbFB5XK/A9b/OPFrv+mb4KrtLxugwj8EGAEI',
164
- 'ABMFAlLm1+4JEBD8MASZrpALAhsMAAC3IgD8DnLGbMnpLtrX72RCkPW1ffLq',
165
- '71vlXMJNXvoCeuejiRw=',
166
- '=wJN@',
167
- '-----END PGP PRIVATE KEY BLOCK-----'].join('\n');
168
-
169
- // try with default config
170
- const result_1 = await openpgp.key.readArmored(privKey);
171
- expect(result_1.err).to.exist;
172
- expect(result_1.err[0].message).to.match(/Ascii armor integrity check on message failed/);
173
-
174
- // try opposite config
175
- openpgp.config.checksum_required = !openpgp.config.checksum_required;
176
- const result_2 = await openpgp.key.readArmored(privKey);
177
- expect(result_2.err).to.exist;
178
- expect(result_2.err[0].message).to.match(/Ascii armor integrity check on message failed/);
179
-
180
- // back to default
181
- openpgp.config.checksum_required = !openpgp.config.checksum_required;
182
- });
183
-
184
- it('Armor checksum validation - valid', async function () {
185
- const privKey =
186
- ['-----BEGIN PGP PRIVATE KEY BLOCK-----',
187
- 'Version: OpenPGP.js v0.3.0',
188
- 'Comment: https://openpgpjs.org',
189
- '',
190
- 'xbYEUubX7gEBANDWhzoP+Tr/IyRSv++vl5jBesQIPTYGQBdzF4YDnGEBABEB',
191
- 'AAH+CQMIfzdw4/PKNl5gVXdtfDFdSIN8yJT2rbeg3+SsWexXZNNdRaONWaiB',
192
- 'Z5cG9Q6+BoXKsEshIdcYOgwsAgRxlPpRA34Vvmg2QBk7PhdrkbK7aqENsJ1w',
193
- 'dIlLD6p9GmLE20yVff58/fMiUtPRgsD83SpKTAX6EM1ulpkuQQNjmrVc5qc8',
194
- '7AMdF80JdW5kZWZpbmVkwj8EEAEIABMFAlLm1+4JEBD8MASZrpALAhsDAAAs',
195
- 'QgD8CUrwv7Hrp/INR0/UvAvzS52VztREQwQWTJMrgTNHBGjHtgRS5tfuAQEA',
196
- 'nys9SaSgR+l6iZc/M8hGIUmbuahE2/+mtw+/l0RO+WcAEQEAAf4JAwjr39Yi',
197
- 'FzjxImDN1IoYVsonA9M+BtIIJHafuQUHjyEr1paJJK5xS6KlyGgpMTXTD6y/',
198
- 'qxS3ZSPPzHGRrs2CmkVEiPmurn9Ed05tb0y9OnJkWtuh3z9VVq9d8zHzuENa',
199
- 'bUfli+P/v+dRaZ+1rSOxUFbFYbFB5XK/A9b/OPFrv+mb4KrtLxugwj8EGAEI',
200
- 'ABMFAlLm1+4JEBD8MASZrpALAhsMAAC3IgD8DnLGbMnpLtrX72RCkPW1ffLq',
201
- '71vlXMJNXvoCeuejiRw=',
202
- '=wJNM',
203
- '-----END PGP PRIVATE KEY BLOCK-----'].join('\n');
204
-
205
- // try with default config
206
- const result_1 = await openpgp.key.readArmored(privKey);
207
- expect(result_1.err).to.not.exist;
208
-
209
- // try opposite config
210
- openpgp.config.checksum_required = !openpgp.config.checksum_required;
211
- const result_2 = await openpgp.key.readArmored(privKey);
212
- expect(result_2.err).to.not.exist;
213
-
214
- // back to default
215
- openpgp.config.checksum_required = !openpgp.config.checksum_required;
216
- });
217
-
218
- it('Armor checksum validation - missing', async function () {
219
- const privKeyNoCheckSum =
220
- ['-----BEGIN PGP PRIVATE KEY BLOCK-----',
221
- 'Version: OpenPGP.js v0.3.0',
222
- 'Comment: https://openpgpjs.org',
223
- '',
224
- 'xbYEUubX7gEBANDWhzoP+Tr/IyRSv++vl5jBesQIPTYGQBdzF4YDnGEBABEB',
225
- 'AAH+CQMIfzdw4/PKNl5gVXdtfDFdSIN8yJT2rbeg3+SsWexXZNNdRaONWaiB',
226
- 'Z5cG9Q6+BoXKsEshIdcYOgwsAgRxlPpRA34Vvmg2QBk7PhdrkbK7aqENsJ1w',
227
- 'dIlLD6p9GmLE20yVff58/fMiUtPRgsD83SpKTAX6EM1ulpkuQQNjmrVc5qc8',
228
- '7AMdF80JdW5kZWZpbmVkwj8EEAEIABMFAlLm1+4JEBD8MASZrpALAhsDAAAs',
229
- 'QgD8CUrwv7Hrp/INR0/UvAvzS52VztREQwQWTJMrgTNHBGjHtgRS5tfuAQEA',
230
- 'nys9SaSgR+l6iZc/M8hGIUmbuahE2/+mtw+/l0RO+WcAEQEAAf4JAwjr39Yi',
231
- 'FzjxImDN1IoYVsonA9M+BtIIJHafuQUHjyEr1paJJK5xS6KlyGgpMTXTD6y/',
232
- 'qxS3ZSPPzHGRrs2CmkVEiPmurn9Ed05tb0y9OnJkWtuh3z9VVq9d8zHzuENa',
233
- 'bUfli+P/v+dRaZ+1rSOxUFbFYbFB5XK/A9b/OPFrv+mb4KrtLxugwj8EGAEI',
234
- 'ABMFAlLm1+4JEBD8MASZrpALAhsMAAC3IgD8DnLGbMnpLtrX72RCkPW1ffLq',
235
- '71vlXMJNXvoCeuejiRw=',
236
- '-----END PGP PRIVATE KEY BLOCK-----'].join('\n');
237
-
238
- // try with default config
239
- const result_1 = await openpgp.key.readArmored(privKeyNoCheckSum);
240
- if(openpgp.config.checksum_required) {
241
- expect(result_1.err).to.exist;
242
- expect(result_1.err[0].message).to.match(/Ascii armor integrity check on message failed/);
243
- } else {
244
- expect(result_1.err).to.not.exist;
245
- }
246
-
247
- // try opposite config
248
- openpgp.config.checksum_required = !openpgp.config.checksum_required;
249
- const result_2 = await openpgp.key.readArmored(privKeyNoCheckSum);
250
- if(openpgp.config.checksum_required) {
251
- expect(result_2.err).to.exist;
252
- expect(result_2.err[0].message).to.match(/Ascii armor integrity check on message failed/);
253
- } else {
254
- expect(result_2.err).to.not.exist;
255
- }
256
-
257
- // back to default
258
- openpgp.config.checksum_required = !openpgp.config.checksum_required;
259
- });
260
-
261
- it('Armor checksum validation - missing - trailing newline', async function () {
262
- const privKeyNoCheckSumWithTrailingNewline =
263
- ['-----BEGIN PGP PRIVATE KEY BLOCK-----',
264
- 'Version: OpenPGP.js v0.3.0',
265
- 'Comment: https://openpgpjs.org',
266
- '',
267
- 'xbYEUubX7gEBANDWhzoP+Tr/IyRSv++vl5jBesQIPTYGQBdzF4YDnGEBABEB',
268
- 'AAH+CQMIfzdw4/PKNl5gVXdtfDFdSIN8yJT2rbeg3+SsWexXZNNdRaONWaiB',
269
- 'Z5cG9Q6+BoXKsEshIdcYOgwsAgRxlPpRA34Vvmg2QBk7PhdrkbK7aqENsJ1w',
270
- 'dIlLD6p9GmLE20yVff58/fMiUtPRgsD83SpKTAX6EM1ulpkuQQNjmrVc5qc8',
271
- '7AMdF80JdW5kZWZpbmVkwj8EEAEIABMFAlLm1+4JEBD8MASZrpALAhsDAAAs',
272
- 'QgD8CUrwv7Hrp/INR0/UvAvzS52VztREQwQWTJMrgTNHBGjHtgRS5tfuAQEA',
273
- 'nys9SaSgR+l6iZc/M8hGIUmbuahE2/+mtw+/l0RO+WcAEQEAAf4JAwjr39Yi',
274
- 'FzjxImDN1IoYVsonA9M+BtIIJHafuQUHjyEr1paJJK5xS6KlyGgpMTXTD6y/',
275
- 'qxS3ZSPPzHGRrs2CmkVEiPmurn9Ed05tb0y9OnJkWtuh3z9VVq9d8zHzuENa',
276
- 'bUfli+P/v+dRaZ+1rSOxUFbFYbFB5XK/A9b/OPFrv+mb4KrtLxugwj8EGAEI',
277
- 'ABMFAlLm1+4JEBD8MASZrpALAhsMAAC3IgD8DnLGbMnpLtrX72RCkPW1ffLq',
278
- '71vlXMJNXvoCeuejiRw=',
279
- '-----END PGP PRIVATE KEY BLOCK-----',
280
- ''].join('\n');
281
-
282
- // try with default config
283
- const result_1 = await openpgp.key.readArmored(privKeyNoCheckSumWithTrailingNewline);
284
- if(openpgp.config.checksum_required) {
285
- expect(result_1.err).to.exist;
286
- expect(result_1.err[0].message).to.match(/Ascii armor integrity check on message failed/);
287
- } else {
288
- expect(result_1.err).to.not.exist;
289
- }
290
-
291
- // try opposite config
292
- openpgp.config.checksum_required = !openpgp.config.checksum_required;
293
- const result_2 = await openpgp.key.readArmored(privKeyNoCheckSumWithTrailingNewline);
294
- if(openpgp.config.checksum_required) {
295
- expect(result_2.err).to.exist;
296
- expect(result_2.err[0].message).to.match(/Ascii armor integrity check on message failed/);
297
- } else {
298
- expect(result_2.err).to.not.exist;
299
- }
300
-
301
- // back to default
302
- openpgp.config.checksum_required = !openpgp.config.checksum_required;
303
- });
304
-
305
- it('Accept header with trailing whitespace', async function () {
306
- const privKey =
307
- ['-----BEGIN PGP PRIVATE KEY BLOCK-----',
308
- 'Version: OpenPGP.js v0.3.0',
309
- 'Comment: https://openpgpjs.org',
310
- '',
311
- 'xbYEUubX7gEBANDWhzoP+Tr/IyRSv++vl5jBesQIPTYGQBdzF4YDnGEBABEB',
312
- 'AAH+CQMIfzdw4/PKNl5gVXdtfDFdSIN8yJT2rbeg3+SsWexXZNNdRaONWaiB',
313
- 'Z5cG9Q6+BoXKsEshIdcYOgwsAgRxlPpRA34Vvmg2QBk7PhdrkbK7aqENsJ1w',
314
- 'dIlLD6p9GmLE20yVff58/fMiUtPRgsD83SpKTAX6EM1ulpkuQQNjmrVc5qc8',
315
- '7AMdF80JdW5kZWZpbmVkwj8EEAEIABMFAlLm1+4JEBD8MASZrpALAhsDAAAs',
316
- 'QgD8CUrwv7Hrp/INR0/UvAvzS52VztREQwQWTJMrgTNHBGjHtgRS5tfuAQEA',
317
- 'nys9SaSgR+l6iZc/M8hGIUmbuahE2/+mtw+/l0RO+WcAEQEAAf4JAwjr39Yi',
318
- 'FzjxImDN1IoYVsonA9M+BtIIJHafuQUHjyEr1paJJK5xS6KlyGgpMTXTD6y/',
319
- 'qxS3ZSPPzHGRrs2CmkVEiPmurn9Ed05tb0y9OnJkWtuh3z9VVq9d8zHzuENa',
320
- 'bUfli+P/v+dRaZ+1rSOxUFbFYbFB5XK/A9b/OPFrv+mb4KrtLxugwj8EGAEI',
321
- 'ABMFAlLm1+4JEBD8MASZrpALAhsMAAC3IgD8DnLGbMnpLtrX72RCkPW1ffLq',
322
- '71vlXMJNXvoCeuejiRw=',
323
- '=wJNM',
324
- '-----END PGP PRIVATE KEY BLOCK-----',
325
- ''].join('\t \r\n');
326
-
327
- const result = await openpgp.key.readArmored(privKey);
328
- expect(result.err).to.not.exist;
329
- expect(result.keys[0]).to.be.an.instanceof(openpgp.key.Key);
330
- });
331
-
332
- it('Do not filter blank lines after header', async function () {
333
- let msg = getArmor(['Hash: SHA1', '']);
334
- msg = await openpgp.cleartext.readArmored(msg);
335
- expect(msg.text).to.equal('\r\nsign this');
336
- });
337
-
338
- it('Do not add extraneous blank line when base64 ends on line break', async function () {
339
- let pubKey = `-----BEGIN PGP PUBLIC KEY BLOCK-----
340
-
341
- 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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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
- CRDC00GPww7TMQQVCAoCAxYCAQIZAQIbAwIeAQAAb/UP/2cTAbsNQ4HDhzuO
355
- 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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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
- aIKLm4Sz3pvqsBAHlUacntlq7YtPah5VdAAxmVC05pALipsgaWNCCqAIh2nS
372
- qc8C00oC12tyNOrOt6CcMQHz5D9bLK7hP95ku+IPgktVGM2nreW5h4E4i4gL
373
- 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
- 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
- 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
- 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
- 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
- CAATBQJbkeDACRDC00GPww7TMQIbDAAAn/wP/2t8bB500NWBSqAFefc1NdZG
379
- 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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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
390
-
391
- =trqv
392
- -----END PGP PUBLIC KEY BLOCK-----
393
- `;
394
-
395
- const { type, data } = await openpgp.armor.decode(pubKey);
396
- const armor = await openpgp.stream.readToEnd(openpgp.armor.encode(type, data));
397
- expect(
398
- armor
399
- .replace(/^(Version|Comment): .*$\r\n/mg, '')
400
- ).to.equal(
401
- pubKey
402
- .replace('\n=', '=')
403
- .replace(/\n/g, '\r\n')
404
- );
405
- });
406
-
407
- });
408
-