Skip to content

Commit

Permalink
Update to OpenPGP.js v6 beta.3
Browse files Browse the repository at this point in the history
  • Loading branch information
larabr committed Sep 9, 2024
1 parent da102b3 commit 1b8e721
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 26 deletions.
27 changes: 12 additions & 15 deletions lib/key/forwarding.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { KDFParams, PrivateKey, UserID, SecretSubkeyPacket, SecretKeyPacket, MaybeArray, Subkey, config as defaultConfig, SubkeyOptions, enums } from '../openpgp';
import { KDFParams, PrivateKey, UserID, SecretSubkeyPacket, SecretKeyPacket, MaybeArray, SubkeyOptions, enums, Subkey, readPrivateKey } from '../openpgp';
import { generateKey, reformatKey } from './utils';
import { serverTime } from '../serverTime';
import { bigIntToUint8Array, mod, modInv, uint8ArrayToBigInt } from '../bigInteger';
Expand All @@ -18,20 +18,17 @@ export async function computeProxyParameter(

async function getEncryptionKeysForForwarding(forwarderKey: PrivateKey, date: Date) {
const curveName = 'curve25519Legacy';
const forwarderEncryptionKeys = await forwarderKey.getDecryptionKeys(
undefined,
date,
undefined,
{ ...defaultConfig, allowInsecureDecryptionWithSigningKeys: false }
) as any as (PrivateKey | Subkey)[]; // TODO wrong TS defintion for `getDecryptionKeys`

if (forwarderEncryptionKeys.some((forwarderSubkey) => (
!forwarderSubkey ||
!(forwarderSubkey.keyPacket instanceof SecretKeyPacket) || // SecretSubkeyPacket is a subclass
forwarderSubkey.keyPacket.isDummy() ||
forwarderSubkey.keyPacket.version !== 4 || // TODO add support for v6
forwarderSubkey.getAlgorithmInfo().algorithm !== 'ecdh' ||
forwarderSubkey.getAlgorithmInfo().curve !== curveName
const forwarderEncryptionKeys = (await Promise.all(forwarderKey.getKeyIDs().map(
(maybeEncryptionKeyID) => forwarderKey.getEncryptionKey(maybeEncryptionKeyID, date).catch(() => null)
))).filter(((maybeKey): maybeKey is (PrivateKey | Subkey) => !!maybeKey));

if (forwarderEncryptionKeys.some((maybeForwarderSubkey) => (
maybeForwarderSubkey === null ||
!(maybeForwarderSubkey.keyPacket instanceof SecretKeyPacket) || // SecretSubkeyPacket is a subclass
maybeForwarderSubkey.keyPacket.isDummy() ||
maybeForwarderSubkey.keyPacket.version !== 4 || // TODO add support for v6
maybeForwarderSubkey.getAlgorithmInfo().algorithm !== 'ecdh' ||
maybeForwarderSubkey.getAlgorithmInfo().curve !== curveName
))) {
throw new Error('One or more encryption key packets are unsuitable for forwarding');
}
Expand Down
13 changes: 6 additions & 7 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
"@openpgp/asmcrypto.js": "^3.1.0",
"@openpgp/web-stream-tools": "~0.1.1",
"jsmimeparser": "npm:@protontech/jsmimeparser@^3.0.1",
"openpgp": "npm:@protontech/openpgp@~6.0.0-beta.2"
"openpgp": "npm:@protontech/openpgp@~6.0.0-beta.3.patch.0"
},
"devDependencies": {
"@types/bn.js": "^5.1.5",
Expand Down
1 change: 0 additions & 1 deletion test/key/check.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,6 @@ T/efFOC6BDkAAHcjAPwIPNHnR9bKmkVop6cE05dCIpZ/W8zXDGnjKYrrC4Hb
4gEAmISD1GRkNOmCV8aHwN5svO6HuwXR4cR3o3l7HlYeag8=
=wpkQ
-----END PGP PRIVATE KEY BLOCK-----`,
// @ts-expect-error missing `config.enableParsingV5Entities` declaration
config: { enableParsingV5Entities: true }
});
expect(
Expand Down
2 changes: 1 addition & 1 deletion test/key/forwarding.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ z5FbOJXSHsoez1SZ7GKgoxC+X0w=
decryptionKeys: charlieKey,
config: { allowForwardedMessages: true }
});
expect(decryptionTrialPromise).to.be.rejectedWith(/Session key decryption failed/);
expect(decryptionTrialPromise).to.be.rejectedWith(/Error decrypting message/);
});

it('decryption with forwarding - v4 key with multiple subkeys', async () => {
Expand Down
1 change: 0 additions & 1 deletion test/key/utils.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ T/efFOC6BDkAAHcjAPwIPNHnR9bKmkVop6cE05dCIpZ/W8zXDGnjKYrrC4Hb
4gEAmISD1GRkNOmCV8aHwN5svO6HuwXR4cR3o3l7HlYeag8=
=wpkQ
-----END PGP PRIVATE KEY BLOCK-----`,
// @ts-expect-error missing `config.enableParsingV5Entities` declaration
config: { enableParsingV5Entities: true }
});
const fingerprints = publicKey.getKeys().map((key) => key.getFingerprint());
Expand Down

0 comments on commit 1b8e721

Please sign in to comment.