openssl 初始化函数到底做了什么?

openssl 初始化函数到底做了什么?

每次使用openssl前都会使用如下几个函数进行初始化:
 /* initialize OpenSSL */
    OpenSSL_add_all_ciphers();
    OpenSSL_add_all_digests();
    ERR_load_crypto_strings();
那么我们会有疑问:这个函数到底是干嘛的,能不能在别的地方多次使用?
首先分析OpenSSL_add_all_ciphers() 这是一个宏定义,其定义如下:

#  define OpenSSL_add_all_ciphers() \
OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS, NULL)

OPENSSL_init_crypto做了两件事情:
1、CRYPTO_THREAD_run_once(&base, ossl_init_base);
2、CRYPTO_THREAD_run_once(&add_all_ciphers,
ossl_init_add_all_ciphers)
CRYPTO_THREAD_run_once函数通过调用Linux库函数pthread_once保证在多线程环境下ossl_init_add_all_ciphers只进行一次初始化。
ossl_init_add_all_ciphers函数调用openssl_add_all_ciphers_int进行
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值