Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package br.com.topsys.cd.util; import br.com.bry.comuns.io.ResetFileInputStream; import br.com.bry.pddesdk.pdde.PDDE; import br.com.bry.pddesdk.pdde.PDDEFactory; import br.com.bry.signersdk.excecoes.ExcecaoCMS; import br.com.bry.signersdk.signer.Assinador; import br.com.bry.signersdk.signer.ContextoAssinaturaCMS; import br.com.bry.signersdk.util.TipoAssinatura; import br.com.bry.x509.repositorios.api.RepositorioLocator; import br.com.bry.x509.repositorios.api.TipoRepositorio; import br.com.bry.x509.util.AlgoritmoHash; import br.com.topsys.cd.exception.CertificadoDigitalException; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.xml.bind.DatatypeConverter; import org.apache.commons.io.IOUtils; /** * * @author andre */ public class AssinaturaDigital { public String assinar(CertificadoDigital certificadoDigital, String hash) throws CertificadoDigitalException { return DatatypeConverter.printHexBinary(assinar(certificadoDigital, hash.getBytes())); } private byte[] assinar(CertificadoDigital certificadoDigital, byte[] hash) throws CertificadoDigitalException { byte[] retorno = null; try { PDDE carimbo = PDDEFactory.getPDDE("pdde-teste.bry.com.br"); carimbo.setPorta(318); carimbo.setCertReq(false); Assinador assinador = new Assinador(certificadoDigital.getRepositorio()); assinador.setCarimbadora(carimbo); assinador.setCarregaCadeiaRepositorio(true); assinador.setObterLCROnline(true); // adiciona a lista de certificados revogados na assinatura assinador.setFormatoDadosMemoria(0); List<InputStream> docs = new ArrayList<InputStream>(); docs.add(new ByteArrayInputStream(hash)); ContextoAssinaturaCMS contexto = new ContextoAssinaturaCMS(certificadoDigital.getX509Certificado(), docs); contexto.setIncluirCarimbo(true); contexto.setAlgoritmoHash(AlgoritmoHash.SHA256); contexto.setTipoAssinatura(TipoAssinatura.CONTEUDO); retorno = IOUtils.toByteArray(assinador.assinar(contexto).get(0)); } catch (ExcecaoCMS ex) { throw new CertificadoDigitalException("Erro assinando o documento!", ex); } catch (IOException ex) { Logger.getLogger(AssinaturaDigital.class.getName()).log(Level.SEVERE, null, ex); } return retorno; } public byte[] assinarDocumento(CertificadoDigital certificadoDigital, byte[] hash) throws CertificadoDigitalException { byte[] retorno = null; try { PDDE carimbo = PDDEFactory.getPDDE("pdde-teste.bry.com.br"); carimbo.setPorta(318); carimbo.setCertReq(false); Assinador assinador = new Assinador(certificadoDigital.getRepositorio()); assinador.setCarimbadora(carimbo); assinador.setCarregaCadeiaRepositorio(true); assinador.setObterLCROnline(true); // adiciona a lista de certificados revogados na assinatura List<InputStream> docs = new ArrayList<InputStream>(); docs.add(new ByteArrayInputStream(hash)); ContextoAssinaturaCMS contexto = new ContextoAssinaturaCMS(certificadoDigital.getX509Certificado(), docs); contexto.setIncluirCarimbo(true); contexto.setAlgoritmoHash(AlgoritmoHash.SHA256); contexto.setAttached(true); retorno = IOUtils.toByteArray(assinador.assinar(contexto).get(0)); } catch (ExcecaoCMS ex) { throw new CertificadoDigitalException("Erro assinando o documento!", ex); } catch (IOException ex) { Logger.getLogger(AssinaturaDigital.class.getName()).log(Level.SEVERE, null, ex); } return retorno; } }