/** * The default constructor for PAdESSignature. * * @param document * @param pdfSignatureInfo * @param certPool * @throws DSSException */ protected PAdESSignature( final DSSDocument document, final PdfSignatureInfo pdfSignatureInfo, final CertificatePool certPool) throws DSSException { super(certPool); this.document = document; this.dssDictionary = pdfSignatureInfo.getDssDictionary(); this.cadesSignature = pdfSignatureInfo.getCades(); this.cadesSignatureTimestamps = cadesSignature.getSignatureTimestamps(); this.pdfSignatureInfo = pdfSignatureInfo; cadesSignature.setPadesSigningTime(getSigningTime()); }
@Override public List<TimestampToken> getArchiveTimestamps() { final List<TimestampToken> archiveTimestampTokenList = new ArrayList<TimestampToken>(); final List<String> timestampedTimestamps = new ArrayList<String>(); final Set<PdfSignatureOrDocTimestampInfo> outerSignatures = pdfSignatureInfo.getOuterSignatures(); usedCertificatesDigestAlgorithms.add(DigestAlgorithm.SHA1); for (final PdfSignatureOrDocTimestampInfo outerSignature : outerSignatures) { if (outerSignature.isTimestamp()) { PdfDocTimestampInfo pdfBoxTimestampInfo = (PdfDocTimestampInfo) outerSignature; // return this timestamp if it's an archive timestamp final TimestampToken timestampToken = pdfBoxTimestampInfo.getTimestampToken(); if (timestampToken.getTimeStampType() == TimestampType.ARCHIVE_TIMESTAMP) { final List<TimestampReference> references = cadesSignature.getSignatureTimestampedReferences(); for (final String timestampId : timestampedTimestamps) { final TimestampReference signatureReference_ = new TimestampReference(timestampId); references.add(signatureReference_); } final List<CertificateToken> certificates = getCertificates(); for (final CertificateToken certificate : certificates) { references.add(createCertificateTimestampReference(certificate)); } timestampToken.setTimestampedReferences(references); archiveTimestampTokenList.add(timestampToken); } timestampedTimestamps.add(String.valueOf(timestampToken.getDSSId())); } } return Collections.unmodifiableList(archiveTimestampTokenList); }
private String getDigestOfByteRange() { int[] signatureByteRange = pdfSignatureInfo.getSignatureByteRange(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); for (int i : signatureByteRange) { baos.write(i); } return DSSUtils.getMD5Digest(baos); }
@Override public SignatureCryptographicVerification checkSignatureIntegrity() { if (signatureCryptographicVerification != null) { return signatureCryptographicVerification; } signatureCryptographicVerification = pdfSignatureInfo.checkIntegrity(); return signatureCryptographicVerification; }
@Override public SignatureProductionPlace getSignatureProductionPlace() { String location = pdfSignatureInfo.getLocation(); if (StringUtils.isBlank(location)) { return cadesSignature.getSignatureProductionPlace(); } else { SignatureProductionPlace signatureProductionPlace = new SignatureProductionPlace(); signatureProductionPlace.setCountryName(location); return signatureProductionPlace; } }
@Override public byte[] getArchiveTimestampData( TimestampToken timestampToken, String canonicalizationMethod) { for (final PdfSignatureOrDocTimestampInfo signatureInfo : pdfSignatureInfo.getOuterSignatures()) { if (signatureInfo instanceof PdfDocTimestampInfo) { PdfDocTimestampInfo pdfTimestampInfo = (PdfDocTimestampInfo) signatureInfo; if (pdfTimestampInfo.getTimestampToken().equals(timestampToken)) { final byte[] signedDocumentBytes = pdfTimestampInfo.getSignedDocumentBytes(); return signedDocumentBytes; } } } throw new DSSException("Timestamp Data not found"); }
@Override public List<TimestampToken> getSignatureTimestamps() { final List<TimestampToken> result = new ArrayList<TimestampToken>(); result.addAll(cadesSignatureTimestamps); final Set<PdfSignatureOrDocTimestampInfo> outerSignatures = pdfSignatureInfo.getOuterSignatures(); for (final PdfSignatureOrDocTimestampInfo outerSignature : outerSignatures) { if (outerSignature.isTimestamp() && (outerSignature instanceof PdfDocTimestampInfo)) { final PdfDocTimestampInfo pdfBoxTimestampInfo = (PdfDocTimestampInfo) outerSignature; // do not return this timestamp if it's an archive timestamp final TimestampToken timestampToken = pdfBoxTimestampInfo.getTimestampToken(); if (timestampToken.getTimeStampType() == TimestampType.SIGNATURE_TIMESTAMP) { timestampToken.setTimestampedReferences( cadesSignature.getSignatureTimestampedReferences()); result.add(timestampToken); } } } return Collections.unmodifiableList(result); }
public boolean hasOuterSignatures() { return CollectionUtils.isNotEmpty(pdfSignatureInfo.getOuterSignatures()); }
private boolean hasDSSDictionary() { return pdfSignatureInfo.getDssDictionary() != null; }
@Override public Date getSigningTime() { return pdfSignatureInfo.getSigningDate(); }