mirror of
https://github.com/openpgpjs/openpgpjs.git
synced 2025-06-09 23:56:41 +00:00
119 lines
5.6 KiB
JavaScript
119 lines
5.6 KiB
JavaScript
import { use as chaiUse, expect } from 'chai';
|
|
import chaiAsPromised from 'chai-as-promised'; // eslint-disable-line import/newline-after-import
|
|
chaiUse(chaiAsPromised);
|
|
|
|
import openpgp from '../initOpenpgp.js';
|
|
|
|
import util from '../../src/util.js';
|
|
|
|
import * as input from './testInputs.js';
|
|
|
|
export default () => describe('Elliptic Curve Cryptography for NIST P-256,P-384,P-521 curves @lightweight', function () {
|
|
function omnibus() {
|
|
it('Omnibus NIST P-256 Test', async function () {
|
|
const testData = input.createSomeMessage();
|
|
const testData2 = input.createSomeMessage();
|
|
|
|
const { privateKey: hi, publicKey: pubHi } = await openpgp.generateKey({ userIDs: { name: 'Hi', email: 'hi@hel.lo' }, curve: 'nistP256', format: 'object' });
|
|
const { privateKey: bye, publicKey: pubBye } = await openpgp.generateKey({ userIDs: { name: 'Bye', email: 'bye@good.bye' }, curve: 'nistP256', format: 'object' });
|
|
|
|
const cleartextMessage = await openpgp.sign({ message: await openpgp.createCleartextMessage({ text: testData }), signingKeys: hi });
|
|
await openpgp.verify({
|
|
message: await openpgp.readCleartextMessage({ cleartextMessage }),
|
|
verificationKeys: pubHi
|
|
}).then(output => expect(output.signatures[0].verified).to.eventually.be.true);
|
|
// Verifying detached signature
|
|
await openpgp.verify({
|
|
message: await openpgp.createMessage({ text: util.removeTrailingSpaces(testData) }),
|
|
verificationKeys: pubHi,
|
|
signature: (await openpgp.readCleartextMessage({ cleartextMessage })).signature
|
|
}).then(output => expect(output.signatures[0].verified).to.eventually.be.true);
|
|
|
|
// Encrypting and signing
|
|
const encrypted = await openpgp.encrypt({
|
|
message: await openpgp.createMessage({ text: testData2 }),
|
|
encryptionKeys: [pubBye],
|
|
signingKeys: [hi]
|
|
});
|
|
// Decrypting and verifying
|
|
return openpgp.decrypt({
|
|
message: await openpgp.readMessage({ armoredMessage: encrypted }),
|
|
decryptionKeys: bye,
|
|
verificationKeys: [pubHi]
|
|
}).then(async output => {
|
|
expect(output.data).to.equal(testData2);
|
|
await expect(output.signatures[0].verified).to.eventually.be.true;
|
|
});
|
|
});
|
|
}
|
|
|
|
omnibus();
|
|
|
|
it('Sign message', async function () {
|
|
const testData = input.createSomeMessage();
|
|
const options = { userIDs: { name: 'Hi', email: 'hi@hel.lo' }, curve: 'nistP256', format: 'object' };
|
|
const { privateKey, publicKey } = await openpgp.generateKey(options);
|
|
const signature = await openpgp.sign({ message: await openpgp.createCleartextMessage({ text: testData }), signingKeys: privateKey });
|
|
const msg = await openpgp.readCleartextMessage({ cleartextMessage: signature });
|
|
const result = await openpgp.verify({ message: msg, verificationKeys: publicKey });
|
|
expect(await result.signatures[0].verified).to.be.true;
|
|
});
|
|
|
|
it('Encrypt and sign message', async function () {
|
|
const testData = input.createSomeMessage();
|
|
let options = { userIDs: { name: 'Hi', email: 'hi@hel.lo' }, curve: 'nistP256', format: 'object' };
|
|
const firstKey = await openpgp.generateKey(options);
|
|
options = { userIDs: { name: 'Bye', email: 'bye@good.bye' }, curve: 'nistP256', format: 'object' };
|
|
const secondKey = await openpgp.generateKey(options);
|
|
const encrypted = await openpgp.encrypt({
|
|
message: await openpgp.createMessage({ text: testData }),
|
|
encryptionKeys: secondKey.publicKey,
|
|
signingKeys: firstKey.privateKey
|
|
});
|
|
const message = await openpgp.readMessage({ armoredMessage: encrypted });
|
|
const result = await openpgp.decrypt({ message, decryptionKeys: secondKey.privateKey, verificationKeys: firstKey.publicKey });
|
|
expect(await result.signatures[0].verified).to.be.true;
|
|
});
|
|
|
|
it('should decrypt a message using the correct fingerprint size in the KDF (v6 key)', async function() {
|
|
// this test is to ensure the KDF function uses the correct fingerprint size (the fingerprint should not be truncated)
|
|
const key = await openpgp.readKey({
|
|
armoredKey: `-----BEGIN PGP PRIVATE KEY BLOCK-----
|
|
|
|
xXkGZoVjGhMAAABMCCqGSM49AwEHAgMEUqR9vqdSZv8I+DGuSOYUSf4cNVlE
|
|
H16loiqRcAsDY9SHSTVHQkEWbc63HyEvV3jGSbSk2dNF64faN3nbhlZ0PgAB
|
|
APcoOjqcdJ9/LHRgxWvSbrKAmKNm0yJE9U9DY9hwshqhwqEGHxMIAAAAPgWC
|
|
ZoVjGgMLCQcFFQgKDA4EFgACAQKbAwIeASKhBk+e6Xq0rbnjKzVy/3Qitc2h
|
|
eW/w/IuxgPXjJW3nfTRxAAAAABQOEKxf0tyJS3Pbs1xApVxWKP4BAM8Bkygn
|
|
ddtiBifou11xgxOjT0y0CsbjIKyOnPTvIh/4AQCfyLJIAmQUN36mSInEepvy
|
|
NVk8jmweVYOCT8RluvFtG80OPHRlc3RAdGVzdC5pdD7CjwYTEwgAAAAsBYJm
|
|
hWMaAhkBIqEGT57perStueMrNXL/dCK1zaF5b/D8i7GA9eMlbed9NHEAAAAA
|
|
g9UQJqaRsvniF1WYuuRLpqMpOAEAvAhGhNpom/L2iIZLCpeyFCfGe5VDUBQB
|
|
1cjGpTbnrJoBAIjy1tgUH1gjixchymNf5LfUqwdXwEiLfv2f/Iq+KEX/x30G
|
|
ZoVjGhIAAABQCCqGSM49AwEHAgMESZrMsc0UrXB5/C8FHXAepykqAyueem7p
|
|
cjVvWFP9V59w/O/VXVyJBrZqleN0w/KexznRyzvQjH36HRlwVFwJ5QMBCAcA
|
|
AQDiiISRsjcPcaGXSAEYmvd80nH1oP8CJ/TQsi8od5nhqMKPBhgTCAAAACwF
|
|
gmaFYxoCmwwioQZPnul6tK254ys1cv90IrXNoXlv8PyLsYD14yVt5300cQAA
|
|
AAC2GhBn4S5eLyGPjccfUkFRKKWmAP4iHESir/KDsmsfhE5m/RwQcy7feCl7
|
|
2bny7QRNGY8dFQD8CwmHJ0EvMDQcvVWPrj8WdgPblJEEgWd9AUItEFcDee0=
|
|
-----END PGP PRIVATE KEY BLOCK-----`
|
|
});
|
|
const message = await openpgp.readMessage({
|
|
armoredMessage: `-----BEGIN PGP MESSAGE-----
|
|
|
|
wX4DYKEfntV7jkcSAgMEXplJPwjsvhh7xNeBeZtgepG1f0hUaW4eoeFCDpYH
|
|
IOr2RZFgRd6KbtmNsI1saqDwDg7EjFk+AWOe7av2xcFStTDfz+9mus03A6tk
|
|
7mPFWGsDUrxP2b+tyO6ofr9I4gyj5tI2X7R94AfRWgQxy+O2PvLSNAFXcx4o
|
|
SsrtSQmZUKpxuBROy+bZNheNgmN966vqnFBiM1vXikv5OVyprUV0EzzQ3Hnt
|
|
69s=
|
|
=0Agg
|
|
-----END PGP MESSAGE-----`
|
|
});
|
|
const decrypted = await openpgp.decrypt({ message, decryptionKeys: key });
|
|
expect(decrypted.data).to.equal('abc');
|
|
});
|
|
|
|
|
|
// TODO find test vectors
|
|
});
|