assoft-portugal / SAF-T-AO

Official XSD from the Government of Angola for use in SAF-T AO
https://www.agt.minfin.gov.ao
MIT License
56 stars 63 forks source link

Falha na validação do Hash da parte AuditFile.SourceDocuments.SalesInvoices.2Invoice de novo #58

Closed Marcosinffoco closed 4 years ago

Marcosinffoco commented 4 years ago

Estou usando o openssl no windows e fazendo passagem de linha de comando.

PRIMEIRO DOCUMENTO FACTURA PARA ASSINATURA

CONTEUDO DO FICHEIRO texto.inf

2020-03-20;2020-03-20T18:27:39;FR FR20/16;178845.15;

primeira linha de comando Assinar documentos usando a chave privada - valor guardada num ficheiro

openssl.exe dgst -sha1 -sign keypriv.pem -out registoout.sh1 texto.inf

O openssl cria então o ficheiro registoout.sh1

Lá dentro esta escrito com caracteres especias.

registoout.sh1 
ꧭᲟꩠ᠟촆羵膊뺤䯃匑꓉㤑洰❪喱咔ꔆ㕚Ꮒ鴤뵌滮ꕠ㥳�遅덢肜⒫ㆯ犘㛉跃㭠붥ᗿ渖뉁﹩ꆄ햸퓱鉦晋날�肘㯵꩐漟剑௻겈댷㚖は
¬­ü_RÄãÎÌhkÈàÍx® ÃíÄ

APÓS ISTO ENVIO A LINHA DE COMANDO PARA codificar assinatura em base64

openssl.exe enc -in registoout.sh1 -base64 -A -out registoout.b64

O CONTEUDO DO FICHEIRO registoout.b64 É ESTE ABAIXO QUE É A PRÓPRIA CHAVE HASH

registoout.b64 
rK38X1LE487MaGvI4M14riAOBMPtxACc+Xvy24xTiVkyHmgvS8Umhz+GeotUOgNSk/KRLgf2ZTdFBrWIR97IR9g06uPZ9HLSRrdSvSr1fblA+Z2svH5TJytcaIV7yK9aJkAOBpfOAL2rDmCfQ4Or7znWmutblcX9eiJjjgas5R4=

Aproveitei e verifiquei se esta correto com a chave publica e a mensagem é OK. verificar assinatura com a chave pública

openssl.exe dgst -sha1 -verify keypublic.pem -signature registoout.sh1 texto.inf

esta dado verificação OK

Segunda factura

conteudo do ficheiro texto.inf

2020-03-20;2020-03-20T18:44:24;FR FR20/17;6899.00; rK38X1LE487MaGvI4M14riAOBMPtxACc+Xvy24xTiVkyHmgvS8Umhz+GeotUOgNSk/KRLgf2ZTdFBrWIR97IR9g06uPZ9HLSRrdSvSr1fblA+Z2svH5TJytcaIV7yK9aJkAOBpfOAL2rDmCfQ4Or7znWmutblcX9eiJjjgas5R4=;

Atenção, obedeci o comando colocando o caracter ; para separar todos os argumentos.

Criando a assinatura openssl.exe dgst -sha1 -sign keypriv.pem -out registoout.sh1 texto.inf

Conteudo do ficheiro registoout.sh1

ǶÇÀ°êÒ úöFéÍ[„¦Mõg)ô„G£âå^6Ûü4¦ßËÁ®G+r@Ô¥ºäŒ]ì¿LŸ dßcÎyé1¯m¯íÍ·ÐÞk2&copy;2 8e¡wÂÄ?bL ‚D­aêY¨‚TÑa£ÝwÔ&trade;N¶!Ü2¥¿h~<sup>3</sup>Jÿ—à

APÓS ISTO ENVIO A LINHA DE COMANDO PARA codificar assinatura em base64

openssl.exe enc -in registoout.sh1 -base64 -A -out registoout.b64

registoout.b64  
x7bHwLAH6tIL+hr2RunNW4QDpk31Zyn0G4RHowHi5V42F9v8YDSm3xLLwa5HXCtyQNSluuSMXRDsv0yfCWTfY8556bmvbWCv7c230N5rGTKpMgw4ZaF3wsQ/YhISTAsVgkStYepZqIJU0WGj3QJ31JlOtiHcMqW/aH6zSv+X4Bc=

Esta é a segunda chave HASH

verificação openssl.exe dgst -sha1 -verify keypublic.pem -signature registoout.sh1 texto.inf esta dado verificação OK

revi diversas vezes e infelizmente no site de testes da AGT continua o meu calvário.

Já desisti e não tenho mais opções.

Li em algum momento que o próprio site de testes tinha algum problema.

Vi os dois tópicos que fala sobre este assunto, mas li e reli e fiz várias tentativa e nada.

cryptolopes commented 4 years ago

@Marcosinffoco O detalhe na sua questão está ótimo. O problema parece-me estar no último ; O ; atua como separador e no último valor, quando este é a assinatura do último documento, não há ;

Marcosinffoco commented 4 years ago

Bom dia, Então nesta linha do texto.inf: 2020-03-20;2020-03-20T18:44:24;FR FR20/17;6899.00; rK38X1LE487MaGvI4M14riAOBMPtxACc+Xvy24xTiVkyHmgvS8Umhz+GeotUOgNSk/KRLgf2ZTdFBrWIR97IR9g06uPZ9HLSRrdSvSr1fblA+Z2svH5TJytcaIV7yK9aJkAOBpfOAL2rDmCfQ4Or7znWmutblcX9eiJjjgas5R4=; Este ultimo caracter de separação dos argumentos, não é para ter, correcto?

Infelizmente, já tentei isto..rs

Bem, neste momento estou trabalhando no windows, e estou usando o openssl 64.

E comecei a pouco tempo a rastrear o ficheiro com o XMLPAD para windows.

Ainda não consegui comparar com o XSD para ver se tem erros. Pois ainda não compreendi como fazer, mas vou logo contornar isto.

Já andei muito quebrando a cabeça sozinho.

Só tenho mesmo esta pendência, pois no restante, valida sem problemas.

cryptolopes commented 4 years ago

49

Marcosinffoco commented 4 years ago

@cryptolopes , Consegui. tudo funcionando como um relógio suíço.

O Luis Salazar tinha me despertado uma observação que até então não tinha entendido.

O GROSSTOTAL que influencia isto tudo e depois tudo que vem antes em relação de como publicar as casas decimais em algumas informações, então, para que ainda esta aventurando nisto, dou a dica: 1) rever tudo que vem antes em termos de casas decimais. 2) cuidado com valores arredondados e ter visão de como esta no banco de dados e no script 3) ter certeza dos totais que estão sendo acumulados 4) E O MAIS IMPORTANTE, O GROSSTOTAL QUE PUBLICA NA CHAVE HASH TEM DE SER IDENTIFICO AO GROSSTOTAL. 5) E POR FIM. CUIDADO PARA NÃO USAR A VIRGULA COMO SEPARADOR DECIMAL

Este é o meu conselho, pois penei muito nisto até ontem.

Bem, boa sorte para quem for ao teste de conformidade,.

PS. cuidado com as armadilhas nos teste. Ter bastante cautela no que o programa faz.

Edson2001 commented 3 years ago

Já tentei varias vesses e não consigo.

2021-01-29;2021-01-29T15:10:50;FT S2021/3;32492.00;bS7N55SGusdjKGgL8zT/UBBnkxqyLjQzGLs/FPFWyDCecYRrOBshp6PBbAtwkLReMcMmcWtUm0RypMSxUBPdwuLM9TWG1l6hOf5G7g6kUf/TbulLgilTe1dRL7sV8yzmlxm6sm5g2YK2L9QahCjkrZRZFmhCT4upnfsDj+u3RV0=

cryptolopes commented 3 years ago

Já tentei varias vesses e não consigo.

https://github.com/assoft-portugal/SAF-T-AO/issues/49#issuecomment-589232955