O trecho da unit ACBrDFeCapicom, quando passa na função, XmlEstaAssinado() não deveria ter um exit ?
Pois quando o xml já assinado é submetido novamente está gerando um erro desconhecido na linha:
// Assinando com MSXML e CryptoLib //
signedKey := xmldsig.sign(dsigKey, $00000002); << Erro aqui
if (signedKey = nil) then
raise EACBrDFeException.Create('Assinatura Falhou.');
Segue trecho do código para analise:
function TDFeCapicom.Assinar(const ConteudoXML, docElement, infElement: String): String;
var
PosIni, PosFim: integer;
URI, AXml, TagEndDocElement, XmlAss: String;
xmldoc: IXMLDOMDocument3;
xmldsig: IXMLDigitalSignature;
dsigKey: IXMLDSigKey;
signedKey: IXMLDSigKey;
PrivateKey: IPrivateKey;
begin
CoInitialize(nil);
try
CarregarCertificadoSeNecessario;
AXml := ConteudoXML;
XmlAss := '';
if not XmlEstaAssinado(AXml) then
begin
URI := ExtraiURI(AXml);
TagEndDocElement := '</' + docElement + '>';
AXml := copy(AXml, 1, PosLast(TagEndDocElement, AXml) - 1);
AXml := AXml + SignatureElement(URI, False) + TagEndDocElement;
end;