Tenho sido questionado nos últimos dias sobre a nova regra do requisito IX do roteiro, aplicado a partir da versão 1.05.

 

Vamos analisar o texto.

 

ITEM 1: O PAF-ECF deve, a cada inicialização:

 

Logo na descrição já indica que deverá ser executado esta rotina toda vez que o aplicativo for inicializado, ou seja, no Delphi deverá se adicionado no evento “OnShow” do formulário principal;

 

a) gerar, por meio do algoritmo Message Digest-5 (MD-5), código de autenticação para cada arquivo

executável que realize os requisitos estabelecidos nesta especificação;

b) gerar um arquivo texto contendo a lista de arquivos autenticados, e seus respectivos códigos MD-5;

 

Nos itens “a” e “b” dizem para gerar um código MD5 para cada executável que fizer parte do PAF-ECF e armazenar em um arquivo do tipo “.TXT”. O arquivo deverá ficar mais ou menos assim:

 

C:\PAF_ECF\Configura.exe - a79fdb1100bc785fd2abe545686c2712

C:\PAF_ECF\Retaguarda.exe - 2eb6f562cf2ef6b6b66ed714c9413d47C

C:\PAF_ECF\PAF_ECF.exe - f32e0be6eba2c53983f9d767c5b0011d

C:\PAF_ECF\Sintegra.exe - f2151c0cf348cfa062b9569d9695488b

 

c) gerar, por meio do algoritmo Message Digest-5 (MD-5), código de autenticação do arquivo TXT a

que se refere a alínea “b” e gravar o resultado no arquivo auxiliar criptografado e inacessível ao

estabelecimento usuário de que trata o item 4 do Requisito XXII, sobrepondo à gravação anteriormente

realizada, devendo este código ser impresso no Cupom Fiscal, no campo:

 

Já no item “c”, diz que deverá ser gerado o MD5 do arquivo texto criado anteriormente com a lista de executáveis, e armazenar de forma criptografada, junto com o Serial e GT da impressora no arquivo auxiliar de verificação, referido no requisito XXII.

 

c1) "informações complementares", no caso de ECF que disponibilize este campo, devendo utilizar este

campo para esta informação e iniciando a impressão na primeira coluna da primeira linha;

c2) "mensagens promocionais", no caso de ECF que não disponibilize o campo "informações

complementares", devendo utilizar a primeira linha para esta informação e iniciando a impressão na

primeira coluna da primeira linha.

 

No complemento do item “c”, diz para imprimir este MD5 do arquivo “.TXT”, que foi armazenado no arquivo auxiliar, na primeira coluna da primeira linha do campo de mensagem promocional, usada para realizar o fechamento do cupom fiscal, ou seja, em todos os cupons fiscal impressos, deverá ter este MD5 no fechamento, como primeira informação.

 

Este requisito é uma forma de garantir que não haverá alterações no aplicativo homologado, pois uma vez que tenha alguma alteração no executável, o código MD5 não será mais o mesmo. E mesmo que não haja alteração na fonte do executável, o simples fato de re-compilar o mesmo, acarretará em mudança no MD5.

 

Segue abaixo o script da função que uso para realizar esta operação;

 
function GeraMD5PAFECF: String;

var Arquivo : TextFile;

    NomeArq, ArqTexto, aMD5 : String;

    F: TSearchRec;

    Ret: Integer;

begin

  Result := '';

  try

    // Apaga arquivo anterior

    ArqTexto := ExtractFilePath(Application.ExeName)+'ArqMD5.txt';

    if FileExists(ArqTexto) then

       DeleteFile(ArqTexto);

    // cria o arquivo TXT na mesma pasta do sistema

    AssignFile(Arquivo,ArqTexto);

    ReWrite(Arquivo);

    // lista todos os arquivo exe da pasta do aplicativo e gera o MF5

    Ret := FindFirst(ExtractFilePath(Application.ExeName)+'\*.exe', faAnyFile, F);

    try

      while Ret = 0 do

      begin

        if F.Attr and faDirectory <> faDirectory then

        begin

          NomeArq := ExtractFilePath(Application.ExeName)+'\'+F.Name;

          aMD5    := MD5Print(MD5File(NomeArq));

          WriteLn(Arquivo,NomeArq+' - '+aMD5);

        end;

        Ret := FindNext(F);

      end;

    finally

      FindClose(F);

    end;

    Closefile(Arquivo);

    // gera MD5 do arquivo texto

  finally

    Result := MD5Print(MD5File(ArqTexto));

  end;

 

end;

 
Será disponibilizado para download o um simples aplicativo para exemplo.