Lembrei da parte do fonte que parecia que não servia pra nada, até comentei aqui:
http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=16873&p=119468&hilit=parece+nada+assinatura#p119468Tinha deixado como anotação no fonte.
Mas vendo o problema que aconteceu, alterei pra isto agora, ainda deixando o anterior anotado:
STATIC FUNCTION AssinaAjustaAssinado( cXml )
LOCAL nPosIni, nPosFim
cXml := StrTran( cXml, Chr(10), "" )
cXml := StrTran( cXml, Chr(13), "" )
nPosIni := RAt( [<SignatureValue>], cXml ) + Len( [<SignatureValue>] )
cXml := Substr( cXml, 1, nPosIni - 1 ) + StrTran( Substr( cXml, nPosIni ), " ", "" )
// Ocorrência estranha: <X509Data> duplicado num cliente com A3
nPosIni := At( "</X509Data><X509Data>", cXml )
IF nPosIni != 0
nPosFim := hb_At( "</X509Data>", cXml, nPosIni + 5 )
cXml := Substr( cXml, 1, nPosIni - 1 ) + Substr( cXml, nPosFim )
ENDIF
//nPosIni := hb_At( [<X509Certificate>], cXml, nPosIni ) - 1
//nP := nPosIni + 1
//nPosFim := 0
//DO WHILE nP <> 0
// nPosFim := nP
// nP := hb_At( [<X509Certificate>], cXml, nP + 1 )
//ENDDO
//cXml := Substr( cXml, 1, nPosIni ) + Substr( cXml, nPosFim, Len( cXml ) )
RETURN cXml
Em XHarbour não tem hb_At(), mas na sefazclass está resolvido em ze_XHarbour.prg, que pra XHarbour adiciona a função FUNCTION hb_At( cText, nStart, nEnd ); RETURN At( cText, nStart, nEnd )