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