OpenCoverage

evp_pkey.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/evp/evp_pkey.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: evp_pkey.c,v 1.23 2018/08/24 20:26:03 tb Exp $ */-
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL-
3 * project 1999.-
4 */-
5/* ====================================================================-
6 * Copyright (c) 1999-2005 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 <stdlib.h>-
61-
62#include <openssl/err.h>-
63#include <openssl/x509.h>-
64-
65#include "asn1_locl.h"-
66-
67/* Extract a private key from a PKCS8 structure */-
68-
69EVP_PKEY *-
70EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8)-
71{-
72 EVP_PKEY *pkey = NULL;-
73 const ASN1_OBJECT *algoid;-
74 char obj_tmp[80];-
75-
76 if (!PKCS8_pkey_get0(&algoid, NULL, NULL, NULL, p8))
!PKCS8_pkey_ge...oid *)0) , p8)Description
TRUEnever evaluated
FALSEnever evaluated
0
77 return NULL;
never executed: return ((void *)0) ;
0
78-
79 if (!(pkey = EVP_PKEY_new())) {
!(pkey = EVP_PKEY_new())Description
TRUEnever evaluated
FALSEnever evaluated
0
80 EVPerror(ERR_R_MALLOC_FAILURE);-
81 return NULL;
never executed: return ((void *)0) ;
0
82 }-
83-
84 if (!EVP_PKEY_set_type(pkey, OBJ_obj2nid(algoid))) {
!EVP_PKEY_set_...j2nid(algoid))Description
TRUEnever evaluated
FALSEnever evaluated
0
85 EVPerror(EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM);-
86 i2t_ASN1_OBJECT(obj_tmp, 80, algoid);-
87 ERR_asprintf_error_data("TYPE=%s", obj_tmp);-
88 goto error;
never executed: goto error;
0
89 }-
90-
91 if (pkey->ameth->priv_decode) {
pkey->ameth->priv_decodeDescription
TRUEnever evaluated
FALSEnever evaluated
0
92 if (!pkey->ameth->priv_decode(pkey, p8)) {
!pkey->ameth->...code(pkey, p8)Description
TRUEnever evaluated
FALSEnever evaluated
0
93 EVPerror(EVP_R_PRIVATE_KEY_DECODE_ERROR);-
94 goto error;
never executed: goto error;
0
95 }-
96 } else {
never executed: end of block
0
97 EVPerror(EVP_R_METHOD_NOT_SUPPORTED);-
98 goto error;
never executed: goto error;
0
99 }-
100-
101 return pkey;
never executed: return pkey;
0
102-
103error:-
104 EVP_PKEY_free(pkey);-
105 return NULL;
never executed: return ((void *)0) ;
0
106}-
107-
108/* Turn a private key into a PKCS8 structure */-
109-
110PKCS8_PRIV_KEY_INFO *-
111EVP_PKEY2PKCS8(EVP_PKEY *pkey)-
112{-
113 PKCS8_PRIV_KEY_INFO *p8;-
114-
115 if (!(p8 = PKCS8_PRIV_KEY_INFO_new())) {
!(p8 = PKCS8_P...EY_INFO_new())Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-1
116 EVPerror(ERR_R_MALLOC_FAILURE);-
117 return NULL;
never executed: return ((void *)0) ;
0
118 }-
119-
120 if (pkey->ameth) {
pkey->amethDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEnever evaluated
0-1
121 if (pkey->ameth->priv_encode) {
pkey->ameth->priv_encodeDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
FALSEnever evaluated
0-1
122 if (!pkey->ameth->priv_encode(p8, pkey)) {
!pkey->ameth->...code(p8, pkey)Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.44.0.1
0-1
123 EVPerror(EVP_R_PRIVATE_KEY_ENCODE_ERROR);-
124 goto error;
never executed: goto error;
0
125 }-
126 } else {
executed 1 time by 1 test: end of block
Executed by:
  • libcrypto.so.44.0.1
1
127 EVPerror(EVP_R_METHOD_NOT_SUPPORTED);-
128 goto error;
never executed: goto error;
0
129 }-
130 } else {-
131 EVPerror(EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM);-
132 goto error;
never executed: goto error;
0
133 }-
134 return p8;
executed 1 time by 1 test: return p8;
Executed by:
  • libcrypto.so.44.0.1
1
135-
136error:-
137 PKCS8_PRIV_KEY_INFO_free(p8);-
138 return NULL;
never executed: return ((void *)0) ;
0
139}-
140-
141/* EVP_PKEY attribute functions */-
142-
143int-
144EVP_PKEY_get_attr_count(const EVP_PKEY *key)-
145{-
146 return X509at_get_attr_count(key->attributes);
never executed: return X509at_get_attr_count(key->attributes);
0
147}-
148-
149int-
150EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos)-
151{-
152 return X509at_get_attr_by_NID(key->attributes, nid, lastpos);
never executed: return X509at_get_attr_by_NID(key->attributes, nid, lastpos);
0
153}-
154-
155int-
156EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, const ASN1_OBJECT *obj,-
157 int lastpos)-
158{-
159 return X509at_get_attr_by_OBJ(key->attributes, obj, lastpos);
never executed: return X509at_get_attr_by_OBJ(key->attributes, obj, lastpos);
0
160}-
161-
162X509_ATTRIBUTE *-
163EVP_PKEY_get_attr(const EVP_PKEY *key, int loc)-
164{-
165 return X509at_get_attr(key->attributes, loc);
never executed: return X509at_get_attr(key->attributes, loc);
0
166}-
167-
168X509_ATTRIBUTE *-
169EVP_PKEY_delete_attr(EVP_PKEY *key, int loc)-
170{-
171 return X509at_delete_attr(key->attributes, loc);
never executed: return X509at_delete_attr(key->attributes, loc);
0
172}-
173-
174int-
175EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr)-
176{-
177 if (X509at_add1_attr(&key->attributes, attr))
X509at_add1_at...ributes, attr)Description
TRUEnever evaluated
FALSEnever evaluated
0
178 return 1;
never executed: return 1;
0
179 return 0;
never executed: return 0;
0
180}-
181-
182int-
183EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key, const ASN1_OBJECT *obj, int type,-
184 const unsigned char *bytes, int len)-
185{-
186 if (X509at_add1_attr_by_OBJ(&key->attributes, obj, type, bytes, len))
X509at_add1_at...e, bytes, len)Description
TRUEnever evaluated
FALSEnever evaluated
0
187 return 1;
never executed: return 1;
0
188 return 0;
never executed: return 0;
0
189}-
190-
191int-
192EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key, int nid, int type,-
193 const unsigned char *bytes, int len)-
194{-
195 if (X509at_add1_attr_by_NID(&key->attributes, nid, type, bytes, len))
X509at_add1_at...e, bytes, len)Description
TRUEnever evaluated
FALSEnever evaluated
0
196 return 1;
never executed: return 1;
0
197 return 0;
never executed: return 0;
0
198}-
199-
200int-
201EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, const char *attrname, int type,-
202 const unsigned char *bytes, int len)-
203{-
204 if (X509at_add1_attr_by_txt(&key->attributes, attrname, type,
X509at_add1_at...e, bytes, len)Description
TRUEnever evaluated
FALSEnever evaluated
0
205 bytes, len))
X509at_add1_at...e, bytes, len)Description
TRUEnever evaluated
FALSEnever evaluated
0
206 return 1;
never executed: return 1;
0
207 return 0;
never executed: return 0;
0
208}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2