Прикрепить XML-DSIG к PDF - PullRequest
       12

Прикрепить XML-DSIG к PDF

0 голосов
/ 11 сентября 2018

Я пытаюсь внедрить BankID (шведский провайдер eID) для подписи файлов PDF в node.js. У них есть API для аутентификации пользователей и подписи файлов. Ключ должен получить файл PAdES в конце процесса. Сначала я изменяю PDF и вставляю нули заполнителей, которые будут заменены шестнадцатеричным значением цифровой подписи, например:

const addSignaturePlaceholder = ({pdf, reason, signatureLength = 8192}) => {
    const signature = pdf.ref({
        Type: 'Sig',
        Filter: 'Adobe.PPKLite',
        SubFilter: 'adbe.pkcs7.detached',
        ByteRange: [
            0,
            DEFAULT_BYTE_RANGE_PLACEHOLDER,
            DEFAULT_BYTE_RANGE_PLACEHOLDER,
            DEFAULT_BYTE_RANGE_PLACEHOLDER,
        ],
        Contents: Buffer.from(String.fromCharCode(0).repeat(signatureLength)),
        Reason: new String(reason),
        M: new Date(),
    });

    return signature;
};    

Затем я отправляю этот PDF - преобразованный в байты, а Base-64 - в код BankID. После завершения процесса подписи BankID возвращает XML-DSig.

Мой вопрос: что мне делать дальше? Можно ли прикрепить подпись к PDF напрямую?

Вот сокращенный ответ BankID:

 <?xml version="1.0" encoding="UTF-8"?>
 <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
  <SignedInfo>
     <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
     <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
     <Reference Type="http://www.bankid.com/signature/v1.0.0/types" URI="#bidSignedData">
        <Transforms>
           <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
        </Transforms>
        <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
        <DigestValue>LCJtWcNyKWs03NkV0mh2OHB4/9bX1kS8mWLdWIDNoHk=</DigestValue>
     </Reference>
     <Reference URI="#bidKeyInfo">
        <Transforms>
           <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
        </Transforms>
        <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
        <DigestValue>base64digest</DigestValue>
     </Reference>
  </SignedInfo>
  <SignatureValue>sigbase64</SignatureValue>
  <KeyInfo Id="bidKeyInfo">
     <X509Data>
        <X509Certificate>signercertinBase64</X509Certificate>
        <X509Certificate>intermediateCRinBase64</X509Certificate>
        <X509Certificate>intermediate2</X509Certificate>
     </X509Data>
  </KeyInfo>
  <Object>
     <bankIdSignedData xmlns="http://www.bankid.com/signature/v1.0.0/types" Id="bidSignedData">
        <usrVisibleData charset="UTF-8" visible="wysiwys">Q29udHJhY3QgYmV0d2VlbiBBIGFuZCBC</usrVisibleData>
        <usrNonVisibleData>encodedPDF</usrNonVisibleData>
        <srvInfo>
           <name>...</name>
           <nonce>...</nonce>
           <displayName>...</displayName>
        </srvInfo>
        <clientInfo>
           <funcId>Signing</funcId>
           <version>...</version>
        </clientInfo>
     </bankIdSignedData>
  </Object>

...