OpenCoverage

cryptlib.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/cryptlib.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: cryptlib.c,v 1.41 2017/04/29 21:48:43 jsing Exp $ */-
2/* ====================================================================-
3 * Copyright (c) 1998-2006 The OpenSSL Project. All rights reserved.-
4 *-
5 * Redistribution and use in source and binary forms, with or without-
6 * modification, are permitted provided that the following conditions-
7 * are met:-
8 *-
9 * 1. Redistributions of source code must retain the above copyright-
10 * notice, this list of conditions and the following disclaimer.-
11 *-
12 * 2. Redistributions in binary form must reproduce the above copyright-
13 * notice, this list of conditions and the following disclaimer in-
14 * the documentation and/or other materials provided with the-
15 * distribution.-
16 *-
17 * 3. All advertising materials mentioning features or use of this-
18 * software must display the following acknowledgment:-
19 * "This product includes software developed by the OpenSSL Project-
20 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"-
21 *-
22 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to-
23 * endorse or promote products derived from this software without-
24 * prior written permission. For written permission, please contact-
25 * openssl-core@openssl.org.-
26 *-
27 * 5. Products derived from this software may not be called "OpenSSL"-
28 * nor may "OpenSSL" appear in their names without prior written-
29 * permission of the OpenSSL Project.-
30 *-
31 * 6. Redistributions of any form whatsoever must retain the following-
32 * acknowledgment:-
33 * "This product includes software developed by the OpenSSL Project-
34 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"-
35 *-
36 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY-
37 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
38 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR-
39 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR-
40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-
41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT-
42 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-
43 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
44 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-
45 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)-
46 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED-
47 * OF THE POSSIBILITY OF SUCH DAMAGE.-
48 * ====================================================================-
49 *-
50 * This product includes cryptographic software written by Eric Young-
51 * (eay@cryptsoft.com). This product includes software written by Tim-
52 * Hudson (tjh@cryptsoft.com).-
53 *-
54 */-
55/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)-
56 * All rights reserved.-
57 *-
58 * This package is an SSL implementation written-
59 * by Eric Young (eay@cryptsoft.com).-
60 * The implementation was written so as to conform with Netscapes SSL.-
61 *-
62 * This library is free for commercial and non-commercial use as long as-
63 * the following conditions are aheared to. The following conditions-
64 * apply to all code found in this distribution, be it the RC4, RSA,-
65 * lhash, DES, etc., code; not just the SSL code. The SSL documentation-
66 * included with this distribution is covered by the same copyright terms-
67 * except that the holder is Tim Hudson (tjh@cryptsoft.com).-
68 *-
69 * Copyright remains Eric Young's, and as such any Copyright notices in-
70 * the code are not to be removed.-
71 * If this package is used in a product, Eric Young should be given attribution-
72 * as the author of the parts of the library used.-
73 * This can be in the form of a textual message at program startup or-
74 * in documentation (online or textual) provided with the package.-
75 *-
76 * Redistribution and use in source and binary forms, with or without-
77 * modification, are permitted provided that the following conditions-
78 * are met:-
79 * 1. Redistributions of source code must retain the copyright-
80 * notice, this list of conditions and the following disclaimer.-
81 * 2. Redistributions in binary form must reproduce the above copyright-
82 * notice, this list of conditions and the following disclaimer in the-
83 * documentation and/or other materials provided with the distribution.-
84 * 3. All advertising materials mentioning features or use of this software-
85 * must display the following acknowledgement:-
86 * "This product includes cryptographic software written by-
87 * Eric Young (eay@cryptsoft.com)"-
88 * The word 'cryptographic' can be left out if the rouines from the library-
89 * being used are not cryptographic related :-).-
90 * 4. If you include any Windows specific code (or a derivative thereof) from-
91 * the apps directory (application code) you must include an acknowledgement:-
92 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"-
93 *-
94 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND-
95 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
96 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-
97 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE-
98 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-
99 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-
100 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
101 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-
102 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-
103 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-
104 * SUCH DAMAGE.-
105 *-
106 * The licence and distribution terms for any publically available version or-
107 * derivative of this code cannot be changed. i.e. this code cannot simply be-
108 * copied and put under another distribution licence-
109 * [including the GNU Public Licence.]-
110 */-
111/* ====================================================================-
112 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.-
113 * ECDH support in OpenSSL originally developed by-
114 * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.-
115 */-
116-
117#include <limits.h>-
118#include <stdarg.h>-
119#include <stdint.h>-
120#include <string.h>-
121#include <unistd.h>-
122-
123#include <openssl/opensslconf.h>-
124-
125#include <openssl/crypto.h>-
126#include <openssl/buffer.h>-
127#include <openssl/err.h>-
128#include <openssl/safestack.h>-
129#include <openssl/sha.h>-
130-
131DECLARE_STACK_OF(CRYPTO_dynlock)-
132-
133/* real #defines in crypto.h, keep these upto date */-
134static const char* const lock_names[CRYPTO_NUM_LOCKS] = {-
135 "<<ERROR>>",-
136 "err",-
137 "ex_data",-
138 "x509",-
139 "x509_info",-
140 "x509_pkey",-
141 "x509_crl",-
142 "x509_req",-
143 "dsa",-
144 "rsa",-
145 "evp_pkey",-
146 "x509_store",-
147 "ssl_ctx",-
148 "ssl_cert",-
149 "ssl_session",-
150 "ssl_sess_cert",-
151 "ssl",-
152 "ssl_method",-
153 "rand",-
154 "rand2",-
155 "debug_malloc",-
156 "BIO",-
157 "gethostbyname",-
158 "getservbyname",-
159 "readdir",-
160 "RSA_blinding",-
161 "dh",-
162 "debug_malloc2",-
163 "dso",-
164 "dynlock",-
165 "engine",-
166 "ui",-
167 "ecdsa",-
168 "ec",-
169 "ecdh",-
170 "bn",-
171 "ec_pre_comp",-
172 "store",-
173 "comp",-
174 "fips",-
175 "fips2",-
176#if CRYPTO_NUM_LOCKS != 41-
177# error "Inconsistency between crypto.h and cryptlib.c"-
178#endif-
179};-
180-
181/* This is for applications to allocate new type names in the non-dynamic-
182 array of lock names. These are numbered with positive numbers. */-
183static STACK_OF(OPENSSL_STRING) *app_locks = NULL;-
184-
185/* For applications that want a more dynamic way of handling threads, the-
186 following stack is used. These are externally numbered with negative-
187 numbers. */-
188static STACK_OF(CRYPTO_dynlock) *dyn_locks = NULL;-
189-
190static void (*locking_callback)(int mode, int type,-
191 const char *file, int line) = 0;-
192static int (*add_lock_callback)(int *pointer, int amount,-
193 int type, const char *file, int line) = 0;-
194#ifndef OPENSSL_NO_DEPRECATED-
195static unsigned long (*id_callback)(void) = 0;-
196#endif-
197static void (*threadid_callback)(CRYPTO_THREADID *) = 0;-
198static struct CRYPTO_dynlock_value *(*dynlock_create_callback)(-
199 const char *file, int line) = 0;-
200static void (*dynlock_lock_callback)(int mode,-
201 struct CRYPTO_dynlock_value *l, const char *file, int line) = 0;-
202static void (*dynlock_destroy_callback)(struct CRYPTO_dynlock_value *l,-
203 const char *file, int line) = 0;-
204-
205int-
206CRYPTO_get_new_lockid(char *name)-
207{-
208 char *str;-
209 int i;-
210-
211 if ((app_locks == NULL) &&
(app_locks == ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
212 ((app_locks = sk_OPENSSL_STRING_new_null()) == NULL)) {
((app_locks = ... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
213 CRYPTOerror(ERR_R_MALLOC_FAILURE);-
214 return (0);
never executed: return (0);
0
215 }-
216 if (name == NULL || (str = strdup(name)) == NULL) {
never executed: __retval = (char *) memcpy (__retval, name , __len);
__retval != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
((const char *... ))[0] == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
name == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
(str = (__exte...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_constant_p ( name )Description
TRUEnever evaluated
FALSEnever evaluated
((size_t)(cons...( name ) == 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
217 CRYPTOerror(ERR_R_MALLOC_FAILURE);-
218 return (0);
never executed: return (0);
0
219 }-
220 i = sk_OPENSSL_STRING_push(app_locks, str);-
221 if (!i)
!iDescription
TRUEnever evaluated
FALSEnever evaluated
0
222 free(str);
never executed: free(str);
0
223 else-
224 i += CRYPTO_NUM_LOCKS; /* gap of one :-) */
never executed: i += 41;
0
225 return (i);
never executed: return (i);
0
226}-
227-
228int-
229CRYPTO_num_locks(void)-
230{-
231 return CRYPTO_NUM_LOCKS;
never executed: return 41;
0
232}-
233-
234int-
235CRYPTO_get_new_dynlockid(void)-
236{-
237 int i = 0;-
238 CRYPTO_dynlock *pointer = NULL;-
239-
240 if (dynlock_create_callback == NULL) {
dynlock_create...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
241 CRYPTOerror(CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK);-
242 return (0);
never executed: return (0);
0
243 }-
244 CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK);-
245 if ((dyn_locks == NULL) &&
(dyn_locks == ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
246 ((dyn_locks = sk_CRYPTO_dynlock_new_null()) == NULL)) {
((dyn_locks = ... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
247 CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);-
248 CRYPTOerror(ERR_R_MALLOC_FAILURE);-
249 return (0);
never executed: return (0);
0
250 }-
251 CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);-
252-
253 pointer = malloc(sizeof(CRYPTO_dynlock));-
254 if (pointer == NULL) {
pointer == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
255 CRYPTOerror(ERR_R_MALLOC_FAILURE);-
256 return (0);
never executed: return (0);
0
257 }-
258 pointer->references = 1;-
259 pointer->data = dynlock_create_callback(__FILE__, __LINE__);-
260 if (pointer->data == NULL) {
pointer->data == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
261 free(pointer);-
262 CRYPTOerror(ERR_R_MALLOC_FAILURE);-
263 return (0);
never executed: return (0);
0
264 }-
265-
266 CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK);-
267 /* First, try to find an existing empty slot */-
268 i = sk_CRYPTO_dynlock_find(dyn_locks, NULL);-
269 /* If there was none, push, thereby creating a new one */-
270 if (i == -1)
i == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
271 /* Since sk_push() returns the number of items on the-
272 stack, not the location of the pushed item, we need-
273 to transform the returned number into a position,-
274 by decreasing it. */-
275 i = sk_CRYPTO_dynlock_push(dyn_locks, pointer) - 1;
never executed: i = sk_push(((_STACK*) (1 ? (dyn_locks) : (struct stack_st_CRYPTO_dynlock*)0)), ((void*) (1 ? (pointer) : (CRYPTO_dynlock*)0))) - 1;
0
276 else-
277 /* If we found a place with a NULL pointer, put our pointer-
278 in it. */-
279 (void)sk_CRYPTO_dynlock_set(dyn_locks, i, pointer);
never executed: (void)sk_set(((_STACK*) (1 ? (dyn_locks) : (struct stack_st_CRYPTO_dynlock*)0)), (i), ((void*) (1 ? (pointer) : (CRYPTO_dynlock*)0)));
0
280 CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);-
281-
282 if (i == -1) {
i == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
283 dynlock_destroy_callback(pointer->data, __FILE__, __LINE__);-
284 free(pointer);-
285 } else
never executed: end of block
0
286 i += 1; /* to avoid 0 */
never executed: i += 1;
0
287 return -i;
never executed: return -i;
0
288}-
289-
290void-
291CRYPTO_destroy_dynlockid(int i)-
292{-
293 CRYPTO_dynlock *pointer = NULL;-
294-
295 if (i)
iDescription
TRUEnever evaluated
FALSEnever evaluated
0
296 i = -i - 1;
never executed: i = -i - 1;
0
297 if (dynlock_destroy_callback == NULL)
dynlock_destro...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
298 return;
never executed: return;
0
299-
300 CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK);-
301-
302 if (dyn_locks == NULL || i >= sk_CRYPTO_dynlock_num(dyn_locks)) {
dyn_locks == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
i >= sk_num(((..._dynlock*)0)))Description
TRUEnever evaluated
FALSEnever evaluated
0
303 CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);-
304 return;
never executed: return;
0
305 }-
306 pointer = sk_CRYPTO_dynlock_value(dyn_locks, i);-
307 if (pointer != NULL) {
pointer != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
308 --pointer->references;-
309 if (pointer->references <= 0) {
pointer->references <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
310 (void)sk_CRYPTO_dynlock_set(dyn_locks, i, NULL);-
311 } else
never executed: end of block
0
312 pointer = NULL;
never executed: pointer = ((void *)0) ;
0
313 }-
314 CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);-
315-
316 if (pointer) {
pointerDescription
TRUEnever evaluated
FALSEnever evaluated
0
317 dynlock_destroy_callback(pointer->data, __FILE__, __LINE__);-
318 free(pointer);-
319 }
never executed: end of block
0
320}
never executed: end of block
0
321-
322struct CRYPTO_dynlock_value *-
323CRYPTO_get_dynlock_value(int i)-
324{-
325 CRYPTO_dynlock *pointer = NULL;-
326-
327 if (i)
iDescription
TRUEnever evaluated
FALSEnever evaluated
0
328 i = -i - 1;
never executed: i = -i - 1;
0
329-
330 CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK);-
331-
332 if (dyn_locks != NULL && i < sk_CRYPTO_dynlock_num(dyn_locks))
dyn_locks != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
i < sk_num(((_..._dynlock*)0)))Description
TRUEnever evaluated
FALSEnever evaluated
0
333 pointer = sk_CRYPTO_dynlock_value(dyn_locks, i);
never executed: pointer = ((CRYPTO_dynlock *)sk_value(((_STACK*) (1 ? (dyn_locks) : (struct stack_st_CRYPTO_dynlock*)0)), (i)));
0
334 if (pointer)
pointerDescription
TRUEnever evaluated
FALSEnever evaluated
0
335 pointer->references++;
never executed: pointer->references++;
0
336-
337 CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);-
338-
339 if (pointer)
pointerDescription
TRUEnever evaluated
FALSEnever evaluated
0
340 return pointer->data;
never executed: return pointer->data;
0
341 return NULL;
never executed: return ((void *)0) ;
0
342}-
343-
344struct CRYPTO_dynlock_value *-
345(*CRYPTO_get_dynlock_create_callback(void))(const char *file, int line)-
346{-
347 return (dynlock_create_callback);
never executed: return (dynlock_create_callback);
0
348}-
349-
350void-
351(*CRYPTO_get_dynlock_lock_callback(void))(int mode,-
352 struct CRYPTO_dynlock_value *l, const char *file, int line)-
353{-
354 return (dynlock_lock_callback);
never executed: return (dynlock_lock_callback);
0
355}-
356-
357void-
358(*CRYPTO_get_dynlock_destroy_callback(void))(struct CRYPTO_dynlock_value *l,-
359 const char *file, int line)-
360{-
361 return (dynlock_destroy_callback);
never executed: return (dynlock_destroy_callback);
0
362}-
363-
364void-
365CRYPTO_set_dynlock_create_callback(-
366 struct CRYPTO_dynlock_value *(*func)(const char *file, int line))-
367{-
368 dynlock_create_callback = func;-
369}
never executed: end of block
0
370-
371void-
372CRYPTO_set_dynlock_lock_callback(void (*func)(int mode,-
373 struct CRYPTO_dynlock_value *l, const char *file, int line))-
374{-
375 dynlock_lock_callback = func;-
376}
never executed: end of block
0
377-
378void-
379CRYPTO_set_dynlock_destroy_callback(-
380 void (*func)(struct CRYPTO_dynlock_value *l, const char *file, int line))-
381{-
382 dynlock_destroy_callback = func;-
383}
never executed: end of block
0
384-
385void-
386(*CRYPTO_get_locking_callback(void))(int mode, int type, const char *file,-
387 int line)-
388{-
389 return (locking_callback);
never executed: return (locking_callback);
0
390}-
391-
392int-
393(*CRYPTO_get_add_lock_callback(void))(int *num, int mount, int type,-
394 const char *file, int line)-
395{-
396 return (add_lock_callback);
never executed: return (add_lock_callback);
0
397}-
398-
399void-
400CRYPTO_set_locking_callback(void (*func)(int mode, int type,-
401 const char *file, int line))-
402{-
403 /* Calling this here ensures initialisation before any threads-
404 * are started.-
405 */-
406 locking_callback = func;-
407}
executed 261 times by 2 tests: end of block
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
261
408-
409void-
410CRYPTO_set_add_lock_callback(int (*func)(int *num, int mount, int type,-
411 const char *file, int line))-
412{-
413 add_lock_callback = func;-
414}
never executed: end of block
0
415-
416/* the memset() here and in set_pointer() seem overkill, but for the sake of-
417 * CRYPTO_THREADID_cmp() this avoids any platform silliness that might cause two-
418 * "equal" THREADID structs to not be memcmp()-identical. */-
419void-
420CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val)-
421{-
422 memset(id, 0, sizeof(*id));-
423 id->val = val;-
424}
never executed: end of block
0
425-
426void-
427CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr)-
428{-
429 memset(id, 0, sizeof(*id));-
430 id->ptr = ptr;-
431#if ULONG_MAX >= UINTPTR_MAX-
432 /*s u 'ptr' can be embedded in 'val' without loss of uniqueness */-
433 id->val = (uintptr_t)id->ptr;-
434#else-
435 {-
436 SHA256_CTX ctx;-
437 uint8_t results[SHA256_DIGEST_LENGTH];-
438-
439 SHA256_Init(&ctx);-
440 SHA256_Update(&ctx, (char *)(&id->ptr), sizeof(id->ptr));-
441 SHA256_Final(results, &ctx);-
442 memcpy(&id->val, results, sizeof(id->val));-
443 }-
444#endif-
445}
executed 10741 times by 24 tests: end of block
Executed by:
  • aeadtest
  • asn1test
  • bnaddsub
  • bntest
  • cipher_list
  • clienttest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • enginetest
  • evptest
  • exptest
  • freenull
  • gost2814789t
  • libcrypto.so.44.0.1
  • pbkdf2
  • pkcs7test
  • rsa_test
  • servertest
  • ssltest
  • tlsexttest
  • tlstest
10741
446-
447int-
448CRYPTO_THREADID_set_callback(void (*func)(CRYPTO_THREADID *))-
449{-
450 if (threadid_callback)
threadid_callbackDescription
TRUEnever evaluated
FALSEnever evaluated
0
451 return 0;
never executed: return 0;
0
452 threadid_callback = func;-
453 return 1;
never executed: return 1;
0
454}-
455-
456void (*CRYPTO_THREADID_get_callback(void))(CRYPTO_THREADID *)-
457{-
458 return threadid_callback;
never executed: return threadid_callback;
0
459}-
460-
461void-
462CRYPTO_THREADID_current(CRYPTO_THREADID *id)-
463{-
464 if (threadid_callback) {
threadid_callbackDescription
TRUEnever evaluated
FALSEevaluated 10741 times by 24 tests
Evaluated by:
  • aeadtest
  • asn1test
  • bnaddsub
  • bntest
  • cipher_list
  • clienttest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • enginetest
  • evptest
  • exptest
  • freenull
  • gost2814789t
  • libcrypto.so.44.0.1
  • pbkdf2
  • pkcs7test
  • rsa_test
  • servertest
  • ssltest
  • tlsexttest
  • tlstest
0-10741
465 threadid_callback(id);-
466 return;
never executed: return;
0
467 }-
468#ifndef OPENSSL_NO_DEPRECATED-
469 /* If the deprecated callback was set, fall back to that */-
470 if (id_callback) {
id_callbackDescription
TRUEnever evaluated
FALSEevaluated 10741 times by 24 tests
Evaluated by:
  • aeadtest
  • asn1test
  • bnaddsub
  • bntest
  • cipher_list
  • clienttest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • enginetest
  • evptest
  • exptest
  • freenull
  • gost2814789t
  • libcrypto.so.44.0.1
  • pbkdf2
  • pkcs7test
  • rsa_test
  • servertest
  • ssltest
  • tlsexttest
  • tlstest
0-10741
471 CRYPTO_THREADID_set_numeric(id, id_callback());-
472 return;
never executed: return;
0
473 }-
474#endif-
475 /* Else pick a backup */-
476 /* For everything else, default to using the address of 'errno' */-
477 CRYPTO_THREADID_set_pointer(id, (void*)&errno);-
478}
executed 10741 times by 24 tests: end of block
Executed by:
  • aeadtest
  • asn1test
  • bnaddsub
  • bntest
  • cipher_list
  • clienttest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • enginetest
  • evptest
  • exptest
  • freenull
  • gost2814789t
  • libcrypto.so.44.0.1
  • pbkdf2
  • pkcs7test
  • rsa_test
  • servertest
  • ssltest
  • tlsexttest
  • tlstest
10741
479-
480int-
481CRYPTO_THREADID_cmp(const CRYPTO_THREADID *a, const CRYPTO_THREADID *b)-
482{-
483 return memcmp(a, b, sizeof(*a));
executed 10318 times by 20 tests: return memcmp(a, b, sizeof(*a));
Executed by:
  • aeadtest
  • asn1test
  • bnaddsub
  • bntest
  • cipher_list
  • clienttest
  • dhtest
  • ecdhtest
  • ecdsatest
  • ectest
  • enginetest
  • freenull
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • rsa_test
  • servertest
  • ssltest
  • tlsexttest
  • tlstest
10318
484}-
485-
486void-
487CRYPTO_THREADID_cpy(CRYPTO_THREADID *dest, const CRYPTO_THREADID *src)-
488{-
489 memcpy(dest, src, sizeof(*src));-
490}
executed 9773 times by 20 tests: end of block
Executed by:
  • aeadtest
  • asn1test
  • bnaddsub
  • bntest
  • cipher_list
  • clienttest
  • dhtest
  • ecdhtest
  • ecdsatest
  • ectest
  • enginetest
  • freenull
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • rsa_test
  • servertest
  • ssltest
  • tlsexttest
  • tlstest
9773
491-
492unsigned long-
493CRYPTO_THREADID_hash(const CRYPTO_THREADID *id)-
494{-
495 return id->val;
executed 10323 times by 20 tests: return id->val;
Executed by:
  • aeadtest
  • asn1test
  • bnaddsub
  • bntest
  • cipher_list
  • clienttest
  • dhtest
  • ecdhtest
  • ecdsatest
  • ectest
  • enginetest
  • freenull
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • rsa_test
  • servertest
  • ssltest
  • tlsexttest
  • tlstest
10323
496}-
497-
498#ifndef OPENSSL_NO_DEPRECATED-
499unsigned long (*CRYPTO_get_id_callback(void))(void)-
500{-
501 return (id_callback);
never executed: return (id_callback);
0
502}-
503-
504void-
505CRYPTO_set_id_callback(unsigned long (*func)(void))-
506{-
507 id_callback = func;-
508}
never executed: end of block
0
509-
510unsigned long-
511CRYPTO_thread_id(void)-
512{-
513 unsigned long ret = 0;-
514-
515 if (id_callback == NULL) {
id_callback == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
516 ret = (unsigned long)getpid();-
517 } else
never executed: end of block
0
518 ret = id_callback();
never executed: ret = id_callback();
0
519 return (ret);
never executed: return (ret);
0
520}-
521#endif-
522-
523void-
524CRYPTO_lock(int mode, int type, const char *file, int line)-
525{-
526#ifdef LOCK_DEBUG-
527 {-
528 CRYPTO_THREADID id;-
529 char *rw_text, *operation_text;-
530-
531 if (mode & CRYPTO_LOCK)-
532 operation_text = "lock ";-
533 else if (mode & CRYPTO_UNLOCK)-
534 operation_text = "unlock";-
535 else-
536 operation_text = "ERROR ";-
537-
538 if (mode & CRYPTO_READ)-
539 rw_text = "r";-
540 else if (mode & CRYPTO_WRITE)-
541 rw_text = "w";-
542 else-
543 rw_text = "ERROR";-
544-
545 CRYPTO_THREADID_current(&id);-
546 fprintf(stderr, "lock:%08lx:(%s)%s %-18s %s:%d\n",-
547 CRYPTO_THREADID_hash(&id), rw_text, operation_text,-
548 CRYPTO_get_lock_name(type), file, line);-
549 }-
550#endif-
551 if (type < 0) {
type < 0Description
TRUEnever evaluated
FALSEevaluated 1942902 times by 33 tests
Evaluated by:
  • aeadtest
  • asn1test
  • base64test
  • bnaddsub
  • bntest
  • cipher_list
  • cipherstest
  • clienttest
  • configtest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • enginetest
  • evptest
  • exptest
  • freenull
  • gost2814789t
  • keypairtest
  • libcrypto.so.44.0.1
  • mont
  • pbkdf2
  • pkcs7test
  • rsa_test
  • ...
0-1942902
552 if (dynlock_lock_callback != NULL) {
dynlock_lock_c...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
553 struct CRYPTO_dynlock_value *pointer =-
554 CRYPTO_get_dynlock_value(type);-
555-
556 OPENSSL_assert(pointer != NULL);-
557-
558 dynlock_lock_callback(mode, pointer, file, line);-
559-
560 CRYPTO_destroy_dynlockid(type);-
561 }
never executed: end of block
0
562 } else if (locking_callback != NULL)
never executed: end of block
locking_callba...!= ((void *)0)Description
TRUEevaluated 520020 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • ssltest
FALSEevaluated 1422882 times by 33 tests
Evaluated by:
  • aeadtest
  • asn1test
  • base64test
  • bnaddsub
  • bntest
  • cipher_list
  • cipherstest
  • clienttest
  • configtest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • enginetest
  • evptest
  • exptest
  • freenull
  • gost2814789t
  • keypairtest
  • libcrypto.so.44.0.1
  • mont
  • pbkdf2
  • pkcs7test
  • rsa_test
  • ...
0-1422882
563 locking_callback(mode, type, file, line);
executed 520020 times by 2 tests: locking_callback(mode, type, file, line);
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
520020
564}
executed 1942902 times by 33 tests: end of block
Executed by:
  • aeadtest
  • asn1test
  • base64test
  • bnaddsub
  • bntest
  • cipher_list
  • cipherstest
  • clienttest
  • configtest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • enginetest
  • evptest
  • exptest
  • freenull
  • gost2814789t
  • keypairtest
  • libcrypto.so.44.0.1
  • mont
  • pbkdf2
  • pkcs7test
  • rsa_test
  • ...
1942902
565-
566int-
567CRYPTO_add_lock(int *pointer, int amount, int type, const char *file,-
568 int line)-
569{-
570 int ret = 0;-
571-
572 if (add_lock_callback != NULL) {
add_lock_callb...!= ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 43858 times by 31 tests
Evaluated by:
  • aeadtest
  • asn1test
  • base64test
  • bnaddsub
  • bntest
  • cipher_list
  • cipherstest
  • clienttest
  • configtest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • enginetest
  • exptest
  • freenull
  • gost2814789t
  • keypairtest
  • libcrypto.so.44.0.1
  • mont
  • pkcs7test
  • rsa_test
  • servertest
  • ssl_versions
  • ...
0-43858
573#ifdef LOCK_DEBUG-
574 int before= *pointer;-
575#endif-
576-
577 ret = add_lock_callback(pointer, amount, type, file, line);-
578#ifdef LOCK_DEBUG-
579 {-
580 CRYPTO_THREADID id;-
581 CRYPTO_THREADID_current(&id);-
582 fprintf(stderr, "ladd:%08lx:%2d+%2d->%2d %-18s %s:%d\n",-
583 CRYPTO_THREADID_hash(&id), before, amount, ret,-
584 CRYPTO_get_lock_name(type),-
585 file, line);-
586 }-
587#endif-
588 } else {
never executed: end of block
0
589 CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE, type, file, line);-
590-
591 ret= *pointer + amount;-
592#ifdef LOCK_DEBUG-
593 {-
594 CRYPTO_THREADID id;-
595 CRYPTO_THREADID_current(&id);-
596 fprintf(stderr, "ladd:%08lx:%2d+%2d->%2d %-18s %s:%d\n",-
597 CRYPTO_THREADID_hash(&id), *pointer, amount, ret,-
598 CRYPTO_get_lock_name(type), file, line);-
599 }-
600#endif-
601 *pointer = ret;-
602 CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE, type, file, line);-
603 }
executed 43858 times by 31 tests: end of block
Executed by:
  • aeadtest
  • asn1test
  • base64test
  • bnaddsub
  • bntest
  • cipher_list
  • cipherstest
  • clienttest
  • configtest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • enginetest
  • exptest
  • freenull
  • gost2814789t
  • keypairtest
  • libcrypto.so.44.0.1
  • mont
  • pkcs7test
  • rsa_test
  • servertest
  • ssl_versions
  • ...
43858
604 return (ret);
executed 43858 times by 31 tests: return (ret);
Executed by:
  • aeadtest
  • asn1test
  • base64test
  • bnaddsub
  • bntest
  • cipher_list
  • cipherstest
  • clienttest
  • configtest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • enginetest
  • exptest
  • freenull
  • gost2814789t
  • keypairtest
  • libcrypto.so.44.0.1
  • mont
  • pkcs7test
  • rsa_test
  • servertest
  • ssl_versions
  • ...
43858
605}-
606-
607const char *-
608CRYPTO_get_lock_name(int type)-
609{-
610 if (type < 0)
type < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
611 return("dynamic");
never executed: return("dynamic");
0
612 else if (type < CRYPTO_NUM_LOCKS)
type < 41Description
TRUEnever evaluated
FALSEnever evaluated
0
613 return (lock_names[type]);
never executed: return (lock_names[type]);
0
614 else if (type - CRYPTO_NUM_LOCKS > sk_OPENSSL_STRING_num(app_locks))
type - 41 > sk...L_STRING*)0)))Description
TRUEnever evaluated
FALSEnever evaluated
0
615 return("ERROR");
never executed: return("ERROR");
0
616 else-
617 return (sk_OPENSSL_STRING_value(app_locks,
never executed: return (((OPENSSL_STRING)sk_value(((_STACK*) (1 ? app_locks : (struct stack_st_OPENSSL_STRING*)0)), type - 41)) );
0
618 type - CRYPTO_NUM_LOCKS));
never executed: return (((OPENSSL_STRING)sk_value(((_STACK*) (1 ? app_locks : (struct stack_st_OPENSSL_STRING*)0)), type - 41)) );
0
619}-
620-
621#if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \-
622 defined(__INTEL__) || \-
623 defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64)-
624-
625uint64_t OPENSSL_ia32cap_P;-
626-
627uint64_t-
628OPENSSL_cpu_caps(void)-
629{-
630 return OPENSSL_ia32cap_P;
executed 11601 times by 35 tests: return OPENSSL_ia32cap_P;
Executed by:
  • aeadtest
  • asn1test
  • base64test
  • bnaddsub
  • bntest
  • cipher_list
  • cipherstest
  • clienttest
  • configtest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • enginetest
  • evptest
  • exptest
  • gcm128test
  • gost2814789t
  • hkdftest
  • keypairtest
  • libcrypto.so.44.0.1
  • mont
  • pbkdf2
  • pkcs7test
  • ...
11601
631}-
632-
633#if defined(OPENSSL_CPUID_OBJ) && !defined(OPENSSL_NO_ASM)-
634#define OPENSSL_CPUID_SETUP-
635void-
636OPENSSL_cpuid_setup(void)-
637{-
638 static int trigger = 0;-
639 uint64_t OPENSSL_ia32_cpuid(void);-
640-
641 if (trigger)
triggerDescription
TRUEevaluated 505 times by 33 tests
Evaluated by:
  • asn1test
  • base64test
  • bnaddsub
  • bntest
  • cipher_list
  • cipherstest
  • clienttest
  • configtest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • enginetest
  • evptest
  • exptest
  • gost2814789t
  • hkdftest
  • keypairtest
  • libcrypto.so.44.0.1
  • mont
  • pbkdf2
  • pkcs7test
  • rc4test
  • rsa_test
  • ...
FALSEevaluated 309 times by 50 tests
Evaluated by:
  • aeadtest
  • aes_wrap
  • asn1evp
  • asn1test
  • asn1time
  • base64test
  • bnaddsub
  • bntest
  • cipher_list
  • cipherstest
  • clienttest
  • configtest
  • cts128test
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • enginetest
  • evptest
  • exptest
  • freenull
  • gcm128test
  • gost2814789t
  • hkdftest
  • ...
309-505
642 return;
executed 505 times by 33 tests: return;
Executed by:
  • asn1test
  • base64test
  • bnaddsub
  • bntest
  • cipher_list
  • cipherstest
  • clienttest
  • configtest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • enginetest
  • evptest
  • exptest
  • gost2814789t
  • hkdftest
  • keypairtest
  • libcrypto.so.44.0.1
  • mont
  • pbkdf2
  • pkcs7test
  • rc4test
  • rsa_test
  • ...
505
643 trigger = 1;-
644 OPENSSL_ia32cap_P = OPENSSL_ia32_cpuid();-
645}
executed 309 times by 50 tests: end of block
Executed by:
  • aeadtest
  • aes_wrap
  • asn1evp
  • asn1test
  • asn1time
  • base64test
  • bnaddsub
  • bntest
  • cipher_list
  • cipherstest
  • clienttest
  • configtest
  • cts128test
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • ectest
  • enginetest
  • evptest
  • exptest
  • freenull
  • gcm128test
  • gost2814789t
  • hkdftest
  • ...
309
646#endif-
647-
648#else-
649uint64_t-
650OPENSSL_cpu_caps(void)-
651{-
652 return 0;-
653}-
654#endif-
655-
656#if !defined(OPENSSL_CPUID_SETUP) && !defined(OPENSSL_CPUID_OBJ)-
657void-
658OPENSSL_cpuid_setup(void)-
659{-
660}-
661#endif-
662-
663static void-
664OPENSSL_showfatal(const char *fmta, ...)-
665{-
666 va_list ap;-
667-
668 va_start(ap, fmta);-
669 vfprintf(stderr, fmta, ap);-
670 va_end(ap);-
671}
never executed: end of block
0
672-
673void-
674OpenSSLDie(const char *file, int line, const char *assertion)-
675{-
676 OPENSSL_showfatal(-
677 "%s(%d): OpenSSL internal error, assertion failed: %s\n",-
678 file, line, assertion);-
679 abort();
never executed: abort();
0
680}-
681-
682int-
683CRYPTO_memcmp(const void *in_a, const void *in_b, size_t len)-
684{-
685 size_t i;-
686 const unsigned char *a = in_a;-
687 const unsigned char *b = in_b;-
688 unsigned char x = 0;-
689-
690 for (i = 0; i < len; i++)
i < lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
691 x |= a[i] ^ b[i];
never executed: x |= a[i] ^ b[i];
0
692-
693 return x;
never executed: return x;
0
694}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2