1 /**
2  * \file md2.h
3  *
4  * \brief MD2 message digest algorithm (hash function)
5  *
6  * \warning MD2 is considered a weak message digest and its use constitutes a
7  *          security risk. We recommend considering stronger message digests
8  *          instead.
9  */
10 /*
11  *  Copyright The Mbed TLS Contributors
12  *  SPDX-License-Identifier: Apache-2.0
13  *
14  *  Licensed under the Apache License, Version 2.0 (the "License"); you may
15  *  not use this file except in compliance with the License.
16  *  You may obtain a copy of the License at
17  *
18  *  http://www.apache.org/licenses/LICENSE-2.0
19  *
20  *  Unless required by applicable law or agreed to in writing, software
21  *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
22  *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23  *  See the License for the specific language governing permissions and
24  *  limitations under the License.
25  *
26  */
27 #ifndef MBEDTLS_MD2_H
28 #define MBEDTLS_MD2_H
29 
30 #if !defined(MBEDTLS_CONFIG_FILE)
31 #include "mbedtls/config.h"
32 #else
33 #include MBEDTLS_CONFIG_FILE
34 #endif
35 
36 #include <stddef.h>
37 
38 /* MBEDTLS_ERR_MD2_HW_ACCEL_FAILED is deprecated and should not be used. */
39 /** MD2 hardware accelerator failed */
40 #define MBEDTLS_ERR_MD2_HW_ACCEL_FAILED                   -0x002B
41 
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45 
46 #if !defined(MBEDTLS_MD2_ALT)
47 // Regular implementation
48 //
49 
50 /**
51  * \brief          MD2 context structure
52  *
53  * \warning        MD2 is considered a weak message digest and its use
54  *                 constitutes a security risk. We recommend considering
55  *                 stronger message digests instead.
56  *
57  */
58 typedef struct mbedtls_md2_context
59 {
60     unsigned char cksum[16];    /*!< checksum of the data block */
61     unsigned char state[48];    /*!< intermediate digest state  */
62     unsigned char buffer[16];   /*!< data block being processed */
63     size_t left;                /*!< amount of data in buffer   */
64 }
65 mbedtls_md2_context;
66 
67 #else  /* MBEDTLS_MD2_ALT */
68 #include "md2_alt.h"
69 #endif /* MBEDTLS_MD2_ALT */
70 
71 /**
72  * \brief          Initialize MD2 context
73  *
74  * \param ctx      MD2 context to be initialized
75  *
76  * \warning        MD2 is considered a weak message digest and its use
77  *                 constitutes a security risk. We recommend considering
78  *                 stronger message digests instead.
79  *
80  */
81 void mbedtls_md2_init( mbedtls_md2_context *ctx );
82 
83 /**
84  * \brief          Clear MD2 context
85  *
86  * \param ctx      MD2 context to be cleared
87  *
88  * \warning        MD2 is considered a weak message digest and its use
89  *                 constitutes a security risk. We recommend considering
90  *                 stronger message digests instead.
91  *
92  */
93 void mbedtls_md2_free( mbedtls_md2_context *ctx );
94 
95 /**
96  * \brief          Clone (the state of) an MD2 context
97  *
98  * \param dst      The destination context
99  * \param src      The context to be cloned
100  *
101  * \warning        MD2 is considered a weak message digest and its use
102  *                 constitutes a security risk. We recommend considering
103  *                 stronger message digests instead.
104  *
105  */
106 void mbedtls_md2_clone( mbedtls_md2_context *dst,
107                         const mbedtls_md2_context *src );
108 
109 /**
110  * \brief          MD2 context setup
111  *
112  * \param ctx      context to be initialized
113  *
114  * \return         0 if successful
115  *
116  * \warning        MD2 is considered a weak message digest and its use
117  *                 constitutes a security risk. We recommend considering
118  *                 stronger message digests instead.
119  *
120  */
121 int mbedtls_md2_starts_ret( mbedtls_md2_context *ctx );
122 
123 /**
124  * \brief          MD2 process buffer
125  *
126  * \param ctx      MD2 context
127  * \param input    buffer holding the data
128  * \param ilen     length of the input data
129  *
130  * \return         0 if successful
131  *
132  * \warning        MD2 is considered a weak message digest and its use
133  *                 constitutes a security risk. We recommend considering
134  *                 stronger message digests instead.
135  *
136  */
137 int mbedtls_md2_update_ret( mbedtls_md2_context *ctx,
138                             const unsigned char *input,
139                             size_t ilen );
140 
141 /**
142  * \brief          MD2 final digest
143  *
144  * \param ctx      MD2 context
145  * \param output   MD2 checksum result
146  *
147  * \return         0 if successful
148  *
149  * \warning        MD2 is considered a weak message digest and its use
150  *                 constitutes a security risk. We recommend considering
151  *                 stronger message digests instead.
152  *
153  */
154 int mbedtls_md2_finish_ret( mbedtls_md2_context *ctx,
155                             unsigned char output[16] );
156 
157 /**
158  * \brief          MD2 process data block (internal use only)
159  *
160  * \param ctx      MD2 context
161  *
162  * \return         0 if successful
163  *
164  * \warning        MD2 is considered a weak message digest and its use
165  *                 constitutes a security risk. We recommend considering
166  *                 stronger message digests instead.
167  *
168  */
169 int mbedtls_internal_md2_process( mbedtls_md2_context *ctx );
170 
171 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
172 #if defined(MBEDTLS_DEPRECATED_WARNING)
173 #define MBEDTLS_DEPRECATED      __attribute__((deprecated))
174 #else
175 #define MBEDTLS_DEPRECATED
176 #endif
177 /**
178  * \brief          MD2 context setup
179  *
180  * \deprecated     Superseded by mbedtls_md2_starts_ret() in 2.7.0
181  *
182  * \param ctx      context to be initialized
183  *
184  * \warning        MD2 is considered a weak message digest and its use
185  *                 constitutes a security risk. We recommend considering
186  *                 stronger message digests instead.
187  *
188  */
189 MBEDTLS_DEPRECATED void mbedtls_md2_starts( mbedtls_md2_context *ctx );
190 
191 /**
192  * \brief          MD2 process buffer
193  *
194  * \deprecated     Superseded by mbedtls_md2_update_ret() in 2.7.0
195  *
196  * \param ctx      MD2 context
197  * \param input    buffer holding the data
198  * \param ilen     length of the input data
199  *
200  * \warning        MD2 is considered a weak message digest and its use
201  *                 constitutes a security risk. We recommend considering
202  *                 stronger message digests instead.
203  *
204  */
205 MBEDTLS_DEPRECATED void mbedtls_md2_update( mbedtls_md2_context *ctx,
206                                             const unsigned char *input,
207                                             size_t ilen );
208 
209 /**
210  * \brief          MD2 final digest
211  *
212  * \deprecated     Superseded by mbedtls_md2_finish_ret() in 2.7.0
213  *
214  * \param ctx      MD2 context
215  * \param output   MD2 checksum result
216  *
217  * \warning        MD2 is considered a weak message digest and its use
218  *                 constitutes a security risk. We recommend considering
219  *                 stronger message digests instead.
220  *
221  */
222 MBEDTLS_DEPRECATED void mbedtls_md2_finish( mbedtls_md2_context *ctx,
223                                             unsigned char output[16] );
224 
225 /**
226  * \brief          MD2 process data block (internal use only)
227  *
228  * \deprecated     Superseded by mbedtls_internal_md2_process() in 2.7.0
229  *
230  * \param ctx      MD2 context
231  *
232  * \warning        MD2 is considered a weak message digest and its use
233  *                 constitutes a security risk. We recommend considering
234  *                 stronger message digests instead.
235  *
236  */
237 MBEDTLS_DEPRECATED void mbedtls_md2_process( mbedtls_md2_context *ctx );
238 
239 #undef MBEDTLS_DEPRECATED
240 #endif /* !MBEDTLS_DEPRECATED_REMOVED */
241 
242 /**
243  * \brief          Output = MD2( input buffer )
244  *
245  * \param input    buffer holding the data
246  * \param ilen     length of the input data
247  * \param output   MD2 checksum result
248  *
249  * \warning        MD2 is considered a weak message digest and its use
250  *                 constitutes a security risk. We recommend considering
251  *                 stronger message digests instead.
252  *
253  */
254 int mbedtls_md2_ret( const unsigned char *input,
255                      size_t ilen,
256                      unsigned char output[16] );
257 
258 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
259 #if defined(MBEDTLS_DEPRECATED_WARNING)
260 #define MBEDTLS_DEPRECATED      __attribute__((deprecated))
261 #else
262 #define MBEDTLS_DEPRECATED
263 #endif
264 /**
265  * \brief          Output = MD2( input buffer )
266  *
267  * \deprecated     Superseded by mbedtls_md2_ret() in 2.7.0
268  *
269  * \param input    buffer holding the data
270  * \param ilen     length of the input data
271  * \param output   MD2 checksum result
272  *
273  * \warning        MD2 is considered a weak message digest and its use
274  *                 constitutes a security risk. We recommend considering
275  *                 stronger message digests instead.
276  *
277  */
278 MBEDTLS_DEPRECATED void mbedtls_md2( const unsigned char *input,
279                                      size_t ilen,
280                                      unsigned char output[16] );
281 
282 #undef MBEDTLS_DEPRECATED
283 #endif /* !MBEDTLS_DEPRECATED_REMOVED */
284 
285 #if defined(MBEDTLS_SELF_TEST)
286 
287 /**
288  * \brief          Checkup routine
289  *
290  * \return         0 if successful, or 1 if the test failed
291  *
292  * \warning        MD2 is considered a weak message digest and its use
293  *                 constitutes a security risk. We recommend considering
294  *                 stronger message digests instead.
295  *
296  */
297 int mbedtls_md2_self_test( int verbose );
298 
299 #endif /* MBEDTLS_SELF_TEST */
300 
301 #ifdef __cplusplus
302 }
303 #endif
304 
305 #endif /* mbedtls_md2.h */
306