デフォルトでは Indy は通信の暗号化に必要な最も一般的な OpenSSL 関数を定義していますが、暗号化、署名などに追加の関数が必要な場合があります。IdOpenSSLSetLoadFuncsCallback メソッドを使用して追加の OpenSSL 関数を動的にロードするためのコールバックを割り当てることができます。
TIdLoadSSLFuncsCallback = procedure(hIdSSL: TIdLibHandle; hIdCrypto: TIdLibHandle; const FailedLoadList: TStringList);
これは 3 つのパラメータを受け取るコールバックとして機能するプロシージャ型です。
このコールバックの目的は、OpenSSL 関数が読み込まれているときにカスタム処理を実行できるようにすることです。例えば、失敗した関数の読み込みをログに記録したり、エラーを処理したりします。
TIdUnLoadSSLFuncsCallback = procedure();
SSL 関数のアンロードのコールバックとして機能します。OpenSSL ライブラリがアンロードされる際のクリーンアップ処理に役立ちます。
コールバックを使用して関数 EVP_PKEY_CTX_set_rsa_padding をロードする簡単な例を以下に示します。
var
EVP_PKEY_CTX_set_rsa_padding : function(ctx: PEVP_PKEY_CTX; pad: Integer): Integer; cdecl;
procedure DoOpenSSLLoadFuncsCallback(hIdSSL: TIdLibHandle; hIdCrypto:
TIdLibHandle; const FailedLoadList: TStringList);
begin
@EVP_PKEY_CTX_set_rsa_padding := LoadLibFunction(hIdCrypto, 'EVP_PKEY_CTX_set_rsa_padding');
end;
procedure DoOpenSSLUnLoadFuncsCallback;
begin
@EVP_PKEY_CTX_set_rsa_padding := nil;
end;
IdOpenSSLSetLoadFuncsCallback(DoOpenSSLLoadFuncsCallback);
IdOpenSSLSetUnLoadFuncsCallback(DoOpenSSLUnLoadFuncsCallback);