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 #define MBEDTLS_ERR_MD2_HW_ACCEL_FAILED                   -0x002B  /**< MD2 hardware accelerator failed */
40 
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 
45 #if !defined(MBEDTLS_MD2_ALT)
46 // Regular implementation
47 //
48 
49 /**
50  * \brief          MD2 context structure
51  *
52  * \warning        MD2 is considered a weak message digest and its use
53  *                 constitutes a security risk. We recommend considering
54  *                 stronger message digests instead.
55  *
56  */
57 typedef struct mbedtls_md2_context
58 {
59     unsigned char cksum[16];    /*!< checksum of the data block */
60     unsigned char state[48];    /*!< intermediate digest state  */
61     unsigned char buffer[16];   /*!< data block being processed */
62     size_t left;                /*!< amount of data in buffer   */
63 }
64 mbedtls_md2_context;
65 
66 #else  /* MBEDTLS_MD2_ALT */
67 #include "md2_alt.h"
68 #endif /* MBEDTLS_MD2_ALT */
69 
70 /**
71  * \brief          Initialize MD2 context
72  *
73  * \param ctx      MD2 context to be initialized
74  *
75  * \warning        MD2 is considered a weak message digest and its use
76  *                 constitutes a security risk. We recommend considering
77  *                 stronger message digests instead.
78  *
79  */
80 void mbedtls_md2_init( mbedtls_md2_context *ctx );
81 
82 /**
83  * \brief          Clear MD2 context
84  *
85  * \param ctx      MD2 context to be cleared
86  *
87  * \warning        MD2 is considered a weak message digest and its use
88  *                 constitutes a security risk. We recommend considering
89  *                 stronger message digests instead.
90  *
91  */
92 void mbedtls_md2_free( mbedtls_md2_context *ctx );
93 
94 /**
95  * \brief          Clone (the state of) an MD2 context
96  *
97  * \param dst      The destination context
98  * \param src      The context to be cloned
99  *
100  * \warning        MD2 is considered a weak message digest and its use
101  *                 constitutes a security risk. We recommend considering
102  *                 stronger message digests instead.
103  *
104  */
105 void mbedtls_md2_clone( mbedtls_md2_context *dst,
106                         const mbedtls_md2_context *src );
107 
108 /**
109  * \brief          MD2 context setup
110  *
111  * \param ctx      context to be initialized
112  *
113  * \return         0 if successful
114  *
115  * \warning        MD2 is considered a weak message digest and its use
116  *                 constitutes a security risk. We recommend considering
117  *                 stronger message digests instead.
118  *
119  */
120 int mbedtls_md2_starts_ret( mbedtls_md2_context *ctx );
121 
122 /**
123  * \brief          MD2 process buffer
124  *
125  * \param ctx      MD2 context
126  * \param input    buffer holding the data
127  * \param ilen     length of the input data
128  *
129  * \return         0 if successful
130  *
131  * \warning        MD2 is considered a weak message digest and its use
132  *                 constitutes a security risk. We recommend considering
133  *                 stronger message digests instead.
134  *
135  */
136 int mbedtls_md2_update_ret( mbedtls_md2_context *ctx,
137                             const unsigned char *input,
138                             size_t ilen );
139 
140 /**
141  * \brief          MD2 final digest
142  *
143  * \param ctx      MD2 context
144  * \param output   MD2 checksum result
145  *
146  * \return         0 if successful
147  *
148  * \warning        MD2 is considered a weak message digest and its use
149  *                 constitutes a security risk. We recommend considering
150  *                 stronger message digests instead.
151  *
152  */
153 int mbedtls_md2_finish_ret( mbedtls_md2_context *ctx,
154                             unsigned char output[16] );
155 
156 /**
157  * \brief          MD2 process data block (internal use only)
158  *
159  * \param ctx      MD2 context
160  *
161  * \return         0 if successful
162  *
163  * \warning        MD2 is considered a weak message digest and its use
164  *                 constitutes a security risk. We recommend considering
165  *                 stronger message digests instead.
166  *
167  */
168 int mbedtls_internal_md2_process( mbedtls_md2_context *ctx );
169 
170 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
171 #if defined(MBEDTLS_DEPRECATED_WARNING)
172 #define MBEDTLS_DEPRECATED      __attribute__((deprecated))
173 #else
174 #define MBEDTLS_DEPRECATED
175 #endif
176 /**
177  * \brief          MD2 context setup
178  *
179  * \deprecated     Superseded by mbedtls_md2_starts_ret() in 2.7.0
180  *
181  * \param ctx      context to be initialized
182  *
183  * \warning        MD2 is considered a weak message digest and its use
184  *                 constitutes a security risk. We recommend considering
185  *                 stronger message digests instead.
186  *
187  */
188 MBEDTLS_DEPRECATED void mbedtls_md2_starts( mbedtls_md2_context *ctx );
189 
190 /**
191  * \brief          MD2 process buffer
192  *
193  * \deprecated     Superseded by mbedtls_md2_update_ret() in 2.7.0
194  *
195  * \param ctx      MD2 context
196  * \param input    buffer holding the data
197  * \param ilen     length of the input data
198  *
199  * \warning        MD2 is considered a weak message digest and its use
200  *                 constitutes a security risk. We recommend considering
201  *                 stronger message digests instead.
202  *
203  */
204 MBEDTLS_DEPRECATED void mbedtls_md2_update( mbedtls_md2_context *ctx,
205                                             const unsigned char *input,
206                                             size_t ilen );
207 
208 /**
209  * \brief          MD2 final digest
210  *
211  * \deprecated     Superseded by mbedtls_md2_finish_ret() in 2.7.0
212  *
213  * \param ctx      MD2 context
214  * \param output   MD2 checksum result
215  *
216  * \warning        MD2 is considered a weak message digest and its use
217  *                 constitutes a security risk. We recommend considering
218  *                 stronger message digests instead.
219  *
220  */
221 MBEDTLS_DEPRECATED void mbedtls_md2_finish( mbedtls_md2_context *ctx,
222                                             unsigned char output[16] );
223 
224 /**
225  * \brief          MD2 process data block (internal use only)
226  *
227  * \deprecated     Superseded by mbedtls_internal_md2_process() in 2.7.0
228  *
229  * \param ctx      MD2 context
230  *
231  * \warning        MD2 is considered a weak message digest and its use
232  *                 constitutes a security risk. We recommend considering
233  *                 stronger message digests instead.
234  *
235  */
236 MBEDTLS_DEPRECATED void mbedtls_md2_process( mbedtls_md2_context *ctx );
237 
238 #undef MBEDTLS_DEPRECATED
239 #endif /* !MBEDTLS_DEPRECATED_REMOVED */
240 
241 /**
242  * \brief          Output = MD2( input buffer )
243  *
244  * \param input    buffer holding the data
245  * \param ilen     length of the input data
246  * \param output   MD2 checksum result
247  *
248  * \warning        MD2 is considered a weak message digest and its use
249  *                 constitutes a security risk. We recommend considering
250  *                 stronger message digests instead.
251  *
252  */
253 int mbedtls_md2_ret( const unsigned char *input,
254                      size_t ilen,
255                      unsigned char output[16] );
256 
257 #if !defined(MBEDTLS_DEPRECATED_REMOVED)
258 #if defined(MBEDTLS_DEPRECATED_WARNING)
259 #define MBEDTLS_DEPRECATED      __attribute__((deprecated))
260 #else
261 #define MBEDTLS_DEPRECATED
262 #endif
263 /**
264  * \brief          Output = MD2( input buffer )
265  *
266  * \deprecated     Superseded by mbedtls_md2_ret() in 2.7.0
267  *
268  * \param input    buffer holding the data
269  * \param ilen     length of the input data
270  * \param output   MD2 checksum result
271  *
272  * \warning        MD2 is considered a weak message digest and its use
273  *                 constitutes a security risk. We recommend considering
274  *                 stronger message digests instead.
275  *
276  */
277 MBEDTLS_DEPRECATED void mbedtls_md2( const unsigned char *input,
278                                      size_t ilen,
279                                      unsigned char output[16] );
280 
281 #undef MBEDTLS_DEPRECATED
282 #endif /* !MBEDTLS_DEPRECATED_REMOVED */
283 
284 #if defined(MBEDTLS_SELF_TEST)
285 
286 /**
287  * \brief          Checkup routine
288  *
289  * \return         0 if successful, or 1 if the test failed
290  *
291  * \warning        MD2 is considered a weak message digest and its use
292  *                 constitutes a security risk. We recommend considering
293  *                 stronger message digests instead.
294  *
295  */
296 int mbedtls_md2_self_test( int verbose );
297 
298 #endif /* MBEDTLS_SELF_TEST */
299 
300 #ifdef __cplusplus
301 }
302 #endif
303 
304 #endif /* mbedtls_md2.h */
305