OpenCoverage

ameth_lib.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/asn1/ameth_lib.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: ameth_lib.c,v 1.19 2018/08/24 20:22:15 tb 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 <stdio.h>-
60#include <string.h>-
61-
62#include <openssl/opensslconf.h>-
63-
64#include <openssl/asn1t.h>-
65#include <openssl/x509.h>-
66-
67#ifndef OPENSSL_NO_ENGINE-
68#include <openssl/engine.h>-
69#endif-
70-
71#include "asn1_locl.h"-
72-
73extern const EVP_PKEY_ASN1_METHOD rsa_asn1_meths[];-
74extern const EVP_PKEY_ASN1_METHOD dsa_asn1_meths[];-
75extern const EVP_PKEY_ASN1_METHOD dh_asn1_meth;-
76extern const EVP_PKEY_ASN1_METHOD eckey_asn1_meth;-
77extern const EVP_PKEY_ASN1_METHOD gostr01_asn1_meths[];-
78extern const EVP_PKEY_ASN1_METHOD gostimit_asn1_meth;-
79extern const EVP_PKEY_ASN1_METHOD hmac_asn1_meth;-
80extern const EVP_PKEY_ASN1_METHOD cmac_asn1_meth;-
81-
82/* Keep this sorted in type order !! */-
83static const EVP_PKEY_ASN1_METHOD *standard_methods[] = {-
84#ifndef OPENSSL_NO_RSA-
85 &rsa_asn1_meths[0],-
86 &rsa_asn1_meths[1],-
87#endif-
88#ifndef OPENSSL_NO_DH-
89 &dh_asn1_meth,-
90#endif-
91#ifndef OPENSSL_NO_DSA-
92 &dsa_asn1_meths[0],-
93 &dsa_asn1_meths[1],-
94 &dsa_asn1_meths[2],-
95 &dsa_asn1_meths[3],-
96 &dsa_asn1_meths[4],-
97#endif-
98#ifndef OPENSSL_NO_EC-
99 &eckey_asn1_meth,-
100#endif-
101#ifndef OPENSSL_NO_GOST-
102 &gostr01_asn1_meths[0],-
103 &gostimit_asn1_meth,-
104#endif-
105 &hmac_asn1_meth,-
106 &cmac_asn1_meth,-
107#ifndef OPENSSL_NO_GOST-
108 &gostr01_asn1_meths[1],-
109 &gostr01_asn1_meths[2],-
110#endif-
111};-
112-
113typedef int sk_cmp_fn_type(const char * const *a, const char * const *b);-
114DECLARE_STACK_OF(EVP_PKEY_ASN1_METHOD)-
115static STACK_OF(EVP_PKEY_ASN1_METHOD) *app_methods = NULL;-
116-
117static int ameth_cmp_BSEARCH_CMP_FN(const void *, const void *);-
118static int ameth_cmp(const EVP_PKEY_ASN1_METHOD * const *, const EVP_PKEY_ASN1_METHOD * const *);-
119static const EVP_PKEY_ASN1_METHOD * *OBJ_bsearch_ameth(const EVP_PKEY_ASN1_METHOD * *key, const EVP_PKEY_ASN1_METHOD * const *base, int num);-
120-
121static int-
122ameth_cmp(const EVP_PKEY_ASN1_METHOD * const *a,-
123 const EVP_PKEY_ASN1_METHOD * const *b)-
124{-
125 return ((*a)->pkey_id - (*b)->pkey_id);
executed 4961 times by 8 tests: return ((*a)->pkey_id - (*b)->pkey_id);
Executed by:
  • dsatest
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tls_prf
  • tlstest
4961
126}-
127-
128-
129static int-
130ameth_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_)-
131{-
132 const EVP_PKEY_ASN1_METHOD * const *a = a_;-
133 const EVP_PKEY_ASN1_METHOD * const *b = b_;-
134 return ameth_cmp(a, b);
executed 4961 times by 8 tests: return ameth_cmp(a, b);
Executed by:
  • dsatest
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tls_prf
  • tlstest
4961
135}-
136-
137static const EVP_PKEY_ASN1_METHOD * *-
138OBJ_bsearch_ameth(const EVP_PKEY_ASN1_METHOD * *key, const EVP_PKEY_ASN1_METHOD * const *base, int num)-
139{-
140 return (const EVP_PKEY_ASN1_METHOD * *)OBJ_bsearch_(key, base, num, sizeof(const EVP_PKEY_ASN1_METHOD *),
executed 2149 times by 8 tests: return (const EVP_PKEY_ASN1_METHOD * *)OBJ_bsearch_(key, base, num, sizeof(const EVP_PKEY_ASN1_METHOD *), ameth_cmp_BSEARCH_CMP_FN);
Executed by:
  • dsatest
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tls_prf
  • tlstest
2149
141 ameth_cmp_BSEARCH_CMP_FN);
executed 2149 times by 8 tests: return (const EVP_PKEY_ASN1_METHOD * *)OBJ_bsearch_(key, base, num, sizeof(const EVP_PKEY_ASN1_METHOD *), ameth_cmp_BSEARCH_CMP_FN);
Executed by:
  • dsatest
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tls_prf
  • tlstest
2149
142}-
143-
144int-
145EVP_PKEY_asn1_get_count(void)-
146{-
147 int num = sizeof(standard_methods) / sizeof(EVP_PKEY_ASN1_METHOD *);-
148 if (app_methods)
app_methodsDescription
TRUEnever evaluated
FALSEevaluated 154 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-154
149 num += sk_EVP_PKEY_ASN1_METHOD_num(app_methods);
never executed: num += sk_num(((_STACK*) (1 ? (app_methods) : (struct stack_st_EVP_PKEY_ASN1_METHOD*)0)));
0
150 return num;
executed 154 times by 5 tests: return num;
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
154
151}-
152-
153const EVP_PKEY_ASN1_METHOD *-
154EVP_PKEY_asn1_get0(int idx)-
155{-
156 int num = sizeof(standard_methods) / sizeof(EVP_PKEY_ASN1_METHOD *);-
157 if (idx < 0)
idx < 0Description
TRUEnever evaluated
FALSEevaluated 154 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-154
158 return NULL;
never executed: return ((void *)0) ;
0
159 if (idx < num)
idx < numDescription
TRUEevaluated 154 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
FALSEnever evaluated
0-154
160 return standard_methods[idx];
executed 154 times by 5 tests: return standard_methods[idx];
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
154
161 idx -= num;-
162 return sk_EVP_PKEY_ASN1_METHOD_value(app_methods, idx);
never executed: return ((EVP_PKEY_ASN1_METHOD *)sk_value(((_STACK*) (1 ? (app_methods) : (struct stack_st_EVP_PKEY_ASN1_METHOD*)0)), (idx)));
0
163}-
164-
165static const EVP_PKEY_ASN1_METHOD *-
166pkey_asn1_find(int type)-
167{-
168 EVP_PKEY_ASN1_METHOD tmp;-
169 const EVP_PKEY_ASN1_METHOD *t = &tmp, **ret;-
170 tmp.pkey_id = type;-
171 if (app_methods) {
app_methodsDescription
TRUEnever evaluated
FALSEevaluated 2149 times by 8 tests
Evaluated by:
  • dsatest
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tls_prf
  • tlstest
0-2149
172 int idx;-
173 idx = sk_EVP_PKEY_ASN1_METHOD_find(app_methods, &tmp);-
174 if (idx >= 0)
idx >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
175 return sk_EVP_PKEY_ASN1_METHOD_value(app_methods, idx);
never executed: return ((EVP_PKEY_ASN1_METHOD *)sk_value(((_STACK*) (1 ? (app_methods) : (struct stack_st_EVP_PKEY_ASN1_METHOD*)0)), (idx)));
0
176 }
never executed: end of block
0
177 ret = OBJ_bsearch_ameth(&t, standard_methods,-
178 sizeof(standard_methods) / sizeof(EVP_PKEY_ASN1_METHOD *));-
179 if (!ret || !*ret)
!retDescription
TRUEnever evaluated
FALSEevaluated 2149 times by 8 tests
Evaluated by:
  • dsatest
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tls_prf
  • tlstest
!*retDescription
TRUEnever evaluated
FALSEevaluated 2149 times by 8 tests
Evaluated by:
  • dsatest
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tls_prf
  • tlstest
0-2149
180 return NULL;
never executed: return ((void *)0) ;
0
181 return *ret;
executed 2149 times by 8 tests: return *ret;
Executed by:
  • dsatest
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tls_prf
  • tlstest
2149
182}-
183-
184/* Find an implementation of an ASN1 algorithm. If 'pe' is not NULL-
185 * also search through engines and set *pe to a functional reference-
186 * to the engine implementing 'type' or NULL if no engine implements-
187 * it.-
188 */-
189-
190const EVP_PKEY_ASN1_METHOD *-
191EVP_PKEY_asn1_find(ENGINE **pe, int type)-
192{-
193 const EVP_PKEY_ASN1_METHOD *t;-
194-
195 for (;;) {-
196 t = pkey_asn1_find(type);-
197 if (!t || !(t->pkey_flags & ASN1_PKEY_ALIAS))
!tDescription
TRUEnever evaluated
FALSEevaluated 2149 times by 8 tests
Evaluated by:
  • dsatest
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tls_prf
  • tlstest
!(t->pkey_flags & 0x1)Description
TRUEevaluated 2149 times by 8 tests
Evaluated by:
  • dsatest
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tls_prf
  • tlstest
FALSEnever evaluated
0-2149
198 break;
executed 2149 times by 8 tests: break;
Executed by:
  • dsatest
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tls_prf
  • tlstest
2149
199 type = t->pkey_base_id;-
200 }
never executed: end of block
0
201 if (pe) {
peDescription
TRUEevaluated 2142 times by 8 tests
Evaluated by:
  • dsatest
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tls_prf
  • tlstest
FALSEevaluated 7 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
7-2142
202#ifndef OPENSSL_NO_ENGINE-
203 ENGINE *e;-
204 /* type will contain the final unaliased type */-
205 e = ENGINE_get_pkey_asn1_meth_engine(type);-
206 if (e) {
eDescription
TRUEnever evaluated
FALSEevaluated 2142 times by 8 tests
Evaluated by:
  • dsatest
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tls_prf
  • tlstest
0-2142
207 *pe = e;-
208 return ENGINE_get_pkey_asn1_meth(e, type);
never executed: return ENGINE_get_pkey_asn1_meth(e, type);
0
209 }-
210#endif-
211 *pe = NULL;-
212 }
executed 2142 times by 8 tests: end of block
Executed by:
  • dsatest
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tls_prf
  • tlstest
2142
213 return t;
executed 2149 times by 8 tests: return t;
Executed by:
  • dsatest
  • gost2814789t
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tls_prf
  • tlstest
2149
214}-
215-
216const EVP_PKEY_ASN1_METHOD *-
217EVP_PKEY_asn1_find_str(ENGINE **pe, const char *str, int len)-
218{-
219 int i;-
220 const EVP_PKEY_ASN1_METHOD *ameth;-
221 if (len == -1)
len == -1Description
TRUEnever evaluated
FALSEevaluated 133 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
0-133
222 len = strlen(str);
never executed: len = strlen(str);
0
223 if (pe) {
peDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 131 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
2-131
224#ifndef OPENSSL_NO_ENGINE-
225 ENGINE *e;-
226 ameth = ENGINE_pkey_asn1_find_str(&e, str, len);-
227 if (ameth) {
amethDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-2
228 /* Convert structural into-
229 * functional reference-
230 */-
231 if (!ENGINE_init(e))
!ENGINE_init(e)Description
TRUEnever evaluated
FALSEnever evaluated
0
232 ameth = NULL;
never executed: ameth = ((void *)0) ;
0
233 ENGINE_free(e);-
234 *pe = e;-
235 return ameth;
never executed: return ameth;
0
236 }-
237#endif-
238 *pe = NULL;-
239 }
executed 2 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
2
240 for (i = 0; i < EVP_PKEY_asn1_get_count(); i++) {
i < EVP_PKEY_asn1_get_count()Description
TRUEevaluated 154 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
FALSEnever evaluated
0-154
241 ameth = EVP_PKEY_asn1_get0(i);-
242 if (ameth->pkey_flags & ASN1_PKEY_ALIAS)
ameth->pkey_flags & 0x1Description
TRUEevaluated 15 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 139 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
15-139
243 continue;
executed 15 times by 1 test: continue;
Executed by:
  • libcrypto.so.44.0.1
15
244 if (((int)strlen(ameth->pem_str) == len) &&
((int)strlen(a...m_str) == len)Description
TRUEevaluated 136 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
3-136
245 !strncasecmp(ameth->pem_str, str, len))
!strncasecmp(a...str, str, len)Description
TRUEevaluated 133 times by 5 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
FALSEevaluated 3 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
3-133
246 return ameth;
executed 133 times by 5 tests: return ameth;
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
  • servertest
  • ssltest
  • tlstest
133
247 }
executed 6 times by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
6
248 return NULL;
never executed: return ((void *)0) ;
0
249}-
250-
251int-
252EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth)-
253{-
254 if (app_methods == NULL) {
app_methods == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
255 app_methods = sk_EVP_PKEY_ASN1_METHOD_new(ameth_cmp);-
256 if (!app_methods)
!app_methodsDescription
TRUEnever evaluated
FALSEnever evaluated
0
257 return 0;
never executed: return 0;
0
258 }
never executed: end of block
0
259 if (!sk_EVP_PKEY_ASN1_METHOD_push(app_methods, ameth))
!sk_push(((_ST...1_METHOD*)0)))Description
TRUEnever evaluated
FALSEnever evaluated
0
260 return 0;
never executed: return 0;
0
261 sk_EVP_PKEY_ASN1_METHOD_sort(app_methods);-
262 return 1;
never executed: return 1;
0
263}-
264-
265int-
266EVP_PKEY_asn1_add_alias(int to, int from)-
267{-
268 EVP_PKEY_ASN1_METHOD *ameth;-
269-
270 ameth = EVP_PKEY_asn1_new(from, ASN1_PKEY_ALIAS, NULL, NULL);-
271 if (!ameth)
!amethDescription
TRUEnever evaluated
FALSEnever evaluated
0
272 return 0;
never executed: return 0;
0
273 ameth->pkey_base_id = to;-
274 if (!EVP_PKEY_asn1_add0(ameth)) {
!EVP_PKEY_asn1_add0(ameth)Description
TRUEnever evaluated
FALSEnever evaluated
0
275 EVP_PKEY_asn1_free(ameth);-
276 return 0;
never executed: return 0;
0
277 }-
278 return 1;
never executed: return 1;
0
279}-
280-
281int-
282EVP_PKEY_asn1_get0_info(int *ppkey_id, int *ppkey_base_id, int *ppkey_flags,-
283 const char **pinfo, const char **ppem_str,-
284 const EVP_PKEY_ASN1_METHOD *ameth)-
285{-
286 if (!ameth)
!amethDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-2
287 return 0;
never executed: return 0;
0
288 if (ppkey_id)
ppkey_idDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-2
289 *ppkey_id = ameth->pkey_id;
never executed: *ppkey_id = ameth->pkey_id;
0
290 if (ppkey_base_id)
ppkey_base_idDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
1
291 *ppkey_base_id = ameth->pkey_base_id;
executed 1 time by 1 test: *ppkey_base_id = ameth->pkey_base_id;
Executed by:
  • libcrypto.so.44.0.1
1
292 if (ppkey_flags)
ppkey_flagsDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-2
293 *ppkey_flags = ameth->pkey_flags;
never executed: *ppkey_flags = ameth->pkey_flags;
0
294 if (pinfo)
pinfoDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-2
295 *pinfo = ameth->info;
never executed: *pinfo = ameth->info;
0
296 if (ppem_str)
ppem_strDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
1
297 *ppem_str = ameth->pem_str;
executed 1 time by 1 test: *ppem_str = ameth->pem_str;
Executed by:
  • libcrypto.so.44.0.1
1
298 return 1;
executed 2 times by 1 test: return 1;
Executed by:
  • libcrypto.so.44.0.1
2
299}-
300-
301const EVP_PKEY_ASN1_METHOD*-
302EVP_PKEY_get0_asn1(const EVP_PKEY *pkey)-
303{-
304 return pkey->ameth;
never executed: return pkey->ameth;
0
305}-
306-
307EVP_PKEY_ASN1_METHOD*-
308EVP_PKEY_asn1_new(int id, int flags, const char *pem_str, const char *info)-
309{-
310 EVP_PKEY_ASN1_METHOD *ameth;-
311-
312 if ((ameth = calloc(1, sizeof(EVP_PKEY_ASN1_METHOD))) == NULL)
(ameth = callo...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
313 return NULL;
never executed: return ((void *)0) ;
0
314-
315 ameth->pkey_id = id;-
316 ameth->pkey_base_id = id;-
317 ameth->pkey_flags = flags | ASN1_PKEY_DYNAMIC;-
318-
319 if (info != NULL) {
info != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
320 if ((ameth->info = strdup(info)) == NULL)
never executed: __retval = (char *) memcpy (__retval, info , __len);
(ameth->info =...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
__retval != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
((const char *... ))[0] == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_constant_p ( info )Description
TRUEnever evaluated
FALSEnever evaluated
((size_t)(cons...( info ) == 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
321 goto err;
never executed: goto err;
0
322 }
never executed: end of block
0
323-
324 if (pem_str != NULL) {
pem_str != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
325 if ((ameth->pem_str = strdup(pem_str)) == NULL)
never executed: __retval = (char *) memcpy (__retval, pem_str , __len);
(ameth->pem_st...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
__retval != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
((const char *... ))[0] == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons..._p ( pem_str )Description
TRUEnever evaluated
FALSEnever evaluated
((size_t)(cons...em_str ) == 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
326 goto err;
never executed: goto err;
0
327 }
never executed: end of block
0
328-
329 return ameth;
never executed: return ameth;
0
330-
331 err:-
332 EVP_PKEY_asn1_free(ameth);-
333 return NULL;
never executed: return ((void *)0) ;
0
334}-
335-
336void-
337EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, const EVP_PKEY_ASN1_METHOD *src)-
338{-
339 dst->pub_decode = src->pub_decode;-
340 dst->pub_encode = src->pub_encode;-
341 dst->pub_cmp = src->pub_cmp;-
342 dst->pub_print = src->pub_print;-
343-
344 dst->priv_decode = src->priv_decode;-
345 dst->priv_encode = src->priv_encode;-
346 dst->priv_print = src->priv_print;-
347-
348 dst->old_priv_encode = src->old_priv_encode;-
349 dst->old_priv_decode = src->old_priv_decode;-
350-
351 dst->pkey_size = src->pkey_size;-
352 dst->pkey_bits = src->pkey_bits;-
353-
354 dst->param_decode = src->param_decode;-
355 dst->param_encode = src->param_encode;-
356 dst->param_missing = src->param_missing;-
357 dst->param_copy = src->param_copy;-
358 dst->param_cmp = src->param_cmp;-
359 dst->param_print = src->param_print;-
360 dst->sig_print = src->sig_print;-
361-
362 dst->pkey_free = src->pkey_free;-
363 dst->pkey_ctrl = src->pkey_ctrl;-
364-
365 dst->item_sign = src->item_sign;-
366 dst->item_verify = src->item_verify;-
367}
never executed: end of block
0
368-
369void-
370EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth)-
371{-
372 if (ameth && (ameth->pkey_flags & ASN1_PKEY_DYNAMIC)) {
amethDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • freenull
(ameth->pkey_flags & 0x2)Description
TRUEnever evaluated
FALSEnever evaluated
0-1
373 free(ameth->pem_str);-
374 free(ameth->info);-
375 free(ameth);-
376 }
never executed: end of block
0
377}
executed 1 time by 1 test: end of block
Executed by:
  • freenull
1
378-
379void-
380EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth,-
381 int (*pub_decode)(EVP_PKEY *pk, X509_PUBKEY *pub),-
382 int (*pub_encode)(X509_PUBKEY *pub, const EVP_PKEY *pk),-
383 int (*pub_cmp)(const EVP_PKEY *a, const EVP_PKEY *b),-
384 int (*pub_print)(BIO *out, const EVP_PKEY *pkey, int indent,-
385 ASN1_PCTX *pctx),-
386 int (*pkey_size)(const EVP_PKEY *pk),-
387 int (*pkey_bits)(const EVP_PKEY *pk))-
388{-
389 ameth->pub_decode = pub_decode;-
390 ameth->pub_encode = pub_encode;-
391 ameth->pub_cmp = pub_cmp;-
392 ameth->pub_print = pub_print;-
393 ameth->pkey_size = pkey_size;-
394 ameth->pkey_bits = pkey_bits;-
395}
never executed: end of block
0
396-
397void-
398EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth,-
399 int (*priv_decode)(EVP_PKEY *pk, const PKCS8_PRIV_KEY_INFO *p8inf),-
400 int (*priv_encode)(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk),-
401 int (*priv_print)(BIO *out, const EVP_PKEY *pkey, int indent,-
402 ASN1_PCTX *pctx))-
403{-
404 ameth->priv_decode = priv_decode;-
405 ameth->priv_encode = priv_encode;-
406 ameth->priv_print = priv_print;-
407}
never executed: end of block
0
408-
409void-
410EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth,-
411 int (*param_decode)(EVP_PKEY *pkey, const unsigned char **pder, int derlen),-
412 int (*param_encode)(const EVP_PKEY *pkey, unsigned char **pder),-
413 int (*param_missing)(const EVP_PKEY *pk),-
414 int (*param_copy)(EVP_PKEY *to, const EVP_PKEY *from),-
415 int (*param_cmp)(const EVP_PKEY *a, const EVP_PKEY *b),-
416 int (*param_print)(BIO *out, const EVP_PKEY *pkey, int indent,-
417 ASN1_PCTX *pctx))-
418{-
419 ameth->param_decode = param_decode;-
420 ameth->param_encode = param_encode;-
421 ameth->param_missing = param_missing;-
422 ameth->param_copy = param_copy;-
423 ameth->param_cmp = param_cmp;-
424 ameth->param_print = param_print;-
425}
never executed: end of block
0
426-
427void-
428EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth,-
429 void (*pkey_free)(EVP_PKEY *pkey))-
430{-
431 ameth->pkey_free = pkey_free;-
432}
never executed: end of block
0
433-
434void-
435EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth,-
436 int (*pkey_ctrl)(EVP_PKEY *pkey, int op, long arg1, void *arg2))-
437{-
438 ameth->pkey_ctrl = pkey_ctrl;-
439}
never executed: end of block
0
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2