Business - Automação Comercial

Bematech: 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.

por André Luiz R. Munhoz



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!

André Luiz R. Munhoz

André Luiz R. Munhoz - Bematech: DSP - Desenvolvimento de Software e Parcerias.
Visite o site: http://www.bematech.com.br.