OpenCoverage

p12_decr.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/pkcs12/p12_decr.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: p12_decr.c,v 1.19 2018/05/13 14:22:34 tb Exp $ */-
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL-
3 * project 1999.-
4 */-
5/* ====================================================================-
6 * Copyright (c) 1999 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/err.h>-
63#include <openssl/pkcs12.h>-
64-
65/* Encrypt/Decrypt a buffer based on password and algor, result in a-
66 * malloc'ed buffer-
67 */-
68-
69unsigned char *-
70PKCS12_pbe_crypt(const X509_ALGOR *algor, const char *pass, int passlen,-
71 const unsigned char *in, int inlen, unsigned char **data, int *datalen,-
72 int en_de)-
73{-
74 unsigned char *out;-
75 int outlen, i;-
76 EVP_CIPHER_CTX ctx;-
77-
78 EVP_CIPHER_CTX_init(&ctx);-
79 /* Decrypt data */-
80 if (!EVP_PBE_CipherInit(algor->algorithm, pass, passlen,
!EVP_PBE_Ciphe..., &ctx, en_de)Description
TRUEnever evaluated
FALSEnever evaluated
0
81 algor->parameter, &ctx, en_de)) {
!EVP_PBE_Ciphe..., &ctx, en_de)Description
TRUEnever evaluated
FALSEnever evaluated
0
82 out = NULL;-
83 PKCS12error(PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR);-
84 goto err;
never executed: goto err;
0
85 }-
86-
87 if (!(out = malloc(inlen + EVP_CIPHER_CTX_block_size(&ctx)))) {
!(out = malloc...k_size(&ctx)))Description
TRUEnever evaluated
FALSEnever evaluated
0
88 PKCS12error(ERR_R_MALLOC_FAILURE);-
89 goto err;
never executed: goto err;
0
90 }-
91-
92 if (!EVP_CipherUpdate(&ctx, out, &i, in, inlen)) {
!EVP_CipherUpd...&i, in, inlen)Description
TRUEnever evaluated
FALSEnever evaluated
0
93 free(out);-
94 out = NULL;-
95 PKCS12error(ERR_R_EVP_LIB);-
96 goto err;
never executed: goto err;
0
97 }-
98-
99 outlen = i;-
100 if (!EVP_CipherFinal_ex(&ctx, out + i, &i)) {
!EVP_CipherFin..., out + i, &i)Description
TRUEnever evaluated
FALSEnever evaluated
0
101 free(out);-
102 out = NULL;-
103 PKCS12error(PKCS12_R_PKCS12_CIPHERFINAL_ERROR);-
104 goto err;
never executed: goto err;
0
105 }-
106 outlen += i;-
107 if (datalen)
datalenDescription
TRUEnever evaluated
FALSEnever evaluated
0
108 *datalen = outlen;
never executed: *datalen = outlen;
0
109 if (data)
dataDescription
TRUEnever evaluated
FALSEnever evaluated
0
110 *data = out;
never executed: *data = out;
0
111-
112err:
code before this statement never executed: err:
0
113 EVP_CIPHER_CTX_cleanup(&ctx);-
114 return out;
never executed: return out;
0
115-
116}-
117-
118/* Decrypt an OCTET STRING and decode ASN1 structure-
119 * if zbuf set zero buffer after use.-
120 */-
121-
122void *-
123PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it,-
124 const char *pass, int passlen, const ASN1_OCTET_STRING *oct, int zbuf)-
125{-
126 unsigned char *out;-
127 const unsigned char *p;-
128 void *ret;-
129 int outlen;-
130-
131 if (!PKCS12_pbe_crypt(algor, pass, passlen, oct->data, oct->length,
!PKCS12_pbe_cr...t, &outlen, 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
132 &out, &outlen, 0)) {
!PKCS12_pbe_cr...t, &outlen, 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
133 PKCS12error(PKCS12_R_PKCS12_PBE_CRYPT_ERROR);-
134 return NULL;
never executed: return ((void *)0) ;
0
135 }-
136 p = out;-
137 ret = ASN1_item_d2i(NULL, &p, outlen, it);-
138 if (zbuf)
zbufDescription
TRUEnever evaluated
FALSEnever evaluated
0
139 explicit_bzero(out, outlen);
never executed: explicit_bzero(out, outlen);
0
140 if (!ret)
!retDescription
TRUEnever evaluated
FALSEnever evaluated
0
141 PKCS12error(PKCS12_R_DECODE_ERROR);
never executed: ERR_put_error(35,(0xfff),(101),__FILE__,141);
0
142 free(out);-
143 return ret;
never executed: return ret;
0
144}-
145-
146/* Encode ASN1 structure and encrypt, return OCTET STRING-
147 * if zbuf set zero encoding.-
148 */-
149-
150ASN1_OCTET_STRING *-
151PKCS12_item_i2d_encrypt(X509_ALGOR *algor, const ASN1_ITEM *it,-
152 const char *pass, int passlen,-
153 void *obj, int zbuf)-
154{-
155 ASN1_OCTET_STRING *oct;-
156 unsigned char *in = NULL;-
157 int inlen;-
158-
159 if (!(oct = ASN1_OCTET_STRING_new ())) {
!(oct = ASN1_O...STRING_new ())Description
TRUEnever evaluated
FALSEnever evaluated
0
160 PKCS12error(ERR_R_MALLOC_FAILURE);-
161 return NULL;
never executed: return ((void *)0) ;
0
162 }-
163 inlen = ASN1_item_i2d(obj, &in, it);-
164 if (!in) {
!inDescription
TRUEnever evaluated
FALSEnever evaluated
0
165 PKCS12error(PKCS12_R_ENCODE_ERROR);-
166 goto err;
never executed: goto err;
0
167 }-
168 if (!PKCS12_pbe_crypt(algor, pass, passlen, in, inlen, &oct->data,
!PKCS12_pbe_cr...ct->length, 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
169 &oct->length, 1)) {
!PKCS12_pbe_cr...ct->length, 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
170 PKCS12error(PKCS12_R_ENCRYPT_ERROR);-
171 goto err;
never executed: goto err;
0
172 }-
173 if (zbuf)
zbufDescription
TRUEnever evaluated
FALSEnever evaluated
0
174 explicit_bzero(in, inlen);
never executed: explicit_bzero(in, inlen);
0
175 free(in);-
176 return oct;
never executed: return oct;
0
177-
178err:-
179 free(in);-
180 ASN1_OCTET_STRING_free(oct);-
181 return NULL;
never executed: return ((void *)0) ;
0
182}-
183-
184IMPLEMENT_PKCS12_STACK_OF(PKCS7)-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2