Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
md5.h
00001 /** 00002 * \file md5.h 00003 * 00004 * \brief MD5 message digest algorithm (hash function) 00005 * 00006 * Copyright (C) 2006-2013, Brainspark B.V. 00007 * 00008 * This file is part of PolarSSL (http://www.polarssl.org) 00009 * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> 00010 * 00011 * All rights reserved. 00012 * 00013 * This program is free software; you can redistribute it and/or modify 00014 * it under the terms of the GNU General Public License as published by 00015 * the Free Software Foundation; either version 2 of the License, or 00016 * (at your option) any later version. 00017 * 00018 * This program is distributed in the hope that it will be useful, 00019 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00020 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00021 * GNU General Public License for more details. 00022 * 00023 * You should have received a copy of the GNU General Public License along 00024 * with this program; if not, write to the Free Software Foundation, Inc., 00025 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 00026 */ 00027 #ifndef POLARSSL_MD5_H 00028 #define POLARSSL_MD5_H 00029 00030 #if !defined(POLARSSL_CONFIG_FILE) 00031 #include "config.h" 00032 #else 00033 #include POLARSSL_CONFIG_FILE 00034 #endif 00035 00036 #include <string.h> 00037 00038 #if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) 00039 #include <basetsd.h> 00040 typedef UINT32 uint32_t; 00041 #else 00042 #include <inttypes.h> 00043 #endif 00044 00045 #define POLARSSL_ERR_MD5_FILE_IO_ERROR -0x0074 /**< Read/write error in file. */ 00046 00047 #if !defined(POLARSSL_MD5_ALT) 00048 // Regular implementation 00049 // 00050 00051 #ifdef __cplusplus 00052 extern "C" { 00053 #endif 00054 00055 /** 00056 * \brief MD5 context structure 00057 */ 00058 typedef struct 00059 { 00060 uint32_t total[2]; /*!< number of bytes processed */ 00061 uint32_t state[4]; /*!< intermediate digest state */ 00062 unsigned char buffer[64]; /*!< data block being processed */ 00063 00064 unsigned char ipad[64]; /*!< HMAC: inner padding */ 00065 unsigned char opad[64]; /*!< HMAC: outer padding */ 00066 } 00067 md5_context; 00068 00069 /** 00070 * \brief MD5 context setup 00071 * 00072 * \param ctx context to be initialized 00073 */ 00074 void md5_starts( md5_context *ctx ); 00075 00076 /** 00077 * \brief MD5 process buffer 00078 * 00079 * \param ctx MD5 context 00080 * \param input buffer holding the data 00081 * \param ilen length of the input data 00082 */ 00083 void md5_update( md5_context *ctx, const unsigned char *input, size_t ilen ); 00084 00085 /** 00086 * \brief MD5 final digest 00087 * 00088 * \param ctx MD5 context 00089 * \param output MD5 checksum result 00090 */ 00091 void md5_finish( md5_context *ctx, unsigned char output[16] ); 00092 00093 /* Internal use */ 00094 void md5_process( md5_context *ctx, const unsigned char data[64] ); 00095 00096 #ifdef __cplusplus 00097 } 00098 #endif 00099 00100 #else /* POLARSSL_MD5_ALT */ 00101 #include "md5_alt.h" 00102 #endif /* POLARSSL_MD5_ALT */ 00103 00104 #ifdef __cplusplus 00105 extern "C" { 00106 #endif 00107 00108 /** 00109 * \brief Output = MD5( input buffer ) 00110 * 00111 * \param input buffer holding the data 00112 * \param ilen length of the input data 00113 * \param output MD5 checksum result 00114 */ 00115 void md5( const unsigned char *input, size_t ilen, unsigned char output[16] ); 00116 00117 /** 00118 * \brief Output = MD5( file contents ) 00119 * 00120 * \param path input file name 00121 * \param output MD5 checksum result 00122 * 00123 * \return 0 if successful, or POLARSSL_ERR_MD5_FILE_IO_ERROR 00124 */ 00125 int md5_file( const char *path, unsigned char output[16] ); 00126 00127 /** 00128 * \brief MD5 HMAC context setup 00129 * 00130 * \param ctx HMAC context to be initialized 00131 * \param key HMAC secret key 00132 * \param keylen length of the HMAC key 00133 */ 00134 void md5_hmac_starts( md5_context *ctx, 00135 const unsigned char *key, size_t keylen ); 00136 00137 /** 00138 * \brief MD5 HMAC process buffer 00139 * 00140 * \param ctx HMAC context 00141 * \param input buffer holding the data 00142 * \param ilen length of the input data 00143 */ 00144 void md5_hmac_update( md5_context *ctx, 00145 const unsigned char *input, size_t ilen ); 00146 00147 /** 00148 * \brief MD5 HMAC final digest 00149 * 00150 * \param ctx HMAC context 00151 * \param output MD5 HMAC checksum result 00152 */ 00153 void md5_hmac_finish( md5_context *ctx, unsigned char output[16] ); 00154 00155 /** 00156 * \brief MD5 HMAC context reset 00157 * 00158 * \param ctx HMAC context to be reset 00159 */ 00160 void md5_hmac_reset( md5_context *ctx ); 00161 00162 /** 00163 * \brief Output = HMAC-MD5( hmac key, input buffer ) 00164 * 00165 * \param key HMAC secret key 00166 * \param keylen length of the HMAC key 00167 * \param input buffer holding the data 00168 * \param ilen length of the input data 00169 * \param output HMAC-MD5 result 00170 */ 00171 void md5_hmac( const unsigned char *key, size_t keylen, 00172 const unsigned char *input, size_t ilen, 00173 unsigned char output[16] ); 00174 00175 /** 00176 * \brief Checkup routine 00177 * 00178 * \return 0 if successful, or 1 if the test failed 00179 */ 00180 int md5_self_test( int verbose ); 00181 00182 #ifdef __cplusplus 00183 } 00184 #endif 00185 00186 #endif /* md5.h */ 00187 00188
Generated on Tue Jul 12 2022 19:40:16 by
1.7.2