Crear HBSSL.LIB con CMS para firma de Xml

Re: Crear HBSSL.LIB con CMS para firma de Xml

Postby Antonio Linares » Sun Jun 04, 2023 8: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: Select all  Expand view
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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Crear HBSSL.LIB con CMS para firma de Xml

Postby acuellar » Sun Jun 04, 2023 3:41 pm

PERFECTO!!

Muchas gracias estimado Antonio
Saludos,

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

Re: Crear HBSSL.LIB con CMS para firma de Xml

Postby acuellar » Wed Jun 07, 2023 8: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: Select all  Expand view

#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: Select all  Expand view

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.
User avatar
acuellar
 
Posts: 1593
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Crear HBSSL.LIB con CMS para firma de Xml

Postby acuellar » Thu Jun 08, 2023 10:53 am

Buenas estimados

Me pasaron este código en PHP, cómo implementarlo en FWH?
Code: Select all  Expand view

$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.
User avatar
acuellar
 
Posts: 1593
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Crear HBSSL.LIB con CMS para firma de Xml

Postby acuellar » Fri Jun 09, 2023 11:19 am

Buenas estimados

Alguna ayudita porfa
Saludos,

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

Re: Crear HBSSL.LIB con CMS para firma de Xml

Postby karinha » Fri Jun 09, 2023 1:49 pm

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

Re: Crear HBSSL.LIB con CMS para firma de Xml

Postby acuellar » Fri Jun 09, 2023 3: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.
User avatar
acuellar
 
Posts: 1593
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Crear HBSSL.LIB con CMS para firma de Xml

Postby karinha » Fri Jun 09, 2023 3:27 pm

Estimado, mira:

Code: Select all  Expand view

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

Re: Crear HBSSL.LIB con CMS para firma de Xml

Postby karinha » Fri Jun 09, 2023 3:43 pm

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

Re: Crear HBSSL.LIB con CMS para firma de Xml

Postby acuellar » Fri Jun 09, 2023 9:48 pm

Muchas Gracias Estimado Joao

Intentaré con COPICOM
Saludos,

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

Previous

Return to FiveWin para Harbour/xHarbour

Who is online

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