Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-07-2014
Alexis De la Cr Alexis De la Cr is offline
Miembro
 
Registrado: may 2006
Ubicación: Puebla
Posts: 124
Poder: 18
Alexis De la Cr Va por buen camino
Actualizacion de unidad sello.pas XE2

Buenas noches estimados colegas.

Hasta hace unos dias, la plataforma sobre la que programaba era Delphi 2007, pero por causas ajenas a mi, he tenido que migrar a la version XE2. Obviamente hubo que hacer mucha talacha, ya que con la incorporacion del famoso unicode, el codigo en 2007 ya no funciona corectamente en XE2, especificamente hablando de la unidad sello.pas con la cual se generan los sellosdigitales de los CFDIs. He logrado actualizar todas las rutinas de dicha unidad y aparentemente funcionan bien, pero la realidad es que el sello digital, no lo devuelve correctamente, por lo tanto a la hora de hacer la validacion, se rechaza el dicho sello. He estado buscando mas información en al web y creo que ya me agote todos los recursos existentes. He parado un rato con la unidad sello.pas para intentar con los componentes lockbox 3, pero tambien no he logrado sacar el sello correctamente. Ahora vuelvo otra vez a intentar ajustar la unidad sello.pas.

ya he bajado las versiones mas actualizadas de la unidad libeay32.pas, asi como de la libreria libeay32.dll y nada, sigue generandome el mismo sello invalido. he incluso monitoreado las variables que devuelven las rutinas de la libreria y he notado un cierto desfase, pero no se a que se como corregirlo. les envio dichos datos.

Datos Generados con la Version 2007
Cita:
Tamaño en Bytes de la Cadena Original: 4
Longitud de la Cadena Original: 626
Tamaño en Byes de inbuf: 8193
Longitud De la Cadena Orginal en UTF8: 628

key:=LoadPrivateKey(llaveprivada,'');

Valores de la Varible Key:
ktype: 6, save_type: 6, references: 1
pkey.ptr: , key.pkey.dsa.pad: 0, key.pkey.dsa.version: 0, key.pkey.dsa.write_params: 1662324256
key.pkey.dsa.flags: 20384720,key.pkey.dsa.references: 0
save_parameters: 1

EVP_SignInit(@mdctx,EVP_sha1());

Valores de la Varible mdctx:
digest._type: 64, digest.pkey_type: 65, digest.md_size: 20
sha.h0: 0, sha.h1: 0, sha.h2: 20384992, sha.h3: 0, sha.h4: 0
sha.Nl: 0, sha.Nh: 0, sha.num: 0
sha.data[0]: 0, sha.data[1]: 0, sha.data[2]: 0, sha.data[3]: 0, sha.data[4]: 0
sha.data[5]: 0, sha.data[6]: 0, sha.data[7]: 0, sha.data[8]: 0, sha.data[9]: 0
sha.data[10]: 0, sha.data[11]: 0, sha.data[12]: 0, sha.data[13]: 0, sha.data[14]: 0
sha.data[15]: 0, sha.data[16]: 0

sello
T8HRuNbBCpywc4fw7uWQEaM3qNNo0Iv3wQqomJx2ADYTxkCRBDBvBcDqnIo1KRj+KeDtEeI1CbH+AM6o8LZE/r2YZb4Tq7y08qqeVitvdxer2zokj5Sclnc0x/JthBlv72R0ZhWFaV/JI79dJBid48FwcfCiWYwMc+gXoguACwo=
Aplicando la misma cadena original, al mismo xml de ejemplo, pero en delphi xe2 me devuelve
Cita:
Tamaño en Bytes de la Cadena Original: 4
Longitud de la Cadena Original: 626
Tamaño en Bytes de inbuf: 1000000
Longitud De la Cadena Orginal en UTF8: 628

key:=LoadPrivateKey(llaveprivada,'');

Valores de la Varible Key:
ktype: 6, save_type: 6, references: 1
pkey.ptr: , key.pkey.dsa.pad: 0, key.pkey.dsa.version: 0, key.pkey.dsa.write_params: 1662324256
key.pkey.dsa.flags: 26449360,key.pkey.dsa.references: 0
save_parameters: 1

EVP_SignInit(@mdctx,EVP_sha1());

Valores de la Varible mdctx:
digest._type: 64, digest.pkey_type: 65, digest.md_size: 20
sha.h0: 0, sha.h1: 0, sha.h2: 26447576, sha.h3: 0, sha.h4: 0
sha.Nl: 0, sha.Nh: 0, sha.num: 0
sha.data[0]: 0, sha.data[1]: 0, sha.data[2]: 0, sha.data[3]: 0, sha.data[4]: 0
sha.data[5]: 0, sha.data[6]: 0, sha.data[7]: 0, sha.data[8]: 0, sha.data[9]: 0
sha.data[10]: 0, sha.data[11]: 0, sha.data[12]: 0, sha.data[13]: 0, sha.data[14]: 0
sha.data[15]: 0, sha.data[16]: 0

sello (Invalido)
fyppu5HOjV4YcpRUVNqvy1Z6Dwk/SnbxaC8OeiRV1UDZiAwlWA7TRrMpWxkIBvc32U1OhV8hp5hq3DjfxGfK+YFLlTpiZenIdzxSfZZX5Uf0Rk3XU4tIR3W2IwmgrQ5j hzuc78EG9RwoI9Hl+oR9MtDKWesEtMWxUAo/JJiKinU=
Noto que hay una diferencia en la varible key, en el valor key.pkey.dsa.flags que pasa de 20384720 a 26449360 y lo mismo sucede en la variable mdctx valor sha.h2, aumenta de tamaño en exactamente la misma cantidad en ambos casos. No se si este sea el problema, pero sospecho que debe ser algun tipo de dato que este afectando.

Alguien sabe a que se refieren ls valores dsa flags y sha ha2?

Cualquier ayuda sera bienvenida. Muchas Gracias.
Responder Con Cita
  #2  
Antiguo 07-07-2014
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Adaptar bibliotecas para funcionar con Unicode en las nuevas versiones de Delphi es una tarea común en estos días. Pero ¿qué te dice el autor de "sello.pas"?
Responder Con Cita
  #3  
Antiguo 07-07-2014
Alexis De la Cr Alexis De la Cr is offline
Miembro
 
Registrado: may 2006
Ubicación: Puebla
Posts: 124
Poder: 18
Alexis De la Cr Va por buen camino
Estimado AL, gracias por contestar. Pues te comento que esta unidad no tengo idea quien la halla creado, no se si la persona que la subió aquí al foro es su creador, pero como casi todo lo que es código abierto, pues es casi imposible obtener soporte técnico. Ahora bien, se me ocurrio "ver" lo que contenía cada una de las variables en sus distintos procesos, y esto fue lo que obtuve al codificar a base64 lo que contenia en memoria las variables, y esto fue lo que obtuve.

delphi 2007
Cita:
inbuf array de char

base64 de inbuf despues de StrPCopy(inbuf,cadena):
fHwzLjJ8MjAxNC0wNy0wNFQxODozNToyMXxpbmdyZXNvfFBBR08gRU4gVU5BIFNPTEEgRVhISUJJQ0lPTnwzOC43OXwxLjAwfE1Y Tnw0NS4wMHxFRkVDVElWT3xWSUxMQUhFUk1PU0EgVEFCQVNDT3xDVUFFNzExMTE4VU05fEVEV0lOIEFMRVhJUyBERSBMQSBDUlVa IEFTQ0VOQ0lPfEVESUZJQ0lPIDV8MjAxLUF8Q09MLiBGT1ZJU1NTVEUgMnxWSUxMQUhFUk1PU0F8Q0VOVFJPfFRBQkFTQ098TcOJ WElDT3w4NjE3MHxFRElGSUNJTyA1fDIwMS1BfENPTC4gRk9WSVNTU1RFIDJ8VklMTEFIRVJNT1NBfENFTlRST3xUQUJBU0NPfE1F WElDT3w4NjE3MHxQRVJTT05BIEZJU0lDQSBDT04gQUNUSVZJREFEIEVNUFJFU0FSSUFMfFhBWFgwMTAxMDEwMDB8VkVOVEEgQUwg UFVCTElDT3xBVi4gR1JFR09SSU8gTUVOREVaIE1BR0HDkUF8IzQwMjN8Q09MLiBUQU1VTFRFIERFIExBUyBCQVJSQU5DQVN8VklM TEFIRVJNT1NBfENFTlRST3xUQUJBU0NPfE1FWElDT3w4NjE1MHwxLjAwfFBaQS58TElKQSBBR1VBICMxMDB8TElKQSBERSBBR1VB ICMgMTAwfDguNjJ8OC42MnwxLjAwfFBpZXphfEIuQ0FMWk9NSU5BLjR8QlJPQ0hBIENBTFpPTUlOQSA0IiBQRVJGRUNUfDMwLjE3 fDMwLjE3fElWQXwxNi4wMHw2LjIxfDYuMjF8fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Delphi XE2
Cita:
inbuf array de AnsiChar, ya que si se deja como char, delphi xe2 lo toma como WideChar.

base64 de inbuf despues de StrPCopy(inbuf,cadena):
fHwzLjJ8MjAxNC0wNy0wNFQxODozNToyMXxpbmdyZXNvfFBBR08gRU4gVU5BIFNPTEEgRVhISUJJQ0lPTnwzOC43OXwxLjAwfE1Y Tnw0NS4wMHxFRkVDVElWT3xWSUxMQUhFUk1PU0EgVEFCQVNDT3xDVUFFNzExMTE4VU05fEVEV0lOIEFMRVhJUyBERSBMQSBDUlVa IEFTQ0VOQ0lPfEVESUZJQ0lPIDV8MjAxLUF8Q09MLiBGT1ZJU1NTVEUgMnxWSUxMQUhFUk1PU0F8Q0VOVFJPfFRBQkFTQ098TclY SUNPfDg2MTcwfEVESUZJQ0lPIDV8MjAxLUF8Q09MLiBGT1ZJU1NTVEUgMnxWSUxMQUhFUk1PU0F8Q0VOVFJPfFRBQkFTQ098TUVY SUNPfDg2MTcwfFBFUlNPTkEgRklTSUNBIENPTiBBQ1RJVklEQUQgRU1QUkVTQVJJQUx8WEFYWDAxMDEwMTAwMHxWRU5UQSBBTCBQ VUJMSUNPfEFWLiBHUkVHT1JJTyBNRU5ERVogTUFHQdFBfCM0MDIzfENPTC4gVEFNVUxURSBERSBMQVMgQkFSUkFOQ0FTfFZJTExB SEVSTU9TQXxDRU5UUk98VEFCQVNDT3xNRVhJQ098ODYxNTB8MS4wMHxQWkEufExJSkEgQUdVQSAjMTAwfExJSkEgREUgQUdVQSAj IDEwMHw4LjYyfDguNjJ8MS4wMHxQaWV6YXxCLkNBTFpPTUlOQS40fEJST0NIQSBDQUxaT01JTkEgNCIgUEVSRkVDVHwzMC4xN3wz MC4xN3xJVkF8MTYuMDB8Ni4yMXw2LjIxfHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Al principio las cadenas que nos devuelve la codificacion base64 coinciden, hasta aproximadamente la tercera linea justo antes del final donde estan los caracteres PfFRBQkFTQ098Tc. A partir de alli ya cambia, por lo tanto todos los siguientes procesos ya no generan el resultado deseado.

Alguna sugerencia? gracias
Responder Con Cita
  #4  
Antiguo 10-07-2014
Alexis De la Cr Alexis De la Cr is offline
Miembro
 
Registrado: may 2006
Ubicación: Puebla
Posts: 124
Poder: 18
Alexis De la Cr Va por buen camino
Finalmente, tras 6 semanas de stress, desvelos, litros y litros de refreso de cola, litros y litros de cafe, por fin hoy he podido timbrar un CFDI con Delphi XE2. El problema radicaba en el tratamiento que se le da a la cadena original, ya que cuando hay conversiones, se corre el riesgo de perdidas de datos, que es lo que estaba sucediendo, de ahi que el simple hecho de copiar la cadena original a la variable inbuf, generara un valor distinto.

Saludos
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
Unidad de Red ander Varios 2 17-03-2011 08:48:06
Vista, BDE, Unidad de red torito Varios 0 22-04-2008 01:18:09
Impresion de fondo como sello de agua camino Impresión 6 02-11-2007 21:57:29
Titulo en la Unidad RolphyReyes Varios 9 09-05-2007 20:18:28
unidad A joHn je@N API de Windows 4 25-06-2005 02:31:09


La franja horaria es GMT +2. Ahora son las 10:18:32.


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