OpenSSL | Load Additional Functions

기본적으로 Indy는 통신을 암호화하는 데 필요한 가장 일반적인 OpenSSL 함수를 정의하지만, 때로는 암호화, 서명 등을 위해 더 많은 함수가 필요합니다. IdOpenSSLSetLoadFuncsCallback 메서드를 사용하여 추가 OpenSSL 함수를 동적으로 로드하는 콜백을 할당할 수 있습니다.

 

IdOpenSSLSetLoadFuncsCallback


TIdLoadSSLFuncsCallback = procedure(TIdLibHandle hIdSSL, TIdLibHandle hIdCrypto, const TStringList* FailedLoadList);

이것은 콜백 역할을 하는 프로시저 유형이며, 세 개의 매개변수를 받습니다:

 


이 콜백의 목적은 OpenSSL 함수가 로드될 때 사용자가 사용자 지정 처리를 수행할 수 있게 하는 것입니다. 예: 실패한 함수 로드 로깅 또는 오류 처리.

 

 

IdOpenSSLSetUnLoadFuncsCallback

 


TIdLoadSSLFuncsCallback = procedure(TIdLibHandle hIdSSL, TIdLibHandle hIdCrypto, const TStringList* FailedLoadList);

SSL 함수를 언로드하기 위한 콜백 역할을 합니다. OpenSSL 라이브러리가 언로드될 때 정리 작업을 수행하는 데 유용합니다.

 

 

사용자 정의 function을 로드하는 방법

아래에서 콜백을 사용하여 함수 EVP_PKEY_CTX_set_rsa_padding을 로드하는 방법에 대한 간단한 예제를 찾을 수 있습니다.

 


typedef int (__cdecl *TEVP_PKEY_CTX_set_rsa_padding)(void* ctx, int pad);
TEVP_PKEY_CTX_set_rsa_padding EVP_PKEY_CTX_set_rsa_padding = nullptr;

// Mock function for LoadLibFunction (you need to implement this according to your needs)
void* LoadLibFunction(TIdLibHandle hLib, const char* funcName) {
    return GetProcAddress((HMODULE)hLib, funcName);
}

void __fastcall DoOpenSSLLoadFuncsCallback(TIdLibHandle hIdSSL, TIdLibHandle hIdCrypto, const TStringList* FailedLoadList) {
    EVP_PKEY_CTX_set_rsa_padding = (TEVP_PKEY_CTX_set_rsa_padding)LoadLibFunction(hIdCrypto, "EVP_PKEY_CTX_set_rsa_padding");
}
void __fastcall DoOpenSSLUnLoadFuncsCallback() {
    EVP_PKEY_CTX_set_rsa_padding = nullptr;
}

// Mock function to simulate IdOpenSSLSetLoadFuncsCallback
void IdOpenSSLSetLoadFuncsCallback(void (__fastcall *callback)(TIdLibHandle, TIdLibHandle, const TStringList*)) {
    callback(nullptr, nullptr, nullptr);  // Example call
}
// Mock function to simulate IdOpenSSLSetUnLoadFuncsCallback
void IdOpenSSLSetUnLoadFuncsCallback(void (__fastcall *callback)()) {
    callback();  // Example call
}

int main() {
    IdOpenSSLSetLoadFuncsCallback(DoOpenSSLLoadFuncsCallback);
    IdOpenSSLSetUnLoadFuncsCallback(DoOpenSSLUnLoadFuncsCallback);
    return 0;
}