summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/evp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/evp')
-rw-r--r--src/lib/libcrypto/evp/c_all.c23
-rw-r--r--src/lib/libcrypto/evp/names.c20
2 files changed, 38 insertions, 5 deletions
diff --git a/src/lib/libcrypto/evp/c_all.c b/src/lib/libcrypto/evp/c_all.c
index 8ab93fece8..87657eded3 100644
--- a/src/lib/libcrypto/evp/c_all.c
+++ b/src/lib/libcrypto/evp/c_all.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: c_all.c,v 1.21 2017/03/01 13:53:58 jsing Exp $ */ 1/* $OpenBSD: c_all.c,v 1.22 2018/03/17 16:20:01 beck Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -57,6 +57,7 @@
57 */ 57 */
58 58
59#include <stdio.h> 59#include <stdio.h>
60#include <pthread.h>
60 61
61#include <openssl/opensslconf.h> 62#include <openssl/opensslconf.h>
62 63
@@ -66,8 +67,8 @@
66 67
67#include "cryptlib.h" 68#include "cryptlib.h"
68 69
69void 70static void
70OpenSSL_add_all_ciphers(void) 71OpenSSL_add_all_ciphers_internal(void)
71{ 72{
72#ifndef OPENSSL_NO_DES 73#ifndef OPENSSL_NO_DES
73 EVP_add_cipher(EVP_des_cfb()); 74 EVP_add_cipher(EVP_des_cfb());
@@ -226,7 +227,14 @@ OpenSSL_add_all_ciphers(void)
226} 227}
227 228
228void 229void
229OpenSSL_add_all_digests(void) 230OpenSSL_add_all_ciphers(void)
231{
232 static pthread_once_t add_all_ciphers_once = PTHREAD_ONCE_INIT;
233 (void) pthread_once(&add_all_ciphers_once, OpenSSL_add_all_ciphers_internal);
234}
235
236static void
237OpenSSL_add_all_digests_internal(void)
230{ 238{
231#ifndef OPENSSL_NO_MD4 239#ifndef OPENSSL_NO_MD4
232 EVP_add_digest(EVP_md4()); 240 EVP_add_digest(EVP_md4());
@@ -284,6 +292,13 @@ OpenSSL_add_all_digests(void)
284} 292}
285 293
286void 294void
295OpenSSL_add_all_digests(void)
296{
297 static pthread_once_t add_all_digests_once = PTHREAD_ONCE_INIT;
298 (void) pthread_once(&add_all_digests_once, OpenSSL_add_all_digests_internal);
299}
300
301void
287OPENSSL_add_all_algorithms_noconf(void) 302OPENSSL_add_all_algorithms_noconf(void)
288{ 303{
289 OPENSSL_cpuid_setup(); 304 OPENSSL_cpuid_setup();
diff --git a/src/lib/libcrypto/evp/names.c b/src/lib/libcrypto/evp/names.c
index ebaa3a2f6f..dfcf9ee225 100644
--- a/src/lib/libcrypto/evp/names.c
+++ b/src/lib/libcrypto/evp/names.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: names.c,v 1.13 2017/04/29 21:48:44 jsing Exp $ */ 1/* $OpenBSD: names.c,v 1.14 2018/03/17 16:20:01 beck Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -113,6 +113,9 @@ EVP_get_cipherbyname(const char *name)
113{ 113{
114 const EVP_CIPHER *cp; 114 const EVP_CIPHER *cp;
115 115
116 if (!OPENSSL_init_crypto(0, NULL))
117 return NULL;
118
116 cp = (const EVP_CIPHER *)OBJ_NAME_get(name, OBJ_NAME_TYPE_CIPHER_METH); 119 cp = (const EVP_CIPHER *)OBJ_NAME_get(name, OBJ_NAME_TYPE_CIPHER_METH);
117 return (cp); 120 return (cp);
118} 121}
@@ -122,6 +125,9 @@ EVP_get_digestbyname(const char *name)
122{ 125{
123 const EVP_MD *cp; 126 const EVP_MD *cp;
124 127
128 if (!OPENSSL_init_crypto(0, NULL))
129 return NULL;
130
125 cp = (const EVP_MD *)OBJ_NAME_get(name, OBJ_NAME_TYPE_MD_METH); 131 cp = (const EVP_MD *)OBJ_NAME_get(name, OBJ_NAME_TYPE_MD_METH);
126 return (cp); 132 return (cp);
127} 133}
@@ -167,6 +173,9 @@ EVP_CIPHER_do_all(void (*fn)(const EVP_CIPHER *ciph, const char *from,
167{ 173{
168 struct doall_cipher dc; 174 struct doall_cipher dc;
169 175
176 /* Prayer and clean living lets you ignore errors, OpenSSL style */
177 (void) OPENSSL_init_crypto(0, NULL);
178
170 dc.fn = fn; 179 dc.fn = fn;
171 dc.arg = arg; 180 dc.arg = arg;
172 OBJ_NAME_do_all(OBJ_NAME_TYPE_CIPHER_METH, do_all_cipher_fn, &dc); 181 OBJ_NAME_do_all(OBJ_NAME_TYPE_CIPHER_METH, do_all_cipher_fn, &dc);
@@ -178,6 +187,9 @@ EVP_CIPHER_do_all_sorted(void (*fn)(const EVP_CIPHER *ciph, const char *from,
178{ 187{
179 struct doall_cipher dc; 188 struct doall_cipher dc;
180 189
190 /* Prayer and clean living lets you ignore errors, OpenSSL style */
191 (void) OPENSSL_init_crypto(0, NULL);
192
181 dc.fn = fn; 193 dc.fn = fn;
182 dc.arg = arg; 194 dc.arg = arg;
183 OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH, 195 OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH,
@@ -207,6 +219,9 @@ EVP_MD_do_all(void (*fn)(const EVP_MD *md, const char *from, const char *to,
207{ 219{
208 struct doall_md dc; 220 struct doall_md dc;
209 221
222 /* Prayer and clean living lets you ignore errors, OpenSSL style */
223 (void) OPENSSL_init_crypto(0, NULL);
224
210 dc.fn = fn; 225 dc.fn = fn;
211 dc.arg = arg; 226 dc.arg = arg;
212 OBJ_NAME_do_all(OBJ_NAME_TYPE_MD_METH, do_all_md_fn, &dc); 227 OBJ_NAME_do_all(OBJ_NAME_TYPE_MD_METH, do_all_md_fn, &dc);
@@ -218,6 +233,9 @@ EVP_MD_do_all_sorted(void (*fn)(const EVP_MD *md,
218{ 233{
219 struct doall_md dc; 234 struct doall_md dc;
220 235
236 /* Prayer and clean living lets you ignore errors, OpenSSL style */
237 (void) OPENSSL_init_crypto(0, NULL);
238
221 dc.fn = fn; 239 dc.fn = fn;
222 dc.arg = arg; 240 dc.arg = arg;
223 OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_MD_METH, do_all_md_fn, &dc); 241 OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_MD_METH, do_all_md_fn, &dc);