Interpretación de pasos a seguir

Post Reply
User avatar
acuellar
Posts: 1645
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Interpretación de pasos a seguir

Post by acuellar »

Buenas estimados

No le estoy entendiendo y necesito me ayuden a interpretar los pasos para la Firma Digital

Code: Select all | Expand

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: 1645
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Interpretación de pasos a seguir

Post by acuellar »

Buenas estimados

Con éstas funciones se llega hasta el paso 5

Code: Select all | Expand

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
karinha
Posts: 7885
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: Interpretación de pasos a seguir

Post by karinha »

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
acuellar
Posts: 1645
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Interpretación de pasos a seguir

Post by acuellar »

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: 1645
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Interpretación de pasos a seguir

Post by acuellar »

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

#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: 1645
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Interpretación de pasos a seguir

Post by acuellar »

Buenas estimados

Me han pasado éste código

Code: Select all | Expand

$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
karinha
Posts: 7885
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: Interpretación de pasos a seguir

Post by karinha »

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
acuellar
Posts: 1645
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Interpretación de pasos a seguir

Post by acuellar »

Muchas gracias estimado João

Lo revisaré
Saludos,

Adhemar C.
User avatar
karinha
Posts: 7885
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: Interpretación de pasos a seguir

Post by karinha »

Mira, és un poco complicado esto:

https://groups.google.com/g/harbour-use ... M-X5K1CwAJ

Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Post Reply