Commit Graph
2569 Commits
Author SHA1 Message Date
larabr e28b39db5f 6.1.0-patch.0 @proton/v6.1.0-patch.0 2025-02-12 13:11:37 +01:00
larabr 61c744e769 Temporary workaround for Babel issue affecting web-app tests
The Babel plugin `@babel/plugin-transform-regenerator` used in the web-app Jest tests
(as part of @babel/preset-env) introduces a bug when transforming this specific minified
lightweight built.
The issue is that the mangled `ArrayStream` class name (`n` in the specific case) gets wrongly
reused and shadowed by a local variable in the `readPacket` function.
As a workaround for the problem, and to not have to amend the babel config for each monorepo workspace,
we disable mangling the specific class name.
2025-02-12 13:07:08 +01:00
larabr 299342946d PQC: switch to latest proposed variant for draft 7 of ML-KEM with X25519
Which also drops ECDH-KEM CCA-conversion.
This variant is yet to be adopted under draft 7, hence official test
vectors aren't available for now.

See https://github.com/openpgp-pqc/draft-openpgp-pqc/pull/161 .
2025-02-05 16:17:41 +01:00
larabr 55de9c0dc4 Palemoon patch: treat 'SyntaxError' as 'NotSupportedError' on EdDSA WebCrypto operations
Fallback to JS code instead of throwing.
2025-02-05 16:17:41 +01:00
larabr 8e497f419b PQC: Implement draft RFC for ML-DSA with Ed25519 (#13)
Implements Draft 6
(https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/06/).

Also, chunk ML-KEM and ML-DSA together in lightweight bundle.
Noble-curves had to be updated to v1.7.0 to ensure the same
version of noble-hashes is used as noble-post-quantum,
making it possible to reuse the sha3 code/chunk across libs.
2025-02-05 16:17:41 +01:00
larabrandDaniel Huigens f1f7ca972f PQC: Implement draft RFC for ML-KEM with X25519 (#10)
Implements Draft 6 with custom KEM combiner
(https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/06/)

Co-authored-by: Daniel Huigens <d.huigens@protonmail.com>
2025-02-05 14:31:54 +01:00
larabr 0ebf5797a5 Use noble-ed25519 over tweetnacl for signature verification (#16)
Much faster than tweetnacl, and no constant-timeness required.

We are not using v2 for now, despite being smaller, because it relies on
bigint literals, and it requires polyfilling the WebCrypto lib
manually in Node < 19.
2025-02-05 14:22:34 +01:00
larabrandDaniel Huigens 9fe278241a Temporarily add config.ignoreSEIPDv2FeatureFlag for compatibility (#15)
SEIPDv2 is a more secure and faster choice, but it is
not necessarily compatible with other libs and our mobile apps.

Co-authored-by: Daniel Huigens <d.huigens@protonmail.com>
2025-02-05 14:22:34 +01:00
larabr 7cf978092b Only add SHA3 preferences to v6 keys
To ensure compatibility with older mobile clients, which may not
support verifying SHA3 message signatures
2025-02-05 14:22:34 +01:00
larabr 55f8ab2629 Add Argon2S2K.reloadWasmModule() for manually triggering memory deallocation (#14)
Also, make `ARGON2_WASM_MEMORY_THRESHOLD_RELOAD`
a static class property, to be able to change its value.
2025-02-05 14:22:34 +01:00
larabr bec09a16fa Export Argon2S2K to reuse the WASM module outside of the OpenPGP.js context (#12) 2025-02-05 14:22:34 +01:00
larabr 9cf7a384aa Support generating subkeys with 'forwarded communication' flag to decrypt autoforwarded messages (#8)
These subkeys must not have the standard encryption flags (EtEr) set,
as they are not supposed to be used for direct messages.

Also:
- preserve 'forwarded communication' key flag when reformatting
- fix bug allowing to decrypt forwarded messages by setting
`config.allowInsecureDecryptionWithSigningKeys` instead of
`config.allowForwardedMessages`
- add TS definition for `config.allowForwardedMessages`
2025-02-05 14:22:34 +01:00
larabr 44327e9c95 Update support for decrypting autoforwarded messages (#6)
Update implementation to reflect spec changes to KDF params (v2 -> v255) and
new forwarding-related key flag (0x40).
2025-02-05 14:22:34 +01:00
07bedf3392 Add symmetric encryption and MAC support
To enable stored messages to be protected using symmetric key encryption and validated
using message authentication codes, this set of changes adds support for storing
symmetric key material as Secret Key Packets, symmetric key encrypted session keys as
Public Key Encrypted Session Key Packets, and MAC tags as Signature Packets.

Co-authored-by: Konstantinos Andrikopoulos <kandrikopoulos@proton.ch>
Co-authored-by: Daniel Huigens <d.huigens@protonmail.com>
2025-02-05 14:22:31 +01:00
larabr d8bdf2bed3 Add support for decrypting autoforwarded messages (#1) 2025-02-05 14:13:59 +01:00
Daniel Huigens cc79face33 Update package.json name and url 2025-02-05 14:13:55 +01:00
Daniel Huigens 96b13a468b 6.1.0 v6.1.0 2025-01-30 14:15:35 +01:00
Daniel Huigens 432856ff0e Fix signing using keys without preferred hash algorithms (#1820) 2025-01-29 16:45:32 +01:00
larabr b2bd8a0fdd Merge pull request #1812
Improve internal tree-shaking and lazy load md5
2024-11-25 11:13:15 +01:00
larabr 6db98f1e47 Internal: improve tree-shaking in armor module 2024-11-22 14:34:18 +01:00
larabr 8e5da78971 Internal: improve tree-shaking of web-stream-tools
Import single functions instead of entire lib.
2024-11-22 14:34:18 +01:00
larabr a5d894f514 Internal: avoid importing enums in legacy_cipher chunk
To avoid issues with the lightweight build:
for now it works fine, but it could mess up chunking in the future,
and it already results in a circular import.
2024-11-22 14:34:18 +01:00
larabr a16160fc66 Use noble-hashes for md5
The existing md5 module brought in the util module,
which messed up the chunking structure in the lightweight build;
inlining those functions is an option, but the noble-hashes code
is also more modern and readable.
2024-11-22 14:32:42 +01:00
larabr abe750cf7c Lightweight build: lazy load md5 hashing module
Used by old, legacy messages only
2024-11-22 14:32:42 +01:00
larabr 2a8969b437 Internal: improve tree-shaking for crypto modules
Every submodule under the 'crypto' directory was exported-imported
even if a handful of functions where actually needed.
We now only export entire modules behind default exports if it makes
sense for readability and if the different submodules would be
imported together anyway (e.g. `cipherMode` exports are all needed
by the SEIPD class).

We've also dropped exports that are not used outside of the crypto modules,
e.g. pkcs5 helpers.
2024-11-22 14:32:39 +01:00
larabr bf85deedb8 Merge pull request #1811 2024-11-22 14:30:41 +01:00
larabr 6c3b02872d Throw on encryption using non-standard experimentalGCM AEAD algo
The `enums.aead.gcm` ID standardized by RFC9580 should be used instead.
2024-11-22 14:29:14 +01:00
larabr 4d2d8740dc Fix decryption support for non-standard, legacy AEAD messages and keys that used experimentalGCM
This adds back support for decrypting password-protected messages which
were encrypted in OpenPGP.js v5 with custom config settings
`config.aeadProtect = true` together with
`config.preferredAEADAlgorithm = openpgp.enums.aead.experimentalGCM`.

Public-key-encrypted messages are affected if they were encrypted using the same config, while also providing `encryptionKeys` that declared `experimentalGCM` in their AEAD prefs.
Such keys could be generated in OpenPGP.js v5 by setting the aforementioned config values.
2024-11-22 10:15:20 +01:00
larabr bbdaad0cba TS: add gcm to enums.aead, mark non-standard experimentalGCM as deprecated
`experimentalGCM` should not be used anymore,
as a different a different algorithm ID was standardized
for GCM, and using the experimental value could give
interoperability issues with e.g. SEIPDv2 and AEAD-encrypted keys.
2024-11-22 10:15:20 +01:00
larabr daeaf6b1da CI: disable Browserstack concurrency to improve reliability 2024-11-21 18:11:10 +01:00
larabr 67faffafff 6.0.1 v6.0.1 2024-11-21 17:16:29 +01:00
larabr f75447afaa Fix ES imports for webpack: declare exports.browser entrypoint as higher priority than import
We could also drop the browser's directive `"./dist/node/openpgp.min.cjs": "./dist/openpgp.min.js"`,
since that build cannot be used with `require()`, and it's instead meant
to be the target of <script> tags.
But we keep it around for now to avoid potentially breaking changes, in case it's
used in some setups.
2024-11-21 16:43:15 +01:00
larabr 121b478312 Tests: drop unused, unnecessary error assertion
The `expect().to.not.throw` check as written is a no-op.
In fact, `throw` should have been called as a function.

We drop the relevant check altogether since if the wrapped
operation throws, the test will naturally fail due to the
unexpected error.
2024-11-13 19:44:06 +01:00
larabr 088d5f3638 Merge pull request #1807 2024-11-11 20:46:51 +01:00
Daniel Huigens ac1bfc0d60 Fix openpgp.verify/decrypt with expectSigned: true and format: 'binary' (#1805) 2024-11-11 15:42:33 +01:00
larabr 287104aafb TS: fix PrivateKey.getDecryptionKeys() return type 2024-11-11 14:20:18 +01:00
larabr 2d65d1d553 TS: generateKey: fix options.type definitions to accept 'curve25519' and 'curve448' 2024-11-11 13:28:05 +01:00
Daniel Huigens 3f060660c2 Update hash algorithm preferences order (#1804)
Prefer SHA3_512 over SHA3_256 for consistency.
2024-11-07 15:19:20 +01:00
larabr 01b62399af Revert "CI: temporarily enable for PRs to v6 branch" [skip ci] 2024-11-05 12:56:39 +01:00
larabr dd01ee00cb 6.0.0 v6.0.0 2024-11-04 17:35:18 +01:00
Daniel Huigens a5645e1d6c Spaces after "RFC" in README 2024-11-04 17:03:36 +01:00
Daniel Huigens 09800741f0 Document required Web Crypto support in README 2024-11-04 17:02:04 +01:00
Daniel Huigens 31a7e2616b Merge pull request #1629 from openpgpjs/v6
V6
2024-11-04 12:11:19 +01:00
larabr 42d504a69a Switch to SHA512 as default preferred hash algo (config.preferredHashAlgorithm) (#1801)
This affects the preferences of newly generated keys, which by default will
have SHA512 as first hash algo preference.
SHA512 will also be used when signing, as long as the recipient keys declare
support for the algorithm.
2024-10-31 00:24:19 +01:00
larabr fb72ea449a Merge pull request #1802
Determine signature hash prefs based on recipient keys instead of signing key
2024-10-31 00:16:40 +01:00
larabr f9a3e54364 openpgp.sign: add recipientKeys option to get the signing prefs from
If given, the signature will be generated using the preferred hash algo from the recipient keys.
Otherwise, the signing key preferences are used (this was also the existing behavior).

Note: when signing through `openpgp.encrypt`, the `encryptionKeys` are automatically used as recipient keys.
2024-10-30 19:06:44 +01:00
larabr d3e75de23d openpgp.encrypt: use encryptionKeys to determine preferred hash algo when signing
In `openpgp.sign`, the signing key preferences are considered instead,
since no "recipient keys" are available.

The hash algo selection logic has been reworked as follows:
if `config.preferredHashAlgo` appears in the prefs of all recipients, we pick it;
otherwise, we use the strongest supported algo (note: SHA256 is always implicitly supported by all keys),
as long as it is compatible with the signing key (e.g. ECC keys require minimum digest sizes).

Previously, only the preferences of the signing key were used to determine the hash algo to use,
but this is in contrast to the RFC: https://www.rfc-editor.org/rfc/rfc9580.html#section-5.2.3.16-2 .
Also, an algo stronger than `config.preferredHashAlgo` would be used, if the signing key
declared it as first preference.

With this change, `config.preferredHashAlgo` is picked even if it's weaker than the
preferences of the recipient keys.
2024-10-30 19:06:44 +01:00
larabr 12274a1543 Update README [skip ci] 2024-10-28 18:01:07 +01:00
larabr 0138b69356 CI: update Browserstack project id to include target branch 2024-10-28 13:38:59 +01:00
larabr 821f260ba9 Lightweight build: lazy load bzip decompression lib 2024-10-28 13:38:59 +01:00