blob: 4c3251b4a12884c96268384ea65ac59dca545791 [file] [log] [blame]
Paul Bakker5121ce52009-01-03 21:22:43 +00001/**
Simon Butcher5b331b92016-01-03 16:14:14 +00002 * \file sha1.h
Paul Bakkere0ccd0a2009-01-04 16:27:10 +00003 *
Rose Zadik82741422018-03-27 12:49:48 +01004 * \brief This file contains SHA-1 definitions and functions.
5 *
Darryl Green11999bb2018-03-13 15:22:58 +00006 * The Secure Hash Algorithm 1 (SHA-1) cryptographic hash function is defined in
Rose Zadik82741422018-03-27 12:49:48 +01007 * <em>FIPS 180-4: Secure Hash Standard (SHS)</em>.
Hanno Beckerbbca8c52017-09-25 14:53:51 +01008 *
9 * \warning SHA-1 is considered a weak message digest and its use constitutes
10 * a security risk. We recommend considering stronger message
11 * digests instead.
Darryl Greena40a1012018-01-05 15:33:17 +000012 */
13/*
Bence Szépkúti1e148272020-08-07 13:07:28 +020014 * Copyright The Mbed TLS Contributors
Manuel Pégourié-Gonnard37ff1402015-09-04 14:21:07 +020015 * SPDX-License-Identifier: Apache-2.0
16 *
17 * Licensed under the Apache License, Version 2.0 (the "License"); you may
18 * not use this file except in compliance with the License.
19 * You may obtain a copy of the License at
20 *
21 * http://www.apache.org/licenses/LICENSE-2.0
22 *
23 * Unless required by applicable law or agreed to in writing, software
24 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
25 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26 * See the License for the specific language governing permissions and
27 * limitations under the License.
Paul Bakker5121ce52009-01-03 21:22:43 +000028 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020029#ifndef MBEDTLS_SHA1_H
30#define MBEDTLS_SHA1_H
Paul Bakker5121ce52009-01-03 21:22:43 +000031
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020032#if !defined(MBEDTLS_CONFIG_FILE)
Jaeden Ameroc49fbbf2019-07-04 20:01:14 +010033#include "mbedtls/config.h"
Manuel Pégourié-Gonnardcef4ad22014-04-29 12:39:06 +020034#else
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020035#include MBEDTLS_CONFIG_FILE
Manuel Pégourié-Gonnardcef4ad22014-04-29 12:39:06 +020036#endif
Paul Bakker90995b52013-06-24 19:20:35 +020037
Rich Evans00ab4702015-02-06 13:43:58 +000038#include <stddef.h>
Manuel Pégourié-Gonnardab229102015-04-15 11:53:16 +020039#include <stdint.h>
Paul Bakker5c2364c2012-10-01 14:41:15 +000040
Manuel Pégourié-Gonnard93c08472021-04-15 12:23:55 +020041/* MBEDTLS_ERR_SHA1_HW_ACCEL_FAILED is deprecated and should not be used. */
Gilles Peskinea3974432021-07-26 18:48:10 +020042/** SHA-1 hardware accelerator failed */
43#define MBEDTLS_ERR_SHA1_HW_ACCEL_FAILED -0x0035
44/** SHA-1 input data was malformed. */
45#define MBEDTLS_ERR_SHA1_BAD_INPUT_DATA -0x0073
Gilles Peskinea381fe82018-01-23 18:16:11 +010046
Paul Bakker407a0da2013-06-27 14:29:21 +020047#ifdef __cplusplus
48extern "C" {
49#endif
50
Ron Eldorb2aacec2017-05-18 16:53:08 +030051#if !defined(MBEDTLS_SHA1_ALT)
52// Regular implementation
53//
54
Paul Bakker5121ce52009-01-03 21:22:43 +000055/**
Rose Zadik44833d92018-01-26 08:41:09 +000056 * \brief The SHA-1 context structure.
Hanno Beckerbbca8c52017-09-25 14:53:51 +010057 *
58 * \warning SHA-1 is considered a weak message digest and its use
59 * constitutes a security risk. We recommend considering
60 * stronger message digests instead.
61 *
Paul Bakker5121ce52009-01-03 21:22:43 +000062 */
Dawid Drozd428cc522018-07-24 10:02:47 +020063typedef struct mbedtls_sha1_context
Paul Bakker5121ce52009-01-03 21:22:43 +000064{
Rose Zadik44833d92018-01-26 08:41:09 +000065 uint32_t total[2]; /*!< The number of Bytes processed. */
66 uint32_t state[5]; /*!< The intermediate digest state. */
67 unsigned char buffer[64]; /*!< The data block being processed. */
Paul Bakker5121ce52009-01-03 21:22:43 +000068}
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020069mbedtls_sha1_context;
Paul Bakker5121ce52009-01-03 21:22:43 +000070
Ron Eldorb2aacec2017-05-18 16:53:08 +030071#else /* MBEDTLS_SHA1_ALT */
72#include "sha1_alt.h"
73#endif /* MBEDTLS_SHA1_ALT */
74
Paul Bakker5121ce52009-01-03 21:22:43 +000075/**
Rose Zadik44833d92018-01-26 08:41:09 +000076 * \brief This function initializes a SHA-1 context.
Paul Bakker5b4af392014-06-26 12:09:34 +020077 *
Hanno Beckerbbca8c52017-09-25 14:53:51 +010078 * \warning SHA-1 is considered a weak message digest and its use
79 * constitutes a security risk. We recommend considering
80 * stronger message digests instead.
81 *
Rose Zadik82741422018-03-27 12:49:48 +010082 * \param ctx The SHA-1 context to initialize.
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050083 * This must not be \c NULL.
Rose Zadik82741422018-03-27 12:49:48 +010084 *
Paul Bakker5b4af392014-06-26 12:09:34 +020085 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020086void mbedtls_sha1_init( mbedtls_sha1_context *ctx );
Paul Bakker5b4af392014-06-26 12:09:34 +020087
88/**
Rose Zadik44833d92018-01-26 08:41:09 +000089 * \brief This function clears a SHA-1 context.
Paul Bakker5b4af392014-06-26 12:09:34 +020090 *
Hanno Beckerbbca8c52017-09-25 14:53:51 +010091 * \warning SHA-1 is considered a weak message digest and its use
92 * constitutes a security risk. We recommend considering
93 * stronger message digests instead.
94 *
Andrzej Kurekc470b6b2019-01-31 08:20:20 -050095 * \param ctx The SHA-1 context to clear. This may be \c NULL,
96 * in which case this function does nothing. If it is
97 * not \c NULL, it must point to an initialized
98 * SHA-1 context.
Rose Zadik82741422018-03-27 12:49:48 +010099 *
Paul Bakker5b4af392014-06-26 12:09:34 +0200100 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200101void mbedtls_sha1_free( mbedtls_sha1_context *ctx );
Paul Bakker5b4af392014-06-26 12:09:34 +0200102
103/**
Rose Zadik44833d92018-01-26 08:41:09 +0000104 * \brief This function clones the state of a SHA-1 context.
Manuel Pégourié-Gonnard16d412f2015-07-06 15:26:26 +0200105 *
Hanno Beckerbbca8c52017-09-25 14:53:51 +0100106 * \warning SHA-1 is considered a weak message digest and its use
107 * constitutes a security risk. We recommend considering
108 * stronger message digests instead.
109 *
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500110 * \param dst The SHA-1 context to clone to. This must be initialized.
111 * \param src The SHA-1 context to clone from. This must be initialized.
Rose Zadik82741422018-03-27 12:49:48 +0100112 *
Manuel Pégourié-Gonnard16d412f2015-07-06 15:26:26 +0200113 */
114void mbedtls_sha1_clone( mbedtls_sha1_context *dst,
115 const mbedtls_sha1_context *src );
116
117/**
Rose Zadik44833d92018-01-26 08:41:09 +0000118 * \brief This function starts a SHA-1 checksum calculation.
Paul Bakker5121ce52009-01-03 21:22:43 +0000119 *
Hanno Beckerbbca8c52017-09-25 14:53:51 +0100120 * \warning SHA-1 is considered a weak message digest and its use
121 * constitutes a security risk. We recommend considering
122 * stronger message digests instead.
123 *
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500124 * \param ctx The SHA-1 context to initialize. This must be initialized.
Rose Zadik82741422018-03-27 12:49:48 +0100125 *
126 * \return \c 0 on success.
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500127 * \return A negative error code on failure.
Rose Zadik82741422018-03-27 12:49:48 +0100128 *
Paul Bakker5121ce52009-01-03 21:22:43 +0000129 */
Gilles Peskine9e4f77c2018-01-22 11:48:08 +0100130int mbedtls_sha1_starts_ret( mbedtls_sha1_context *ctx );
Paul Bakker5121ce52009-01-03 21:22:43 +0000131
132/**
Rose Zadik44833d92018-01-26 08:41:09 +0000133 * \brief This function feeds an input buffer into an ongoing SHA-1
134 * checksum calculation.
Paul Bakker5121ce52009-01-03 21:22:43 +0000135 *
Hanno Beckerbbca8c52017-09-25 14:53:51 +0100136 * \warning SHA-1 is considered a weak message digest and its use
137 * constitutes a security risk. We recommend considering
138 * stronger message digests instead.
139 *
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500140 * \param ctx The SHA-1 context. This must be initialized
141 * and have a hash operation started.
Rose Zadik82741422018-03-27 12:49:48 +0100142 * \param input The buffer holding the input data.
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500143 * This must be a readable buffer of length \p ilen Bytes.
144 * \param ilen The length of the input data \p input in Bytes.
Rose Zadik82741422018-03-27 12:49:48 +0100145 *
146 * \return \c 0 on success.
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500147 * \return A negative error code on failure.
Paul Bakker5121ce52009-01-03 21:22:43 +0000148 */
Gilles Peskine9e4f77c2018-01-22 11:48:08 +0100149int mbedtls_sha1_update_ret( mbedtls_sha1_context *ctx,
Andres Amaya Garcia034ea7e2017-04-28 15:14:50 +0100150 const unsigned char *input,
151 size_t ilen );
Paul Bakker5121ce52009-01-03 21:22:43 +0000152
153/**
Rose Zadik44833d92018-01-26 08:41:09 +0000154 * \brief This function finishes the SHA-1 operation, and writes
155 * the result to the output buffer.
Paul Bakker5121ce52009-01-03 21:22:43 +0000156 *
Hanno Beckerbbca8c52017-09-25 14:53:51 +0100157 * \warning SHA-1 is considered a weak message digest and its use
158 * constitutes a security risk. We recommend considering
159 * stronger message digests instead.
160 *
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500161 * \param ctx The SHA-1 context to use. This must be initialized and
162 * have a hash operation started.
163 * \param output The SHA-1 checksum result. This must be a writable
164 * buffer of length \c 20 Bytes.
Rose Zadik82741422018-03-27 12:49:48 +0100165 *
166 * \return \c 0 on success.
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500167 * \return A negative error code on failure.
Paul Bakker5121ce52009-01-03 21:22:43 +0000168 */
Gilles Peskine9e4f77c2018-01-22 11:48:08 +0100169int mbedtls_sha1_finish_ret( mbedtls_sha1_context *ctx,
Andres Amaya Garcia034ea7e2017-04-28 15:14:50 +0100170 unsigned char output[20] );
Paul Bakker5121ce52009-01-03 21:22:43 +0000171
Andres Amaya Garcia034ea7e2017-04-28 15:14:50 +0100172/**
Rose Zadik82741422018-03-27 12:49:48 +0100173 * \brief SHA-1 process data block (internal use only).
Hanno Beckerbbca8c52017-09-25 14:53:51 +0100174 *
175 * \warning SHA-1 is considered a weak message digest and its use
176 * constitutes a security risk. We recommend considering
177 * stronger message digests instead.
178 *
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500179 * \param ctx The SHA-1 context to use. This must be initialized.
180 * \param data The data block being processed. This must be a
181 * readable buffer of length \c 64 Bytes.
Rose Zadik82741422018-03-27 12:49:48 +0100182 *
183 * \return \c 0 on success.
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500184 * \return A negative error code on failure.
Rose Zadik82741422018-03-27 12:49:48 +0100185 *
Andres Amaya Garcia034ea7e2017-04-28 15:14:50 +0100186 */
Andres Amaya Garciacccfe082017-06-28 10:36:39 +0100187int mbedtls_internal_sha1_process( mbedtls_sha1_context *ctx,
188 const unsigned char data[64] );
Andres Amaya Garcia034ea7e2017-04-28 15:14:50 +0100189
Manuel Pégourié-Gonnard93c08472021-04-15 12:23:55 +0200190#if !defined(MBEDTLS_DEPRECATED_REMOVED)
191#if defined(MBEDTLS_DEPRECATED_WARNING)
192#define MBEDTLS_DEPRECATED __attribute__((deprecated))
193#else
194#define MBEDTLS_DEPRECATED
195#endif
196/**
197 * \brief This function starts a SHA-1 checksum calculation.
198 *
199 * \warning SHA-1 is considered a weak message digest and its use
200 * constitutes a security risk. We recommend considering
201 * stronger message digests instead.
202 *
203 * \deprecated Superseded by mbedtls_sha1_starts_ret() in 2.7.0.
204 *
205 * \param ctx The SHA-1 context to initialize. This must be initialized.
206 *
207 */
208MBEDTLS_DEPRECATED void mbedtls_sha1_starts( mbedtls_sha1_context *ctx );
209
210/**
211 * \brief This function feeds an input buffer into an ongoing SHA-1
212 * checksum calculation.
213 *
214 * \warning SHA-1 is considered a weak message digest and its use
215 * constitutes a security risk. We recommend considering
216 * stronger message digests instead.
217 *
218 * \deprecated Superseded by mbedtls_sha1_update_ret() in 2.7.0.
219 *
220 * \param ctx The SHA-1 context. This must be initialized and
221 * have a hash operation started.
222 * \param input The buffer holding the input data.
223 * This must be a readable buffer of length \p ilen Bytes.
224 * \param ilen The length of the input data \p input in Bytes.
225 *
226 */
227MBEDTLS_DEPRECATED void mbedtls_sha1_update( mbedtls_sha1_context *ctx,
228 const unsigned char *input,
229 size_t ilen );
230
231/**
232 * \brief This function finishes the SHA-1 operation, and writes
233 * the result to the output buffer.
234 *
235 * \warning SHA-1 is considered a weak message digest and its use
236 * constitutes a security risk. We recommend considering
237 * stronger message digests instead.
238 *
239 * \deprecated Superseded by mbedtls_sha1_finish_ret() in 2.7.0.
240 *
241 * \param ctx The SHA-1 context. This must be initialized and
242 * have a hash operation started.
243 * \param output The SHA-1 checksum result.
244 * This must be a writable buffer of length \c 20 Bytes.
245 */
246MBEDTLS_DEPRECATED void mbedtls_sha1_finish( mbedtls_sha1_context *ctx,
247 unsigned char output[20] );
248
249/**
250 * \brief SHA-1 process data block (internal use only).
251 *
252 * \warning SHA-1 is considered a weak message digest and its use
253 * constitutes a security risk. We recommend considering
254 * stronger message digests instead.
255 *
256 * \deprecated Superseded by mbedtls_internal_sha1_process() in 2.7.0.
257 *
258 * \param ctx The SHA-1 context. This must be initialized.
259 * \param data The data block being processed.
260 * This must be a readable buffer of length \c 64 bytes.
261 *
262 */
263MBEDTLS_DEPRECATED void mbedtls_sha1_process( mbedtls_sha1_context *ctx,
264 const unsigned char data[64] );
265
266#undef MBEDTLS_DEPRECATED
267#endif /* !MBEDTLS_DEPRECATED_REMOVED */
268
Paul Bakker5121ce52009-01-03 21:22:43 +0000269/**
Rose Zadik44833d92018-01-26 08:41:09 +0000270 * \brief This function calculates the SHA-1 checksum of a buffer.
Paul Bakker5121ce52009-01-03 21:22:43 +0000271 *
Rose Zadik44833d92018-01-26 08:41:09 +0000272 * The function allocates the context, performs the
273 * calculation, and frees the context.
Andres Amaya Garcia034ea7e2017-04-28 15:14:50 +0100274 *
Rose Zadik44833d92018-01-26 08:41:09 +0000275 * The SHA-1 result is calculated as
276 * output = SHA-1(input buffer).
277 *
Rose Zadik82741422018-03-27 12:49:48 +0100278 * \warning SHA-1 is considered a weak message digest and its use
279 * constitutes a security risk. We recommend considering
280 * stronger message digests instead.
281 *
Rose Zadik44833d92018-01-26 08:41:09 +0000282 * \param input The buffer holding the input data.
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500283 * This must be a readable buffer of length \p ilen Bytes.
284 * \param ilen The length of the input data \p input in Bytes.
Rose Zadik44833d92018-01-26 08:41:09 +0000285 * \param output The SHA-1 checksum result.
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500286 * This must be a writable buffer of length \c 20 Bytes.
Rose Zadik44833d92018-01-26 08:41:09 +0000287 *
Rose Zadik82741422018-03-27 12:49:48 +0100288 * \return \c 0 on success.
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500289 * \return A negative error code on failure.
Hanno Beckerbbca8c52017-09-25 14:53:51 +0100290 *
Paul Bakker5121ce52009-01-03 21:22:43 +0000291 */
Gilles Peskine9e4f77c2018-01-22 11:48:08 +0100292int mbedtls_sha1_ret( const unsigned char *input,
Andres Amaya Garcia034ea7e2017-04-28 15:14:50 +0100293 size_t ilen,
294 unsigned char output[20] );
295
Manuel Pégourié-Gonnard93c08472021-04-15 12:23:55 +0200296#if !defined(MBEDTLS_DEPRECATED_REMOVED)
297#if defined(MBEDTLS_DEPRECATED_WARNING)
298#define MBEDTLS_DEPRECATED __attribute__((deprecated))
299#else
300#define MBEDTLS_DEPRECATED
301#endif
302/**
303 * \brief This function calculates the SHA-1 checksum of a buffer.
304 *
305 * The function allocates the context, performs the
306 * calculation, and frees the context.
307 *
308 * The SHA-1 result is calculated as
309 * output = SHA-1(input buffer).
310 *
311 * \warning SHA-1 is considered a weak message digest and its use
312 * constitutes a security risk. We recommend considering
313 * stronger message digests instead.
314 *
315 * \deprecated Superseded by mbedtls_sha1_ret() in 2.7.0
316 *
317 * \param input The buffer holding the input data.
318 * This must be a readable buffer of length \p ilen Bytes.
319 * \param ilen The length of the input data \p input in Bytes.
320 * \param output The SHA-1 checksum result. This must be a writable
321 * buffer of size \c 20 Bytes.
322 *
323 */
324MBEDTLS_DEPRECATED void mbedtls_sha1( const unsigned char *input,
325 size_t ilen,
326 unsigned char output[20] );
327
328#undef MBEDTLS_DEPRECATED
329#endif /* !MBEDTLS_DEPRECATED_REMOVED */
330
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500331#if defined(MBEDTLS_SELF_TEST)
332
Paul Bakker5121ce52009-01-03 21:22:43 +0000333/**
Rose Zadik44833d92018-01-26 08:41:09 +0000334 * \brief The SHA-1 checkup routine.
Paul Bakker5121ce52009-01-03 21:22:43 +0000335 *
Hanno Beckerbbca8c52017-09-25 14:53:51 +0100336 * \warning SHA-1 is considered a weak message digest and its use
337 * constitutes a security risk. We recommend considering
338 * stronger message digests instead.
339 *
Rose Zadik82741422018-03-27 12:49:48 +0100340 * \return \c 0 on success.
341 * \return \c 1 on failure.
342 *
Paul Bakker5121ce52009-01-03 21:22:43 +0000343 */
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200344int mbedtls_sha1_self_test( int verbose );
Paul Bakker5121ce52009-01-03 21:22:43 +0000345
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500346#endif /* MBEDTLS_SELF_TEST */
347
Paul Bakker5121ce52009-01-03 21:22:43 +0000348#ifdef __cplusplus
349}
350#endif
351
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200352#endif /* mbedtls_sha1.h */