Bom dia Sr's,
Após a atualização dos fontes do ACBR no dia 21/02/2019 aleatoriamente meu sistema passou a apresentar a rejeição 297: Assinatura difere do calculado, como o cliente fatura a noite foi difícil simular a situação em um ambiente com o problema, porém após muitos testes nos deparamos com o cenário e podemos enfim debugar. Observamos que a rejeição se dava por ocorrência de problema na unit trunk2\Fontes\ACBrDFe\ACBrDFeWinCrypt.pas. Vimos no log de alteração do SVN, uma implementação para atender a este tópico, como antes nunca havia ocorrido isso, comentamos o código implementado e a nota parou de apresentar o problema. Aparentemente o problema se originou com a implementação deste código:
function TDFeWinCrypt.CalcHash(const AStream: TStream; const Digest: TSSLDgst;
const Assina: Boolean): AnsiString;
...
if Assina then
begin
if CryptSignHash(mHash, dwKeySpec, Nil, 0, @mHashBuffer, mBytesLen ) then
begin
// MS CryptoAPI retorna assinatura em "Little Endian bit string", invertendo...
Result := '';
{while (mBytesLen > 0) and (mHashBuffer[mBytesLen-1] = #0) do
Dec(mBytesLen);}
for I := mBytesLen downto 1 do
Result := Result + mHashBuffer[I-1];
end
else
raise Exception.Create('CryptSignHash');
end
Estou anexando o XML com o erro para mais detalhes. Se alguém tiver alguma ideia do porque do surgimento deste problema, favor nos ajudar.
Interagi neste tópico para evitar abrir outro visto que esta ainda está em aberto.
Desde já agradeço.
Assintaura.xml