blob: 592ffd13f244947f85fa19a406db946f7b0aacdc [file] [log] [blame]
Tom Rini0344c602024-10-08 13:56:50 -06001/**
2 * \file sha1.h
3 *
4 * \brief This file contains SHA-1 definitions and functions.
5 *
6 * The Secure Hash Algorithm 1 (SHA-1) cryptographic hash function is defined in
7 * <em>FIPS 180-4: Secure Hash Standard (SHS)</em>.
8 *
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.
12 */
13/*
14 * Copyright The Mbed TLS Contributors
15 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
16 */
17#ifndef MBEDTLS_SHA1_H
18#define MBEDTLS_SHA1_H
19#include "mbedtls/private_access.h"
20
21#include "mbedtls/build_info.h"
22
23#include <stddef.h>
24#include <stdint.h>
25
26/** SHA-1 input data was malformed. */
27#define MBEDTLS_ERR_SHA1_BAD_INPUT_DATA -0x0073
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33#if !defined(MBEDTLS_SHA1_ALT)
34// Regular implementation
35//
36
37/**
38 * \brief The SHA-1 context structure.
39 *
40 * \warning SHA-1 is considered a weak message digest and its use
41 * constitutes a security risk. We recommend considering
42 * stronger message digests instead.
43 *
44 */
45typedef struct mbedtls_sha1_context {
46 uint32_t MBEDTLS_PRIVATE(total)[2]; /*!< The number of Bytes processed. */
47 uint32_t MBEDTLS_PRIVATE(state)[5]; /*!< The intermediate digest state. */
48 unsigned char MBEDTLS_PRIVATE(buffer)[64]; /*!< The data block being processed. */
49}
50mbedtls_sha1_context;
51
52#else /* MBEDTLS_SHA1_ALT */
53#include "sha1_alt.h"
54#endif /* MBEDTLS_SHA1_ALT */
55
56/**
57 * \brief This function initializes a SHA-1 context.
58 *
59 * \warning SHA-1 is considered a weak message digest and its use
60 * constitutes a security risk. We recommend considering
61 * stronger message digests instead.
62 *
63 * \param ctx The SHA-1 context to initialize.
64 * This must not be \c NULL.
65 *
66 */
67void mbedtls_sha1_init(mbedtls_sha1_context *ctx);
68
69/**
70 * \brief This function clears a SHA-1 context.
71 *
72 * \warning SHA-1 is considered a weak message digest and its use
73 * constitutes a security risk. We recommend considering
74 * stronger message digests instead.
75 *
76 * \param ctx The SHA-1 context to clear. This may be \c NULL,
77 * in which case this function does nothing. If it is
78 * not \c NULL, it must point to an initialized
79 * SHA-1 context.
80 *
81 */
82void mbedtls_sha1_free(mbedtls_sha1_context *ctx);
83
84/**
85 * \brief This function clones the state of a SHA-1 context.
86 *
87 * \warning SHA-1 is considered a weak message digest and its use
88 * constitutes a security risk. We recommend considering
89 * stronger message digests instead.
90 *
91 * \param dst The SHA-1 context to clone to. This must be initialized.
92 * \param src The SHA-1 context to clone from. This must be initialized.
93 *
94 */
95void mbedtls_sha1_clone(mbedtls_sha1_context *dst,
96 const mbedtls_sha1_context *src);
97
98/**
99 * \brief This function starts a SHA-1 checksum calculation.
100 *
101 * \warning SHA-1 is considered a weak message digest and its use
102 * constitutes a security risk. We recommend considering
103 * stronger message digests instead.
104 *
105 * \param ctx The SHA-1 context to initialize. This must be initialized.
106 *
107 * \return \c 0 on success.
108 * \return A negative error code on failure.
109 *
110 */
111int mbedtls_sha1_starts(mbedtls_sha1_context *ctx);
112
113/**
114 * \brief This function feeds an input buffer into an ongoing SHA-1
115 * checksum calculation.
116 *
117 * \warning SHA-1 is considered a weak message digest and its use
118 * constitutes a security risk. We recommend considering
119 * stronger message digests instead.
120 *
121 * \param ctx The SHA-1 context. This must be initialized
122 * and have a hash operation started.
123 * \param input The buffer holding the input data.
124 * This must be a readable buffer of length \p ilen Bytes.
125 * \param ilen The length of the input data \p input in Bytes.
126 *
127 * \return \c 0 on success.
128 * \return A negative error code on failure.
129 */
130int mbedtls_sha1_update(mbedtls_sha1_context *ctx,
131 const unsigned char *input,
132 size_t ilen);
133
134/**
135 * \brief This function finishes the SHA-1 operation, and writes
136 * the result to the output buffer.
137 *
138 * \warning SHA-1 is considered a weak message digest and its use
139 * constitutes a security risk. We recommend considering
140 * stronger message digests instead.
141 *
142 * \param ctx The SHA-1 context to use. This must be initialized and
143 * have a hash operation started.
144 * \param output The SHA-1 checksum result. This must be a writable
145 * buffer of length \c 20 Bytes.
146 *
147 * \return \c 0 on success.
148 * \return A negative error code on failure.
149 */
150int mbedtls_sha1_finish(mbedtls_sha1_context *ctx,
151 unsigned char output[20]);
152
153/**
154 * \brief SHA-1 process data block (internal use only).
155 *
156 * \warning SHA-1 is considered a weak message digest and its use
157 * constitutes a security risk. We recommend considering
158 * stronger message digests instead.
159 *
160 * \param ctx The SHA-1 context to use. This must be initialized.
161 * \param data The data block being processed. This must be a
162 * readable buffer of length \c 64 Bytes.
163 *
164 * \return \c 0 on success.
165 * \return A negative error code on failure.
166 *
167 */
168int mbedtls_internal_sha1_process(mbedtls_sha1_context *ctx,
169 const unsigned char data[64]);
170
171/**
172 * \brief This function calculates the SHA-1 checksum of a buffer.
173 *
174 * The function allocates the context, performs the
175 * calculation, and frees the context.
176 *
177 * The SHA-1 result is calculated as
178 * output = SHA-1(input buffer).
179 *
180 * \warning SHA-1 is considered a weak message digest and its use
181 * constitutes a security risk. We recommend considering
182 * stronger message digests instead.
183 *
184 * \param input The buffer holding the input data.
185 * This must be a readable buffer of length \p ilen Bytes.
186 * \param ilen The length of the input data \p input in Bytes.
187 * \param output The SHA-1 checksum result.
188 * This must be a writable buffer of length \c 20 Bytes.
189 *
190 * \return \c 0 on success.
191 * \return A negative error code on failure.
192 *
193 */
194int mbedtls_sha1(const unsigned char *input,
195 size_t ilen,
196 unsigned char output[20]);
197
198#if defined(MBEDTLS_SELF_TEST)
199
200/**
201 * \brief The SHA-1 checkup routine.
202 *
203 * \warning SHA-1 is considered a weak message digest and its use
204 * constitutes a security risk. We recommend considering
205 * stronger message digests instead.
206 *
207 * \return \c 0 on success.
208 * \return \c 1 on failure.
209 *
210 */
211int mbedtls_sha1_self_test(int verbose);
212
213#endif /* MBEDTLS_SELF_TEST */
214
215#ifdef __cplusplus
216}
217#endif
218
219#endif /* mbedtls_sha1.h */