Jump to content

Balança SM100 performance surpreendente

Tecnologia Japonesa   Teclado e Visor resistentes a água
Consumo inteligente de etiquetas   Baixo custo de manutenção
Comunicação Ethernet e WIFI independentes

Saiba mais

Impressora de Etiquetas ELGIN - L42 PRO

Protocolos PPLA, PPLB, ZPL, EPL (automático)
Porta USB padrão Opcionais: Ethernet, Serial, Paralela
Sensor de Etiquetas Móvel Garantia de 18 meses

Saiba mais

Carlos Alberto Senczkowski

Erro ao ler a Chave Método PAF_SaveFileTXT_RegistrosPAF

Recommended Posts

Boa tarde, estou com um problema semelhante, quando chamo o método  ACBrPAFInterop.INSTANCE.PAF_SaveFileTXT_RegistrosPAF(getHandle(), toUTF8(pArquivo));

Tenho o seguinte retorno "Erro ao ler a Chave", como aparentemente o método é executado pela DLL não consigo identificar o problema, estou utilizando jAcbrFramework em Java.

Pelo o que entendi no jACBrFramework.ead é necessário configurar o par de Chaves para assinatura do arquivo, mas não encontrei o método e nem a documentação de como configurar essas chaves.

Alguém ja teve este problema? 

Share this post


Link to post
Share on other sites
20 minutos atrás, Carlos Alberto Senczkowski disse:

Boa tarde, estou com um problema semelhante, quando chamo o método  ACBrPAFInterop.INSTANCE.PAF_SaveFileTXT_RegistrosPAF(getHandle(), toUTF8(pArquivo));

Tenho o seguinte retorno "Erro ao ler a Chave", como aparentemente o método é executado pela DLL não consigo identificar o problema, estou utilizando jAcbrFramework em Java.

Pelo o que entendi no jACBrFramework.ead é necessário configurar o par de Chaves para assinatura do arquivo, mas não encontrei o método e nem a documentação de como configurar essas chaves.

Alguém ja teve este problema? 

Creio que com esse exemplo você possa criar o seu componente ACBrPAF

        acbrEad = new ACBrEAD();
        acbrEad.addOnGetChavePrivada(new ACBrEventListener<EADChavePrivadaEventObject>() {

            @Override
            public void notification(EADChavePrivadaEventObject t) {
                t.setKey("Sua Chave Privada");
            }
        });
        
        acbrEad.addOnGetChavePublica(new ACBrEventListener<EADChavePublicaEventObject>() {

            @Override
            public void notification(EADChavePublicaEventObject t) {
                t.setKey("Sua Chave Pública");
            }
        });
        
        acbrPaf = new ACBrPAF(Charset.forName("cp1252"));
        acbrPaf.setAssinarArquivo(true);
        acbrPaf.setEad(acbrEad);


Geovani Nicolau de Paula

Cell Corporação Tecnológica

Share this post


Link to post
Share on other sites
3 horas atrás, Carlos Alberto Senczkowski disse:

Tentei atribuir as chaves desta forma, mas ao chamar o método acbrPaf.saveFileTXT_RegistrosECF(nomeArquivo), obtenho o retorno -1 "erro ao ler a chave".

agora vem a dúvida se o erro está com a configuração das chaves públicas ou se há algum problema na criação do arquivo.  

Tem como postar o código para que possamos verificar como você fez a inicialização dos componentes?


Geovani Nicolau de Paula

Cell Corporação Tecnológica

Share this post


Link to post
Share on other sites

        ACBrEAD acbrEad = new ACBrEAD();
        acbrEad.addOnGetChavePrivada(new ACBrEventListener<EADChavePrivadaEventObject>() {

            @Override
            public void notification(EADChavePrivadaEventObject t) {
                t.setKey("Chave");
            }
        });
        
        acbrEad.addOnGetChavePublica(new ACBrEventListener<EADChavePublicaEventObject>() {

            @Override
            public void notification(EADChavePublicaEventObject t) {
                t.setKey("-----BEGIN PUBLIC KEY-----\n" +
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCppEr/CNhXQpLQ956CHv0e67Pb\n" +
"g5NQvwcaf0mYCiSrC7O6IvhzhZKrdnlgSu4MiGw4EL7i3ZUPJmfH4iHjXVigH/BU\n" +
"r30j0htSXLTMFGo/kNugAqOzfowYdCbR5WvoUvwihpKhuurh3aypWieexSbagnb9\n" +
"JvtN1Ny1F+c8cyIagQIDAQAB\n" +
"-----END PUBLIC KEY-----");
            }
        });
        
        //acbrPaf = new ACBrPAF(Charset.forName("cp1252"));
        acbrPaf.setAssinarArquivo(true);
        acbrPaf.setEad(acbrEad);

        // U1 - Identificação do Estabelecimento Usuário do PAF-ECF
        geraRegistroU(acbrPaf);

        // A2 - Total Diário de Meios de Pagamento
        geraRegistroA2(acbrPaf, dataInicio, dataFim);

        // P2 - Relação das Mercadorias e Serviços
        geraRegistroP2(acbrPaf);

        // E2 - Relação das Mercadorias em Estoque
        geraRegistroE2(acbrPaf, pEstoqueTotalOuParcial, pEstoqueCodigoOuNome, pEstoqueCriterioUm, pEstoqueCriterioDois);

        // E3 - Identificação do ECF que Emitiu o Documento Base para a Atualização do Estoque
        geraRegistroE3(acbrPaf);

        // D2 - Relação dos DAV Emitidos / D3 - Detalhe do DAV
        geraRegistrosDAV(acbrPaf);

        // R01 a R07
        geraRegistrosR(acbrPaf, dataInicio, dataFim);

        /*
         O arquivo a que se refere o item 5 deverá ser denominado no formato CCCCCCNNNNNNNNNNNNNNDDMMAAAA.txt, sendo:
         a) “CCCCCC” o Código Nacional de Identificação de ECF relativo ao ECF a que se refere o movimento informado;
         b) “NNNNNNNNNNNNNN” os 14 (quatorze) últimos dígitos do número de fabricação do ECF;
         c) “DDMMAAAA” a data (dia/mês/ano) do movimento informado no arquivo.
         */
        String nomeArquivo = SessaoUsuario.getConfiguracao().getSistemaEcfId().getCodigo();

        if (SessaoUsuario.getConfiguracao().getSistemaEcfId().getSerie().length() > 14) {
            nomeArquivo += SessaoUsuario.getConfiguracao().getSistemaEcfId().getSerie().substring(SessaoUsuario.getConfiguracao().getSistemaEcfId().getSerie().length() - 14);
        } else {
            nomeArquivo += Biblioteca.repete("0", 14 - SessaoUsuario.getConfiguracao().getSistemaEcfId().getSerie().length()) + SessaoUsuario.getConfiguracao().getSistemaEcfId().getSerie();
        }

        if (dataMovimento == null) {
            dataMovimento = new Date();
        }
        nomeArquivo += Biblioteca.formataData(dataMovimento).replace("/", "") + ".txt";
        
        

        if (!acbrPaf.saveFileTXT_RegistrosECF(nomeArquivo)) {
            throw new ACBrException("Não foi possível criar o arquivo 'Registros PAF'.");
        }

        JOptionPane.showMessageDialog(null, "Arquivo armazenado em: " + Constantes.DIRETORIO_APLICACAO + nomeArquivo, "Informação do Sistema", JOptionPane.INFORMATION_MESSAGE);
    }

A principio o erro ocorre ao chamar o método acbrPaf.saveFileTXT_RegistrosECF(nomeArquivo) na penultima linha com o retorno Erro ao Ler a Chave.

Tentei atribuir as chaves diretamente para testar mas o erro continua.

Share this post


Link to post
Share on other sites

Ainda estou esbarrando neste problema.

O erro ocorre aparentemente em todas as assinaturas de arquivos.

Ex: acbrPaf.saveFileTXT_N("ArquivoMD5.txt");

 int ret = ACBrPAFInterop.INSTANCE.PAF_SaveFileTXT_N(getHandle(), toUTF8(pArquivo));        

checkResult(ret);

Retorno -1;

"Erro ao Ler a chave"

Existe alguma configuração do componente ou forma de atribuir estas chaves? 

Tentei atribuir aos componentes através do método setKeyRSA na classe ACBRPAF sem exito.

Atribuir diretamente ao componente ACBREAD e ao ACBRAAC.

 

Nos fontes do jACBrFramework existem os testes pelo ProgramTestEad.java

Tenho o mesmo problema, e não encontro uma forma de atribuir as chaves.

Se alguém puder me dar uma luz de como configurar as chaves dentro do ACBR fico agradecido.

Share this post


Link to post
Share on other sites
package jACBrFramework.Test;

import jACBrFramework.ACBrException;
import jACBrFramework.ead.ACBrEAD;
import jACBrFramework.ead.Chaves;
import jACBrFramework.ead.EADDigest;
import jACBrFramework.ead.ModuloExpoente;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Jose Mauro
 * @version Criado em: 26/12/2013 10:12:34, revisao: $Id$
 */
public class ProgramTestEad {
    
    public static void main(String[] args) {
        try {
            ACBrEAD lAcbr = new ACBrEAD();     
            lAcbr.setChavePrivada("-----BEGIN RSA PRIVATE KEY-----" "\n"
            + "-----END RSA PRIVATE KEY-----");
            lAcbr.setChavePublica("-----BEGIN PUBLIC KEY-----" + "\n"
            + "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnFwt3/HloBZfRpN+HjuCkHBp7" + "\n"
            + "p12fRsQ4NqEKV7apObbop1DsiqbP8UVMuohrgOvlHRaXLVfwgs5e+fsbff2k0u2U" + "\n"
            + "jeEheN+CFWhYO+VIGDQE4+OGGTI8+mJy5q2aybI2MEcWriaEGerEXfWNVB8jimID" + "\n"
            + "QZFrYjT0EmMuNDW1DwIDAQAB" + "\n"
            + "-----END PUBLIC KEY-----");
            
            lAcbr.gerarChaves();
            
            System.out.println("\nMD5FromFile: " + lAcbr.MD5FromFile("teste.txt"));
            System.out.println("MD5FromString: " + lAcbr.MD5FromString("jACBrFramework"));
            System.out.println("assinarArquivoComEAD: " + lAcbr.assinarArquivoComEAD("teste.txt", true));
            System.out.println("calcularChavePublica:\n " + lAcbr.calcularChavePublica());
            //TODO Verificar no ACBrFramework uma forma de especificar o tamanho do vetor.
            //ArrayList<String> lStrings = new ArrayList<String>();
            //lStrings.add("Framework");
            //lStrings.add("jACBrFramework");
            //System.out.println("calcularEAD: " + lAcbr.calcularEAD(lStrings));
            //System.out.println("calcularEAD: " + lAcbr.calcularEAD(lStrings.toArray(new String[lStrings.size()])));
            System.out.println("calcularEADArquivo: " + lAcbr.calcularEADArquivo("teste.txt"));
            System.out.println("calcularHash: " + lAcbr.calcularHash("jACBrFramework", EADDigest.SHA1));
            System.out.println("calcularHashArquivo: " + lAcbr.calcularHashArquivo("teste.txt", EADDigest.SHA));
            System.out.println("getAbout: " + lAcbr.getAbout());
            System.out.println("getOpenSSL_Version: " + lAcbr.getOpenSSL_Version());
            
            Chaves lChaves = lAcbr.gerarChaves();
            System.out.println("gerarChaves.getChavePrivada(): \n" + lChaves.getChavePrivada());
            System.out.println("gerarChaves.getChavePublica(): \n" + lChaves.getChavePublica());
            lAcbr.setChavePrivada(lChaves.getChavePrivada());
            lAcbr.setChavePublica(lChaves.getChavePublica());

            System.out.println("Gerando gerarXMLeECFc");
            lAcbr.gerarXMLeECFc("Empresa Teste");
            
            ModuloExpoente lModExp = lAcbr.calcularModuloeExpoente();
            System.out.println("calcularModuloeExpoente.getModulo(): \n" + lModExp.getModulo());
            System.out.println("calcularModuloeExpoente.getExpoente(): \n" + lModExp.getExpoente());
            System.out.println("converteXMLeECFcParaOpenSSL: \n" + lAcbr.converteXMLeECFcParaOpenSSL("Empresa Teste.xml"));
        } catch (ACBrException ex) {
            Logger.getLogger(ProgramTestEad.class.getName()).log(Level.SEVERE, null, ex);
        }
    }       
}

Esse é o arquivo que estou rodando o teste para assinar o Teste.txt;

Ao executar o método lAcbr.gerarChaves(); retorna o seguinte erro: Erro ao gerar par de Chaves RSA

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...