anchor.diff:      @EVP_DecryptInit:= LoadFunctionCLib('EVP_DecryptInit');
       @EVP_DecryptInit_ex:= LoadFunctionCLib('EVP_DecryptInit_ex');
       @EVP_DecryptUpdate:= LoadFunctionCLib('EVP_DecryptUpdate');
  -    @EVP_DecryptFinal:= LoadFunctionCLib('EVP_DecryptFinal');
  +
  +    @EVP_DecryptFinal:= LoadFunctionCLib('EVP_DecryptFinal',False);
  +    if (Not Assigned(@EVP_DecryptFinal)) then
  +      EVP_DecryptFinal:= LoadFunctionCLib('EVP_DecryptFinal_ex');
  +
       @EVP_EncryptInit:= LoadFunctionCLib('EVP_EncryptInit');
       @EVP_EncryptInit_ex:= LoadFunctionCLib('EVP_EncryptInit_ex');
       @EVP_EncryptUpdate:= LoadFunctionCLib('EVP_EncryptUpdate');
       @EVP_EncryptFinal_ex:= LoadFunctionCLib('EVP_EncryptFinal_ex');
  -    @EVP_EncryptFinal:= LoadFunctionCLib('EVP_EncryptFinal');
  +    @EVP_EncryptFinal:= LoadFunctionCLib('EVP_EncryptFinal',False);
  +    if (Not Assigned(@EVP_DecryptFinal)) then
  +      EVP_EncryptFinal:=EVP_EncryptFinal_ex;
  +
       @EVP_CIPHER_CTX_block_size:= LoadFunctionCLib('EVP_CIPHER_CTX_block_size');
       @EVP_md5:= LoadFunctionCLib('EVP_md5');
       @EVP_CIPHER_key_length:= LoadFunctionCLib('EVP_CIPHER_key_length');
  
positive.code:     // Important note: Only OpenSSL v1.1 has function "OpenSSL_version_num"
      @OpenSSL_version_num := LoadFunctionCLib('OpenSSL_version_num',False);
      if Not Assigned(OpenSSL_version_num) then begin
        Raise Exception.Create('PascalCoin needs OpenSSL v1.1, your current DLL is lower version: '+SSL_C_LIB);
      end;
    end;
    if @ERR_get_error = nil then begin
  
negative.code:     app_data : Pointer;
    end;
    ecdh_kdf = function(const _in: Pointer; _inlen: TC_SIZE_T; _out: Pointer; var _outlen: TC_SIZE_T): pointer; cdecl;
    HMAC_CTX = Pointer;
    PHMAC_CTX = ^HMAC_CTX;
    PPHMAC_CTX = ^PHMAC_CTX;
    EVP_MD = record
      _type : TC_Int;
  