Bematech Software Partners

 
  • jun 18 2009

    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 Flash-Tip 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!

    Related posts:

    1. Desenvolvendo um Software de Automação Comercial em ASP NET – Parte III/III  BSP – Bematech Software Partners Nos artigos anteriores, desenvolvemos a...
    2. Identifique seu Cliente através de um Código de Barras Você já imaginou poder identificar seu cliente através de um...
    3. Edição 36 – Cancelando a transação TEF Caro Parceiro, Após implementarmos as nossas rotinas de cupom fiscal...
    4. Edição 58 – Gerando o Arquivo MFD (PAF-ECF) Caro parceiro, Sempre visando orientar e apoiar você nosso parceiro...
    5. Edição 87 – Código com 14 dígitos Caro Partner e Desenvolvedor Bematech,  Nesta edição de nosso Flash...

     

5 Comentários

  • 27 de junho de 2009 às 13:41

    Comentário by Ivaldo

    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

  • 1 de julho de 2009 às 9:16

    Comentário by André Munhoz

    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

  • 1 de julho de 2009 às 17:17

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

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

  • 30 de setembro de 2010 às 16:31

    Comentário by Reginado Ferreira

    Muito obrigado! Ajudou muito atirar minhas duvidas.

  • 30 de setembro de 2010 às 16:31

    Comentário by Reginado Ferreira

    Muito obrigado! Ajudou muito a tirar minhas duvidas.

Deixe um comentário