1 /** 2 * \file md4.h 3 * 4 * \brief MD4 message digest algorithm (hash function) 5 * 6 * \warning MD4 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_MD4_H 55 #define MBEDTLS_MD4_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 #include <stdint.h> 65 66 /* MBEDTLS_ERR_MD4_HW_ACCEL_FAILED is deprecated and should not be used. */ 67 #define MBEDTLS_ERR_MD4_HW_ACCEL_FAILED -0x002D /**< MD4 hardware accelerator failed */ 68 69 #ifdef __cplusplus 70 extern "C" { 71 #endif 72 73 #if !defined(MBEDTLS_MD4_ALT) 74 // Regular implementation 75 // 76 77 /** 78 * \brief MD4 context structure 79 * 80 * \warning MD4 is considered a weak message digest and its use 81 * constitutes a security risk. We recommend considering 82 * stronger message digests instead. 83 * 84 */ 85 typedef struct mbedtls_md4_context 86 { 87 uint32_t total[2]; /*!< number of bytes processed */ 88 uint32_t state[4]; /*!< intermediate digest state */ 89 unsigned char buffer[64]; /*!< data block being processed */ 90 } 91 mbedtls_md4_context; 92 93 #else /* MBEDTLS_MD4_ALT */ 94 #include "md4_alt.h" 95 #endif /* MBEDTLS_MD4_ALT */ 96 97 /** 98 * \brief Initialize MD4 context 99 * 100 * \param ctx MD4 context to be initialized 101 * 102 * \warning MD4 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_md4_init( mbedtls_md4_context *ctx ); 108 109 /** 110 * \brief Clear MD4 context 111 * 112 * \param ctx MD4 context to be cleared 113 * 114 * \warning MD4 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_md4_free( mbedtls_md4_context *ctx ); 120 121 /** 122 * \brief Clone (the state of) an MD4 context 123 * 124 * \param dst The destination context 125 * \param src The context to be cloned 126 * 127 * \warning MD4 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_md4_clone( mbedtls_md4_context *dst, 133 const mbedtls_md4_context *src ); 134 135 /** 136 * \brief MD4 context setup 137 * 138 * \param ctx context to be initialized 139 * 140 * \return 0 if successful 141 * 142 * \warning MD4 is considered a weak message digest and its use 143 * constitutes a security risk. We recommend considering 144 * stronger message digests instead. 145 */ 146 int mbedtls_md4_starts_ret( mbedtls_md4_context *ctx ); 147 148 /** 149 * \brief MD4 process buffer 150 * 151 * \param ctx MD4 context 152 * \param input buffer holding the data 153 * \param ilen length of the input data 154 * 155 * \return 0 if successful 156 * 157 * \warning MD4 is considered a weak message digest and its use 158 * constitutes a security risk. We recommend considering 159 * stronger message digests instead. 160 * 161 */ 162 int mbedtls_md4_update_ret( mbedtls_md4_context *ctx, 163 const unsigned char *input, 164 size_t ilen ); 165 166 /** 167 * \brief MD4 final digest 168 * 169 * \param ctx MD4 context 170 * \param output MD4 checksum result 171 * 172 * \return 0 if successful 173 * 174 * \warning MD4 is considered a weak message digest and its use 175 * constitutes a security risk. We recommend considering 176 * stronger message digests instead. 177 * 178 */ 179 int mbedtls_md4_finish_ret( mbedtls_md4_context *ctx, 180 unsigned char output[16] ); 181 182 /** 183 * \brief MD4 process data block (internal use only) 184 * 185 * \param ctx MD4 context 186 * \param data buffer holding one block of data 187 * 188 * \return 0 if successful 189 * 190 * \warning MD4 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_md4_process( mbedtls_md4_context *ctx, 196 const unsigned char data[64] ); 197 198 #if !defined(MBEDTLS_DEPRECATED_REMOVED) 199 #if defined(MBEDTLS_DEPRECATED_WARNING) 200 #define MBEDTLS_DEPRECATED __attribute__((deprecated)) 201 #else 202 #define MBEDTLS_DEPRECATED 203 #endif 204 /** 205 * \brief MD4 context setup 206 * 207 * \deprecated Superseded by mbedtls_md4_starts_ret() in 2.7.0 208 * 209 * \param ctx context to be initialized 210 * 211 * \warning MD4 is considered a weak message digest and its use 212 * constitutes a security risk. We recommend considering 213 * stronger message digests instead. 214 * 215 */ 216 MBEDTLS_DEPRECATED void mbedtls_md4_starts( mbedtls_md4_context *ctx ); 217 218 /** 219 * \brief MD4 process buffer 220 * 221 * \deprecated Superseded by mbedtls_md4_update_ret() in 2.7.0 222 * 223 * \param ctx MD4 context 224 * \param input buffer holding the data 225 * \param ilen length of the input data 226 * 227 * \warning MD4 is considered a weak message digest and its use 228 * constitutes a security risk. We recommend considering 229 * stronger message digests instead. 230 * 231 */ 232 MBEDTLS_DEPRECATED void mbedtls_md4_update( mbedtls_md4_context *ctx, 233 const unsigned char *input, 234 size_t ilen ); 235 236 /** 237 * \brief MD4 final digest 238 * 239 * \deprecated Superseded by mbedtls_md4_finish_ret() in 2.7.0 240 * 241 * \param ctx MD4 context 242 * \param output MD4 checksum result 243 * 244 * \warning MD4 is considered a weak message digest and its use 245 * constitutes a security risk. We recommend considering 246 * stronger message digests instead. 247 * 248 */ 249 MBEDTLS_DEPRECATED void mbedtls_md4_finish( mbedtls_md4_context *ctx, 250 unsigned char output[16] ); 251 252 /** 253 * \brief MD4 process data block (internal use only) 254 * 255 * \deprecated Superseded by mbedtls_internal_md4_process() in 2.7.0 256 * 257 * \param ctx MD4 context 258 * \param data buffer holding one block of data 259 * 260 * \warning MD4 is considered a weak message digest and its use 261 * constitutes a security risk. We recommend considering 262 * stronger message digests instead. 263 * 264 */ 265 MBEDTLS_DEPRECATED void mbedtls_md4_process( mbedtls_md4_context *ctx, 266 const unsigned char data[64] ); 267 268 #undef MBEDTLS_DEPRECATED 269 #endif /* !MBEDTLS_DEPRECATED_REMOVED */ 270 271 /** 272 * \brief Output = MD4( input buffer ) 273 * 274 * \param input buffer holding the data 275 * \param ilen length of the input data 276 * \param output MD4 checksum result 277 * 278 * \return 0 if successful 279 * 280 * \warning MD4 is considered a weak message digest and its use 281 * constitutes a security risk. We recommend considering 282 * stronger message digests instead. 283 * 284 */ 285 int mbedtls_md4_ret( const unsigned char *input, 286 size_t ilen, 287 unsigned char output[16] ); 288 289 #if !defined(MBEDTLS_DEPRECATED_REMOVED) 290 #if defined(MBEDTLS_DEPRECATED_WARNING) 291 #define MBEDTLS_DEPRECATED __attribute__((deprecated)) 292 #else 293 #define MBEDTLS_DEPRECATED 294 #endif 295 /** 296 * \brief Output = MD4( input buffer ) 297 * 298 * \deprecated Superseded by mbedtls_md4_ret() in 2.7.0 299 * 300 * \param input buffer holding the data 301 * \param ilen length of the input data 302 * \param output MD4 checksum result 303 * 304 * \warning MD4 is considered a weak message digest and its use 305 * constitutes a security risk. We recommend considering 306 * stronger message digests instead. 307 * 308 */ 309 MBEDTLS_DEPRECATED void mbedtls_md4( const unsigned char *input, 310 size_t ilen, 311 unsigned char output[16] ); 312 313 #undef MBEDTLS_DEPRECATED 314 #endif /* !MBEDTLS_DEPRECATED_REMOVED */ 315 316 #if defined(MBEDTLS_SELF_TEST) 317 318 /** 319 * \brief Checkup routine 320 * 321 * \return 0 if successful, or 1 if the test failed 322 * 323 * \warning MD4 is considered a weak message digest and its use 324 * constitutes a security risk. We recommend considering 325 * stronger message digests instead. 326 * 327 */ 328 int mbedtls_md4_self_test( int verbose ); 329 330 #endif /* MBEDTLS_SELF_TEST */ 331 332 #ifdef __cplusplus 333 } 334 #endif 335 336 #endif /* mbedtls_md4.h */ 337