OpenCoverage

tb_pkmeth.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/engine/tb_pkmeth.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: tb_pkmeth.c,v 1.6 2017/01/29 17:49:23 beck Exp $ */-
2/* ====================================================================-
3 * Copyright (c) 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 * licensing@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-
56#include <openssl/err.h>-
57-
58#include "eng_int.h"-
59#include <openssl/evp.h>-
60-
61/* If this symbol is defined then ENGINE_get_pkey_meth_engine(), the function-
62 * that is used by EVP to hook in pkey_meth code and cache defaults (etc), will-
63 * display brief debugging summaries to stderr with the 'nid'. */-
64/* #define ENGINE_PKEY_METH_DEBUG */-
65-
66static ENGINE_TABLE *pkey_meth_table = NULL;-
67-
68void-
69ENGINE_unregister_pkey_meths(ENGINE *e)-
70{-
71 engine_table_unregister(&pkey_meth_table, e);-
72}
never executed: end of block
0
73-
74static void-
75engine_unregister_all_pkey_meths(void)-
76{-
77 engine_table_cleanup(&pkey_meth_table);-
78}
never executed: end of block
0
79-
80int-
81ENGINE_register_pkey_meths(ENGINE *e)-
82{-
83 if (e->pkey_meths) {
e->pkey_methsDescription
TRUEnever evaluated
FALSEnever evaluated
0
84 const int *nids;-
85 int num_nids = e->pkey_meths(e, NULL, &nids, 0);-
86 if (num_nids > 0)
num_nids > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
87 return engine_table_register(&pkey_meth_table,
never executed: return engine_table_register(&pkey_meth_table, engine_unregister_all_pkey_meths, e, nids, num_nids, 0);
0
88 engine_unregister_all_pkey_meths, e, nids,
never executed: return engine_table_register(&pkey_meth_table, engine_unregister_all_pkey_meths, e, nids, num_nids, 0);
0
89 num_nids, 0);
never executed: return engine_table_register(&pkey_meth_table, engine_unregister_all_pkey_meths, e, nids, num_nids, 0);
0
90 }
never executed: end of block
0
91 return 1;
never executed: return 1;
0
92}-
93-
94void-
95ENGINE_register_all_pkey_meths(void)-
96{-
97 ENGINE *e;-
98-
99 for (e = ENGINE_get_first(); e; e = ENGINE_get_next(e))
eDescription
TRUEnever evaluated
FALSEnever evaluated
0
100 ENGINE_register_pkey_meths(e);
never executed: ENGINE_register_pkey_meths(e);
0
101}
never executed: end of block
0
102-
103int-
104ENGINE_set_default_pkey_meths(ENGINE *e)-
105{-
106 if (e->pkey_meths) {
e->pkey_methsDescription
TRUEnever evaluated
FALSEnever evaluated
0
107 const int *nids;-
108 int num_nids = e->pkey_meths(e, NULL, &nids, 0);-
109 if (num_nids > 0)
num_nids > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
110 return engine_table_register(&pkey_meth_table,
never executed: return engine_table_register(&pkey_meth_table, engine_unregister_all_pkey_meths, e, nids, num_nids, 1);
0
111 engine_unregister_all_pkey_meths, e, nids,
never executed: return engine_table_register(&pkey_meth_table, engine_unregister_all_pkey_meths, e, nids, num_nids, 1);
0
112 num_nids, 1);
never executed: return engine_table_register(&pkey_meth_table, engine_unregister_all_pkey_meths, e, nids, num_nids, 1);
0
113 }
never executed: end of block
0
114 return 1;
never executed: return 1;
0
115}-
116-
117/* Exposed API function to get a functional reference from the implementation-
118 * table (ie. try to get a functional reference from the tabled structural-
119 * references) for a given pkey_meth 'nid' */-
120ENGINE *-
121ENGINE_get_pkey_meth_engine(int nid)-
122{-
123 return engine_table_select(&pkey_meth_table, nid);
executed 3777 times by 7 tests: return engine_table_select(&pkey_meth_table, nid);
Executed by:
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tls_prf
  • tlstest
3777
124}-
125-
126/* Obtains a pkey_meth implementation from an ENGINE functional reference */-
127const EVP_PKEY_METHOD *-
128ENGINE_get_pkey_meth(ENGINE *e, int nid)-
129{-
130 EVP_PKEY_METHOD *ret;-
131 ENGINE_PKEY_METHS_PTR fn = ENGINE_get_pkey_meths(e);-
132-
133 if (!fn || !fn(e, &ret, NULL, nid)) {
!fnDescription
TRUEnever evaluated
FALSEnever evaluated
!fn(e, &ret, (...id *)0) , nid)Description
TRUEnever evaluated
FALSEnever evaluated
0
134 ENGINEerror(ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD);-
135 return NULL;
never executed: return ((void *)0) ;
0
136 }-
137 return ret;
never executed: return ret;
0
138}-
139-
140/* Gets the pkey_meth callback from an ENGINE structure */-
141ENGINE_PKEY_METHS_PTR-
142ENGINE_get_pkey_meths(const ENGINE *e)-
143{-
144 return e->pkey_meths;
never executed: return e->pkey_meths;
0
145}-
146-
147/* Sets the pkey_meth callback in an ENGINE structure */-
148int-
149ENGINE_set_pkey_meths(ENGINE *e, ENGINE_PKEY_METHS_PTR f)-
150{-
151 e->pkey_meths = f;-
152 return 1;
never executed: return 1;
0
153}-
154-
155/* Internal function to free up EVP_PKEY_METHOD structures before an-
156 * ENGINE is destroyed-
157 */-
158-
159void-
160engine_pkey_meths_free(ENGINE *e)-
161{-
162 int i;-
163 EVP_PKEY_METHOD *pkm;-
164-
165 if (e->pkey_meths) {
e->pkey_methsDescription
TRUEnever evaluated
FALSEevaluated 516 times by 1 test
Evaluated by:
  • enginetest
0-516
166 const int *pknids;-
167 int npknids;-
168 npknids = e->pkey_meths(e, NULL, &pknids, 0);-
169 for (i = 0; i < npknids; i++) {
i < npknidsDescription
TRUEnever evaluated
FALSEnever evaluated
0
170 if (e->pkey_meths(e, &pkm, NULL, pknids[i])) {
e->pkey_meths(...) , pknids[i])Description
TRUEnever evaluated
FALSEnever evaluated
0
171 EVP_PKEY_meth_free(pkm);-
172 }
never executed: end of block
0
173 }
never executed: end of block
0
174 }
never executed: end of block
0
175}
executed 516 times by 1 test: end of block
Executed by:
  • enginetest
516
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2