in source/unix/openssl_platform_init.c [278:312]
bool s_resolve_md_102(void *module) {
#if !defined(OPENSSL_IS_AWSLC)
evp_md_ctx_new md_create_fn = s_EVP_MD_CTX_create;
evp_md_ctx_free md_destroy_fn = s_EVP_MD_CTX_destroy;
evp_md_ctx_digest_init_ex md_init_ex_fn = EVP_DigestInit_ex;
evp_md_ctx_digest_update md_update_fn = EVP_DigestUpdate;
evp_md_ctx_digest_final_ex md_final_ex_fn = EVP_DigestFinal_ex;
bool has_102_symbols = md_create_fn && md_destroy_fn && md_init_ex_fn && md_update_fn && md_final_ex_fn;
if (has_102_symbols) {
AWS_LOGF_DEBUG(AWS_LS_CAL_LIBCRYPTO_RESOLVE, "found static libcrypto 1.0.2 EVP_MD symbols");
} else {
*(void **)(&md_create_fn) = dlsym(module, "EVP_MD_CTX_create");
*(void **)(&md_destroy_fn) = dlsym(module, "EVP_MD_CTX_destroy");
*(void **)(&md_init_ex_fn) = dlsym(module, "EVP_DigestInit_ex");
*(void **)(&md_update_fn) = dlsym(module, "EVP_DigestUpdate");
*(void **)(&md_final_ex_fn) = dlsym(module, "EVP_DigestFinal_ex");
if (md_create_fn) {
AWS_LOGF_DEBUG(AWS_LS_CAL_LIBCRYPTO_RESOLVE, "found dynamic libcrypto 1.0.2 EVP_MD symbols");
}
}
if (md_create_fn) {
evp_md_ctx_table.new_fn = md_create_fn;
evp_md_ctx_table.free_fn = md_destroy_fn;
evp_md_ctx_table.init_ex_fn = md_init_ex_fn;
evp_md_ctx_table.update_fn = md_update_fn;
evp_md_ctx_table.final_ex_fn = md_final_ex_fn;
g_aws_openssl_evp_md_ctx_table = &evp_md_ctx_table;
return true;
}
#endif
return false;
}