OpenCoverage

obj_xref.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/objects/obj_xref.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: obj_xref.c,v 1.8 2017/01/21 04:44:43 jsing Exp $ */-
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL-
3 * project 2006.-
4 */-
5/* ====================================================================-
6 * Copyright (c) 2006 The OpenSSL Project. All rights reserved.-
7 *-
8 * Redistribution and use in source and binary forms, with or without-
9 * modification, are permitted provided that the following conditions-
10 * are met:-
11 *-
12 * 1. Redistributions of source code must retain the above copyright-
13 * notice, this list of conditions and the following disclaimer.-
14 *-
15 * 2. Redistributions in binary form must reproduce the above copyright-
16 * notice, this list of conditions and the following disclaimer in-
17 * the documentation and/or other materials provided with the-
18 * distribution.-
19 *-
20 * 3. All advertising materials mentioning features or use of this-
21 * software must display the following acknowledgment:-
22 * "This product includes software developed by the OpenSSL Project-
23 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"-
24 *-
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to-
26 * endorse or promote products derived from this software without-
27 * prior written permission. For written permission, please contact-
28 * licensing@OpenSSL.org.-
29 *-
30 * 5. Products derived from this software may not be called "OpenSSL"-
31 * nor may "OpenSSL" appear in their names without prior written-
32 * permission of the OpenSSL Project.-
33 *-
34 * 6. Redistributions of any form whatsoever must retain the following-
35 * acknowledgment:-
36 * "This product includes software developed by the OpenSSL Project-
37 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"-
38 *-
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY-
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR-
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR-
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT-
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)-
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED-
50 * OF THE POSSIBILITY OF SUCH DAMAGE.-
51 * ====================================================================-
52 *-
53 * This product includes cryptographic software written by Eric Young-
54 * (eay@cryptsoft.com). This product includes software written by Tim-
55 * Hudson (tjh@cryptsoft.com).-
56 *-
57 */-
58-
59#include <openssl/objects.h>-
60#include "obj_xref.h"-
61-
62DECLARE_STACK_OF(nid_triple)-
63STACK_OF(nid_triple) *sig_app, *sigx_app;-
64-
65static int-
66sig_cmp(const nid_triple *a, const nid_triple *b)-
67{-
68 return a->sign_id - b->sign_id;
executed 684 times by 3 tests: return a->sign_id - b->sign_id;
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
  • tlstest
684
69}-
70-
71static int sig_cmp_BSEARCH_CMP_FN(const void *, const void *);-
72static int sig_cmp(nid_triple const *, nid_triple const *);-
73static nid_triple *OBJ_bsearch_sig(nid_triple *key, nid_triple const *base, int num);-
74-
75static int-
76sig_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_)-
77{-
78 nid_triple const *a = a_;-
79 nid_triple const *b = b_;-
80 return sig_cmp(a, b);
executed 684 times by 3 tests: return sig_cmp(a, b);
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
  • tlstest
684
81}-
82-
83static nid_triple *-
84OBJ_bsearch_sig(nid_triple *key, nid_triple const *base, int num)-
85{-
86 return (nid_triple *)OBJ_bsearch_(key, base, num, sizeof(nid_triple),
executed 138 times by 3 tests: return (nid_triple *)OBJ_bsearch_(key, base, num, sizeof(nid_triple), sig_cmp_BSEARCH_CMP_FN);
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
  • tlstest
138
87 sig_cmp_BSEARCH_CMP_FN);
executed 138 times by 3 tests: return (nid_triple *)OBJ_bsearch_(key, base, num, sizeof(nid_triple), sig_cmp_BSEARCH_CMP_FN);
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
  • tlstest
138
88}-
89-
90static int-
91sig_sk_cmp(const nid_triple * const *a, const nid_triple * const *b)-
92{-
93 return (*a)->sign_id - (*b)->sign_id;
never executed: return (*a)->sign_id - (*b)->sign_id;
0
94}-
95-
96static int sigx_cmp_BSEARCH_CMP_FN(const void *, const void *);-
97static int sigx_cmp(const nid_triple * const *, const nid_triple * const *);-
98static const nid_triple * *OBJ_bsearch_sigx(const nid_triple * *key, const nid_triple * const *base, int num);-
99-
100static int-
101sigx_cmp(const nid_triple * const *a, const nid_triple * const *b)-
102{-
103 int ret;-
104-
105 ret = (*a)->hash_id - (*b)->hash_id;-
106 if (ret)
retDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
2-4
107 return ret;
executed 2 times by 1 test: return ret;
Executed by:
  • libcrypto.so.44.0.1
2
108 return (*a)->pkey_id - (*b)->pkey_id;
executed 4 times by 1 test: return (*a)->pkey_id - (*b)->pkey_id;
Executed by:
  • libcrypto.so.44.0.1
4
109}-
110-
111-
112static int-
113sigx_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_)-
114{-
115 const nid_triple * const *a = a_;-
116 const nid_triple * const *b = b_;-
117 return sigx_cmp(a, b);
executed 6 times by 1 test: return sigx_cmp(a, b);
Executed by:
  • libcrypto.so.44.0.1
6
118}-
119-
120static const nid_triple * *-
121OBJ_bsearch_sigx(const nid_triple * *key, const nid_triple * const *base, int num)-
122{-
123 return (const nid_triple * *)OBJ_bsearch_(key, base, num, sizeof(const nid_triple *),
executed 2 times by 1 test: return (const nid_triple * *)OBJ_bsearch_(key, base, num, sizeof(const nid_triple *), sigx_cmp_BSEARCH_CMP_FN);
Executed by:
  • libcrypto.so.44.0.1
2
124 sigx_cmp_BSEARCH_CMP_FN);
executed 2 times by 1 test: return (const nid_triple * *)OBJ_bsearch_(key, base, num, sizeof(const nid_triple *), sigx_cmp_BSEARCH_CMP_FN);
Executed by:
  • libcrypto.so.44.0.1
2
125}-
126-
127int-
128OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid)-
129{-
130 nid_triple tmp;-
131 const nid_triple *rv = NULL;-
132 tmp.sign_id = signid;-
133-
134 if (sig_app) {
sig_appDescription
TRUEnever evaluated
FALSEevaluated 138 times by 3 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • ssltest
  • tlstest
0-138
135 int idx = sk_nid_triple_find(sig_app, &tmp);-
136 if (idx >= 0)
idx >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
137 rv = sk_nid_triple_value(sig_app, idx);
never executed: rv = ((nid_triple *)sk_value(((_STACK*) (1 ? (sig_app) : (struct stack_st_nid_triple*)0)), (idx)));
0
138 }
never executed: end of block
0
139-
140#ifndef OBJ_XREF_TEST2-
141 if (rv == NULL) {
rv == ((void *)0)Description
TRUEevaluated 138 times by 3 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • ssltest
  • tlstest
FALSEnever evaluated
0-138
142 rv = OBJ_bsearch_sig(&tmp, sigoid_srt,-
143 sizeof(sigoid_srt) / sizeof(nid_triple));-
144 }
executed 138 times by 3 tests: end of block
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
  • tlstest
138
145#endif-
146 if (rv == NULL)
rv == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 138 times by 3 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • ssltest
  • tlstest
0-138
147 return 0;
never executed: return 0;
0
148 if (pdig_nid)
pdig_nidDescription
TRUEevaluated 78 times by 3 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • ssltest
  • tlstest
FALSEevaluated 60 times by 2 tests
Evaluated by:
  • ssltest
  • tlstest
60-78
149 *pdig_nid = rv->hash_id;
executed 78 times by 3 tests: *pdig_nid = rv->hash_id;
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
  • tlstest
78
150 if (ppkey_nid)
ppkey_nidDescription
TRUEevaluated 138 times by 3 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • ssltest
  • tlstest
FALSEnever evaluated
0-138
151 *ppkey_nid = rv->pkey_id;
executed 138 times by 3 tests: *ppkey_nid = rv->pkey_id;
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
  • tlstest
138
152 return 1;
executed 138 times by 3 tests: return 1;
Executed by:
  • libcrypto.so.44.0.1
  • ssltest
  • tlstest
138
153}-
154-
155int-
156OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid)-
157{-
158 nid_triple tmp;-
159 const nid_triple *t = &tmp;-
160 const nid_triple **rv = NULL;-
161-
162 tmp.hash_id = dig_nid;-
163 tmp.pkey_id = pkey_nid;-
164-
165 if (sigx_app) {
sigx_appDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-2
166 int idx = sk_nid_triple_find(sigx_app, &tmp);-
167 if (idx >= 0) {
idx >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
168 t = sk_nid_triple_value(sigx_app, idx);-
169 rv = &t;-
170 }
never executed: end of block
0
171 }
never executed: end of block
0
172-
173#ifndef OBJ_XREF_TEST2-
174 if (rv == NULL) {
rv == ((void *)0)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEnever evaluated
0-2
175 rv = OBJ_bsearch_sigx(&t, sigoid_srt_xref,-
176 sizeof(sigoid_srt_xref) / sizeof(nid_triple *));-
177 }
executed 2 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
2
178#endif-
179 if (rv == NULL)
rv == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-2
180 return 0;
never executed: return 0;
0
181 if (psignid)
psignidDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEnever evaluated
0-2
182 *psignid = (*rv)->sign_id;
executed 2 times by 1 test: *psignid = (*rv)->sign_id;
Executed by:
  • libcrypto.so.44.0.1
2
183 return 1;
executed 2 times by 1 test: return 1;
Executed by:
  • libcrypto.so.44.0.1
2
184}-
185-
186int-
187OBJ_add_sigid(int signid, int dig_id, int pkey_id)-
188{-
189 nid_triple *ntr;-
190-
191 if (!sig_app)
!sig_appDescription
TRUEnever evaluated
FALSEnever evaluated
0
192 sig_app = sk_nid_triple_new(sig_sk_cmp);
never executed: sig_app = ((struct stack_st_nid_triple *)sk_new(((int (*)(const void *, const void *)) ((1 ? (sig_sk_cmp) : (int (*)(const nid_triple * const *, const nid_triple * const *))0)))));
0
193 if (!sig_app)
!sig_appDescription
TRUEnever evaluated
FALSEnever evaluated
0
194 return 0;
never executed: return 0;
0
195 if (!sigx_app)
!sigx_appDescription
TRUEnever evaluated
FALSEnever evaluated
0
196 sigx_app = sk_nid_triple_new(sigx_cmp);
never executed: sigx_app = ((struct stack_st_nid_triple *)sk_new(((int (*)(const void *, const void *)) ((1 ? (sigx_cmp) : (int (*)(const nid_triple * const *, const nid_triple * const *))0)))));
0
197 if (!sigx_app)
!sigx_appDescription
TRUEnever evaluated
FALSEnever evaluated
0
198 return 0;
never executed: return 0;
0
199 ntr = reallocarray(NULL, 3, sizeof(int));-
200 if (!ntr)
!ntrDescription
TRUEnever evaluated
FALSEnever evaluated
0
201 return 0;
never executed: return 0;
0
202 ntr->sign_id = signid;-
203 ntr->hash_id = dig_id;-
204 ntr->pkey_id = pkey_id;-
205-
206 if (!sk_nid_triple_push(sig_app, ntr)) {
!sk_push(((_ST...d_triple*)0)))Description
TRUEnever evaluated
FALSEnever evaluated
0
207 free(ntr);-
208 return 0;
never executed: return 0;
0
209 }-
210-
211 if (!sk_nid_triple_push(sigx_app, ntr))
!sk_push(((_ST...d_triple*)0)))Description
TRUEnever evaluated
FALSEnever evaluated
0
212 return 0;
never executed: return 0;
0
213-
214 sk_nid_triple_sort(sig_app);-
215 sk_nid_triple_sort(sigx_app);-
216-
217 return 1;
never executed: return 1;
0
218}-
219-
220static void-
221sid_free(nid_triple *tt)-
222{-
223 free(tt);-
224}
never executed: end of block
0
225-
226void-
227OBJ_sigid_free(void)-
228{-
229 if (sig_app) {
sig_appDescription
TRUEnever evaluated
FALSEevaluated 263 times by 4 tests
Evaluated by:
  • evptest
  • libcrypto.so.44.0.1
  • pbkdf2
  • ssltest
0-263
230 sk_nid_triple_pop_free(sig_app, sid_free);-
231 sig_app = NULL;-
232 }
never executed: end of block
0
233 if (sigx_app) {
sigx_appDescription
TRUEnever evaluated
FALSEevaluated 263 times by 4 tests
Evaluated by:
  • evptest
  • libcrypto.so.44.0.1
  • pbkdf2
  • ssltest
0-263
234 sk_nid_triple_free(sigx_app);-
235 sigx_app = NULL;-
236 }
never executed: end of block
0
237}
executed 263 times by 4 tests: end of block
Executed by:
  • evptest
  • libcrypto.so.44.0.1
  • pbkdf2
  • ssltest
263
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2