UNPKG

lightning

Version:
100 lines (90 loc) 2.76 kB
const {rejects} = require('node:assert').strict; const {strictEqual} = require('node:assert').strict; const test = require('node:test'); const {diffieHellmanComputeSecret} = require('./../../../'); const makeLnd = (err, res) => { return {signer: {deriveSharedKey: ({}, cbk) => cbk(err, res)}}; }; const makeArgs = ({override}) => { const args = { lnd: makeLnd(null, {shared_key: Buffer.alloc(32)}), partner_public_key: '00', }; Object.keys(override || {}).forEach(key => args[key] = override[key]); return args; }; const tests = [ { args: makeArgs({override: {lnd: undefined}}), description: 'LND is required', error: [400, 'ExpectedAuthenticatedLndToComputeSharedSecret'], }, { args: makeArgs({override: {partner_public_key: undefined}}), description: 'A public key is required', error: [400, 'ExpectedHexEncodedPartnerPublicKey'], }, { args: makeArgs({ override: { lnd: { signer: { deriveSharedKey: ({}, cbk) => cbk({ details: 'unknown service signrpc.Signer', }), }, }, }, }), description: 'Compute secret is not implemented', error: [400, 'ExpectedLndWithSupportForDeriveSharedKey'], }, { args: makeArgs({ override: {lnd: {signer: {deriveSharedKey: ({}, cbk) => cbk('err')}}}, }), description: 'Errors are passed back', error: [503, 'UnexpetedErrorDerivingSharedKey', {err: 'err'}], }, { args: makeArgs({ override: {lnd: {signer: {deriveSharedKey: ({}, cbk) => cbk()}}}, }), description: 'A result is expected', error: [503, 'ExpectedResultOfDeriveSharedKeyRequest'], }, { args: makeArgs({ override: {lnd: {signer: {deriveSharedKey: ({}, cbk) => cbk(null, {})}}}, }), description: 'A shared key is expected', error: [503, 'ExpectedSharedKeyBufferInDeriveKeyResponse'], }, { args: makeArgs({ override: {lnd: {signer: {deriveSharedKey: ({}, cbk) => cbk(null, { shared_key: Buffer.alloc(0)}, )}}}, }), description: 'A shared key with length is expected', error: [503, 'UnexpectedSharedKeyLengthInDeriveKeyResponse'], }, { args: makeArgs({}), description: 'Secret is calculated', expected: { secret: '0000000000000000000000000000000000000000000000000000000000000000', }, }, ]; tests.forEach(({args, description, error, expected}) => { return test(description, async () => { if (!!error) { await rejects(diffieHellmanComputeSecret(args), error, 'Got error'); } else { const {secret} = await diffieHellmanComputeSecret(args); strictEqual(secret.toString('hex'), expected.secret, 'Got secret'); } return; }); });