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 (C) 2006-2015, ARM Limited, All Rights Reserved 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 * This file is part of mbed TLS (https://tls.mbed.org) 27 * 28 */ 29 #ifndef MBEDTLS_MD4_H 30 #define MBEDTLS_MD4_H 31 32 #if !defined(MBEDTLS_CONFIG_FILE) 33 #include "config.h" 34 #else 35 #include MBEDTLS_CONFIG_FILE 36 #endif 37 38 #include <stddef.h> 39 #include <stdint.h> 40 41 /* MBEDTLS_ERR_MD4_HW_ACCEL_FAILED is deprecated and should not be used. */ 42 #define MBEDTLS_ERR_MD4_HW_ACCEL_FAILED -0x002D /**< MD4 hardware accelerator failed */ 43 44 #ifdef __cplusplus 45 extern "C" { 46 #endif 47 48 #if !defined(MBEDTLS_MD4_ALT) 49 // Regular implementation 50 // 51 52 /** 53 * \brief MD4 context structure 54 * 55 * \warning MD4 is considered a weak message digest and its use 56 * constitutes a security risk. We recommend considering 57 * stronger message digests instead. 58 * 59 */ 60 typedef struct mbedtls_md4_context 61 { 62 uint32_t total[2]; /*!< number of bytes processed */ 63 uint32_t state[4]; /*!< intermediate digest state */ 64 unsigned char buffer[64]; /*!< data block being processed */ 65 } 66 mbedtls_md4_context; 67 68 #else /* MBEDTLS_MD4_ALT */ 69 #include "md4_alt.h" 70 #endif /* MBEDTLS_MD4_ALT */ 71 72 /** 73 * \brief Initialize MD4 context 74 * 75 * \param ctx MD4 context to be initialized 76 * 77 * \warning MD4 is considered a weak message digest and its use 78 * constitutes a security risk. We recommend considering 79 * stronger message digests instead. 80 * 81 */ 82 void mbedtls_md4_init( mbedtls_md4_context *ctx ); 83 84 /** 85 * \brief Clear MD4 context 86 * 87 * \param ctx MD4 context to be cleared 88 * 89 * \warning MD4 is considered a weak message digest and its use 90 * constitutes a security risk. We recommend considering 91 * stronger message digests instead. 92 * 93 */ 94 void mbedtls_md4_free( mbedtls_md4_context *ctx ); 95 96 /** 97 * \brief Clone (the state of) an MD4 context 98 * 99 * \param dst The destination context 100 * \param src The context to be cloned 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_clone( mbedtls_md4_context *dst, 108 const mbedtls_md4_context *src ); 109 110 /** 111 * \brief MD4 context setup 112 * 113 * \param ctx context to be initialized 114 * 115 * \return 0 if successful 116 * 117 * \warning MD4 is considered a weak message digest and its use 118 * constitutes a security risk. We recommend considering 119 * stronger message digests instead. 120 */ 121 int mbedtls_md4_starts_ret( mbedtls_md4_context *ctx ); 122 123 /** 124 * \brief MD4 process buffer 125 * 126 * \param ctx MD4 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 MD4 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_md4_update_ret( mbedtls_md4_context *ctx, 138 const unsigned char *input, 139 size_t ilen ); 140 141 /** 142 * \brief MD4 final digest 143 * 144 * \param ctx MD4 context 145 * \param output MD4 checksum result 146 * 147 * \return 0 if successful 148 * 149 * \warning MD4 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_md4_finish_ret( mbedtls_md4_context *ctx, 155 unsigned char output[16] ); 156 157 /** 158 * \brief MD4 process data block (internal use only) 159 * 160 * \param ctx MD4 context 161 * \param data buffer holding one block of data 162 * 163 * \return 0 if successful 164 * 165 * \warning MD4 is considered a weak message digest and its use 166 * constitutes a security risk. We recommend considering 167 * stronger message digests instead. 168 * 169 */ 170 int mbedtls_internal_md4_process( mbedtls_md4_context *ctx, 171 const unsigned char data[64] ); 172 173 #if !defined(MBEDTLS_DEPRECATED_REMOVED) 174 #if defined(MBEDTLS_DEPRECATED_WARNING) 175 #define MBEDTLS_DEPRECATED __attribute__((deprecated)) 176 #else 177 #define MBEDTLS_DEPRECATED 178 #endif 179 /** 180 * \brief MD4 context setup 181 * 182 * \deprecated Superseded by mbedtls_md4_starts_ret() in 2.7.0 183 * 184 * \param ctx context to be initialized 185 * 186 * \warning MD4 is considered a weak message digest and its use 187 * constitutes a security risk. We recommend considering 188 * stronger message digests instead. 189 * 190 */ 191 MBEDTLS_DEPRECATED void mbedtls_md4_starts( mbedtls_md4_context *ctx ); 192 193 /** 194 * \brief MD4 process buffer 195 * 196 * \deprecated Superseded by mbedtls_md4_update_ret() in 2.7.0 197 * 198 * \param ctx MD4 context 199 * \param input buffer holding the data 200 * \param ilen length of the input data 201 * 202 * \warning MD4 is considered a weak message digest and its use 203 * constitutes a security risk. We recommend considering 204 * stronger message digests instead. 205 * 206 */ 207 MBEDTLS_DEPRECATED void mbedtls_md4_update( mbedtls_md4_context *ctx, 208 const unsigned char *input, 209 size_t ilen ); 210 211 /** 212 * \brief MD4 final digest 213 * 214 * \deprecated Superseded by mbedtls_md4_finish_ret() in 2.7.0 215 * 216 * \param ctx MD4 context 217 * \param output MD4 checksum result 218 * 219 * \warning MD4 is considered a weak message digest and its use 220 * constitutes a security risk. We recommend considering 221 * stronger message digests instead. 222 * 223 */ 224 MBEDTLS_DEPRECATED void mbedtls_md4_finish( mbedtls_md4_context *ctx, 225 unsigned char output[16] ); 226 227 /** 228 * \brief MD4 process data block (internal use only) 229 * 230 * \deprecated Superseded by mbedtls_internal_md4_process() in 2.7.0 231 * 232 * \param ctx MD4 context 233 * \param data buffer holding one block of data 234 * 235 * \warning MD4 is considered a weak message digest and its use 236 * constitutes a security risk. We recommend considering 237 * stronger message digests instead. 238 * 239 */ 240 MBEDTLS_DEPRECATED void mbedtls_md4_process( mbedtls_md4_context *ctx, 241 const unsigned char data[64] ); 242 243 #undef MBEDTLS_DEPRECATED 244 #endif /* !MBEDTLS_DEPRECATED_REMOVED */ 245 246 /** 247 * \brief Output = MD4( input buffer ) 248 * 249 * \param input buffer holding the data 250 * \param ilen length of the input data 251 * \param output MD4 checksum result 252 * 253 * \return 0 if successful 254 * 255 * \warning MD4 is considered a weak message digest and its use 256 * constitutes a security risk. We recommend considering 257 * stronger message digests instead. 258 * 259 */ 260 int mbedtls_md4_ret( const unsigned char *input, 261 size_t ilen, 262 unsigned char output[16] ); 263 264 #if !defined(MBEDTLS_DEPRECATED_REMOVED) 265 #if defined(MBEDTLS_DEPRECATED_WARNING) 266 #define MBEDTLS_DEPRECATED __attribute__((deprecated)) 267 #else 268 #define MBEDTLS_DEPRECATED 269 #endif 270 /** 271 * \brief Output = MD4( input buffer ) 272 * 273 * \deprecated Superseded by mbedtls_md4_ret() in 2.7.0 274 * 275 * \param input buffer holding the data 276 * \param ilen length of the input data 277 * \param output MD4 checksum result 278 * 279 * \warning MD4 is considered a weak message digest and its use 280 * constitutes a security risk. We recommend considering 281 * stronger message digests instead. 282 * 283 */ 284 MBEDTLS_DEPRECATED void mbedtls_md4( const unsigned char *input, 285 size_t ilen, 286 unsigned char output[16] ); 287 288 #undef MBEDTLS_DEPRECATED 289 #endif /* !MBEDTLS_DEPRECATED_REMOVED */ 290 291 /** 292 * \brief Checkup routine 293 * 294 * \return 0 if successful, or 1 if the test failed 295 * 296 * \warning MD4 is considered a weak message digest and its use 297 * constitutes a security risk. We recommend considering 298 * stronger message digests instead. 299 * 300 */ 301 int mbedtls_md4_self_test( int verbose ); 302 303 #ifdef __cplusplus 304 } 305 #endif 306 307 #endif /* mbedtls_md4.h */ 308