FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Crear HBSSL.LIB con CMS para firma de Xml
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Crear HBSSL.LIB con CMS para firma de Xml
Posted: Sun Jun 04, 2023 08:54 AM
Estimado Adhemar,

Las librer铆as de Harbour para MSVC32 incluyendo hbssl:
https://github.com/FiveTechSoft/harbour_and_xharbour_builds/blob/master/harbour_msvc32_hbssl.zip

go32.bat
Code (fw): Select all Collapse
call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86
c:\harbour\bin\win\msvc\hbmk2 test.prg hbssl.hbc -llibssl-3 -llibcrypto-3
funcionando correctamente :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Crear HBSSL.LIB con CMS para firma de Xml
Posted: Sun Jun 04, 2023 03:41 PM
PERFECTO!!

Muchas gracias estimado Antonio
Saludos,



Adhemar C.
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Crear HBSSL.LIB con CMS para firma de Xml
Posted: Wed Jun 07, 2023 08:27 PM
Buenas estimados

Retomando el tema, no logro obtener el resultado pedido :( en 茅stos pasos:
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.

He encontrado 茅ste c贸digo que es lo que mas se acerca a lo pedido.
Code (fw): Select all Collapse
#include "FiveWin.ch"
#include "hbssl.ch"

Function Main()
聽LOCAL ctx,cPrivateKey:= cSignXml:= encrypted:=""

#pragma __cstream|cPrivateKey:=%s
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCuC5IblBnw55fc
3KdSHXmPFP1Id/QXznhCaX4bPMOQBZXdu7WvOlT0cEbfhFiJZVFozvTfZYDOlfCm
MtJY6+kKihJTtQopp5cnzllJW1xtcvHWdGI+8J1fCll6wLK718tMBIQISktS/Z/X
i17mlX7jDslSV+/sKDyGvxHSQwKwbCKvpM9c5pcsV7tsYjP/BcZ/DhaHcy4Pf30n
CSKM+dmjdou+dIE6sFiB2lgVAMC+kQo7R+QN5ZKjGDaS+30f//TjNNJOUPR+tKe+
GPLgqgKivvMDJuOWvuY6KzRJyQAh3erykX/DFXTEcMTN6zUy4eP4A2PanmRFiH5M
VAlgZAHtAgMBAAECggEAF3Qgts2w5zlWSiGD/LlTGbhy31Km1pRwuUZdA4+fLOfL
x8sVUy0xqJT+v/0mLzGzlEObVQVpI62p9cOQfAIib9SmXphda7qVUHxqpMuGe4tL
UqJxYNjs5BNRdozEKTMNxssu/a0BVIgwA4xY+Aq6RB/Iemu2PaU4btINtT9pe9uF
tMYPlsoGtxq7Z7ulxc2szBe66PGuzd7ojKUf8XyjunhEcjuU9z+6//rl6EV4VkgF
Rk1uT6Uyj5vsYsNu7noNyjAp7nhuS4fm1/hJfxR3iRSTIJtUtP7kS5vQk2VipWdO
SnKmPciXVaNVe+S44ZGWYoKBPap77PVUiajXc5t/kQKBgQDXA3YQRGUl5+kPCllQ
l9psavX/4dlLnOWRdIuTeutPRcjlpyEdoeUCVs+ZZtroeriGr6cwFXni0FPCASm9
JNFx8zvg1VjVjXLsLi6+0kvEEd9xVMyQN4Ixap554EjeT1/vxMsdO3moAvS1xyBp
VpAgwdqht3IV5QTFF2X/b40xmQKBgQDPOODkFnG3f9fPOfzJNuv38wElIqnZaqcR
lPZF9jKfjWfhEMJju3FWui73sW1LgrkXFKTftbTb3/i0b/ez9EER7Inu+crG+2WF
XCPYY1wJvEczureRd69Xjx9iICoGSmJk7lpQuBR4S4umdpqnu/TF60YsTEF+PIi5
TvpxLhNvdQKBgQClJhFvGTmfzetjFA3aK2kn0Vg2PKEMxOxHtv7mPomzD+TpEGAN
RKaED23RZAFMg8ZsHUsLUdOW9XEAGKiYkUkWfz9EyFo9XTIiWq6o/xoW9atsfzfI
pfooPr6O2kjeCJWlssBYKbCd7fdMEDDC+CwoHP3zLNZCHvB0+i3r7yDCMQKBgC3q
A2JmWrH24KFozsrioWwh6roIsSucRwJNSDf+Mf9KPJ8QsJGagaVewXNeW8IkZ9Bm
YZWz1Cv3t0p7mJ3F2/kVuQY7UKPAJiFjZgnXEhiSIBClKXFQ3IgBDUoXqFgWeTC1
40sJTnfM/VdX5jKOIdEMrVK5XrWSwhSVHEahl+rVAoGBAIyoP8k6Z8T4pvWjkfCx
GluOFui7HRSW1SrHdZTSI5vfqx8Sj5bcCxVlsw67YcYkWot7t505HHtr/O2a6E2Q
RQEleHzBzbNS+GHDzR46/fa1YgDCRBDT5GzV/0mbOIQOv6zNwBaM8JvlJakYbjpe
wTTPUjAZesdQLrx4AhvTAD9D
-----END PRIVATE KEY-----
#pragma __endtext
*
#pragma __cstream|cSignXml:=%s
聽 聽 <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
聽 聽 聽 聽 <SignedInfo>
聽 聽 聽 聽 聽 聽 <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"></CanonicalizationMethod>
聽 聽 聽 聽 聽 聽 <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"></SignatureMethod>
聽 聽 聽 聽 聽 聽 <Reference URI="">
聽 聽 聽 聽 聽 聽 聽 聽 <Transforms>
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"></Transform>
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"></Transform>
聽 聽 聽 聽 聽 聽 聽 聽 </Transforms>
聽 聽 聽 聽 聽 聽 聽 聽 <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
聽 聽 聽 聽 聽 聽 聽 聽 <DigestValue>D4SjxwIFg+bOkVaVXo3K+e0C4bfTYrhXHfojtnvjLuo=</DigestValue>
聽 聽 聽 聽 聽 聽 </Reference>
聽 聽 聽 聽 </SignedInfo>
聽 聽 聽 聽 <SignatureValue></SignatureValue>
聽 聽 聽 聽 <KeyInfo>
聽 聽 聽 聽 聽 聽 <X509Data>
聽 聽 聽 聽 聽 聽 聽 聽 <X509Certificate></X509Certificate>
聽 聽 聽 聽 聽 聽 </X509Data>
聽 聽 聽 聽 </KeyInfo>
聽 聽 </Signature>
#pragma __endtext

聽 cNewXml:="D:\Sistemas\NewFact.xml"
聽//6. Tomar la secci贸n de la firma y obtener un HASH del mismo aplicando el algoritmo SHA256.
聽cHash256:=HB_SHA256(cSignXml)
聽 
聽 SSL_init()

聽 聽OpenSSL_add_all_ciphers()

聽 聽ctx := hb_EVP_CIPHER_ctx_create()
聽 聽EVP_CIPHER_CTX_init( ctx )

//7. Encriptar el HASH obtenido utilizando el algoritmo RSA SHA256 con la llave privada.
聽 聽EVP_EncryptInit( ctx, HB_EVP_MD_SHA256, cPrivateKey )
聽 聽EVP_EncryptUpdate( ctx, @encrypted, cHash256 )

//8.Aplicar a la cadena resultante el algoritmo Base64 para obtener una cadena. 聽
聽 聽cRsaSha256:=HB_Base64Encode(encrypted)
聽 聽?cRsaSha256
聽 聽Hb_MemoWrit(cNewXml,cRsaSha256) //Guarda el resultado
聽 聽EVP_cleanup()

Return Nil
//Devuelve 茅ste resultado
n/i+BrTtSV4glcaIxrlGDMNaoUmIH5sZjeKDRM4e9L7VVxBJQahKhA1C6TtFkPwS7Dhz/hqo/izhadVpCLRcpw== //de 88 caracteres y deben ser 344

//El resultado debe ser similar a 茅ste
O7mRo9J7olCzanqMpuUX9vyUMNWcbg7c8LOcUs2Uko48MVtXX1FU2bvSSWdR22u4ptqD8W2pRLIo
s8vtMcsUDWjaH8AY859TDDcN6SYe3g/H9xJIBG6nC/QmBTAarIi89Uc585zhsIOcnhVn5isB/Bmu
T/NLFOaByAY5GYcH0S59iAIttyBf3MetSNO8YUGziaGLQuKprs5jeOMNFdbnMiWSEStjAbmjDmTG
HFiknuW89f5LeRxfBCfRkzUUGk2KO1ILChJGCVwx0G5kS39JCrm+AJNG+EBC7lwulPP427UcNXOJ
X55wF6U1obMHcXlllNGe8/4oboaGUJSHJKj5Rg==
Quiz谩s alguien ya lo haya logrado.

He encontrado 茅ste c贸digo en Java y hay que convertirlo :(
Code (fw): Select all Collapse
import java.security.KeyFactory;
import java.security.Signature;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64;
聽
public class SHA256RSA {
聽 聽 聽
聽 聽 public static void main(String[] args) throws Exception {
聽 聽 聽 聽 String input = "sample input";
聽 聽 聽 聽 聽
聽 聽 聽 聽 // Not a real private key! Replace with your private key!
聽 聽 聽 聽 String strPk = "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9"
聽 聽 聽 聽 聽 聽 聽 聽 + "w0BAQEFAASCBKkwggSlAgEAAoIBAQDJUGqaRB11KjxQ\nKHDeG"
聽 聽 聽 聽 聽 聽 聽 聽 + "........................................................"
聽 聽 聽 聽 聽 聽 聽 聽 + "Ldt0hAPNl4QKYWCfJm\nNf7Afqaa/RZq0+y/36v83NGENQ==\n"
聽 聽 聽 聽 聽 聽 聽 聽 + "-----END PRIVATE KEY-----\n";
聽 聽 聽 聽 聽
聽 聽 聽 聽 String base64Signature = signSHA256RSA(input,strPk);
聽 聽 聽 聽 System.out.println("Signature="+base64Signature);
聽 聽 }
聽
聽 聽 // Create base64 encoded signature using SHA256/RSA.
聽 聽 private static String signSHA256RSA(String input, String strPk) throws Exception {
聽 聽 聽 聽 // Remove markers and new line characters in private key
聽 聽 聽 聽 String realPK = strPk.replaceAll("-----END PRIVATE KEY-----", "")
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽.replaceAll("-----BEGIN PRIVATE KEY-----", "")
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽.replaceAll("\n", "");
聽
聽 聽 聽 聽 byte[] b1 = Base64.getDecoder().decode(realPK);
聽 聽 聽 聽 PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(b1);
聽 聽 聽 聽 KeyFactory kf = KeyFactory.getInstance("RSA");
聽
聽 聽 聽 聽 Signature privateSignature = Signature.getInstance("SHA256withRSA");
聽 聽 聽 聽 privateSignature.initSign(kf.generatePrivate(spec));
聽 聽 聽 聽 privateSignature.update(input.getBytes("UTF-8"));
聽 聽 聽 聽 byte[] s = privateSignature.sign();
聽 聽 聽 聽 return Base64.getEncoder().encodeToString(s);
聽 聽 }
}
Gracias por la ayuda
Saludos,



Adhemar C.
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Crear HBSSL.LIB con CMS para firma de Xml
Posted: Thu Jun 08, 2023 10:53 AM
Buenas estimados

Me pasaron este c贸digo en PHP, c贸mo implementarlo en FWH?
Code (fw): Select all Collapse
$pkeyid = openssl_pkey_get_private( file_get_contents( './datos/privatekey.pem' ) );
$signature = "";
openssl_sign( hash( 'sha256', $data, true ), $signature, $pkeyid, OPENSSL_ALGO_SHA256 );
print( base64_encode( $signature ) 聽);
Gracias por la ayuda
Saludos,



Adhemar C.
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Crear HBSSL.LIB con CMS para firma de Xml
Posted: Fri Jun 09, 2023 11:19 AM

Buenas estimados

Alguna ayudita porfa

Saludos,



Adhemar C.
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Crear HBSSL.LIB con CMS para firma de Xml
Posted: Fri Jun 09, 2023 01:49 PM
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Crear HBSSL.LIB con CMS para firma de Xml
Posted: Fri Jun 09, 2023 03:23 PM
Muchas Gracias estimado Joao

El problema no es con el Base64 :(
Es en la generaci贸n del RSA SHA256

En 茅sta p谩gina se puede obtener el resultado en l铆nea
https://8gwifi.org/rsasignverifyfunctions.jsp

El resultado que muestra en Signature Output es lo que necesito

Gracias por la ayuda
Saludos,



Adhemar C.
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Crear HBSSL.LIB con CMS para firma de Xml
Posted: Fri Jun 09, 2023 03:27 PM
Estimado, mira:
Code (fw): Select all Collapse
聽 聽hb_SHA256(<cBuffer> [, <lBin>]) cDigest

聽 聽hb_SHA384(<cBuffer> [, <lBin>]) cDigest

聽 聽hb_SHA512(<cBuffer> [, <lBin>]) cDigest
http://www.pctoledo.com.br/forum/viewtopic.php?f=54&t=26086&hilit=SHA256

http://www.pctoledo.com.br/forum/viewtopic.php?f=43&t=18814&p=157557&hilit=SHA256#p157557

http://www.pctoledo.com.br/forum/viewtopic.php?f=20&t=26395&p=157556&hilit=SHA256#p157556

http://www.pctoledo.com.br/forum/viewtopic.php?f=28&t=26547&hilit=SHA256

Estimado:

en el: http://www.pctoledo.com.br/forum/index.php haga una busqueda por "Assinar sha256"

Assinar = Para firmar(Espa帽ol)

Regards, saludos.
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Crear HBSSL.LIB con CMS para firma de Xml
Posted: Fri Jun 09, 2023 03:43 PM
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Crear HBSSL.LIB con CMS para firma de Xml
Posted: Fri Jun 09, 2023 09:48 PM

Muchas Gracias Estimado Joao

Intentar茅 con COPICOM

Saludos,



Adhemar C.

Continue the discussion