mirror of https://github.com/sipwise/rtpengine.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.5 KiB
67 lines
1.5 KiB
#include "ssllib.h"
|
|
#include <openssl/ssl.h>
|
|
#include <time.h>
|
|
#include "auxlib.h"
|
|
|
|
|
|
|
|
#if OPENSSL_VERSION_NUMBER >= 0x30000000L
|
|
EVP_MAC_CTX *rtpe_hmac_sha1_base;
|
|
#endif
|
|
|
|
|
|
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
static mutex_t *openssl_locks;
|
|
|
|
static void cb_openssl_threadid(CRYPTO_THREADID *tid) {
|
|
pthread_t me;
|
|
|
|
me = pthread_self();
|
|
|
|
if (sizeof(me) == sizeof(void *))
|
|
CRYPTO_THREADID_set_pointer(tid, (void *) me);
|
|
else
|
|
CRYPTO_THREADID_set_numeric(tid, (unsigned long) me);
|
|
}
|
|
|
|
static void cb_openssl_lock(int mode, int type, const char *file, int line) {
|
|
if ((mode & CRYPTO_LOCK))
|
|
mutex_lock(&openssl_locks[type]);
|
|
else
|
|
mutex_unlock(&openssl_locks[type]);
|
|
}
|
|
|
|
static void make_OpenSSL_thread_safe(void) {
|
|
int i;
|
|
|
|
openssl_locks = malloc(sizeof(*openssl_locks) * CRYPTO_num_locks());
|
|
for (i = 0; i < CRYPTO_num_locks(); i++)
|
|
mutex_init(&openssl_locks[i]);
|
|
|
|
CRYPTO_THREADID_set_callback(cb_openssl_threadid);
|
|
CRYPTO_set_locking_callback(cb_openssl_lock);
|
|
}
|
|
#endif
|
|
|
|
|
|
void rtpe_ssl_init(void) {
|
|
#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
|
|
SSL_library_init();
|
|
SSL_load_error_strings();
|
|
make_OpenSSL_thread_safe();
|
|
#endif
|
|
|
|
#if OPENSSL_VERSION_NUMBER >= 0x30000000L
|
|
EVP_MAC *rtpe_evp_hmac = EVP_MAC_fetch(NULL, "hmac", NULL);
|
|
assert(rtpe_evp_hmac != NULL);
|
|
|
|
rtpe_hmac_sha1_base = EVP_MAC_CTX_new(rtpe_evp_hmac);
|
|
assert(rtpe_hmac_sha1_base != NULL);
|
|
static const OSSL_PARAM params[2] = {
|
|
OSSL_PARAM_utf8_string("digest", "sha-1", 5),
|
|
OSSL_PARAM_END,
|
|
};
|
|
EVP_MAC_CTX_set_params(rtpe_hmac_sha1_base, params);
|
|
#endif
|
|
}
|