If you’re using an older version (e.g., 1.0.x):
CRYPTO_set_locking_callback(lock_function);
CRYPTO_set_id_callback(id_function);
Ensure each thread allocates and initializes its own SHA context:
SHA_CTX ctx;
SHA1_Init(&ctx);
SHA1_Update(&ctx, data, len);
SHA1_Final(hash, &ctx);