En Bolivia se esta implementando el sistema de facturacion en linea hace mas de dos años
El SIN (Sistema de Impuestos Nacionales) definio dos tipos de facturacion en linea: Con y Sin Firma digital
Ahora me toco el tema de la firma digital
El proceso de firmado del XML de la factura es:
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.
Llegue al paso 7 donde al HASH de la firma la tengo que ENCRIPTAR con el algoritmo RSA-SHA256.
En xHarbour creo que solo se lo puede hacer hacer esto con OpenSSL
Ya tengo mi programa enlazado con: hbssl, libeay32, ssleay32 ,libssl, libcrypto
Alguien me puede dar una mano para hacer el proceso de encriptacion con RSA-SHA256.
- Como debo usar las funciones de OpenSSL
- Podria usar, tambien, OpenSSL.exe para hacer el proceso en forma externa con RunCMD()
De antemano, gracias por la respuesta
Atentamente
Rolando
Cochabamba, Bolivia
PD: trabajo con FWH, xHarbour, ADS