Exemplo n.º 1
0
  // TODO concluir e validar a verifica��o de PDFs
  public String verify(final IVFile pdf) {
    // Certificados adicionados localmente
    KeyStore kall = PdfPKCS7.loadCacertsKeyStore();

    StringBuffer sb = new StringBuffer();
    final String nl = System.getProperty("line.separator"); // $NON-NLS-1$
    InputStream fin = null;
    try {
      boolean second = false;
      PdfReader reader = new PdfReader(fin = pdf.getInputStream());
      AcroFields af = reader.getAcroFields();
      ArrayList<?> names = af.getSignatureNames();
      if (names.isEmpty()) return Messages.getString("PDFSignatureImpl.9"); // $NON-NLS-1$
      for (Iterator<?> iter = names.iterator(); iter.hasNext(); ) {
        if (second) {
          sb.append(nl).append("  ======  ").append(nl).append(nl); // $NON-NLS-1$
        }
        String name = (String) iter.next();
        sb.append(Messages.getString("PDFSignatureImpl.11")).append(name).append(nl); // $NON-NLS-1$
        sb.append(Messages.getString("PDFSignatureImpl.12"))
            .append(
                af.signatureCoversWholeDocument(name)
                    ? Messages.getString("PDFSignatureImpl.13")
                    : Messages.getString("PDFSignatureImpl.14"))
            .append(nl); // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
        sb.append(Messages.getString("PDFSignatureImpl.15"))
            .append(af.getRevision(name))
            .append(Messages.getString("PDFSignatureImpl.16"))
            .append(af.getTotalRevisions())
            .append(nl); // $NON-NLS-1$ //$NON-NLS-2$

        PdfPKCS7 pk = af.verifySignature(name);
        Calendar cal = pk.getSignDate();
        Certificate pkc[] = pk.getCertificates();
        sb.append(Messages.getString("PDFSignatureImpl.17"))
            .append(PdfPKCS7.getSubjectFields(pk.getSigningCertificate()))
            .append(nl); // $NON-NLS-1$
        sb.append(Messages.getString("PDFSignatureImpl.18"))
            .append(
                !pk.verify()
                    ? Messages.getString("PDFSignatureImpl.19")
                    : Messages.getString("PDFSignatureImpl.20"))
            .append(nl); // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
        Object fails[] = PdfPKCS7.verifyCertificates(pkc, kall, null, cal);
        if (fails == null)
          sb.append(Messages.getString("PDFSignatureImpl.21")).append(nl); // $NON-NLS-1$
        else
          sb.append(Messages.getString("PDFSignatureImpl.22"))
              .append(nl); // : " + fails[1]); //$NON-NLS-1$
      }
    } catch (Exception e) {
      log.error("error verifying file", e); // $NON-NLS-1$
      return Messages.getString("PDFSignatureImpl.24"); // $NON-NLS-1$
    } finally {
      try {
        if (fin != null) {
          fin.close();
        }
      } catch (IOException e) {
      }
    }
    return sb.toString();
  }