1 /** 2 * \file md5.h 3 * 4 * \brief MD5 message digest algorithm (hash function) 5 * 6 * \warning MD5 is considered a weak message digest and its use constitutes a 7 * security risk. We recommend considering stronger message 8 * digests 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 #ifndef MBEDTLS_MD5_H 29 #define MBEDTLS_MD5_H 30 31 #if !defined(MBEDTLS_CONFIG_FILE) 32 #include "config.h" 33 #else 34 #include MBEDTLS_CONFIG_FILE 35 #endif 36 37 #include <stddef.h> 38 #include <stdint.h> 39 40 /* MBEDTLS_ERR_MD5_HW_ACCEL_FAILED is deprecated and should not be used. */ 41 #define MBEDTLS_ERR_MD5_HW_ACCEL_FAILED -0x002F /**< MD5 hardware accelerator failed */ 42 43 #ifdef __cplusplus 44 extern "C" { 45 #endif 46 47 #if !defined(MBEDTLS_MD5_ALT) 48 // Regular implementation 49 // 50 51 /** 52 * \brief MD5 context structure 53 * 54 * \warning MD5 is considered a weak message digest and its use 55 * constitutes a security risk. We recommend considering 56 * stronger message digests instead. 57 * 58 */ 59 typedef struct mbedtls_md5_context 60 { 61 uint32_t total[2]; /*!< number of bytes processed */ 62 uint32_t state[4]; /*!< intermediate digest state */ 63 unsigned char buffer[64]; /*!< data block being processed */ 64 } 65 mbedtls_md5_context; 66 67 #else /* MBEDTLS_MD5_ALT */ 68 #include "md5_alt.h" 69 #endif /* MBEDTLS_MD5_ALT */ 70 71 /** 72 * \brief Initialize MD5 context 73 * 74 * \param ctx MD5 context to be initialized 75 * 76 * \warning MD5 is considered a weak message digest and its use 77 * constitutes a security risk. We recommend considering 78 * stronger message digests instead. 79 * 80 */ 81 void mbedtls_md5_init( mbedtls_md5_context *ctx ); 82 83 /** 84 * \brief Clear MD5 context 85 * 86 * \param ctx MD5 context to be cleared 87 * 88 * \warning MD5 is considered a weak message digest and its use 89 * constitutes a security risk. We recommend considering 90 * stronger message digests instead. 91 * 92 */ 93 void mbedtls_md5_free( mbedtls_md5_context *ctx ); 94 95 /** 96 * \brief Clone (the state of) an MD5 context 97 * 98 * \param dst The destination context 99 * \param src The context to be cloned 100 * 101 * \warning MD5 is considered a weak message digest and its use 102 * constitutes a security risk. We recommend considering 103 * stronger message digests instead. 104 * 105 */ 106 void mbedtls_md5_clone( mbedtls_md5_context *dst, 107 const mbedtls_md5_context *src ); 108 109 /** 110 * \brief MD5 context setup 111 * 112 * \param ctx context to be initialized 113 * 114 * \return 0 if successful 115 * 116 * \warning MD5 is considered a weak message digest and its use 117 * constitutes a security risk. We recommend considering 118 * stronger message digests instead. 119 * 120 */ 121 int mbedtls_md5_starts_ret( mbedtls_md5_context *ctx ); 122 123 /** 124 * \brief MD5 process buffer 125 * 126 * \param ctx MD5 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 MD5 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_md5_update_ret( mbedtls_md5_context *ctx, 138 const unsigned char *input, 139 size_t ilen ); 140 141 /** 142 * \brief MD5 final digest 143 * 144 * \param ctx MD5 context 145 * \param output MD5 checksum result 146 * 147 * \return 0 if successful 148 * 149 * \warning MD5 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_md5_finish_ret( mbedtls_md5_context *ctx, 155 unsigned char output[16] ); 156 157 /** 158 * \brief MD5 process data block (internal use only) 159 * 160 * \param ctx MD5 context 161 * \param data buffer holding one block of data 162 * 163 * \return 0 if successful 164 * 165 * \warning MD5 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_md5_process( mbedtls_md5_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 MD5 context setup 181 * 182 * \deprecated Superseded by mbedtls_md5_starts_ret() in 2.7.0 183 * 184 * \param ctx context to be initialized 185 * 186 * \warning MD5 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_md5_starts( mbedtls_md5_context *ctx ); 192 193 /** 194 * \brief MD5 process buffer 195 * 196 * \deprecated Superseded by mbedtls_md5_update_ret() in 2.7.0 197 * 198 * \param ctx MD5 context 199 * \param input buffer holding the data 200 * \param ilen length of the input data 201 * 202 * \warning MD5 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_md5_update( mbedtls_md5_context *ctx, 208 const unsigned char *input, 209 size_t ilen ); 210 211 /** 212 * \brief MD5 final digest 213 * 214 * \deprecated Superseded by mbedtls_md5_finish_ret() in 2.7.0 215 * 216 * \param ctx MD5 context 217 * \param output MD5 checksum result 218 * 219 * \warning MD5 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_md5_finish( mbedtls_md5_context *ctx, 225 unsigned char output[16] ); 226 227 /** 228 * \brief MD5 process data block (internal use only) 229 * 230 * \deprecated Superseded by mbedtls_internal_md5_process() in 2.7.0 231 * 232 * \param ctx MD5 context 233 * \param data buffer holding one block of data 234 * 235 * \warning MD5 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_md5_process( mbedtls_md5_context *ctx, 241 const unsigned char data[64] ); 242 243 #undef MBEDTLS_DEPRECATED 244 #endif /* !MBEDTLS_DEPRECATED_REMOVED */ 245 246 /** 247 * \brief Output = MD5( input buffer ) 248 * 249 * \param input buffer holding the data 250 * \param ilen length of the input data 251 * \param output MD5 checksum result 252 * 253 * \return 0 if successful 254 * 255 * \warning MD5 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_md5_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 = MD5( input buffer ) 272 * 273 * \deprecated Superseded by mbedtls_md5_ret() in 2.7.0 274 * 275 * \param input buffer holding the data 276 * \param ilen length of the input data 277 * \param output MD5 checksum result 278 * 279 * \warning MD5 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_md5( 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 MD5 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_md5_self_test( int verbose ); 302 303 #ifdef __cplusplus 304 } 305 #endif 306 307 #endif /* mbedtls_md5.h */ 308