@quan-to/chevronlib
Version:
Chevron GPG Library Wrapper for Node.JS
235 lines (233 loc) • 13.9 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
const chevron = require('./index');
const testKey = `-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: GnuPG v2
Comment: Generated by Chevron
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
bBM=
=36ik
-----END PGP PRIVATE KEY BLOCK-----`;
const testKeyPassword = '1234567890';
const testKeyFingerprint = 'CE4503B2947E2202';
const testSignature = `-----BEGIN PGP SIGNATURE-----
wsBcBAABCgAQBQJedt7dCRDORQOylH4iAgAArvYIAMY9G3oQA0ZL7CwZmhjRfu6d
BfNst48oHJ3mSLe1oTATkkiRvJBgXaNg9aFP0rNa5Cx8Hlkhjqp0QYRmPNhKjWhD
L+LpxLasESQeWLVZnDkaz75YHw6UK6TRIsAH7Py/zgiGlNehWx3+0rjkBxEEjJgK
aM5wBDoPi4+1yAf1ZSanypb2fq3Mzy77HKtew+9BCKhC8DE9uXN6PGC4Q/LhgDON
aXS7WqLoIaB9RjvTDHbR4V8rP5pEx5s/GhJHgYAYzcJvhxog3n03GAIW3DiQdbih
h72Ll0XnpYkiiSvwz7UtfeveDSNFUSfeoOKdGsM/8rrZIexHWSJVdUc0I53ITQY=
=K6nc
-----END PGP SIGNATURE-----`;
const testQuantoSignature = `CE4503B2947E2202_SHA512_wsBcBAABCgAQBQJeenXbCRDORQOylH4iAgAAXkIIAC55fwFNQRWTrbTuSId9jsgR/BEyCHYnvb9EpEOzBJT1kRpH1wjzv8tkY1aqChoGO5vta9ksw9eu+iLd3i0jJA7WnqxXfmhmz2gx7sCUlxI+wLvbKEOQbvPljBV+3kgZv7MedHwnfvCTu249HtvWgckOvKMdvFFP8Tmx/LyD+xinl6ikZ9SLY+Jzi51oBKYvCI2ie8okU8qCzl/EJwUJ3T5U2GOL9TgErwJLuIurCTXJbGeC2/A8+XddDFdBzJbdL72o9BVC2/CLunDDuqRNwTHqHxfcGEvgITZup4LG95gOFefyFZL+QIrCEvUUhaFpvQCYvA+oJw5KTASiL25vTEo==uzle`;
const payloadToSign = "HUEBR";
function toBase64(data) {
const buff = Buffer.from(data);
return buff.toString('base64');
}
test('generate key 1024', () => {
expect.assertions(1);
return chevron.generateKey('abcd', 'abcd', 1024).catch((e) => expect(typeof e).toBe('string'));
});
test('generate key 2048', () => {
expect.assertions(1);
return chevron.generateKey('abcd', 'abcd', 2048).then((keyData) => expect(typeof keyData).toBe('string'));
});
test('load key', () => {
expect.assertions(1);
return chevron.loadKey(testKey).then((v) => expect(v).toBe(testKeyFingerprint));
});
test('load key invalid', () => {
expect.assertions(1);
return chevron.loadKey('HUEBR').catch((v) => expect(typeof v).toBe('string'));
});
test('verify signature', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(1);
yield chevron.loadKey(testKey); // Load test key to have public key
return chevron.verifySignature(toBase64(payloadToSign), testSignature).then((res) => expect(res).toBe(true));
}));
test('verify signature invalid base64 payload', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(1);
yield chevron.loadKey(testKey); // Load test key to have public key
return chevron.verifySignature(payloadToSign, testSignature).catch((res) => expect(res).toBe('Expected a base64 encoded data'));
}));
test('verify invalid signature payload', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(1);
yield chevron.loadKey(testKey); // Load test key to have public key
return chevron.verifySignature(toBase64(payloadToSign + 'BLA'), testSignature).then((res) => expect(res).toBe(false));
}));
test('verify invalid signature', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(1);
yield chevron.loadKey(testKey); // Load test key to have public key
return chevron.verifySignature(toBase64(payloadToSign), testSignature.replace("B", "u")).catch((e) => expect(typeof e).toBe('string'));
}));
test('test unlock key', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(1);
yield chevron.loadKey(testKey); // Load test key to have public key
return chevron.unlockKey(testKeyFingerprint, testKeyPassword).then((v) => expect(typeof v).toBe('string'));
}));
test('test unlock key invalid password', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(1);
yield chevron.loadKey(testKey); // Load test key to have public key
return chevron.unlockKey(testKeyFingerprint, testKeyPassword + "balblablalbalb").catch((v) => expect(typeof v).toBe('string'));
}));
test('generate signature', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(3);
yield chevron.loadKey(testKey); // Load test key to have public key
yield chevron.unlockKey(testKeyFingerprint, testKeyPassword); // Unlock key
const signature = yield chevron.signData(toBase64(payloadToSign), testKeyFingerprint);
expect(typeof signature).toBe('string');
expect(signature.indexOf('PGP SIGNATURE')).toBeGreaterThan(-1);
const verification = yield chevron.verifySignature(toBase64(payloadToSign), signature);
expect(verification).toBe(true);
}));
test('generate signature invalid base64 payload', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(1);
yield chevron.loadKey(testKey); // Load test key to have public key
yield chevron.unlockKey(testKeyFingerprint, testKeyPassword); // Unlock key
chevron.signData(payloadToSign, testKeyFingerprint).catch((res) => expect(res).toBe('Expected a base64 encoded data'));
}));
test('test generate signature locked key', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(1);
const key = yield chevron.generateKey('abcd', 'abcd', 2048);
const fp = yield chevron.loadKey(key);
return chevron.signData(toBase64(payloadToSign), fp).catch((e) => expect(typeof e).toBe('string'));
}));
test('check base64', () => {
expect(chevron.isBase64('huebr')).toBe(false);
expect(chevron.isBase64('SFVFQlIK')).toBe(true);
});
test('get public key', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(3);
yield chevron.loadKey(testKey); // Load test key to have public key
const publicKey = chevron.getPublicKey(testKeyFingerprint);
expect(publicKey.length).toBeGreaterThan(0);
const fingerprints = chevron.getKeyFingerprints(publicKey);
expect(fingerprints.length).toBeGreaterThan(0);
expect(fingerprints[0]).toBe(testKeyFingerprint);
}));
test('get public key not exists', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(1);
const getKey = () => chevron.getPublicKey('ABCDDEADBEEF');
expect(getKey).toThrow();
}));
test('verify signature quanto', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(1);
yield chevron.loadKey(testKey); // Load test key to have public key
yield chevron.unlockKey(testKeyFingerprint, testKeyPassword); // Unlock key
const verification = yield chevron.quantoVerifySignature(toBase64(payloadToSign), testQuantoSignature);
expect(verification).toBe(true);
}));
test('verify signature quanto invalid base64', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(1);
yield chevron.loadKey(testKey); // Load test key to have public key
yield chevron.unlockKey(testKeyFingerprint, testKeyPassword); // Unlock key
return chevron.quantoVerifySignature(payloadToSign, testQuantoSignature).catch((res) => expect(res).toBe('Expected a base64 encoded data'));
}));
test('verify signature quanto invalid payload', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(1);
yield chevron.loadKey(testKey); // Load test key to have public key
yield chevron.unlockKey(testKeyFingerprint, testKeyPassword); // Unlock key
return chevron.quantoVerifySignature(toBase64(payloadToSign + "ABCD"), testQuantoSignature).then((res) => expect(res).toBe(false));
}));
test('verify signature quanto invalid signature', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(1);
yield chevron.loadKey(testKey); // Load test key to have public key
yield chevron.unlockKey(testKeyFingerprint, testKeyPassword); // Unlock key
return chevron.quantoVerifySignature(toBase64(payloadToSign), "ABCD").catch((res) => expect(typeof res).toBe('string'));
}));
test('sign quanto', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(4);
yield chevron.loadKey(testKey); // Load test key to have public key
yield chevron.unlockKey(testKeyFingerprint, testKeyPassword); // Unlock key
const signature = yield chevron.quantoSignData(toBase64(payloadToSign), testKeyFingerprint);
expect(typeof signature).toBe('string');
expect(signature.indexOf('PGP SIGNATURE')).toBe(-1);
expect(signature.indexOf(testKeyFingerprint)).toBeGreaterThan(-1);
const verification = yield chevron.quantoVerifySignature(toBase64(payloadToSign), signature);
expect(verification).toBe(true);
}));
test('sign quanto', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(1);
yield chevron.loadKey(testKey); // Load test key to have public key
yield chevron.unlockKey(testKeyFingerprint, testKeyPassword); // Unlock key
chevron.quantoSignData(payloadToSign, testKeyFingerprint).catch((res) => expect(res).toBe('Expected a base64 encoded data'));
}));
test('sign quanto invalid key', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(1);
return chevron.quantoSignData(toBase64(payloadToSign), "DEADBEEF1234").catch((res) => expect(typeof res).toBe('string'));
}));
test('change key password', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(1);
const tmpPass = '0912345aseuahse';
const key = yield chevron.generateKey(tmpPass, tmpPass, 2048);
const newKey = yield chevron.changeKeyPassword(key, tmpPass, testKeyPassword);
const fp = yield chevron.loadKey(newKey);
return chevron.unlockKey(fp, testKeyPassword).then((res) => expect(typeof res).toBe("string"));
}));
test('change key password invalid', () => __awaiter(void 0, void 0, void 0, function* () {
expect.assertions(1);
const tmpPass = '0912345aseuahse';
const key = yield chevron.generateKey(tmpPass, tmpPass, 2048);
return chevron.changeKeyPassword(key, testKeyPassword, tmpPass).catch((res) => expect(typeof res).toBe("string"));
}));
//# sourceMappingURL=index.test.js.map