Cita:
Empezado por felipep
Anexo una modificación al código enviado en donde puedes obtener varias veces el sello al limpiar bien la memoria y puedes también obtener los datos del certificado.
Ojalá sea de utilidad
|
Usando las rutinas que amablemente nos proporcionó felipep, Genero la cadena, el archivo xml, etc, con su sello. Solo que al querer validarlo en la pagina del SAT, me marca que el sello no es válido.
Ya revisé la cadena y está correcta, de hecho me genera el mismo MD5 que genera el validador del SAT.
Alguien ha validado los .xml con el Sello?? . Las rutinas que utilizo son las siguientes...
Código:
function SelloDigital(llaveprivada, cadenaoriginal: widestring): String;
var
Len : cardinal;
mdctx : EVP_MD_CTX;
inbuf : array [0..8192] of char;
outbuf : array [0..1023] of char;
key: pEVP_PKEY;
begin
cadenaoriginal := AnsiReplaceStr(cadenaoriginal,#13,'');
cadenaoriginal := AnsiReplaceStr(cadenaoriginal,#10,'');
cadenaoriginal := AnsiReplaceStr(cadenaoriginal,#8,'');
cadenaoriginal := AnsiReplaceStr(cadenaoriginal,' ','');
cadenaoriginal := AnsiReplaceStr(cadenaoriginal,' |','|');
cadenaoriginal := AnsiReplaceStr(cadenaoriginal,'| ','|');
cadenaoriginal := UTF8Encode(cadenaoriginal);
StrPCopy(inbuf,cadenaoriginal);
InitOpenSSL;
key:=LoadPrivateKey(llaveprivada,'');
// EVP_MD_CTX_init(@mdctx);
EVP_SignInit(@mdctx,EVP_md5());
EVP_SignUpdate(@mdctx,@inbuf,Length(inbuf));
EVP_SignFinal(@mdctx,@outbuf,Len,key);
// EVP_MD_CTX_cleanup(@mdctx);
EVP_PKEY_free(key);
FreeOpenSSL;
result := bintobase64(@outbuf,Len);
end;
Alguna sugerencia ????