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