in source/unix/openssl_platform_init.c [537:565]
void aws_cal_platform_init(struct aws_allocator *allocator) {
int version = s_resolve_libcrypto();
AWS_FATAL_ASSERT(version != AWS_LIBCRYPTO_NONE && "libcrypto could not be resolved");
AWS_FATAL_ASSERT(g_aws_openssl_evp_md_ctx_table);
AWS_FATAL_ASSERT(g_aws_openssl_hmac_ctx_table);
s_libcrypto_allocator = allocator;
#if !defined(OPENSSL_IS_AWSLC)
/* Ensure that libcrypto 1.0.2 has working locking mechanisms. This code is macro'ed
* by libcrypto to be a no-op on 1.1.1 */
if (!CRYPTO_get_locking_callback()) {
/* on 1.1.1 this is a no-op */
CRYPTO_set_locking_callback(s_locking_fn);
if (CRYPTO_get_locking_callback() == s_locking_fn) {
s_libcrypto_locks = aws_mem_acquire(allocator, sizeof(struct aws_mutex) * CRYPTO_num_locks());
AWS_FATAL_ASSERT(s_libcrypto_locks);
size_t lock_count = (size_t)CRYPTO_num_locks();
for (size_t i = 0; i < lock_count; ++i) {
aws_mutex_init(&s_libcrypto_locks[i]);
}
}
}
if (!CRYPTO_get_id_callback()) {
CRYPTO_set_id_callback(s_id_fn);
}
#endif
}