Я получаю подпись от внешней службы, которую я вызываю на основе строки SHA256 в кодировке Base64 из моего содержимого PDF-файла. В ответ я получаю подпись.
Это мой код:
Код: Выделить всё
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.interactive.digitalsignature.ExternalSigningSupport;
import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature;
import org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureOptions;
public byte[] directSign(UUID docId, String base64Document) throws IOException {
byte[] documentData = documentContentService.decodeBase64(base64Document);
try (PDDocument document = Loader.loadPDF(documentData); ByteArrayOutputStream output = new ByteArrayOutputStream()) {
PDSignature signature = createSignatureTemplate();
SignatureOptions signatureOptions = createSignatureOptions();
document.addSignature(signature, signatureOptions);
ExternalSigningSupport externalSigning = document.saveIncrementalForExternalSigning(output);
byte[] contentToSign = externalSigning.getContent().readAllBytes();
String documentHash = getSHA256(contentToSign);
// calling the external signature service, and receiving a PKCS7 signature base64 encoded
Map hashesSigned = signDocumentHashes(new DocumentHashBatch(Map.of(docId.toString(), documentHash), ZonedDateTime.now()));
// The external service returns base64 encoded PKCS#7 signature
byte[] cmsSignatureBytes = Base64.getDecoder().decode(hashesSigned.get(docId.toString()));
// Set the CMS signature bytes directly
externalSigning.setSignature(cmsSignatureBytes);
output.flush();
return output.toByteArray();
}
}
Буду очень признателен, если кто-нибудь сможет указать мне правильное направление. Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/798 ... or-altered
Мобильная версия