Interpretación de pasos a seguir

Interpretación de pasos a seguir

Postby acuellar » Wed May 24, 2023 3:02 pm

Buenas estimados

No le estoy entendiendo y necesito me ayuden a interpretar los pasos para la Firma Digital
Code: Select all  Expand view

Proceso de Firmado

A efectos de poder firmar un documento, es necesario disponer de una llave pública y una privada; tener implementado algoritmos de conversión a Base 64, canonicalización, SHA256 y RSA Sha256 V2 y seguir los siguientes pasos:

1. Aplicar el algoritmo de canonicalización al documento XML, es decir realizar un procesamiento que permita obtener su forma canónica o se normalice el documento original.
2. Aplicara al resultado el algoritmo sha256 a objeto de obtener el HASH.
3. Obtener una cadena aplicando al anterior HASH el algoritmo Base64.
4. Adicionar las etiquetas de signature al XML.
5. Agregar a la etiqueta Digest Value el valor obtenido en el paso 4.
6. Tomar la sección de la firma y obtener un HASH del mismo aplicando el algoritmo SHA256.
7. Encriptar el HASH obtenido utilizando el algoritmo RSA SHA256 con la llave privada.
8. Aplicar a la cadena resultante el algoritmo Base64 para obtener una cadena.
9. Adicionar a la etiqueta de Signature Value la cadena anterior.
10 Finalmente colocar en la etiqueta X509 Certificate la llave publica.
11. Devolver el XML firmado.
 

Ya tengo el archivo xml

Gracias por la ayuda.
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1593
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Interpretación de pasos a seguir

Postby acuellar » Wed May 24, 2023 7:44 pm

Buenas estimados

Con éstas funciones se llega hasta el paso 5
Code: Select all  Expand view

cDigestValue:=Hb_base64encode(hb_SHA256( hb_memoRead( cFileXml )))

//Me retorna la siguiente cadena
ODFkNzdhNjNkNWMwM2Q5Y2IxNWYzMWVjMmZjYzU0ZmFkOGM0NzY4NWQ2ODMwMTZiZDg4NDdlN2ZkZGNiZWEwMQ== //88 caracteres

//En el ejemplos original de impuestos y en facturas de otros la cadena es de 44 caractes
<DigestValue>WmFvnKBZIr9D37PaYuxM3aoXVu9nDZT+2MI1I+RUh8s=</DigestValue>  //xml de muestra
<DigestValue>khN6myjtIs64rd91kxKyplNHv7dmDo5hJQwfdr0J1VQ=</DigestValue> // de otro contribuyente
<DigestValue>MRYZjjG9coCiKwQ1U3c91kuJI2HUxAwrC1O+IapILX0=</DigestValue> // de otro contribuyente
 


Quizás sea el Hb_base64encode ó el hb_SHA256 :(

Gracias por la ayuda
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1593
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Interpretación de pasos a seguir

Postby karinha » Wed May 24, 2023 8:07 pm

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Interpretación de pasos a seguir

Postby acuellar » Thu May 25, 2023 6:00 pm

Muchas gracias estimado João

He logrado obtener los 44 caracteres.
He realizado pruebas con el archivo xml que proporciona impuestos pero no me da la misma cadena del DigestValue (Quizás el del ejemplo no es el correcto) :(
Cuándo llegue a la validación del xml sabré

Ahora a pasar al siguiente paso

Gracias por la ayuda
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1593
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Interpretación de pasos a seguir

Postby acuellar » Thu May 25, 2023 8:17 pm

Buenas estimados

Me quedé otra vez en el paso 6 :(
6. Tomar la sección de la firma y obtener un HASH del mismo aplicando el algoritmo SHA256.
7. Encriptar el HASH obtenido utilizando el algoritmo RSA SHA256 con la llave privada.
8. Aplicar a la cadena resultante el algoritmo Base64 para obtener una cadena.
9. Adicionar a la etiqueta de Signature Value la cadena anterior.

Code: Select all  Expand view

#include "FiveWin.ch"
*
Function Main()
  cFileXml:="D:\Sistemas\FACTURAS\Factura.xml"
 cReadXml:=Hb_MemoRead(cFileXml)
 cXmlFirma:=Subs(cReadXml,At('<Signature ',cReadXml),1071)
 cSignatureValue:=Hb_SHA256(cXmlFirma)
 cSignatureValue:=hb_Crypt(cSignatureValue,Hb_MemoRead("D:\Sistemas\FACTURAS\privateKey.pem") )
 cSignatureValue:='<SignatureValue>'+hb_base64encode(cSignatureValue)+'</SignatureValue>'
 ?cSignatureValue
Return Nil

//Retorna ésta cadena x6w+15noW6h1CG6ZNkUmH43OolRlAysH/4zi2COTe+HTgb4rDSu6Ucns8az1TFFsSLYy8KoIesM6eclhfOwZRQ== de 88 caracteres
//y debe retornar de 344 a 350
O7mRo9J7olCzanqMpuUX9vyUMNWcbg7c8LOcUs2Uko48MVtXX1FU2bvSSWdR22u4ptqD8W2pRLIo
s8vtMcsUDWjaH8AY859TDDcN6SYe3g/H9xJIBG6nC/QmBTAarIi89Uc585zhsIOcnhVn5isB/Bmu
T/NLFOaByAY5GYcH0S59iAIttyBf3MetSNO8YUGziaGLQuKprs5jeOMNFdbnMiWSEStjAbmjDmTG
HFiknuW89f5LeRxfBCfRkzUUGk2KO1ILChJGCVwx0G5kS39JCrm+AJNG+EBC7lwulPP427UcNXOJ
X55wF6U1obMHcXlllNGe8/4oboaGUJSHJKj5Rg==
 


Gracias por la ayuda
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1593
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Interpretación de pasos a seguir

Postby acuellar » Fri May 26, 2023 2:28 pm

Buenas estimados

Me han pasado éste código
Code: Select all  Expand view

$pkeyid = openssl_pkey_get_private( file_get_contents( './facturas/privatekey.pem' ) );
$signature = "";
openssl_sign( hash( 'sha256', $cFirmaXml, true ), $signature, $pkeyid, OPENSSL_ALGO_SHA256 );
print( base64_encode( $signature )  );
 


Por favor Me ayudan para hacerlo funcionar con FiveWin

Gracias por la ayuda
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1593
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Interpretación de pasos a seguir

Postby karinha » Fri May 26, 2023 2:50 pm

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Interpretación de pasos a seguir

Postby acuellar » Fri May 26, 2023 3:53 pm

Muchas gracias estimado João

Lo revisaré
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1593
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Interpretación de pasos a seguir

Postby karinha » Fri May 26, 2023 4:06 pm

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 78 guests