br.com.topsys.cd.util.AssinarArquivo.java Source code

Java tutorial

Introduction

Here is the source code for br.com.topsys.cd.util.AssinarArquivo.java

Source

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.x509.certificado.X509Certificado;
import br.com.bry.x509.repositorios.api.RepositorioLocator;
import br.com.bry.x509.repositorios.api.TipoRepositorio;
import br.com.bry.x509.repositorios.excecoes.ExcecaoX509Repositorio;
import br.com.bry.x509.repositorios.interfaces.IRepositorio;
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.FileNotFoundException;
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 org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;

/*
 * 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.
 */
/**
 *
 * @author andre
 */
public class AssinarArquivo {

    private static Assinador assinador;
    private static X509Certificado certificado;
    private static String caminho = "c://teste//";
    private static final String nomeArquivo = "bytes_prontuario.txt";
    private static IRepositorio repositorioMozilla;

    public static void main(String args[]) throws Exception {

        InputStream assinatura = AssinarArquivo.assinarDocumento();

        byte[] assinatura_binario = IOUtils.toByteArray(assinatura);
        FileUtils.writeByteArrayToFile(
                new File(caminho + "assinados//" + "assinatura_detached_bytes_prontuario.p7s"), assinatura_binario);

    }

    public static InputStream assinarDocumento() throws CertificadoDigitalException {

        InputStream retorno = null;
        try {

            repositorioMozilla = RepositorioLocator.carregaRepositorio(TipoRepositorio.MOZILLA);
            repositorioMozilla.inicializa(null);

            if (repositorioMozilla.getNumeroCertificados() != 0) {

                assinador = new Assinador(repositorioMozilla); //Cria assinador passando repositorio como parametro

                certificado = repositorioMozilla.getTodosCertificados().get(0);

                PDDE carimbo = PDDEFactory.getPDDE("pdde-teste.bry.com.br");
                carimbo.setPorta(318);
                carimbo.setCertReq(false);

                Assinador assinador = new Assinador(repositorioMozilla);
                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 ResetFileInputStream(new File(caminho + nomeArquivo)));

                ContextoAssinaturaCMS contexto = new ContextoAssinaturaCMS(certificado, docs);

                contexto.setIncluirCarimbo(true);
                contexto.setAlgoritmoHash(AlgoritmoHash.SHA256);
                contexto.setAttached(true);

                retorno = assinador.assinar(contexto).get(0);

            }

        } catch (ExcecaoCMS ex) {
            throw new CertificadoDigitalException("Erro assinando o documento!", ex);
        } catch (ExcecaoX509Repositorio ex) {
            Logger.getLogger(AssinarArquivo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(AssinarArquivo.class.getName()).log(Level.SEVERE, null, ex);
        }

        return retorno;

    }

    public static List<InputStream> assinarDetached() throws Exception {

        repositorioMozilla = RepositorioLocator.carregaRepositorio(TipoRepositorio.MOZILLA);
        repositorioMozilla.inicializa(null);

        if (repositorioMozilla.getNumeroCertificados() != 0) {
            assinador = new Assinador(repositorioMozilla); //Cria assinador passando repositorio como parametro
            certificado = repositorioMozilla.getTodosCertificados().get(0);// Define a posi?o do certificado no repositorio que sera utilizado para assinar o documento  
            assinador.addCadeiaCertificacao(true); //adiciona a cadeia de certificados na assinatura
            assinador.addLCRs(true); // adiciona a lista de certificados revogados na assinatura

            PDDE carimbo = PDDEFactory.getPDDE("pdde-teste.bry.com.br");
            carimbo.setPorta(318);
            carimbo.setCertReq(false);

            assinador.setCarimbadora(carimbo);

            ArrayList<InputStream> docs = new ArrayList<InputStream>();// Cria uma lista de documentos que serao assinados

            docs.add(new ResetFileInputStream(new File(caminho + nomeArquivo)));// Adiciona os documentos no contexto assinatura

            ContextoAssinaturaCMS contexto = new ContextoAssinaturaCMS(certificado, docs);// Cria ContextoAssinaturaCMS para definir os valores da assinatura;
            contexto.setIncluirCarimbo(true);
            //contexto.setCadeia(SignerUtil.carregaCadeiaDeDiretorio(caminho + "cadeia",contexto.getCertificado()));// Adiciona a cadeia para a assinatura. (Parametro opcional)
            contexto.setIncluirDocumento(false);// Configura tipo de assiantura Attached ou Detached

            contexto.setAlgoritmoHash(AlgoritmoHash.SHA256);// Configura o algoritmo Hash. So somente suportados os algoritmos SHA1, SHA256 e SHA512

            return assinador.assinar(contexto);
        }
        return null;
    }
}