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