OpenSSL | Aanvullende functies laden

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.

 

IdOpenSSLSetLoadFuncsCallback


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.

 

 

IdOpenSSLSetUnLoadFuncsCallback

 


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.

 

 

Aangepaste functie laden

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;
}