mirror of https://github.com/keeweb/keeweb.git
40 lines
1.5 KiB
JavaScript
40 lines
1.5 KiB
JavaScript
|
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;
|