in source/unix/openssl_platform_init.c [185:231]
bool s_resolve_hmac_lc(void *module) {
#if defined(OPENSSL_IS_AWSLC)
hmac_ctx_init init_fn = (hmac_ctx_init)HMAC_CTX_init;
hmac_ctx_clean_up clean_up_fn = (hmac_ctx_clean_up)HMAC_CTX_cleanup;
hmac_ctx_new new_fn = (hmac_ctx_new)HMAC_CTX_new;
hmac_ctx_free free_fn = (hmac_ctx_free)HMAC_CTX_free;
hmac_ctx_reset reset_fn = (hmac_ctx_reset)HMAC_CTX_reset;
hmac_ctx_update update_fn = (hmac_ctx_update)HMAC_Update;
hmac_ctx_final final_fn = (hmac_ctx_final)HMAC_Final;
hmac_ctx_init_ex init_ex_fn = (hmac_ctx_init_ex)HMAC_Init_ex;
/* were symbols bound by static linking? */
bool has_awslc_symbols = new_fn && free_fn && update_fn && final_fn && init_fn && init_ex_fn && reset_fn;
/* If symbols aren't already found, try to find the requested version */
/* when built as a shared lib, and multiple versions of libcrypto are possibly
* available (e.g. brazil), select AWS-LC by default for consistency */
if (has_awslc_symbols) {
AWS_LOGF_DEBUG(AWS_LS_CAL_LIBCRYPTO_RESOLVE, "found static aws-lc HMAC symbols");
} else {
*(void **)(&new_fn) = dlsym(module, "HMAC_CTX_new");
*(void **)(&reset_fn) = dlsym(module, "HMAC_CTX_reset");
*(void **)(&free_fn) = dlsym(module, "HMAC_CTX_free");
*(void **)(&update_fn) = dlsym(module, "HMAC_Update");
*(void **)(&final_fn) = dlsym(module, "HMAC_Final");
*(void **)(&init_ex_fn) = dlsym(module, "HMAC_Init_ex");
if (new_fn) {
AWS_LOGF_DEBUG(AWS_LS_CAL_LIBCRYPTO_RESOLVE, "found dynamic aws-lc HMAC symbols");
}
}
if (new_fn) {
/* Fill out the vtable for the requested version */
hmac_ctx_table.new_fn = new_fn;
hmac_ctx_table.reset_fn = reset_fn;
hmac_ctx_table.free_fn = free_fn;
hmac_ctx_table.init_fn = init_fn;
hmac_ctx_table.clean_up_fn = clean_up_fn;
hmac_ctx_table.update_fn = update_fn;
hmac_ctx_table.final_fn = final_fn;
hmac_ctx_table.init_ex_fn = init_ex_fn;
g_aws_openssl_hmac_ctx_table = &hmac_ctx_table;
return true;
}
#endif
return false;
}