FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Interpretaci贸n de pasos a seguir
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Interpretaci贸n de pasos a seguir
Posted: Wed May 24, 2023 03:02 PM
Buenas estimados

No le estoy entendiendo y necesito me ayuden a interpretar los pasos para la Firma Digital
Code (fw): Select all Collapse
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.
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Interpretaci贸n de pasos a seguir
Posted: Wed May 24, 2023 07:44 PM
Buenas estimados

Con 茅stas funciones se llega hasta el paso 5
Code (fw): Select all Collapse
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.
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Interpretaci贸n de pasos a seguir
Posted: Wed May 24, 2023 08:07 PM
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Interpretaci贸n de pasos a seguir
Posted: Thu May 25, 2023 06: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.
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Interpretaci贸n de pasos a seguir
Posted: Thu May 25, 2023 08: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 (fw): Select all Collapse
#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.
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Interpretaci贸n de pasos a seguir
Posted: Fri May 26, 2023 02:28 PM
Buenas estimados

Me han pasado 茅ste c贸digo
Code (fw): Select all Collapse
$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.
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Interpretaci贸n de pasos a seguir
Posted: Fri May 26, 2023 02:50 PM
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Interpretaci贸n de pasos a seguir
Posted: Fri May 26, 2023 03:53 PM

Muchas gracias estimado Jo茫o

Lo revisar茅

Saludos,



Adhemar C.
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Interpretaci贸n de pasos a seguir
Posted: Fri May 26, 2023 04:06 PM
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341

Continue the discussion