keeweb/build/tasks/grunt-sign-archive.js

29 lines
1.1 KiB
JavaScript
Raw Normal View History

2020-06-01 16:53:51 +02:00
module.exports = function (grunt) {
grunt.registerMultiTask('sign-archive', 'Signs archive with a private key', function () {
2019-01-07 18:33:21 +01:00
const done = this.async();
const fs = require('fs');
const sign = require('../util/sign');
const file = fs.readFileSync(this.options().file);
const ix = file.toString('binary').lastIndexOf(this.options().signature);
if (ix < 0) {
grunt.warn('Signature placeholder not found');
return;
}
const data = file.slice(0, ix);
2020-06-01 16:53:51 +02:00
sign(grunt, data).then((signature) => {
2019-01-07 18:33:21 +01:00
signature = Buffer.from(signature.toString('hex'), 'binary');
2019-08-18 08:05:38 +02:00
if (
signature.byteLength !== Buffer.from(this.options().signature, 'binary').byteLength
) {
2019-01-07 18:33:21 +01:00
grunt.warn('Bad signature length');
return;
}
for (let i = 0; i < signature.byteLength; i++) {
file[ix + i] = signature[i];
}
fs.writeFileSync(this.options().file, file);
done();
});
});
};