keeweb/app/scripts/util/signature-verifier.js

40 lines
1.5 KiB
JavaScript
Raw Normal View History

2017-05-13 22:36:07 +02:00
const Logger = require('./logger');
const publicKey = require('raw-loader!../../resources/public-key.pem');
const kdbxweb = require('kdbxweb');
const SignatureVerifier = {
logger: new Logger('signature-verifier'),
verify(data, signature) {
return new Promise((resolve, reject) => {
try {
let pk = publicKey.match(/-+BEGIN PUBLIC KEY-+([\s\S]+?)-+END PUBLIC KEY-+/)[1];
pk = pk.replace(/\s+/g, '');
pk = kdbxweb.ByteUtils.base64ToBytes(pk);
crypto.subtle.importKey('spki', pk,
{name: 'RSASSA-PKCS1-v1_5', hash: {name: 'SHA-256'}},
false, ['verify']
).then(cryptoKey => {
crypto.subtle.verify({name: 'RSASSA-PKCS1-v1_5'}, cryptoKey,
kdbxweb.ByteUtils.arrayToBuffer(signature),
kdbxweb.ByteUtils.arrayToBuffer(data)
).then(isValid => {
resolve(isValid);
}).catch(e => {
this.logger.error('Verify error', e);
reject();
});
}).catch(e => {
this.logger.error('ImportKey error', e);
reject();
});
} catch (e) {
this.logger.error('Signature verification error', e);
reject();
}
});
}
};
module.exports = SignatureVerifier;