Browse Source

* Patch from Jan Bruns to add some functions. Fixes issue #40038

(cherry picked from commit 8a807a4e1cb50ee38fdb70821c0b4b210c8a5b63)

marcov: one pchar->pansichar manual adaptation
Michaël Van Canneyt 2 years ago
parent
commit
7346c03417
1 changed files with 35 additions and 4 deletions
  1. 35 4
      packages/openssl/src/openssl.pas

+ 35 - 4
packages/openssl/src/openssl.pas

@@ -1320,9 +1320,12 @@ var
   function EVP_DigestSignInit(ctx: PEVP_MD_CTX; pctx: PPEVP_PKEY_CTX; const evptype: PEVP_MD; e: PENGINE; pkey: PEVP_PKEY): cint;
   function EVP_DigestSignUpdate(ctx: PEVP_MD_CTX; const data: Pointer; cnt: csize_t): cint;
   function EVP_DigestSignFinal(ctx: PEVP_MD_CTX; sigret: PByte; siglen: pcsize_t): cint;
+  function EVP_DigestSign(ctx: PEVP_MD_CTX; sigret:Pbyte; siglen:pcsize_t; const tbs : pointer; tbslen: csize_t): cint;
+
   function EVP_DigestVerifyInit(ctx: PEVP_MD_CTX; pctx: PPEVP_PKEY_CTX; const evptype: PEVP_MD; e: PENGINE; pkey: PEVP_PKEY): cint;
   function EVP_DigestVerifyUpdate(ctx: PEVP_MD_CTX; const data: Pointer; cnt: csize_t): cint;
   function EVP_DigestVerifyFinal(ctx: PEVP_MD_CTX; sig: PByte; siglen: csize_t): cint;
+  function EVP_DigestVerify(ctx: PEVP_MD_CTX; sig: PByte; siglen: csize_t; const tbs : pointer; tbslen: csize_t): cint;
   //function
   //
   // PEM Functions - pem.h
@@ -1582,7 +1585,7 @@ type
   TSslLibraryInit = function:cInt; cdecl;
   TOPENSSL_INIT_new = function : POPENSSL_INIT_SETTINGS; cdecl;
   TOPENSSL_INIT_free = procedure(settings : POPENSSL_INIT_SETTINGS); cdecl;
-  TOPENSSL_INIT_set_config_appname = function (settings:POPENSSL_INIT_SETTINGS; config_file : Pchar) : cint;
+  TOPENSSL_INIT_set_config_appname = function (settings:POPENSSL_INIT_SETTINGS; config_file : PAnsiChar) : cint; cdecl;
 
   TOPENSSL_init_ssl = function ( opts: uint64_t ; settings : POPENSSL_INIT_SETTINGS) : cint; cdecl;
   TOPENSSL_cleanup = procedure; cdecl;
@@ -1790,9 +1793,12 @@ type
   //
   TEVP_MD_CTX_new = function(): PEVP_MD_CTX; cdecl;
   TEVP_MD_CTX_free = procedure(ctx: PEVP_MD_CTX); cdecl;
-  TEVP_DigestSignVerifyInit = function(ctx: PEVP_MD_CTX; pctx: PPEVP_PKEY_CTX; const evptype: PEVP_MD; e: PENGINE; pkey: PEVP_PKEY): cint;
-  TEVP_DigestSignFinal = function(ctx: PEVP_MD_CTX; sigret: PByte; siglen: pcsize_t): cint;
-  TEVP_DigestVerifyFinal = function(ctx: PEVP_MD_CTX; sig: PByte; siglen: csize_t): cint;
+  TEVP_DigestSignVerifyInit = function(ctx: PEVP_MD_CTX; pctx: PPEVP_PKEY_CTX; const evptype: PEVP_MD; e: PENGINE; pkey: PEVP_PKEY): cint; cdecl;
+  TEVP_DigestSignFinal = function(ctx: PEVP_MD_CTX; sigret: PByte; siglen: pcsize_t): cint; cdecl;
+  TEVP_DigestSign = function(ctx: PEVP_MD_CTX; sigret : Pbyte; siglen : pcsize_t; const tbs : Pbyte; tbslen : csize_t) : cint; cdecl;
+  TEVP_DigestVerifyFinal = function(ctx: PEVP_MD_CTX; sig: PByte; siglen: csize_t): cint; cdecl;
+  TEVP_DigestVerify = function(ctx: PEVP_MD_CTX; sig: PByte; siglen: csize_t; tbs : PByte; tbslen: csize_t): cint; cdecl;
+
   // PEM functions
 
   TPEM_read_bio_PrivateKey = function(bp: PBIO; X: PPEVP_PKEY;
@@ -2050,8 +2056,10 @@ var
   _EVP_MD_CTX_free : TEVP_MD_CTX_free = nil;
   _EVP_DigestSignInit: TEVP_DigestSignVerifyInit = nil;
   _EVP_DigestSignFinal: TEVP_DigestSignFinal = nil;
+  _EVP_DigestSign: TEVP_DigestSign = nil;
   _EVP_DigestVerifyInit: TEVP_DigestSignVerifyInit = nil;
   _EVP_DigestVerifyFinal: TEVP_DigestVerifyFinal = nil;
+  _EVP_DigestVerify: TEVP_DigestVerify = nil;
   // PEM
   _PEM_read_bio_PrivateKey: TPEM_read_bio_PrivateKey = nil;
 
@@ -3635,6 +3643,14 @@ begin
     Result := -1;
 end;
 
+function EVP_DigestVerify(ctx: PEVP_MD_CTX; sig: PByte; siglen: csize_t; const tbs : pointer; tbslen: csize_t): cint;
+begin
+  if InitSSLInterface and Assigned(_EVP_DigestVerify) then
+    Result := _EVP_DigestVerify(ctx, sig, siglen, tbs, tbslen)
+  else
+    Result := -1;
+end;
+
 function EVP_PKEY_size(key: pEVP_PKEY): integer;
 begin
   if InitSSLInterface and Assigned(_EVP_PKEY_size) then
@@ -3812,6 +3828,15 @@ begin
     Result := -1;
 end;
 
+function EVP_DigestSign(ctx: PEVP_MD_CTX; sigret:Pbyte; siglen:pcsize_t; const tbs : pointer; tbslen: csize_t): cint;
+begin
+  if InitSSLInterface and Assigned(_EVP_DigestSign) then
+    Result := _EVP_DigestSign(ctx, sigret, siglen,tbs,tbslen)
+  else
+    Result := -1;
+end;
+
+
 function EVP_DigestVerifyInit(ctx: PEVP_MD_CTX; pctx: PPEVP_PKEY_CTX; const evptype: PEVP_MD; e: PENGINE; pkey: PEVP_PKEY): cint;
 begin
   if InitSSLInterface and Assigned(_EVP_DigestVerifyInit) then
@@ -5000,6 +5025,8 @@ begin
   _SslWrite := GetProcAddr(SSLLibHandle, 'SSL_write');
   _SslPending := GetProcAddr(SSLLibHandle, 'SSL_pending');
   _SslGetPeerCertificate := GetProcAddr(SSLLibHandle, 'SSL_get_peer_certificate');
+  if not Assigned(_SslGetPeerCertificate) 
+  then _SslGetPeerCertificate := GetProcAddr(SSLLibHandle, 'SSL_get1_peer_certificate');
   _SslGetVersion := GetProcAddr(SSLLibHandle, 'SSL_get_version');
   _SslCtxSetVerify := GetProcAddr(SSLLibHandle, 'SSL_CTX_set_verify');
   _SslGetCurrentCipher := GetProcAddr(SSLLibHandle, 'SSL_get_current_cipher');
@@ -5104,8 +5131,10 @@ begin
   _EVP_MD_CTX_free := GetProcAddr(SSLUtilHandle, 'EVP_MD_CTX_free');
   _EVP_DigestSignInit := GetProcAddr(SSLUtilHandle, 'EVP_DigestSignInit');
   _EVP_DigestSignFinal := GetProcAddr(SSLUtilHandle, 'EVP_DigestSignFinal');
+  _EVP_DigestSign := GetProcAddr(SSLUtilHandle, 'EVP_DigestSign');
   _EVP_DigestVerifyInit := GetProcAddr(SSLUtilHandle, 'EVP_DigestVerifyInit');
   _EVP_DigestVerifyFinal := GetProcAddr(SSLUtilHandle, 'EVP_DigestVerifyFinal');
+  _EVP_DigestVerify := GetProcAddr(SSLUtilHandle, 'EVP_DigestVerify');
    // 3DES functions
   _DESsetoddparity := GetProcAddr(SSLUtilHandle, 'DES_set_odd_parity');
   _DESsetkeychecked := GetProcAddr(SSLUtilHandle, 'DES_set_key_checked');
@@ -5629,8 +5658,10 @@ begin
   _EVP_MD_CTX_free := nil;
   _EVP_DigestSignInit := nil;
   _EVP_DigestSignFinal := nil;
+  _EVP_DigestSign := nil;
   _EVP_DigestVerifyInit := nil;
   _EVP_DigestVerifyFinal := nil;
+  _EVP_DigestVerify := nil;
 
   // PEM