package gov.pr.celepar.teste;
/*
Este programa � licenciado de acordo com a
LPG-AP (LICEN�A P�BLICA GERAL PARA PROGRAMAS DE COMPUTADOR DA ADMINISTRA��O P�BLICA),
vers�o 1.1 ou qualquer vers�o posterior.
A LPG-AP deve acompanhar todas PUBLICA��ES, DISTRIBUI��ES e REPRODU��ES deste Programa.
Caso uma c�pia da LPG-AP n�o esteja dispon�vel junto com este Programa,
voc� pode contatar o LICENCIANTE ou ent�o acessar diretamente:
http://www.celepar.pr.gov.br/licenca/LPG-AP.pdf
Para poder USAR, PUBLICAR, DISTRIBUIR, REPRODUZIR ou ALTERAR este Programa
� preciso estar de acordo com os termos da LPG-AP
*/
import gov.pr.celepar.tabeliao.core.TabeliaoAssinaturaEnvelopedXML;
import gov.pr.celepar.tabeliao.core.TabeliaoCertificate;
import gov.pr.celepar.tabeliao.core.validacao.TabeliaoResultadoValidacao;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class ValidarXMLEnveloped {
final static String DIRETORIO = "/home/esaito/arquivosXML_Assinatura/";
//final static String DIRETORIO = "/home/esaito/arquivosXML_Assinatura/assinadosWeb/";
//final static String DIRETORIO = "/home/esaito/workspace/exercicios/exercicios/assinaturaXML/";
public static void main(String[] args) {
//Byte[] arrayAss;
//Document docAss;
//Document newDocAss;
String fileName = "NfeEmLote.xml";
//"nota-cert-revogado.xml";
//"certificado_vencido.xml";
//"copacol.xml";;
//"NotaDeCompra_Itens_F_Contra_E.xml";
//"PessoaJuridicaXml_borracheiro.xml";
//"lote_33712_PR_alt.xml";
//"nota_erro_cnpj.xml";
//"nota-cert-revogado.xml";
//"nota_certisign_alt.xml";
//nfe-globoaves-loterecepcao.xml
//"NotaDeCompra_Itens_E_Vend_F.xml";
//"nfe_serasa.xml";
try {
//InputStream iS = new FileInputStream(DIRETORIO + fileName);
//String texto = convertStreamToString(iS);
//docAss = XmlSigUtil.carregarArquivoXML(iS);
//
//inputStreamAsString(iS);
//System.out.println(texto);
//newDocAss = revalidaDocument(docAss);
TabeliaoAssinaturaEnvelopedXML assinaturaEnvelopedXML;
List<TabeliaoResultadoValidacao> resultados = new ArrayList<TabeliaoResultadoValidacao>();
List<TabeliaoCertificate> certificados = new ArrayList<TabeliaoCertificate>();
assinaturaEnvelopedXML = new TabeliaoAssinaturaEnvelopedXML(new FileInputStream(DIRETORIO + fileName));
assinaturaEnvelopedXML.valida();
assinaturaEnvelopedXML.validarVigencias();
resultados = assinaturaEnvelopedXML.getResultadosValidacoes();
certificados = assinaturaEnvelopedXML.getCertificadosAssinantes();
// tags = assinaturaEnvelopedXML.getTagsAssinadas();
for(int j=0; j< assinaturaEnvelopedXML.getQuantidadeAssinaturas(); j++){
System.out.println("Assinatura: "+j);
System.out.println("Valida: "+ resultados.get(j).toString());
System.out.println("Tag Assinada: "+assinaturaEnvelopedXML.getUriTagAssinada(j));
System.out.println("Nome Tag Assinada: "+assinaturaEnvelopedXML.getNomeTagAssinada(j));
System.out.println("Nome no Certificado: "+ certificados.get(j).getNome());
System.out.println("KeyUsage: "+ certificados.get(j).getTabeliaoKeyUsage());
System.out.println("TipoCertificado: "+ certificados.get(j).getTipoCertificado());
System.out.println("E-mail : "+certificados.get(j).getEmail());
//System.out.println("Certificado : "+certificados.get(j).getX509Certificate());
System.out.println("CRL : "+certificados.get(j).getCRLDistributionPoint());
System.out.println("IDAutority: "+certificados.get(j).getAuthorityKeyIdentifier());
//se pessoa jur�dica.
if (certificados.get(j).hasDadosPJ()){
System.out.println("Respons�vel : "+certificados.get(j).getTabeliaoDadosPJ().getNomeResponsavel());
System.out.println("CNPJ : "+certificados.get(j).getTabeliaoDadosPJ().getCNPJ());
DateFormat formatter ;
Date date = certificados.get(j).getTabeliaoDadosPJ().getDataNascimento();
formatter = new SimpleDateFormat("dd-MMM-yyyy");
String s = formatter.format(date);
System.out.println("Data Nascimento : "+s);
}
//se pessoa f�sica
if (certificados.get(j).hasDadosPF()){
System.out.println("CPF : "+certificados.get(j).getTabeliaoDadosPF().getCPF());
DateFormat formatter ;
Date date = certificados.get(j).getTabeliaoDadosPF().getDataNascimento();
formatter = new SimpleDateFormat("dd-MMM-yyyy");
String s = formatter.format(date);
System.out.println("Data Nascimento : "+s);
}
//System.out.println("Certificado: "+ certificados.get(j));
System.out.println("Validade Ate : "+certificados.get(j).getValidadeAte());
System.out.println("Contra? : "+assinaturaEnvelopedXML.isContraAssintura(j));
System.out.println("SignaturePolicyIdentifier : "+assinaturaEnvelopedXML.getSignaturePolicyIdentifier(j));
System.out.println("SigningCertificate : "+assinaturaEnvelopedXML.getSigningCertificate(j));
System.out.println("Data da Assinatura : "+assinaturaEnvelopedXML.getDataAssinatura(j));
System.out.println("ObjectFormat : "+assinaturaEnvelopedXML.getDataObjectFormat(j));
System.out.println(" --------------- xxx -----------------");
System.out.println();
}
} catch (Exception e) {
System.out.println("Erro grave: ");
e.printStackTrace();
}
}
public static String convertStreamToString(InputStream is) {
/*
* To convert the InputStream to String we use the BufferedReader.readLine()
* method. We iterate until the BufferedReader return null which means
* there's no more data to read. Each line will appended to a StringBuilder
* and returned as String.
*/
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line+"\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
/*
public void valida() throws Exception {
Init.init();
Element nscontext = XMLUtils.createDSctx(xmlAssinado, "ds", Constants.SignatureSpecNS);
NodeList xmlSignatureElements = XPathAPI.selectNodeList(xmlAssinado, "//ds:Signature", nscontext);
for (int ix=0; ix <xmlSignatureElements.getLength(); ix++){
try{
TabeliaoResultadoValidacao resultVal = new TabeliaoResultadoValidacao();
resultadosValidacao.add(resultVal);
Node node = xmlSignatureElements.item(ix);
XMLSignature sig = new XMLSignature((Element)node, "");
assinaturas.add(sig);
}catch (Exception e) {
throw new Exception(
"Erro ao iniciar processo de valida��o de assinatura.");
}
// Verifica se o certificado est� OK.
if (assinaturas.get(ix).getKeyInfo().getX509Certificate() == null) {
throw new Exception(
"N�o foi poss�vel encontrar o certificado na assinatura.");
}
try {
if (assinaturas.get(ix).checkSignatureValue(assinaturas.get(ix).getKeyInfo().getX509Certificate())){
resultadosValidacao.get(ix).addOk(TabeliaoResultadoValidacao.VAL_CONTEUDO);
resultadosValidacao.get(ix).addOk(TabeliaoResultadoValidacao.VAL_VALIDADE);
TabeliaoCertificate cert = new TabeliaoCertificate(assinaturas.get(ix).getKeyInfo().getX509Certificate());
certificadosDasAssinaturas.add(cert);
}else {
//N�o deve entrar neste ELSE.
resultadosValidacao.get(ix).addErro(TabeliaoResultadoValidacao.VAL_CONTEUDO,
"Erro na valida��o da assinatura com o conte�do para o certificado de:"+assinaturas.get(ix).getKeyInfo().getX509Certificate().getSubjectDN().getName());
}
} catch (CertificateExpiredException e) {
resultadosValidacao.get(ix).addErro(TabeliaoResultadoValidacao.VAL_VALIDADE, e.getMessage());
} catch (CertificateNotYetValidException e) {
resultadosValidacao.get(ix).addErro(TabeliaoResultadoValidacao.VAL_VALIDADE, e.getMessage());
} catch (Exception e) {
resultadosValidacao.get(ix).addErro(TabeliaoResultadoValidacao.VAL_CONTEUDO, e.getMessage());
}
}
}*/
}