예제 #1
0
 /**
  * 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());
 }
예제 #2
0
  @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);
  }
예제 #3
0
 private String getDigestOfByteRange() {
   int[] signatureByteRange = pdfSignatureInfo.getSignatureByteRange();
   ByteArrayOutputStream baos = new ByteArrayOutputStream();
   for (int i : signatureByteRange) {
     baos.write(i);
   }
   return DSSUtils.getMD5Digest(baos);
 }
예제 #4
0
  @Override
  public SignatureCryptographicVerification checkSignatureIntegrity() {

    if (signatureCryptographicVerification != null) {
      return signatureCryptographicVerification;
    }
    signatureCryptographicVerification = pdfSignatureInfo.checkIntegrity();
    return signatureCryptographicVerification;
  }
예제 #5
0
 @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;
   }
 }
예제 #6
0
 @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");
 }
예제 #7
0
  @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);
  }
예제 #8
0
 public boolean hasOuterSignatures() {
   return CollectionUtils.isNotEmpty(pdfSignatureInfo.getOuterSignatures());
 }
예제 #9
0
 private boolean hasDSSDictionary() {
   return pdfSignatureInfo.getDssDictionary() != null;
 }
예제 #10
0
 @Override
 public Date getSigningTime() {
   return pdfSignatureInfo.getSigningDate();
 }