Skip to content

Commit

Permalink
test: add more e2e tests
Browse files Browse the repository at this point in the history
  • Loading branch information
viceice committed May 13, 2024
1 parent f269df9 commit 784f55c
Show file tree
Hide file tree
Showing 6 changed files with 247 additions and 30 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
"build": "make build",
"prepack": "make build",
"test": "iced3 test/run.iced",
"test:e2e": "node --test test/e2e/"
"test:e2e": "node --enable-source-maps --test test/e2e/"
},
"publishConfig": {
"access": "public",
Expand Down
157 changes: 128 additions & 29 deletions test/e2e/decrypt.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,14 @@ const fs = require('node:fs/promises');
const assert = require('node:assert');
const kbpgp = require('../..');

describe('decrypt', () => {
it('works', async () => {
describe('decrypt', async () => {
await it('works', async () => {
const key = await fs.readFile(`${__dirname}/private-pgp.pem`, {
encoding: 'utf-8',
});

const msg =
'wcFMAw+4H7SgaqGOAQ//Yk4RTQoLEhO0TKxN2IUBrCi88ts+CG1SXKeL06sJ2qikN/3n2JYAGGKgkHRICfu5dOnsjyFdLJ1XWUrbsM3XgVWikMbrmzD1Xe7N5DsoZXlt4Wa9pZ+IkZuE6XcKKu9whIJ22ciEwCzFwDmk/CBshdCCVVQ3IYuM6uibEHn/AHQ8K15XhraiSzF6DbJpevs5Cy7b5YHFyE936H25CVnouUQnMPsirpQq3pYeMq/oOtV/m4mfRUUQ7MUxvtrwE4lq4hLjFu5n9rwlcqaFPl7I7BEM++1c9LFpYsP5mTS7hHCZ9wXBqER8fa3fKYx0bK1ihCpjP4zUkR7P/uhWDArXamv7gHX2Kj/Qsbegn7KjTdZlggAmaJl/CuSgCbhySy+E55g3Z1QFajiLRpQ5+RsWFDbbI08YEgzyQ0yNCaRvrkgo7kZ1D95rEGRfY96duOQbjzOEqtvYmFChdemZ2+f9Kh/JH1+X9ynxY/zYe/0p/U7WD3QNTYN18loc4aXiB1adXD5Ka2QfNroLudQBmLaJpJB6wASFfuxddsD5yRnO32NSdRaqIWC1x6ti3ZYJZ2RsNwJExPDzjpQTuMOH2jtpu3q7NHmW3snRKy2YAL2UjI0YdeKIlhc/qLCJt9MRcOxWYvujTMD/yGprhG44qf0jjMkJBu7NjuVIMONujabl9b7SUQGfO/t+3rMuC68bQdCGLlO8gf3hvtD99utzXphi6idjC0HKSW/9KzuMkm+syGmIAYq/0L3EFvpZ38uq7z8KzwFFQHI3sBA34bNEr5zpU5OMWg';
// This test passes because it does not throw an exception.
assert.strictEqual(1, 1);

const pk = await new Promise((resolve, reject) => {
kbpgp.KeyManager.import_from_armored_pgp(
Expand All @@ -34,33 +32,134 @@ describe('decrypt', () => {
const ring = new kbpgp.keyring.KeyRing();
ring.add_key_manager(pk);

const startBlock = '-----BEGIN PGP MESSAGE-----\n\n';
const endBlock = '\n-----END PGP MESSAGE-----';
let armoredMessage = fixMessage(msg);

let armoredMessage = msg.trim();
if (!armoredMessage.startsWith(startBlock)) {
armoredMessage = `${startBlock}${armoredMessage}`;
}
if (!armoredMessage.endsWith(endBlock)) {
armoredMessage = `${armoredMessage}${endBlock}`;
}
const data = await new Promise((resolve, reject) => {
kbpgp.unbox(
{
keyfetch: ring,
armored: armoredMessage,
},
(err, literals) => {
if (err) {
reject(err);
} else {
resolve(literals[0].toString());
}
},
);
});

assert.equal(data, '{"o":"abc,def","r":"","v":"123"}');
});

await it('works with pgp 2.4 and ecc', async () => {
const key = await fs.readFile(`${__dirname}/private-pgp-2.4-ecc.pem`, {
encoding: 'utf-8',
});

const pk = await new Promise((resolve, reject) => {
kbpgp.KeyManager.import_from_armored_pgp(
{
armored: key.replace(/\n[ \t]+/g, '\n'),
},
(err, pk) => {
if (err) {
reject(err);
} else {
resolve(pk);
}
},
);
});

assert.ok(pk);

const ring = new kbpgp.keyring.KeyRing();
ring.add_key_manager(pk);

const msg = await fs.readFile(`${__dirname}/test-ecc.txt.asc`, {
encoding: 'utf-8',
});

const data = await new Promise((resolve, reject) => {
kbpgp.unbox(
{
keyfetch: ring,
armored: armoredMessage,
},
(err, literals) => {
if (err) {
reject(err);
} else {
resolve(literals[0].toString());
}
},
);
});

assert.equal(data, '{"o":"abc,def","r":"","v":"123"}');
kbpgp.unbox(
{
keyfetch: ring,
armored: msg,
},
(err, literals) => {
if (err) {
reject(err);
} else {
resolve(literals[0].toString());
}
},
);
});

assert.equal(data.trim(), 'test');
});

await it('works with pgp 2.4 and rsa', async () => {
const key = await fs.readFile(`${__dirname}/private-pgp-2.4-rsa.pem`, {
encoding: 'utf-8',
});

const pk = await new Promise((resolve, reject) => {
kbpgp.KeyManager.import_from_armored_pgp(
{
armored: key.replace(/\n[ \t]+/g, '\n'),
},
(err, pk) => {
if (err) {
reject(err);
} else {
resolve(pk);
}
},
);
});

assert.ok(pk);

const ring = new kbpgp.keyring.KeyRing();
ring.add_key_manager(pk);

const msg = await fs.readFile(`${__dirname}/test-rsa.txt.asc`, {
encoding: 'utf-8',
});

const data = await new Promise((resolve, reject) => {
kbpgp.unbox(
{
keyfetch: ring,
armored: msg,
},
(err, literals) => {
if (err) {
reject(err);
} else {
resolve(literals[0].toString());
}
},
);
});

assert.equal(data.trim(), 'test');
});
});

function fixMessage(msg) {
const startBlock = '-----BEGIN PGP MESSAGE-----\n\n';
const endBlock = '\n-----END PGP MESSAGE-----';

let armoredMessage = msg.trim();
if (!armoredMessage.startsWith(startBlock)) {
armoredMessage = `${startBlock}${armoredMessage}`;
}
if (!armoredMessage.endsWith(endBlock)) {
armoredMessage = `${armoredMessage}${endBlock}`;
}
return armoredMessage;
}
15 changes: 15 additions & 0 deletions test/e2e/private-pgp-2.4-ecc.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
-----BEGIN PGP PRIVATE KEY BLOCK-----

lFgEZkHosxYJKwYBBAHaRw8BAQdACDorvXAt65FWfHc6//9cPVsjZIjyh15lJkWH
01pChhMAAQC5Q1iaWv+VukyqmHVnhvQSl5HZ6gMprEc17Jj1/LqzBRGztCFSZW5v
dmF0ZSBUZXN0IDxyZW5vdmF0ZUB0ZXN0LmNvbT6IkAQTFgoAOAIbAwIXgBYhBFAk
o7Sd8lBzvpojYY2H2PbYV2ZTBQJmQgCVBQsJCAcCBhUKCQgLAgQWAgMBAh4FAAoJ
EI2H2PbYV2ZT+boBAJs6O0bkc4MHZIQOfBMoYztQdjCg7QXW8gE1JrQza1+tAQDz
spCMPW3Vw+HPLbF4oWGA/9I8c+tkHVbOh830nvoPBpxdBGZB6LMSCisGAQQBl1UB
BQEBB0Di/1dxEeFhbC9thxGGHFk3rLEwQatU7BpI5oHU+QqdNgMBCAcAAP99h1Zs
8A/78OeSgFBxwwikeACJKxDee318mmDwz6dHmBGliHgEGBYKACAWIQRQJKO0nfJQ
c76aI2GNh9j22FdmUwUCZkHoswIbDAAKCRCNh9j22FdmUy3gAQCId3kAMcUlgM1t
shMpaHnDT7XawogHokJGodarICmolQEAkN8avuZx/8qPqy2BAYKtP0YBFD7fQK9P
hqvy8MDrPgc=
=HTwg
-----END PGP PRIVATE KEY BLOCK-----
81 changes: 81 additions & 0 deletions test/e2e/private-pgp-2.4-rsa.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
-----BEGIN PGP PRIVATE KEY BLOCK-----

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
=YlgA
-----END PGP PRIVATE KEY BLOCK-----
8 changes: 8 additions & 0 deletions test/e2e/test-ecc.txt.asc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
-----BEGIN PGP MESSAGE-----

hF4DYQZIAg0KuBYSAQdA5NiDH8ye4MUHCKeJDoL7PfCxMfCAOM69tvjAORxI7Ccw
YakY7m8uDpHiy2Qh7mmiq9qjB0jQ4AuIJLeZkXyEPjovDxoIDnCDtk5AErJ2iZH/
0kcBPxloJCarHSZAmbzHxYVhsMI+Aeu4vkIZ7GXBgrCABMXgbb1cYHSZYRPkIWZx
4ELxhnqDKFSXCgzsRoFzDerg+1+cTwwtGA==
=iVPA
-----END PGP MESSAGE-----
14 changes: 14 additions & 0 deletions test/e2e/test-rsa.txt.asc
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
-----BEGIN PGP MESSAGE-----

hQGMA7GRGhJAkEOcAQwApwgvMZ92PlQP1vD4xqpKMr6mIaJnTv/lsfZBc9ON0riH
Jx9/iBKVqOiZtB7VLLXHhj0rftAjUlXZ5WFMDV8FNeoIUij6wHAWs91lF1wbMCWU
A399O/+4fCeaZdPtMvJFRowzXarowit9a6X7KKZbSkYJrscxge7RAFT2H/PEaFM/
3xqMH43YRpuOX1f2hx1/ocMzVCo/JnCS+fLyw2KtGaLxXtF+2Cb/aBrJBarpefac
IbqLFANiiJY97SLsA83fi/B8ao4nls61fDtlbHPzOIm8fyy+H89t3z5mHdMww5zu
FXgYd8Bj1NsxB70NxWuHZhrDX3jZltO8f+auzrbGrrY7Vuak0jk78c3cX/JmnaiC
e4+hNzVXHVrTDdmHS9R9s347CtAK9KVgsUfrdOPtdjdCDqMca7enYEDkd1TGY6b5
Jzjst4p0K1hXVqK/CgrchGk6VgqxwDNyl6PHWsouJRJc950XItI46S+iFRvzxGq0
cgTmLhZbYreo1CUiCAHh0kcBtMdEJAISribQrx6Mr9BmiAfzuto8k+cxkxu08jQv
jc8irkrbJyOtkkJaP60BGs1lk0S6fXGCOeI3G/EQh8eaSIMBaBovfA==
=WJoj
-----END PGP MESSAGE-----

0 comments on commit 784f55c

Please sign in to comment.