Здравствуйте!
Реализовываю цифровую подпись pdf файлов, с помощью openpgp.js.
Вопрос в чем - как/где разместить сигнатуру, чтобы файл сам не повредился?
Если сделать прямо:
const file = fs.readFileSync('./testdoc.pdf', 'utf-8');
let privkey = fs.readFileSync('./private1.key', 'utf-8'); //encrypted private key
let passphrase = 'secret'; //what the privKey is encrypted with
const privKeyObj = openpgp.key.readArmored(privkey).keys[0];
privKeyObj.decrypt(passphrase);
openpgp.sign({
data: file, // input as String (or Uint8Array)
privateKeys: privKeyObj, // for signing
//detached: true,
})
.then(signed => {
//console.log(signed.signature);
fs.writeFileSync('./testdoc.pdf', signed.data);
});
То после подписи файл станет поврежденным, тк в начале появится заголовок:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
%PDF-1.3
%����
4 0 obj
<<
/Type /Page
Если же сделать detached: true и записать сигнатуру в отдельный файл (что не очень хорошо для меня)
То верификация не проходит:
var message = openpgp.message.readSignedContent(file, sig); //file - исходный файл, без подписи, sig - файл с сигнатурой, в кодировке utf-8
var result = message.verify(openpgp.key.readArmored(pubkey).keys); // result.valid=false всегда
+ подписей может быть не одна а много на 1 файле - как их друг от друга сделать независимыми?
Какой тут механизм? Куда сигнатуру поместить?