Coverage Report

Created: 2022-11-30 06:20

/src/openssl/crypto/evp/m_sha1.c
Line
Count
Source (jump to first uncovered line)
1
/* crypto/evp/m_sha1.c */
2
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3
 * All rights reserved.
4
 *
5
 * This package is an SSL implementation written
6
 * by Eric Young (eay@cryptsoft.com).
7
 * The implementation was written so as to conform with Netscapes SSL.
8
 *
9
 * This library is free for commercial and non-commercial use as long as
10
 * the following conditions are aheared to.  The following conditions
11
 * apply to all code found in this distribution, be it the RC4, RSA,
12
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
13
 * included with this distribution is covered by the same copyright terms
14
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15
 *
16
 * Copyright remains Eric Young's, and as such any Copyright notices in
17
 * the code are not to be removed.
18
 * If this package is used in a product, Eric Young should be given attribution
19
 * as the author of the parts of the library used.
20
 * This can be in the form of a textual message at program startup or
21
 * in documentation (online or textual) provided with the package.
22
 *
23
 * Redistribution and use in source and binary forms, with or without
24
 * modification, are permitted provided that the following conditions
25
 * are met:
26
 * 1. Redistributions of source code must retain the copyright
27
 *    notice, this list of conditions and the following disclaimer.
28
 * 2. Redistributions in binary form must reproduce the above copyright
29
 *    notice, this list of conditions and the following disclaimer in the
30
 *    documentation and/or other materials provided with the distribution.
31
 * 3. All advertising materials mentioning features or use of this software
32
 *    must display the following acknowledgement:
33
 *    "This product includes cryptographic software written by
34
 *     Eric Young (eay@cryptsoft.com)"
35
 *    The word 'cryptographic' can be left out if the rouines from the library
36
 *    being used are not cryptographic related :-).
37
 * 4. If you include any Windows specific code (or a derivative thereof) from
38
 *    the apps directory (application code) you must include an acknowledgement:
39
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40
 *
41
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51
 * SUCH DAMAGE.
52
 *
53
 * The licence and distribution terms for any publically available version or
54
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
55
 * copied and put under another distribution licence
56
 * [including the GNU Public Licence.]
57
 */
58
59
#include <stdio.h>
60
#include "cryptlib.h"
61
62
#ifndef OPENSSL_NO_SHA
63
64
# include <openssl/evp.h>
65
# include <openssl/objects.h>
66
# include <openssl/sha.h>
67
# ifndef OPENSSL_NO_RSA
68
#  include <openssl/rsa.h>
69
# endif
70
71
static int init(EVP_MD_CTX *ctx)
72
65.3k
{
73
65.3k
    return SHA1_Init(ctx->md_data);
74
65.3k
}
75
76
static int update(EVP_MD_CTX *ctx, const void *data, size_t count)
77
261k
{
78
261k
    return SHA1_Update(ctx->md_data, data, count);
79
261k
}
80
81
static int final(EVP_MD_CTX *ctx, unsigned char *md)
82
65.3k
{
83
65.3k
    return SHA1_Final(md, ctx->md_data);
84
65.3k
}
85
86
static const EVP_MD sha1_md = {
87
    NID_sha1,
88
    NID_sha1WithRSAEncryption,
89
    SHA_DIGEST_LENGTH,
90
    EVP_MD_FLAG_PKEY_METHOD_SIGNATURE | EVP_MD_FLAG_DIGALGID_ABSENT,
91
    init,
92
    update,
93
    final,
94
    NULL,
95
    NULL,
96
    EVP_PKEY_RSA_method,
97
    SHA_CBLOCK,
98
    sizeof(EVP_MD *) + sizeof(SHA_CTX),
99
};
100
101
const EVP_MD *EVP_sha1(void)
102
70.3k
{
103
70.3k
    return (&sha1_md);
104
70.3k
}
105
#endif
106
107
#ifndef OPENSSL_NO_SHA256
108
static int init224(EVP_MD_CTX *ctx)
109
0
{
110
0
    return SHA224_Init(ctx->md_data);
111
0
}
112
113
static int init256(EVP_MD_CTX *ctx)
114
16.9k
{
115
16.9k
    return SHA256_Init(ctx->md_data);
116
16.9k
}
117
118
/*
119
 * Even though there're separate SHA224_[Update|Final], we call
120
 * SHA256 functions even in SHA224 context. This is what happens
121
 * there anyway, so we can spare few CPU cycles:-)
122
 */
123
static int update256(EVP_MD_CTX *ctx, const void *data, size_t count)
124
919k
{
125
919k
    return SHA256_Update(ctx->md_data, data, count);
126
919k
}
127
128
static int final256(EVP_MD_CTX *ctx, unsigned char *md)
129
16.9k
{
130
16.9k
    return SHA256_Final(md, ctx->md_data);
131
16.9k
}
132
133
static const EVP_MD sha224_md = {
134
    NID_sha224,
135
    NID_sha224WithRSAEncryption,
136
    SHA224_DIGEST_LENGTH,
137
    EVP_MD_FLAG_PKEY_METHOD_SIGNATURE | EVP_MD_FLAG_DIGALGID_ABSENT,
138
    init224,
139
    update256,
140
    final256,
141
    NULL,
142
    NULL,
143
    EVP_PKEY_RSA_method,
144
    SHA256_CBLOCK,
145
    sizeof(EVP_MD *) + sizeof(SHA256_CTX),
146
};
147
148
const EVP_MD *EVP_sha224(void)
149
38
{
150
38
    return (&sha224_md);
151
38
}
152
153
static const EVP_MD sha256_md = {
154
    NID_sha256,
155
    NID_sha256WithRSAEncryption,
156
    SHA256_DIGEST_LENGTH,
157
    EVP_MD_FLAG_PKEY_METHOD_SIGNATURE | EVP_MD_FLAG_DIGALGID_ABSENT,
158
    init256,
159
    update256,
160
    final256,
161
    NULL,
162
    NULL,
163
    EVP_PKEY_RSA_method,
164
    SHA256_CBLOCK,
165
    sizeof(EVP_MD *) + sizeof(SHA256_CTX),
166
};
167
168
const EVP_MD *EVP_sha256(void)
169
16.9k
{
170
16.9k
    return (&sha256_md);
171
16.9k
}
172
#endif                          /* ifndef OPENSSL_NO_SHA256 */
173
174
#ifndef OPENSSL_NO_SHA512
175
static int init384(EVP_MD_CTX *ctx)
176
0
{
177
0
    return SHA384_Init(ctx->md_data);
178
0
}
179
180
static int init512(EVP_MD_CTX *ctx)
181
0
{
182
0
    return SHA512_Init(ctx->md_data);
183
0
}
184
185
/* See comment in SHA224/256 section */
186
static int update512(EVP_MD_CTX *ctx, const void *data, size_t count)
187
0
{
188
0
    return SHA512_Update(ctx->md_data, data, count);
189
0
}
190
191
static int final512(EVP_MD_CTX *ctx, unsigned char *md)
192
0
{
193
0
    return SHA512_Final(md, ctx->md_data);
194
0
}
195
196
static const EVP_MD sha384_md = {
197
    NID_sha384,
198
    NID_sha384WithRSAEncryption,
199
    SHA384_DIGEST_LENGTH,
200
    EVP_MD_FLAG_PKEY_METHOD_SIGNATURE | EVP_MD_FLAG_DIGALGID_ABSENT,
201
    init384,
202
    update512,
203
    final512,
204
    NULL,
205
    NULL,
206
    EVP_PKEY_RSA_method,
207
    SHA512_CBLOCK,
208
    sizeof(EVP_MD *) + sizeof(SHA512_CTX),
209
};
210
211
const EVP_MD *EVP_sha384(void)
212
38
{
213
38
    return (&sha384_md);
214
38
}
215
216
static const EVP_MD sha512_md = {
217
    NID_sha512,
218
    NID_sha512WithRSAEncryption,
219
    SHA512_DIGEST_LENGTH,
220
    EVP_MD_FLAG_PKEY_METHOD_SIGNATURE | EVP_MD_FLAG_DIGALGID_ABSENT,
221
    init512,
222
    update512,
223
    final512,
224
    NULL,
225
    NULL,
226
    EVP_PKEY_RSA_method,
227
    SHA512_CBLOCK,
228
    sizeof(EVP_MD *) + sizeof(SHA512_CTX),
229
};
230
231
const EVP_MD *EVP_sha512(void)
232
38
{
233
38
    return (&sha512_md);
234
38
}
235
#endif                          /* ifndef OPENSSL_NO_SHA512 */