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