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

Java tutorial

Introduction

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

Source

/*
 * 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;

    }

}