UNPKG

@bynorth/focals-client-js

Version:

Client library used to integrate with the Focals Developer APIs

110 lines (87 loc) 3.74 kB
'use strict'; const crypto = require('crypto'); const config = require('../lib/util/config.js'); const SignatureService = require('../lib/signature.service.js'); describe('SignatureService', () => { context('verifySignature', () => { before('init the config', () => { config.init({ signingVersion: 'signingVersion', sharedSecret: 'sharedSecret' }); }); it('returns true for a valid signature with timestamp in milliseconds', () => { const timestamp = Date.now(); const computedHmac = crypto.createHmac('sha256', 'sharedSecret') .update(`signingVersion:${timestamp}:state`) .digest('hex'); const expected = `signingVersion:${computedHmac}`; const valid = SignatureService.verifySignature( 'state', timestamp, expected); valid.should.be.true; }); it('returns true for a valid signature with timestamp in seconds', () => { const timestamp = Date.now() / 1000; const computedHmac = crypto.createHmac('sha256', 'sharedSecret') .update(`signingVersion:${timestamp}:state`) .digest('hex'); const expected = `signingVersion:${computedHmac}`; const valid = SignatureService.verifySignature( 'state', timestamp, expected); valid.should.be.true; }); it('returns false with incorrect timestamp', () => { const timestamp = Date.now(); const computedHmac = crypto.createHmac('sha256', 'sharedSecret') .update(`signingVersion:${timestamp}:state`) .digest('hex'); const expected = `signingVersion:${computedHmac}`; const invalidTimestamp = Date.now() + 1; const valid = SignatureService.verifySignature( 'state', invalidTimestamp, expected); valid.should.be.false; }); it('returns false with incorrect state', () => { const timestamp = Date.now(); const computedHmac = crypto.createHmac('sha256', 'sharedSecret') .update(`signingVersion:${timestamp}:state`) .digest('hex'); const expected = `signingVersion:${computedHmac}`; const valid = SignatureService.verifySignature( 'invalidState', timestamp, expected); valid.should.be.false; }); it('returns false with incorrect shared secret', () => { const timestamp = Date.now(); const computedHmac = crypto.createHmac('sha256', 'invalidSharedSecret') .update(`signingVersion:${timestamp}:state`) .digest('hex'); const expected = `signingVersion:${computedHmac}`; const valid = SignatureService.verifySignature( 'state', timestamp, expected); valid.should.be.false; }); it('returns false with incorrect signing version', () => { const timestamp = Date.now(); const computedHmac = crypto.createHmac('sha256', 'sharedSecret') .update(`invalidSigningVersion:${timestamp}:state`) .digest('hex'); const expected = `signingVersion:${computedHmac}`; const valid = SignatureService.verifySignature( 'state', timestamp, expected); valid.should.be.false; }); }); });