Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-10-2010
ifarias ifarias is offline
Miembro
 
Registrado: sep 2004
Posts: 23
Poder: 0
ifarias Va por buen camino
edgaronfo.

Supongo que sí es el problema la versión de Delphi, ya que con la versión 7 no hay problema, deberías revisar si los parámetros que le pasas al libeay32.dll son correctos, ya que esto puede ser tu problema.
Responder Con Cita
  #2  
Antiguo 02-10-2010
edgaronfo edgaronfo is offline
Miembro
 
Registrado: jul 2007
Posts: 33
Poder: 0
edgaronfo Va por buen camino
Smile

Cita:
Empezado por ifarias Ver Mensaje
edgaronfo.

Supongo que sí es el problema la versión de Delphi, ya que con la versión 7 no hay problema, deberías revisar si los parámetros que le pasas al libeay32.dll son correctos, ya que esto puede ser tu problema.
Sip, definitivamente tiene que ver con la versión del delphi y la forma en la que maneja los tipos...

Oye, pero de lo que me estoy dando cuenta es que esta función (getNoCertificado) regresa como string un array de chars (array [0..19] of char) que contiene el numero de certificado en formato big-endian, estoy en lo correcto?

Entonces lo que me regresa es un numero en binario en formato big endian... Alguien sabe cómo lo paso a formato string entendible? como que tengo que usar Ord() o algo asi, no?

Siento que es una tontería lo que me está pasando aquí... ustedes que hacen con el valor en string que regresa getNoCertificado() ?... así como viene se lo pasan al xml? o lo transforman primero?

Gracias!
Responder Con Cita
  #3  
Antiguo 02-10-2010
Morrismx Morrismx is offline
Registrado
 
Registrado: ago 2010
Posts: 6
Poder: 0
Morrismx Va por buen camino
GetNoCertificado en Delphi 2010

Hola, yo tuve el mismo problema con Delphi 2010 y tuve que corregir la funcion. Aqui esta como quedo y funciona bien.


Código Delphi [-]
 
function GetNoCertificado(const AFileName: string): string;
var
bp: pBIO;
fn: PAnsiChar;
x: pX509;
x509: pX509;
bn: pBIGNUM;
num: array [0..19] of AnsiChar;
begin
InitOpenSSL;
fn := PAnsiChar(ansistring(AFileName));
bp := BIO_new(BIO_s_file());
BIO_read_filename(bp, Pchar(fn));
x := X509_new;
x509 := PEM_read_bio_X509(bp, x, nil, nil);
bn := ASN1_INTEGER_to_BN(X509_get_serialNumber(x509), nil);
BN_bn2bin(bn, @num[0]);
BN_free(bn);
X509_free(x509);
BIO_free(bp);
Result := num;
EVP_cleanup;
end;





Espero que te sirba, la gran diferencia es que Delphi 2010 usa Unicode en los carcteres, entonces el Char ya no es de 1 byte, ahora es de 2.
Responder Con Cita
  #4  
Antiguo 02-10-2010
edgaronfo edgaronfo is offline
Miembro
 
Registrado: jul 2007
Posts: 33
Poder: 0
edgaronfo Va por buen camino
Smile pregunta sobre el resultado devuelto

Cita:
Empezado por Morrismx Ver Mensaje
Hola, yo tuve el mismo problema con Delphi 2010 y tuve que corregir la funcion.

Espero que te sirba, la gran diferencia es que Delphi 2010 usa Unicode en los carcteres, entonces el Char ya no es de 1 byte, ahora es de 2.
Muchas gracias Morrismx, observe bien la función que posteaste también tuve que hacer el mismo typecast a PChar al llamar BIO_read_filename y ya corre el programa, pero veo que el error que me marca ahora no es por eso, sino por el resultado que me da la función.

Una pregunta, usaste el XML DATA BIND del delphi para manejar tu xml??

porque el error que me marca ahora es cuando intento asignarle el resultado de la función a mi atributo NoCertificado en el xml:
Código Delphi [-]
CFD.NoCertificado := GetNoCertificado('aaa010101aaa_CSD_01.cer.pem');
EOleException : 'se encontró un carácter no válido en el contenido del texto'

Es decir, le hiciste algo al resultado antes de pasárselo a NoCertificado?

algo como:
Código Delphi [-]
CFD.NoCertificado := BinaryToStr(GetNoCertificado('aaa010101aaa_CSD_01.cer.pem'));

Muchas gracias.
Responder Con Cita
  #5  
Antiguo 02-10-2010
Morrismx Morrismx is offline
Registrado
 
Registrado: ago 2010
Posts: 6
Poder: 0
Morrismx Va por buen camino
Certificado

Hola,

No le doy ningun tratamiento especial, la funcion regresa un String y en mi caso uso ese string y lo meto a la base de datos y archivo XML

Código Delphi [-]
procedure TFrmFacturacion.Button1Click(Sender: TObject);
var
NoCertificado:String;
begin
NoCertificado:=GetNoCertificado(ExtractFilePath(Application.ExeName)+'aaa010101aaa_CSD_01.cer.pem');
Label1.Caption:=NoCertificado;
end;


Saludos
Morris
Responder Con Cita
  #6  
Antiguo 02-10-2010
edgaronfo edgaronfo is offline
Miembro
 
Registrado: jul 2007
Posts: 33
Poder: 0
edgaronfo Va por buen camino
Unhappy Regreso misterioso

Cita:
Empezado por Morrismx Ver Mensaje
Hola,

No le doy ningun tratamiento especial, la funcion regresa un String y en mi caso uso ese string y lo meto a la base de datos y archivo XML

Código Delphi [-]
procedure TFrmFacturacion.Button1Click(Sender: TObject);
var
NoCertificado:String;
begin
NoCertificado:=GetNoCertificado(ExtractFilePath(Application.ExeName)+'aaa010101aaa_CSD_01.cer.pem');
Label1.Caption:=NoCertificado;
end;

Saludos
Morris

Híjole, a mí me regresa:
〱〰㈱〰〰〰〰㈰㔲㜱䓻@篖@텐·V

Entonces creo que estará perdiendo el apuntador de la cadena de regreso o algo por el estilo... o será la versión del libeay32.dll???
Responder Con Cita
  #7  
Antiguo 02-10-2010
Morrismx Morrismx is offline
Registrado
 
Registrado: ago 2010
Posts: 6
Poder: 0
Morrismx Va por buen camino
Edgar, asegurate de hacer los cambios a la funcion

Código Delphi [-]
function GetNoCertificado(const AFileName: string): string;
var
bp: pBIO;
fn: PAnsiChar;
x: pX509;
x509: pX509;
bn: pBIGNUM;
num: array [0..19] of AnsiChar;  <<==== Este es el cambio
begin
InitOpenSSL;
fn := PAnsiChar(ansistring(AFileName));
bp := BIO_new(BIO_s_file());
BIO_read_filename(bp, Pchar(fn));
x := X509_new;
x509 := PEM_read_bio_X509(bp, x, nil, nil);
bn := ASN1_INTEGER_to_BN(X509_get_serialNumber(x509), nil);
BN_bn2bin(bn, @num[0]);
BN_free(bn);
X509_free(x509);
BIO_free(bp);
Result := num;
EVP_cleanup;
end;

el resto de la funcion no cambia, solo reemplza Char por AnsiChar y listo

dejame saber si te funciona

saludos
Morris
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Mexico - Como crear sellos en FACTURA ELECTRONICA.. pcicom API de Windows 12 10-11-2012 18:46:55
Factura Electrónica aig Varios 13 10-12-2010 17:12:44
factura electronica cmm07 Varios 4 02-04-2009 17:46:03
factura electronica spia Varios 2 22-02-2009 21:30:06
Factura electronica AUNA Aprendiz Varios 5 01-09-2005 10:44:15


La franja horaria es GMT +2. Ahora son las 00:34:54.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi