Example usage for org.apache.pdfbox.cos COSName SIG

List of usage examples for org.apache.pdfbox.cos COSName SIG

Introduction

In this page you can find the example usage for org.apache.pdfbox.cos COSName SIG.

Prototype

COSName SIG

To view the source code for org.apache.pdfbox.cos COSName SIG.

Click Source Link

Usage

From source file:ShowSignature.java

License:Apache License

private void showSignature(String[] args) throws IOException, CertificateException {
    if (args.length != 2) {
        usage();//  w ww .  j  a  v  a 2  s . co m
    } else {
        String password = args[0];
        String infile = args[1];
        PDDocument document = null;
        try {
            document = PDDocument.load(new File(infile), password);
            if (!document.isEncrypted()) {
                System.err.println("Warning: Document is not encrypted.");
            }

            COSDictionary trailer = document.getDocument().getTrailer();
            COSDictionary root = (COSDictionary) trailer.getDictionaryObject(COSName.ROOT);
            COSDictionary acroForm = (COSDictionary) root.getDictionaryObject(COSName.ACRO_FORM);
            COSArray fields = (COSArray) acroForm.getDictionaryObject(COSName.FIELDS);
            for (int i = 0; i < fields.size(); i++) {
                COSDictionary field = (COSDictionary) fields.getObject(i);
                COSName type = field.getCOSName(COSName.FT);
                if (COSName.SIG.equals(type)) {
                    COSDictionary cert = (COSDictionary) field.getDictionaryObject(COSName.V);
                    if (cert != null) {
                        System.out.println("Certificate found");
                        System.out.println("Name=" + cert.getDictionaryObject(COSName.NAME));
                        System.out.println("Modified=" + cert.getDictionaryObject(COSName.M));
                        COSName subFilter = (COSName) cert.getDictionaryObject(COSName.SUB_FILTER);
                        if (subFilter != null) {
                            if (subFilter.getName().equals("adbe.x509.rsa_sha1")) {
                                COSString certString = (COSString) cert
                                        .getDictionaryObject(COSName.getPDFName("Cert"));
                                byte[] certData = certString.getBytes();
                                CertificateFactory factory = CertificateFactory.getInstance("X.509");
                                ByteArrayInputStream certStream = new ByteArrayInputStream(certData);
                                Collection<? extends Certificate> certs = factory
                                        .generateCertificates(certStream);
                                System.out.println("certs=" + certs);
                            } else if (subFilter.getName().equals("adbe.pkcs7.sha1")) {
                                COSString certString = (COSString) cert.getDictionaryObject(COSName.CONTENTS);
                                byte[] certData = certString.getBytes();
                                CertificateFactory factory = CertificateFactory.getInstance("X.509");
                                ByteArrayInputStream certStream = new ByteArrayInputStream(certData);
                                Collection<? extends Certificate> certs = factory
                                        .generateCertificates(certStream);
                                System.out.println("certs=" + certs);
                            } else {
                                System.err.println("Unknown certificate type:" + subFilter);
                            }
                        } else {
                            throw new IOException("Missing subfilter for cert dictionary");
                        }
                    } else {
                        System.out.println("Signature found, but no certificate");
                    }
                }
            }
        } finally {
            if (document != null) {
                document.close();
            }
        }
    }
}

From source file:com.aaasec.sigserv.csspsupport.pdfbox.modifications.CsCOSWriter.java

License:Apache License

/**
 * This will write a COS object./*from  w  ww  . j  a va2 s .  c om*/
 *
 * @param obj The object to write.
 *
 * @throws COSVisitorException If there is an error visiting objects.
 */
public void doWriteObject(COSBase obj) throws COSVisitorException {
    try {
        writtenObjects.add(obj);
        if (obj instanceof COSDictionary) {
            COSDictionary dict = (COSDictionary) obj;
            COSName item = (COSName) dict.getItem(COSName.TYPE);
            if (COSName.SIG.equals(item) || COSName.DOC_TIME_STAMP.equals(item)) {
                reachedSignature = true;
            }
        }

        // find the physical reference
        currentObjectKey = getObjectKey(obj);
        // add a x ref entry
        addXRefEntry(new COSWriterXRefEntry(getStandardOutput().getPos(), obj, currentObjectKey));
        // write the object
        getStandardOutput().write(String.valueOf(currentObjectKey.getNumber()).getBytes("ISO-8859-1"));
        getStandardOutput().write(SPACE);
        getStandardOutput().write(String.valueOf(currentObjectKey.getGeneration()).getBytes("ISO-8859-1"));
        getStandardOutput().write(SPACE);
        getStandardOutput().write(OBJ);
        getStandardOutput().writeEOL();
        obj.accept(this);
        getStandardOutput().writeEOL();
        getStandardOutput().write(ENDOBJ);
        getStandardOutput().writeEOL();
    } catch (IOException e) {
        throw new COSVisitorException(e);
    }
}

From source file:eu.europa.esig.dss.pdf.pdfbox.PdfBoxSignatureService.java

License:Open Source License

private PDSignature createSignatureDictionary(final PAdESSignatureParameters parameters) {

    final PDSignature signature = new PDSignature();
    signature.setType(getType());/*www  .j a va2  s . c o m*/
    // signature.setName(String.format("SD-DSS Signature %s", parameters.getDeterministicId()));
    Date date = parameters.bLevel().getSigningDate();
    String encodedDate = " " + Hex
            .encodeHexString(DSSUtils.digest(DigestAlgorithm.SHA1, Long.toString(date.getTime()).getBytes()));
    CertificateToken token = parameters.getSigningCertificate();
    if (token == null) {
        signature.setName("Unknown signer" + encodedDate);
    } else {
        if (parameters.getSigningCertificate().getSubjectShortName() != null) {
            String shortName = parameters.getSigningCertificate().getSubjectShortName() + encodedDate;
            signature.setName(shortName);
        } else {
            signature.setName("Unknown signer" + encodedDate);
        }
    }

    signature.setFilter(PDSignature.FILTER_ADOBE_PPKLITE); // default filter
    // sub-filter for basic and PAdES Part 2 signatures
    signature.setSubFilter(getSubFilter());

    if (COSName.SIG.equals(getType())) {
        if (StringUtils.isNotEmpty(parameters.getContactInfo())) {
            signature.setContactInfo(parameters.getContactInfo());
        }

        if (StringUtils.isNotEmpty(parameters.getLocation())) {
            signature.setLocation(parameters.getLocation());
        }

        if (StringUtils.isNotEmpty(parameters.getReason())) {
            signature.setReason(parameters.getReason());
        }
    }

    // the signing date, needed for valid signature
    final Calendar cal = Calendar.getInstance();
    final Date signingDate = parameters.bLevel().getSigningDate();
    cal.setTime(signingDate);
    signature.setSignDate(cal);
    return signature;
}

From source file:eu.europa.esig.dss.pdf.pdfbox.PdfBoxSignatureService.java

License:Open Source License

protected COSName getType() {
    return COSName.SIG;
}