Ver Mensaje Individual
  #4062  
Antiguo 14-02-2024
softtron softtron is offline
Registrado
 
Registrado: nov 2022
Posts: 3
Reputación: 0
softtron Va por buen camino
Hola a todos, soy nuevo en el foro. Por circunstancias de la vida necesito aprender de vosotros para poder adaptar un software. Llevo semanas leyendo y probando. He aprendido mucho de vosotros, muchas gracias, pero me tropiezo con algunas dudas y me quedo estancado. Me veo obligado a preguntar. Me lleváis años de ventaja, pero quizás mis dudas sean compartidas por otros en mi situación a estas alturas. Voy a intentar desarrollar una interface en python para conseguir la adaptación que necesito. Entiendo que este es un foro enfocado principalmente a Delphi pero creo que las dudas y las soluciones adoptadas pueden servir para otros lenguajes.
Pues mi duda donde me quedo estancado es muy básica creo. A la hora de firmar el xml de una factura, no encuentro información detallada sobre que entra exactamente en el xml a firmar. He tomado para comenzar el ejemplo de factura en h ttp s://w eb. araba. eus que como todos sabréis comienza así:

<?xml version="1.0" encoding="UTF-8"?>
<T:TicketBai xmlns:T="urn:ticketbai:emision" xmlns:xsi="h t t p://www .w3. org/2001/XMLSchema-instance" xsi:schemaLocation="ht tp://www w3. org/2001/XMLSchema ticketbai.xsd">
<Cabecera>
...
y entiendo que la factura termina en ... </HuellaTBAI>

luego en este xml de ejemplo ya se continua con <ds:Signature ... que creo haber entendido se trata ya de la firma que se añade.

Si hasta aquí lo he entendido bien, entonces busco y busco sobre como se genera el valor que hay unas líneas mas abajo
<dsigestValue>/j7C3YYEt9b1T0E4p6mUo9rtdiLxNXKnR6eKQB1KlSQ=</dsigestValue>
pero eso es lo que no encuentro
Duda 1: El primer caracter del xml que se debe incluir en la firma y el último, son <?xml version ... y ... </HuellaTBAI> los extremos?

Duda 2: Como no se exactamente si esos son los extremos del xml a firmar, no se si el codigo python que empleo funciona bien o no, los pasos que sigue el codigo es primero calcular el hash utilizando SHA-256, eso me da una cadena hexadecimal, que creo se debe firmar con la clave privada y luego codificar en base64 el hash firmado. Pero nunca consigo obtener el valor <dsigestValue>/j7C3YYEt9b1T0E4p6mUo9rtdiLxNXKnR6eKQB1KlSQ=</dsigestValue>, haga lo que haga obtengo otros.
Yo debería conseguir ese mismo valor de DigestValue tomando ese mismo ejemplo de factura xml, verdad?
Gracias a quien me lea y agradecería mucho un poco de luz en esto, no se si lo estoy entendiendo mal y no es así.
Responder Con Cita