Standaard definieert Indy de meest voorkomende OpenSSL-functies die nodig zijn om communicatie te versleutelen, maar soms hebt u meer functies nodig voor versleuteling, ondertekening, enz. U kunt de methode IdOpenSSLSetLoadFuncsCallback gebruiken om een callback toe te wijzen voor het dynamisch laden van aanvullende OpenSSL-functies.
TIdLoadSSLFuncsCallback = procedure(TIdLibHandle hIdSSL, TIdLibHandle hIdCrypto, const TStringList* FailedLoadList);
Dit is een proceduretype dat dient als callback; het neemt drie parameters:
Het doel van deze callback is om de gebruiker in staat te stellen aangepaste verwerking uit te voeren wanneer OpenSSL-functies worden geladen, zoals het loggen van mislukte functieladingen of het afhandelen van fouten.
TIdLoadSSLFuncsCallback = procedure(TIdLibHandle hIdSSL, TIdLibHandle hIdCrypto, const TStringList* FailedLoadList);
Het dient als terugroepfunctie voor het lossen van SSL-functies. Dit is nuttig voor het uitvoeren van opruimwerkzaamheden wanneer OpenSSL-bibliotheken worden gelost.
Hieronder vindt u een eenvoudig voorbeeld van hoe u de functie EVP_PKEY_CTX_set_rsa_padding laadt met behulp van de callbacks.
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;
}