Edição 43 - Edição extra: sign_bema.dll

Caro Parceiro,

Primeiramente, gostaríamos de agradecer os feedbacks que temos recebido desde o lançamento de nossa dll que gera as chaves pública e privada, e a assinatura EAD no arquivo para o PAF - a dll sign_bema.dll.

Sem dúvida, esta dll veio para auxiliar nossa comunidade de desenvolvedores na implementação de um dos requisitos mais complexos do PAF-ECF - a Assinatura Digital do arquivo.

Nesta edição extra do Flash-Tip, queremos contribuir ainda mais com nossa comunidade, exemplificando o uso da sign_bema.dll e de suas funções, e mostrar a simplicidade que é gerar estas chaves e o registro EAD no arquivo.

1º passo - A declaração das funções

Nosso primeiro passo, é conhecer a declaração das funções da sign_bema.dll. Vamos fazê-la em Delphi e VB.

- em Delphi:

function genkkey( cChavePublica: String; cChavePrivada: String ): integer; stdcall; external ’sign_bema.dll’;

function setLibType( iTipo: integer ): integer; stdcall; external ’sign_bema.dll’;

function generateEAD( cNomeArquivo: String; cChavePublica: String; cChavePrivada: String; cEAD:String; iSign: Integer): integer; stdcall; external ’sign_bema.dll’;

function validateFile( cNomeArquivo: String; cChavePublica: String; cChavePrivada: String ): integer; stdcall; external ’sign_bema.dll’;

- em VB:

Private Declare Function genkkey Lib “sign_bema.dll” (ByVal cChavePublica As String, ByVal cChavePrivada As String) As Integer

Private Declare Function setLibType Lib “sign_bema.dll” (iTipo as Integer) As Integer

Private Declare Function generateEAD Lib “sign_bema.dll” (ByVal cNomeArquivo As String, ByVal cChavePublica As String, ByVal cChavePrivada As String, ByVal cEAD As String, ByVal iSign As Integer) As Integer

Private Declare Function validateFile Lib “sign_bema.dll” (ByVal cNomeArquivo As String, ByVal cChavePublica As String, ByVal cChavePrivada As String) As Integer

2º passo - Conhecer as funções que serão usadas

A sign_bema.dll possui 4 funções. Dentre elas, temos 2 funções que são usadas para a geração das chaves e da assinatura do arquivo, ou seja, basicamente precisamos de apenas 2 funções para atender ao requisito do PAF-ECF. São elas:

  • genkkey
  • generateEAD

A função genkkey é responsável pela geração das chaves pública e privada, e a função generateEAD é responsável pela assinatura do arquivo, gerando e inserindo o registro EAD.

3º passo - Usar as funções

Veja como é simples a implementação destas duas funções. Vamos codificá-las em Delphi e VB.

- em Delphi:

(…)

setlength( cChavePublica, 256 );
setlength( cChavePrivada, 256 );

iRetorno := genkkey( cChavePublica, cChavePrivada );

if ( iRetorno = 0 ) then
  application.MessageBox( ‘Erro de execução!’, ‘ERRO’, MB_ICONINFORMATION + MB_OK )
else
  application.MessageBox( ‘Sucesso!’, ‘Atenção’, MB_ICONINFORMATION + MB_OK );

(…)

setlength( cRegistroEAD, 256 );
cNomeArquivo := “C:\Espelho.txt”;

iRetorno := generateEAD( cNomeArquivo, cChavePublica, cChavePrivada, cRegistroEAD, 1 );

if ( iRetorno = 0) then
  application.MessageBox( ‘Erro de execução!’, ‘ERRO’, MB_ICONINFORMATION + MB_OK )
else
  application.MessageBox( ‘Sucesso!’, ‘Atenção’, MB_ICONINFORMATION + MB_OK );

(…)

- em VB:

(…)

cChavePublica = Space(256)
cChavePrivada = Space(256)

iRetorno = genkkey(cChavePublica, cChavePrivada)

If (iRetorno = 0) Then
  MsgBox “Erro de execução!”, vbInformation + vbOKOnly, “ERRO”
Else
  MsgBox “Sucesso!”, vbInformation + vbOKOnly, “Atenção”
End If

(…)

cRegistroEAD = Space(256)
cNomeArquivo = “C:\Espelho.txt”

iRetorno = generateEAD( cNomeArquivo, cChavePublica, cChavePrivada, cRegistroEAD, 1 )

If ( iRetorno = 0 ) Then
  MsgBox “Erro de execução!”, vbInformation + vbOKOnly, “ERRO”
Else
  MsgBox “Sucesso!”, vbInformation + vbOKOnly, “Atenção”
End If

(…)

Detalhando um pouco mais estas duas funções, temos na função genkkey dois parâmetros já inicializados com 256 bytes, um para receber a geração da chave pública e outro para a chave privada, ambas automaticamente.

Tendo em mãos estas duas chaves, podemos assinar o arquivo com a função generateEAD. Esta função possui como parâmetros, o nome do arquivo que será assinado, a chave pública, a chave privada (previamente geradas pela função genkkey), o registro EAD e uma flag que indica se desejamos que o registro EAD já seja incluído no arquivo ou não (1 para sim ou 0 para não). Em relação ao 4º parâmetro (registro EAD), este precisa ser inicializado antes com 256 bytes, pois ele receberá a geração automática da assinatura.

Estas funções retornam um int, onde 1 (um) corresponde ao sucesso da execução e 0 (zero) a algum erro que tenha ocorrido.

Pronto, implementado, validado e funcionando na aplicação! Uma dll com funções simples, que ajudam a atender este requisito do PAF-ECF de forma fácil, rápida e segura.

Quero agora, compartilhar com você algumas dicas importantes para a validação do arquivo:

1) O Fisco possui um programa chamado “eECFc” que faz a validação do arquivo com base na chave pública informada.

2) A software-house deve criar um arquivo XML com o seguinte conteúdo:

<?xml version=”1.0″ ?>
<empresa_desenvolvedora>
  <nome></nome>
  <chave>
    <modulo></modulo>
    <expoente_publico>03</expoente_publico>
  </chave>
</empresa_desenvolvedora>

Onde:

  • Na TAG <nome> deve ser informado o nome da software-house.
  • Na TAG <modulo> deve ser informada a chave pública gerada.
  • Na TAG <expoente_publico> deve ser informado o expoente de validação. Para Bematech o expoente é 03.

 3) A nomenclatura deste arquivo é formada pelo nome da sofware-house mais a extensão “.xml”, exemplo: “EMPRESA.xml”.

4) O arquivo .xml deve ser salvo na pasta “SHOUSE”, localizada onde o “eECFc” foi instalado.

 

Estamos à disposição para qualquer dúvida que venha a surgir, através dos canais:

  • 0800 644 7277 (exclusivo ao desenvolvedor)
 
  • Email
suporte@bematech.com.br
  • MSN
suporte.andre@bematech.com.br

suporte.iohannes@bematech.com.br

suporte.sidnei@bematech.com.br

  • SKYPE
suporte.andre.luiz

suporte.iohannes

suporte.sidnei

 

Boas implementações!

Comentários

  1. Ivaldo

    sábado, 06 de junho de 2009 às 13:41

    Parabens por essa DLL.

    Facilitou muito o nosso trabalho… Obrigado…

    Tenho somente uma duvida conceitual:

    Gerar a chava publica e privada somente uma vez e depois registrar em todos os arquivos gerados?

    Para gerar a chave, não preciso informar dados particulares, ex.: Nome Empresa ou CNPJ?

    Desde já muito obrigado…

    Ivaldo Protasio Barbosa

  2. André Munhoz

    quarta-feira, 07 de julho de 2009 às 09:16

    Olá Ivaldo,

    Sim, as chaves pública e privada são geradas somente uma vez. Estas chaves vc guarda para que sejam usadas nas assinaturas dos arquivos do PAF que vc criar. A chave pública vc disponibiliza ao fisco, para que possam usar na validação da assinatura dos arquivos.

    Não é necessário informar dados particulares na geração das chaves. A dll faz a geração automaticamente e aleatoriamente respeitando o requisito do PAF, sendo assim, basta vc apenas usa-las para a assinatura dos arquivos.

    Ats,
    André Munhoz

  3. Edição 129 - Tutorial de Automação Bematech versão 2 | Bemacast - Flash-News

    quarta-feira, 07 de julho de 2009 às 17:17

    [...] do arquivo é gerado pela dll sign_bema.dll, já apresentada na edição 128 do Flash News e edição 43 do Flash [...]

Comente você também

(*) Campos de preenchimento obrigatório.