OpenCoverage

p5_crpt.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/evp/p5_crpt.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: p5_crpt.c,v 1.18 2017/01/29 17:49:23 beck 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 <stdlib.h>-
61#include <string.h>-
62-
63#include <openssl/err.h>-
64#include <openssl/evp.h>-
65#include <openssl/x509.h>-
66-
67/* Doesn't do anything now: Builtin PBE algorithms in static table.-
68 */-
69-
70void-
71PKCS5_PBE_add(void)-
72{-
73}-
74-
75int-
76PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen,-
77 ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md, int en_de)-
78{-
79 EVP_MD_CTX ctx;-
80 unsigned char md_tmp[EVP_MAX_MD_SIZE];-
81 unsigned char key[EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH];-
82 int i;-
83 PBEPARAM *pbe;-
84 int saltlen, iter;-
85 unsigned char *salt;-
86 const unsigned char *pbuf;-
87 int mdsize;-
88 int rv = 0;-
89-
90 /* Extract useful info from parameter */-
91 if (param == NULL || param->type != V_ASN1_SEQUENCE ||
param == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
param->type != 16Description
TRUEnever evaluated
FALSEnever evaluated
0
92 param->value.sequence == NULL) {
param->value.s...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
93 EVPerror(EVP_R_DECODE_ERROR);-
94 return 0;
never executed: return 0;
0
95 }-
96-
97 mdsize = EVP_MD_size(md);-
98 if (mdsize < 0)
mdsize < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
99 return 0;
never executed: return 0;
0
100-
101 pbuf = param->value.sequence->data;-
102 if (!(pbe = d2i_PBEPARAM(NULL, &pbuf, param->value.sequence->length))) {
!(pbe = d2i_PB...ence->length))Description
TRUEnever evaluated
FALSEnever evaluated
0
103 EVPerror(EVP_R_DECODE_ERROR);-
104 return 0;
never executed: return 0;
0
105 }-
106-
107 if (!pbe->iter)
!pbe->iterDescription
TRUEnever evaluated
FALSEnever evaluated
0
108 iter = 1;
never executed: iter = 1;
0
109 else if ((iter = ASN1_INTEGER_get(pbe->iter)) <= 0) {
(iter = ASN1_I...e->iter)) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
110 EVPerror(EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS);-
111 return 0;
never executed: return 0;
0
112 }-
113 salt = pbe->salt->data;-
114 saltlen = pbe->salt->length;-
115-
116 if (!pass)
!passDescription
TRUEnever evaluated
FALSEnever evaluated
0
117 passlen = 0;
never executed: passlen = 0;
0
118 else if (passlen == -1)
passlen == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
119 passlen = strlen(pass);
never executed: passlen = strlen(pass);
0
120-
121 EVP_MD_CTX_init(&ctx);-
122-
123 if (!EVP_DigestInit_ex(&ctx, md, NULL))
!EVP_DigestIni... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
124 goto err;
never executed: goto err;
0
125 if (!EVP_DigestUpdate(&ctx, pass, passlen))
!EVP_DigestUpd...pass, passlen)Description
TRUEnever evaluated
FALSEnever evaluated
0
126 goto err;
never executed: goto err;
0
127 if (!EVP_DigestUpdate(&ctx, salt, saltlen))
!EVP_DigestUpd...salt, saltlen)Description
TRUEnever evaluated
FALSEnever evaluated
0
128 goto err;
never executed: goto err;
0
129 if (!EVP_DigestFinal_ex(&ctx, md_tmp, NULL))
!EVP_DigestFin... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
130 goto err;
never executed: goto err;
0
131 for (i = 1; i < iter; i++) {
i < iterDescription
TRUEnever evaluated
FALSEnever evaluated
0
132 if (!EVP_DigestInit_ex(&ctx, md, NULL))
!EVP_DigestIni... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
133 goto err;
never executed: goto err;
0
134 if (!EVP_DigestUpdate(&ctx, md_tmp, mdsize))
!EVP_DigestUpd...d_tmp, mdsize)Description
TRUEnever evaluated
FALSEnever evaluated
0
135 goto err;
never executed: goto err;
0
136 if (!EVP_DigestFinal_ex (&ctx, md_tmp, NULL))
!EVP_DigestFin... ((void *)0) )Description
TRUEnever evaluated
FALSEnever evaluated
0
137 goto err;
never executed: goto err;
0
138 }
never executed: end of block
0
139 if ((size_t)EVP_CIPHER_key_length(cipher) > sizeof(md_tmp)) {
(size_t)EVP_CI...sizeof(md_tmp)Description
TRUEnever evaluated
FALSEnever evaluated
0
140 EVPerror(EVP_R_BAD_KEY_LENGTH);-
141 goto err;
never executed: goto err;
0
142 }-
143 memcpy(key, md_tmp, EVP_CIPHER_key_length(cipher));-
144 if ((size_t)EVP_CIPHER_iv_length(cipher) > 16) {
(size_t)EVP_CI...h(cipher) > 16Description
TRUEnever evaluated
FALSEnever evaluated
0
145 EVPerror(EVP_R_IV_TOO_LARGE);-
146 goto err;
never executed: goto err;
0
147 }-
148 memcpy(iv, md_tmp + (16 - EVP_CIPHER_iv_length(cipher)),-
149 EVP_CIPHER_iv_length(cipher));-
150 if (!EVP_CipherInit_ex(cctx, cipher, NULL, key, iv, en_de))
!EVP_CipherIni...ey, iv, en_de)Description
TRUEnever evaluated
FALSEnever evaluated
0
151 goto err;
never executed: goto err;
0
152 explicit_bzero(md_tmp, EVP_MAX_MD_SIZE);-
153 explicit_bzero(key, EVP_MAX_KEY_LENGTH);-
154 explicit_bzero(iv, EVP_MAX_IV_LENGTH);-
155 rv = 1;-
156err:
code before this statement never executed: err:
0
157 EVP_MD_CTX_cleanup(&ctx);-
158 PBEPARAM_free(pbe);-
159 return rv;
never executed: return rv;
0
160}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2