哪位高手那里有openssl md5withRSA 签名的delphi相关资料或代码

谁那里有openssl md5withRSA 签名的delphi相关资料或代码
如题。
网上搜了一大堆东西,就是没办法拼凑到一起.
------解决思路----------------------
我也弄了2个星期才搞定!首先感谢star1010 提供的2个函数!
第一步:下载indy9 支持ssllib 的2个DLL。****有!
第二步:网上百度libeay32.pas
第三步:修改libeay32.pas,自己添加 procedure EVP_MD_CTX_init(ctx: pEVP_MD_CTX); cdecl;
procedure EVP_MD_CTX_cleanup(ctx: pEVP_MD_CTX); cdecl;
function RSA_sign(len:integer;_m:PCharacter;_m_length:integer; from: PCharacter; _to: pointer; rsa: pRSA): integer; cdecl;
第四步:就是DELPHI代码了:
function LoadPrivateKey(filename:string ): PEVP_PKEY;  
var  
  bp : PBIO  ;  
 A,pkey :PEVP_PKEY ;  
begin  
  a:=nil;  
  bp := BIO_new(BIO_s_file()) ;  
  BIO_read_filename(bp, PChar(filename));  
  pkey := PEM_read_bio_PrivateKey(bp, a, nil,NIL);  
  BIO_free(bp);  
  Result:= pkey;  
end;  
  
function Sign(filename,msg : String):string;  
var  
     ctx : EVP_MD_CTX   ;  
     buf_in:Pchar;  
     m_len,outl :cardinal;  
     pKey : PEVP_PKEY;  
     m,buf_out:array   [0..1024]   of   char;  
     p:array   [0..255]   of   char;  
     i:Integer;  
 begin  
 buf_out:='';  
 if filename='' then  
 begin  
   Result:='';  
   Exit;  
 end;  
  pKey := LoadPrivateKey(filename);  
   buf_in := PChar(msg);  
   EVP_MD_CTX_init(@ctx);            //初始化  
   EVP_SignInit(@ctx,EVP_sha1());    //将需要使用的摘要算法存入ctxl中  
    EVP_SignUpdate(@ctx,buf_in,Length(buf_in));//存入编码值  
   EVP_DigestFinal(@ctx,m,m_len);    //求取编码的长度为m_len摘要值存入m中  
 rSA_sign(EVP_sha1()._type,m,m_len,buf_out,@outl,pkey.pkey.rsa); //64为SHA1的NID  
 EVP_MD_CTX_cleanup(@ctx);  
  
   Result:=EncodeString(StrPas(buf_out)) ;  

出来的结果和淘宝提供的签名工具一致!