[Solved] Assinatura A3 com SHA256.
Uma opção que achei junto ao um amigo meu que é programador C# foi criar uma DLL em C# para fazer a assinatura. Basicamente, a gente manda o XML e a DLL devolve assinada, apenas isso. A DLL foi feita baseada no CertFly e é consumida pelo o método 'Assinar' da classe 'TDFeSSLXmlSignClass' que fica localizada no arquivo 'ACBrDFeSSL'.
[Código aberto]
https://github.com/tiagopsilva/eSocialSignature
[Como usar]
No arquivo 'ACBrDFeSSL' coloque 'eSocialSignature' no 'uses' da 'interface'. Depois disso apague tudo que está no método 'Assinar' e substitua por esse código:
var
xml: PAnsiChar;
begin
FpDFeSSL.SetSSLXmlSignLib(xsXmlSec);
FpDFeSSL.SSLCryptLib := cryCapicom;
xml := PAnsiChar(AnsiString(ConteudoXML));
TESocialSignature.SignSHA256Ansi(xml, PAnsiChar(AnsiString(infElement)),
PAnsiChar(AnsiString(FpDFeSSL.NumeroSerie)),
PAnsiChar(AnsiString(FpDFeSSL.Senha)));
Result := string(AnsiString(xml));
Isso é a única coisa que precisa ser alterada no plugin da ACBReSocial. Porém, é necessário definir a 'SSLLib' para 'libCustom' nas configurações do 'ACBreSocial', exemplo:
If ( Obj.Modelo = A3 ) Then
Begin
If Not FConsultar Then
AACBreSocial.Configuracoes.Geral.SSLLib := libCustom
Else
AACBreSocial.Configuracoes.Geral.SSLLib := libCapicom;
AACBreSocial.Configuracoes.Certificados.NumeroSerie := Obj.NumeroSerie;
AACBreSocial.SSL.CarregarCertificado;
End;
Para facilitar, apenas uso a 'libCustom' na hora de exportar já que o problema estava na assinatura do XML. Quando eu consulto eu já deixo o plugin fazer o processo dele normalmente, já que, na consulta não é necessário a assinatura digital. Porém, no código da ACBR pede o carregamento do certificado, e eu estava com problemas no método 'EnviarDados' da classe 'TDFeWebService' que fica no arquivo 'ACBrDFeWebService'. Quando o método executa '(FPDFeOwner.SSL.CertDataVenc < Now)' da problemas, pois, o 'CertDataVenc' vem com o valor default e não do certificado. Então preferi fazer essa estratégia com a flag do que sobrescrever mais o código original.