Allow parsing keys without User IDs (#1146)
This commit is contained in:
parent
8d67af729a
commit
fe2949f16d
|
@ -63,8 +63,8 @@ class Key {
|
||||||
this.users = [];
|
this.users = [];
|
||||||
this.subKeys = [];
|
this.subKeys = [];
|
||||||
this.packetlist2structure(packetlist);
|
this.packetlist2structure(packetlist);
|
||||||
if (!this.keyPacket || !this.users.length) {
|
if (!this.keyPacket) {
|
||||||
throw new Error('Invalid key: need at least key and user ID packet');
|
throw new Error('Invalid key: need at least key packet');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -545,11 +545,6 @@ class Key {
|
||||||
if (await this.isRevoked(null, null, date)) {
|
if (await this.isRevoked(null, null, date)) {
|
||||||
throw new Error('Primary key is revoked');
|
throw new Error('Primary key is revoked');
|
||||||
}
|
}
|
||||||
// check for at least one self signature. Self signature of user ID not mandatory
|
|
||||||
// See {@link https://tools.ietf.org/html/rfc4880#section-11.1}
|
|
||||||
if (!this.users.some(user => user.userId && user.selfCertifications.length)) {
|
|
||||||
throw new Error('No self-certifications');
|
|
||||||
}
|
|
||||||
// check for valid, unrevoked, unexpired self signature
|
// check for valid, unrevoked, unexpired self signature
|
||||||
const { selfCertification } = await this.getPrimaryUser(date, userId);
|
const { selfCertification } = await this.getPrimaryUser(date, userId);
|
||||||
// check for expiration time
|
// check for expiration time
|
||||||
|
|
|
@ -1916,6 +1916,60 @@ vqBGKJzmO5q3cECw
|
||||||
=X9kJ
|
=X9kJ
|
||||||
-----END PGP PRIVATE KEY BLOCK-----`;
|
-----END PGP PRIVATE KEY BLOCK-----`;
|
||||||
|
|
||||||
|
const uidlessKey = `-----BEGIN PGP PRIVATE KEY BLOCK-----
|
||||||
|
|
||||||
|
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
|
||||||
|
CciXuhqnLwoVF5/uXMYffVtfl/OU+w==
|
||||||
|
=EqcV
|
||||||
|
-----END PGP PRIVATE KEY BLOCK-----`;
|
||||||
|
|
||||||
const rsaSignOnly = `-----BEGIN PGP PRIVATE KEY BLOCK-----
|
const rsaSignOnly = `-----BEGIN PGP PRIVATE KEY BLOCK-----
|
||||||
|
|
||||||
|
@ -3214,6 +3268,14 @@ VYGdb3eNlV8CfoEC
|
||||||
await expect(openpgp.encrypt({ message: openpgp.message.fromText('hello'), publicKeys: publicKey, privateKeys: privateKey, toUserIds: { name: 'Test User', email: 'c@c.com' }, armor: false })).to.be.rejectedWith('Could not find user that matches that user ID');
|
await expect(openpgp.encrypt({ message: openpgp.message.fromText('hello'), publicKeys: publicKey, privateKeys: privateKey, toUserIds: { name: 'Test User', email: 'c@c.com' }, armor: false })).to.be.rejectedWith('Could not find user that matches that user ID');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('Fails to encrypt to User ID-less key', async function() {
|
||||||
|
const publicKey = await openpgp.key.readArmored(uidlessKey);
|
||||||
|
expect(publicKey.users.length).to.equal(0);
|
||||||
|
const privateKey = await openpgp.key.readArmored(uidlessKey);
|
||||||
|
await privateKey.decrypt('correct horse battery staple');
|
||||||
|
await expect(openpgp.encrypt({ message: openpgp.message.fromText('hello'), publicKeys: publicKey, privateKeys: privateKey, armor: false })).to.be.rejectedWith('Could not find primary user');
|
||||||
|
});
|
||||||
|
|
||||||
it('Sign - specific user', async function() {
|
it('Sign - specific user', async function() {
|
||||||
const publicKey = await openpgp.key.readArmored(multi_uid_key);
|
const publicKey = await openpgp.key.readArmored(multi_uid_key);
|
||||||
const privateKey = await openpgp.key.readArmored(priv_key_rsa);
|
const privateKey = await openpgp.key.readArmored(priv_key_rsa);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user