OpenPGP.js v6 adds support for the new version of the OpenPGP specification, RFC 9580. It also increases compliance with the specification, as demonstrated by the OpenPGP interoperability test suite.
OpenPGP.js v6 only makes minor API changes.
This is the first stable release of OpenPGP.js v6: no more breaking changes to the high-level API will be made until the next major release.
For the changes since the previous pre-release (v6.0.0-beta.3.patch.1), see the end of this message.
Here we list a summary of the main changes since v5:
Platform support changes
The library is now declared as a module (type: module in package.json), and declares exports, alongside the legacy package.json entrypoints, which should ensure backwards compatibility. Still, bundlers might be affected by the package.json changes depending on how they load the library.
Node.js:
Drop support for Node.js versions below 18 (OpenPGP.js v5 supported Node.js v14 and above).
Streaming: drop support for native Node Readable stream: require passing Node Web Streams (#1716)
Web:
Require availability of the Web Crypto API's SubtleCrypto (insecure contexts are no longer supported, as SubtleCrypto is not available there)
Require availability of the Web Streams API, since it's now supported in all browsers (applications can load a polyfill if they need to support older browser versions: see README)
Require availability of native BigInts (not supported by e.g. Safari 13 and below, see full compatibility table)
Argon2 has been added as S2K algorithm (on all platforms). For performance reasons, the implementation relies on a WASM module, thus web apps might need to make changes to their CSP policy in order to use the feature. Alternatively, since the Argon2 WASM module is only loaded if needed, apps can manually reject password-encrypted messages and private keys which use Argon2 by checking e.g. SymEncryptedSessionKeyPacket.s2k?.type === 'argon2' or SecretKeyPacket|SecretSubkeyPacket.keyPacket.s2k?.type === 'argon2'.
Breaking API changes
Ensure primary key meets strength and algo requirements when encrypting/verifying/signing using subkeys (#1719)
read[Private]Key: support parsing key blocks (return first parsable key); previously, parsing would fail if a block with more than one key was given in input (#1755)
PrivateKey.getDecryptionKeys will now throw if no decryption key is found (#1789). Previously, an empty array was returned. As a consequence of this change, some openpgp.decrypt errors will be more specific.
Refuse to use keys without key flags (see config.allowMissingKeyFlags below)
Randomize v4 and v5 signatures via custom notation (#1737): while this notation solution is interoperable, it will reveal that the signature has been generated using OpenPGP.js, which may not be desirable in some cases. For this reason, the option config.nonDeterministicSignaturesViaNotation (defaulting to true) has been added to turn off the feature.
AEAD-encrypted v4 keys from OpenPGP.js v5 or older (namely keys generated without.v5Keys flag and encrypted with config.aeadProtect = true) cannot be decrypted by OpenPGP.js v6 (via decryptKey) out-of-the-box (see config.parseAEADEncryptedV4KeysAsLegacy below) (#1672)
Parsing of v5 keys and v5 signatures now requires turning on the corresponding config flag (see config.enableParsingV5Entities below). The affected entities are non-standard, and in the RFC 9580 they have been superseded by v6 keys, v6 signatures and SEIPDv2 encrypted data, respectively. However, generation of v5 entities was supported behind config flags in OpenPGP.js v5, and some other libraries, hence parsing them might be necessary in some cases. (#1774 , #1779)
Configuration changes
RFC 9580 has updated parts of the draft RFC 4880bis as implemented by OpenPGP.js v4 and v5. Related changes in v6 are:
Drop the config.v5Keys flag and corresponding key generation. The flag is replaced by .v6Keys, and results in a different key format.
The config.aeadProtect flag has a different effect than in v5:
for private keys, a new encryption mechanism is used;
for password-encrypted messages, a new message format is used;
Add config.parseAEADEncryptedV4KeysAsLegacy to allow decrypting AEAD-encrypted v4 keys from OpenPGP.js v5 or older (namely keys generated without.v5Keys flag and encrypted with config.aeadProtect = true) (#1672).
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
- `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
- `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency
- `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
Bumps the npm-deps group with 4 updates: sweetalert2, openpgp, puppeteer and typescript-eslint.
Updates
sweetalert2
from 11.14.4 to 11.14.5Release notes
Sourced from sweetalert2's releases.
Changelog
Sourced from sweetalert2's changelog.
Commits
076295e
chore(release): 11.14.5 [skip ci]e5956d8
fix: add types to close.js75c6a7a
chore: add tabootwin to sponsors252acd4
chore: bun -> yarnUpdates
openpgp
from 5.11.2 to 6.0.0Release notes
Sourced from openpgp's releases.
... (truncated)
Commits
dd01ee0
6.0.0a5645e1
Spaces after "RFC" in README0980074
Document required Web Crypto support in README31a7e26
Merge pull request #1629 from openpgpjs/v642d504a
Switch to SHA512 as default preferred hash algo (`config.preferredHashAlgorit...fb72ea4
Merge pull request #1802f9a3e54
openpgp.sign
: addrecipientKeys
option to get the signing prefs fromd3e75de
openpgp.encrypt
: useencryptionKeys
to determine preferred hash algo when...12274a1
Update README [skip ci]0138b69
CI: update Browserstack project id to include target branchUpdates
puppeteer
from 23.6.1 to 23.7.1Release notes
Sourced from puppeteer's releases.
... (truncated)
Commits
1e3724b
chore: release main (#13266)979af2b
fix: roll to Chrome 130.0.6723.116 (#13274)33b4f09
fix(webdriver): report frame URL as console message location (#13273)d40658f
fix: use numeric user ID in Dockerfile for pptruser (#13272)b7c7785
fix: roll to Chrome 130.0.6723.93 (#13268)acd3c72
fix: roll to Firefox 132.0.1 (#13265)a10eebb
chore(deps): Bump the all group in /website with 2 updates (#13262)eec8072
chore: release main (#13246)8d62667
chore(deps-dev): Bump the dev-dependencies group with 10 updates (#13261)a9e6cd1
fix(browser): omit file path validation in uploadFile() in browser environmen...Updates
typescript-eslint
from 8.12.2 to 8.13.0Release notes
Sourced from typescript-eslint's releases.
Changelog
Sourced from typescript-eslint's changelog.
Commits
ac1f632
chore(release): publish 8.13.03b97b55
chore: enable eslint-plugin-perfectionist on the rest of the repo (#10189)Most Recent Ignore Conditions Applied to This Pull Request
| Dependency Name | Ignore Conditions | | --- | --- | | puppeteer | [>= 21.7.a, < 21.8] | | puppeteer | [>= 22.0.a, < 22.1] | | puppeteer | [>= 22.1.a, < 22.2] | | puppeteer | [>= 22.3.a, < 22.4] | | puppeteer | [>= 22.5.a, < 22.6] | | puppeteer | [>= 22.6.a, < 22.7] | | puppeteer | [>= 22.4.a, < 22.5] | | puppeteer | [>= 22.2.a, < 22.3] | | puppeteer | [>= 22.7.a, < 22.8] |Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show