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 The Mbed TLS Contributors 12 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 13 */ 14 #ifndef MBEDTLS_MD5_H 15 #define MBEDTLS_MD5_H 16 #include "mbedtls/private_access.h" 17 18 #include "mbedtls/build_info.h" 19 20 #include <stddef.h> 21 #include <stdint.h> 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 #if !defined(MBEDTLS_MD5_ALT) 28 // Regular implementation 29 // 30 31 /** 32 * \brief MD5 context structure 33 * 34 * \warning MD5 is considered a weak message digest and its use 35 * constitutes a security risk. We recommend considering 36 * stronger message digests instead. 37 * 38 */ 39 typedef struct mbedtls_md5_context { 40 uint32_t MBEDTLS_PRIVATE(total)[2]; /*!< number of bytes processed */ 41 uint32_t MBEDTLS_PRIVATE(state)[4]; /*!< intermediate digest state */ 42 unsigned char MBEDTLS_PRIVATE(buffer)[64]; /*!< data block being processed */ 43 } 44 mbedtls_md5_context; 45 46 #else /* MBEDTLS_MD5_ALT */ 47 #include "md5_alt.h" 48 #endif /* MBEDTLS_MD5_ALT */ 49 50 /** 51 * \brief Initialize MD5 context 52 * 53 * \param ctx MD5 context to be initialized 54 * 55 * \warning MD5 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 void mbedtls_md5_init(mbedtls_md5_context *ctx); 61 62 /** 63 * \brief Clear MD5 context 64 * 65 * \param ctx MD5 context to be cleared 66 * 67 * \warning MD5 is considered a weak message digest and its use 68 * constitutes a security risk. We recommend considering 69 * stronger message digests instead. 70 * 71 */ 72 void mbedtls_md5_free(mbedtls_md5_context *ctx); 73 74 /** 75 * \brief Clone (the state of) an MD5 context 76 * 77 * \param dst The destination context 78 * \param src The context to be cloned 79 * 80 * \warning MD5 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 void mbedtls_md5_clone(mbedtls_md5_context *dst, 86 const mbedtls_md5_context *src); 87 88 /** 89 * \brief MD5 context setup 90 * 91 * \param ctx context to be initialized 92 * 93 * \return 0 if successful 94 * 95 * \warning MD5 is considered a weak message digest and its use 96 * constitutes a security risk. We recommend considering 97 * stronger message digests instead. 98 * 99 */ 100 int mbedtls_md5_starts(mbedtls_md5_context *ctx); 101 102 /** 103 * \brief MD5 process buffer 104 * 105 * \param ctx MD5 context 106 * \param input buffer holding the data 107 * \param ilen length of the input data 108 * 109 * \return 0 if successful 110 * 111 * \warning MD5 is considered a weak message digest and its use 112 * constitutes a security risk. We recommend considering 113 * stronger message digests instead. 114 * 115 */ 116 int mbedtls_md5_update(mbedtls_md5_context *ctx, 117 const unsigned char *input, 118 size_t ilen); 119 120 /** 121 * \brief MD5 final digest 122 * 123 * \param ctx MD5 context 124 * \param output MD5 checksum result 125 * 126 * \return 0 if successful 127 * 128 * \warning MD5 is considered a weak message digest and its use 129 * constitutes a security risk. We recommend considering 130 * stronger message digests instead. 131 * 132 */ 133 int mbedtls_md5_finish(mbedtls_md5_context *ctx, 134 unsigned char output[16]); 135 136 /** 137 * \brief MD5 process data block (internal use only) 138 * 139 * \param ctx MD5 context 140 * \param data buffer holding one block of data 141 * 142 * \return 0 if successful 143 * 144 * \warning MD5 is considered a weak message digest and its use 145 * constitutes a security risk. We recommend considering 146 * stronger message digests instead. 147 * 148 */ 149 int mbedtls_internal_md5_process(mbedtls_md5_context *ctx, 150 const unsigned char data[64]); 151 152 /** 153 * \brief Output = MD5( input buffer ) 154 * 155 * \param input buffer holding the data 156 * \param ilen length of the input data 157 * \param output MD5 checksum result 158 * 159 * \return 0 if successful 160 * 161 * \warning MD5 is considered a weak message digest and its use 162 * constitutes a security risk. We recommend considering 163 * stronger message digests instead. 164 * 165 */ 166 int mbedtls_md5(const unsigned char *input, 167 size_t ilen, 168 unsigned char output[16]); 169 170 #if defined(MBEDTLS_SELF_TEST) 171 172 /** 173 * \brief Checkup routine 174 * 175 * \return 0 if successful, or 1 if the test failed 176 * 177 * \warning MD5 is considered a weak message digest and its use 178 * constitutes a security risk. We recommend considering 179 * stronger message digests instead. 180 * 181 */ 182 int mbedtls_md5_self_test(int verbose); 183 184 #endif /* MBEDTLS_SELF_TEST */ 185 186 #ifdef __cplusplus 187 } 188 #endif 189 190 #endif /* mbedtls_md5.h */ 191