in source/unix/openssl_platform_init.c [416:476]
static enum aws_libcrypto_version s_resolve_libcrypto_lib(void) {
const char *libcrypto_102 = "libcrypto.so.1.0.0";
const char *libcrypto_111 = "libcrypto.so.1.1";
AWS_LOGF_DEBUG(AWS_LS_CAL_LIBCRYPTO_RESOLVE, "loading libcrypto 1.0.2");
void *module = dlopen(libcrypto_102, RTLD_NOW);
if (module) {
AWS_LOGF_DEBUG(AWS_LS_CAL_LIBCRYPTO_RESOLVE, "resolving against libcrypto 1.0.2");
enum aws_libcrypto_version result = s_resolve_libcrypto_symbols(AWS_LIBCRYPTO_1_0_2, module);
if (result == AWS_LIBCRYPTO_1_0_2) {
return result;
}
dlclose(module);
} else {
AWS_LOGF_DEBUG(AWS_LS_CAL_LIBCRYPTO_RESOLVE, "libcrypto 1.0.2 not found");
}
AWS_LOGF_DEBUG(AWS_LS_CAL_LIBCRYPTO_RESOLVE, "loading libcrypto 1.1.1");
module = dlopen(libcrypto_111, RTLD_NOW);
if (module) {
AWS_LOGF_DEBUG(AWS_LS_CAL_LIBCRYPTO_RESOLVE, "resolving against libcrypto 1.1.1");
enum aws_libcrypto_version result = s_resolve_libcrypto_symbols(AWS_LIBCRYPTO_1_1_1, module);
if (result == AWS_LIBCRYPTO_1_1_1) {
return result;
}
dlclose(module);
} else {
AWS_LOGF_DEBUG(AWS_LS_CAL_LIBCRYPTO_RESOLVE, "libcrypto 1.1.1 not found");
}
AWS_LOGF_DEBUG(AWS_LS_CAL_LIBCRYPTO_RESOLVE, "loading libcrypto.so");
module = dlopen("libcrypto.so", RTLD_NOW);
if (module) {
unsigned long (*openssl_version_num)(void) = NULL;
*(void **)(&openssl_version_num) = dlsym(module, "OpenSSL_version_num");
if (openssl_version_num) {
unsigned long version = openssl_version_num();
AWS_LOGF_DEBUG(AWS_LS_CAL_LIBCRYPTO_RESOLVE, "libcrypto.so reported version is 0x%lx", version);
enum aws_libcrypto_version result = AWS_LIBCRYPTO_NONE;
if (version >= 0x10101000L) {
AWS_LOGF_DEBUG(AWS_LS_CAL_LIBCRYPTO_RESOLVE, "probing libcrypto.so for 1.1.1 symbols");
result = s_resolve_libcrypto_symbols(AWS_LIBCRYPTO_1_1_1, module);
} else if (version >= 0x10002000L) {
AWS_LOGF_DEBUG(AWS_LS_CAL_LIBCRYPTO_RESOLVE, "probing libcrypto.so for 1.0.2 symbols");
result = s_resolve_libcrypto_symbols(AWS_LIBCRYPTO_1_0_2, module);
} else {
AWS_LOGF_DEBUG(AWS_LS_CAL_LIBCRYPTO_RESOLVE, "libcrypto.so reported version is unsupported");
}
if (result != AWS_LIBCRYPTO_NONE) {
return result;
}
} else {
AWS_LOGF_DEBUG(AWS_LS_CAL_LIBCRYPTO_RESOLVE, "Unable to determine version of libcrypto.so");
}
dlclose(module);
} else {
AWS_LOGF_DEBUG(AWS_LS_CAL_LIBCRYPTO_RESOLVE, "libcrypto.so not found");
}
return AWS_LIBCRYPTO_NONE;
}