@ascold2013

Где размещать цифровую подпись в PDF (openpgp.js)?

Здравствуйте!
Реализовываю цифровую подпись 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 файле - как их друг от друга сделать независимыми?
Какой тут механизм? Куда сигнатуру поместить?
  • Вопрос задан
  • 293 просмотра
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
По стандарту PDF цифровая подпись хранится в специальной структуре в дереве самого документа.
Библиотека TCPDF имеет метод setSignature() для добавления подписи в PDF (пример).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы