Problema com assinatura A3

Projeto hbNFe (Nota Fiscal Eletronica/Danfe) para [x]Harbour

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Problema com assinatura A3

Mensagem por JoséQuintas »

Passou a acontecer isto num cliente com certificado A3.
O esquisito é que é só neste cliente.
O bloco <X509DATA> está duplicado.
Apagando um dos blocos, ok.

Alguém já teve esse problema?

A solução vai ser colocar na rotina de assinatura para que se o bloco estiver duplicado, retirar um dos blocos.
Mas isto pode atrapalhar o uso da rotina pra NFSE.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Problema com assinatura A3

Mensagem por JoséQuintas »

Lembrei da parte do fonte que parecia que não servia pra nada, até comentei aqui:

https://pctoledo.org/forum/viewto ... ra#p119468

Tinha deixado como anotação no fonte.
Mas vendo o problema que aconteceu, alterei pra isto agora, ainda deixando o anterior anotado:

Código: Selecionar todos

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 )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder