1 /** 2 * \file md2.h 3 * 4 * \brief MD2 message digest algorithm (hash function) 5 * 6 * \warning MD2 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 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 */ 27 #ifndef MBEDTLS_MD2_H 28 #define MBEDTLS_MD2_H 29 30 #if !defined(MBEDTLS_CONFIG_FILE) 31 #include "mbedtls/config.h" 32 #else 33 #include MBEDTLS_CONFIG_FILE 34 #endif 35 36 #include <stddef.h> 37 38 /* MBEDTLS_ERR_MD2_HW_ACCEL_FAILED is deprecated and should not be used. */ 39 #define MBEDTLS_ERR_MD2_HW_ACCEL_FAILED -0x002B /**< MD2 hardware accelerator failed */ 40 41 #ifdef __cplusplus 42 extern "C" { 43 #endif 44 45 #if !defined(MBEDTLS_MD2_ALT) 46 // Regular implementation 47 // 48 49 /** 50 * \brief MD2 context structure 51 * 52 * \warning MD2 is considered a weak message digest and its use 53 * constitutes a security risk. We recommend considering 54 * stronger message digests instead. 55 * 56 */ 57 typedef struct mbedtls_md2_context 58 { 59 unsigned char cksum[16]; /*!< checksum of the data block */ 60 unsigned char state[48]; /*!< intermediate digest state */ 61 unsigned char buffer[16]; /*!< data block being processed */ 62 size_t left; /*!< amount of data in buffer */ 63 } 64 mbedtls_md2_context; 65 66 #else /* MBEDTLS_MD2_ALT */ 67 #include "md2_alt.h" 68 #endif /* MBEDTLS_MD2_ALT */ 69 70 /** 71 * \brief Initialize MD2 context 72 * 73 * \param ctx MD2 context to be initialized 74 * 75 * \warning MD2 is considered a weak message digest and its use 76 * constitutes a security risk. We recommend considering 77 * stronger message digests instead. 78 * 79 */ 80 void mbedtls_md2_init( mbedtls_md2_context *ctx ); 81 82 /** 83 * \brief Clear MD2 context 84 * 85 * \param ctx MD2 context to be cleared 86 * 87 * \warning MD2 is considered a weak message digest and its use 88 * constitutes a security risk. We recommend considering 89 * stronger message digests instead. 90 * 91 */ 92 void mbedtls_md2_free( mbedtls_md2_context *ctx ); 93 94 /** 95 * \brief Clone (the state of) an MD2 context 96 * 97 * \param dst The destination context 98 * \param src The context to be cloned 99 * 100 * \warning MD2 is considered a weak message digest and its use 101 * constitutes a security risk. We recommend considering 102 * stronger message digests instead. 103 * 104 */ 105 void mbedtls_md2_clone( mbedtls_md2_context *dst, 106 const mbedtls_md2_context *src ); 107 108 /** 109 * \brief MD2 context setup 110 * 111 * \param ctx context to be initialized 112 * 113 * \return 0 if successful 114 * 115 * \warning MD2 is considered a weak message digest and its use 116 * constitutes a security risk. We recommend considering 117 * stronger message digests instead. 118 * 119 */ 120 int mbedtls_md2_starts_ret( mbedtls_md2_context *ctx ); 121 122 /** 123 * \brief MD2 process buffer 124 * 125 * \param ctx MD2 context 126 * \param input buffer holding the data 127 * \param ilen length of the input data 128 * 129 * \return 0 if successful 130 * 131 * \warning MD2 is considered a weak message digest and its use 132 * constitutes a security risk. We recommend considering 133 * stronger message digests instead. 134 * 135 */ 136 int mbedtls_md2_update_ret( mbedtls_md2_context *ctx, 137 const unsigned char *input, 138 size_t ilen ); 139 140 /** 141 * \brief MD2 final digest 142 * 143 * \param ctx MD2 context 144 * \param output MD2 checksum result 145 * 146 * \return 0 if successful 147 * 148 * \warning MD2 is considered a weak message digest and its use 149 * constitutes a security risk. We recommend considering 150 * stronger message digests instead. 151 * 152 */ 153 int mbedtls_md2_finish_ret( mbedtls_md2_context *ctx, 154 unsigned char output[16] ); 155 156 /** 157 * \brief MD2 process data block (internal use only) 158 * 159 * \param ctx MD2 context 160 * 161 * \return 0 if successful 162 * 163 * \warning MD2 is considered a weak message digest and its use 164 * constitutes a security risk. We recommend considering 165 * stronger message digests instead. 166 * 167 */ 168 int mbedtls_internal_md2_process( mbedtls_md2_context *ctx ); 169 170 #if !defined(MBEDTLS_DEPRECATED_REMOVED) 171 #if defined(MBEDTLS_DEPRECATED_WARNING) 172 #define MBEDTLS_DEPRECATED __attribute__((deprecated)) 173 #else 174 #define MBEDTLS_DEPRECATED 175 #endif 176 /** 177 * \brief MD2 context setup 178 * 179 * \deprecated Superseded by mbedtls_md2_starts_ret() in 2.7.0 180 * 181 * \param ctx context to be initialized 182 * 183 * \warning MD2 is considered a weak message digest and its use 184 * constitutes a security risk. We recommend considering 185 * stronger message digests instead. 186 * 187 */ 188 MBEDTLS_DEPRECATED void mbedtls_md2_starts( mbedtls_md2_context *ctx ); 189 190 /** 191 * \brief MD2 process buffer 192 * 193 * \deprecated Superseded by mbedtls_md2_update_ret() in 2.7.0 194 * 195 * \param ctx MD2 context 196 * \param input buffer holding the data 197 * \param ilen length of the input data 198 * 199 * \warning MD2 is considered a weak message digest and its use 200 * constitutes a security risk. We recommend considering 201 * stronger message digests instead. 202 * 203 */ 204 MBEDTLS_DEPRECATED void mbedtls_md2_update( mbedtls_md2_context *ctx, 205 const unsigned char *input, 206 size_t ilen ); 207 208 /** 209 * \brief MD2 final digest 210 * 211 * \deprecated Superseded by mbedtls_md2_finish_ret() in 2.7.0 212 * 213 * \param ctx MD2 context 214 * \param output MD2 checksum result 215 * 216 * \warning MD2 is considered a weak message digest and its use 217 * constitutes a security risk. We recommend considering 218 * stronger message digests instead. 219 * 220 */ 221 MBEDTLS_DEPRECATED void mbedtls_md2_finish( mbedtls_md2_context *ctx, 222 unsigned char output[16] ); 223 224 /** 225 * \brief MD2 process data block (internal use only) 226 * 227 * \deprecated Superseded by mbedtls_internal_md2_process() in 2.7.0 228 * 229 * \param ctx MD2 context 230 * 231 * \warning MD2 is considered a weak message digest and its use 232 * constitutes a security risk. We recommend considering 233 * stronger message digests instead. 234 * 235 */ 236 MBEDTLS_DEPRECATED void mbedtls_md2_process( mbedtls_md2_context *ctx ); 237 238 #undef MBEDTLS_DEPRECATED 239 #endif /* !MBEDTLS_DEPRECATED_REMOVED */ 240 241 /** 242 * \brief Output = MD2( input buffer ) 243 * 244 * \param input buffer holding the data 245 * \param ilen length of the input data 246 * \param output MD2 checksum result 247 * 248 * \warning MD2 is considered a weak message digest and its use 249 * constitutes a security risk. We recommend considering 250 * stronger message digests instead. 251 * 252 */ 253 int mbedtls_md2_ret( const unsigned char *input, 254 size_t ilen, 255 unsigned char output[16] ); 256 257 #if !defined(MBEDTLS_DEPRECATED_REMOVED) 258 #if defined(MBEDTLS_DEPRECATED_WARNING) 259 #define MBEDTLS_DEPRECATED __attribute__((deprecated)) 260 #else 261 #define MBEDTLS_DEPRECATED 262 #endif 263 /** 264 * \brief Output = MD2( input buffer ) 265 * 266 * \deprecated Superseded by mbedtls_md2_ret() in 2.7.0 267 * 268 * \param input buffer holding the data 269 * \param ilen length of the input data 270 * \param output MD2 checksum result 271 * 272 * \warning MD2 is considered a weak message digest and its use 273 * constitutes a security risk. We recommend considering 274 * stronger message digests instead. 275 * 276 */ 277 MBEDTLS_DEPRECATED void mbedtls_md2( const unsigned char *input, 278 size_t ilen, 279 unsigned char output[16] ); 280 281 #undef MBEDTLS_DEPRECATED 282 #endif /* !MBEDTLS_DEPRECATED_REMOVED */ 283 284 #if defined(MBEDTLS_SELF_TEST) 285 286 /** 287 * \brief Checkup routine 288 * 289 * \return 0 if successful, or 1 if the test failed 290 * 291 * \warning MD2 is considered a weak message digest and its use 292 * constitutes a security risk. We recommend considering 293 * stronger message digests instead. 294 * 295 */ 296 int mbedtls_md2_self_test( int verbose ); 297 298 #endif /* MBEDTLS_SELF_TEST */ 299 300 #ifdef __cplusplus 301 } 302 #endif 303 304 #endif /* mbedtls_md2.h */ 305