mirror of
				https://github.com/monero-project/monero.git
				synced 2025-10-31 15:58:55 -04:00 
			
		
		
		
	Replace in-tree MD5 with OpenSSL
This uses OpenSSL's non-deprecated EVP digest facility to calculate MD5 in HTTP digest authentication.
This commit is contained in:
		
							parent
							
								
									893916ad09
								
							
						
					
					
						commit
						0bc5969755
					
				
					 2 changed files with 16 additions and 16 deletions
				
			
		|  | @ -63,11 +63,11 @@ | |||
| #include <cassert> | ||||
| #include <iterator> | ||||
| #include <limits> | ||||
| #include <openssl/evp.h> | ||||
| #include <tuple> | ||||
| #include <type_traits> | ||||
| 
 | ||||
| #include "hex.h" | ||||
| #include "md5_l.h" | ||||
| #include "string_coding.h" | ||||
| 
 | ||||
| /* This file uses the `u8` prefix and specifies all chars by ASCII numeric
 | ||||
|  | @ -114,8 +114,8 @@ namespace | |||
|       void operator()(const T& arg) const | ||||
|       { | ||||
|         const boost::iterator_range<const char*> data(boost::as_literal(arg)); | ||||
|         md5::MD5Update( | ||||
|           std::addressof(ctx), | ||||
|         EVP_DigestUpdate( | ||||
|           ctx, | ||||
|           reinterpret_cast<const std::uint8_t*>(data.begin()), | ||||
|           data.size() | ||||
|         ); | ||||
|  | @ -126,25 +126,25 @@ namespace | |||
|       } | ||||
|       void operator()(const epee::wipeable_string& arg) const | ||||
|       { | ||||
|         md5::MD5Update( | ||||
|           std::addressof(ctx), | ||||
|         EVP_DigestUpdate( | ||||
|           ctx, | ||||
|           reinterpret_cast<const std::uint8_t*>(arg.data()), | ||||
|           arg.size() | ||||
|         ); | ||||
|       } | ||||
| 
 | ||||
|       md5::MD5_CTX& ctx; | ||||
|       EVP_MD_CTX *ctx; | ||||
|     }; | ||||
| 
 | ||||
|     template<typename... T> | ||||
|     std::array<char, 32> operator()(const T&... args) const | ||||
|     {       | ||||
|       md5::MD5_CTX ctx{}; | ||||
|       md5::MD5Init(std::addressof(ctx)); | ||||
|       boost::fusion::for_each(std::tie(args...), update{ctx}); | ||||
|       std::unique_ptr<EVP_MD_CTX, decltype(&EVP_MD_CTX_free)> ctx(EVP_MD_CTX_new(), &EVP_MD_CTX_free); | ||||
|       EVP_DigestInit(ctx.get(), EVP_md5()); | ||||
|       boost::fusion::for_each(std::tie(args...), update{ctx.get()}); | ||||
| 
 | ||||
|       std::array<std::uint8_t, 16> digest{{}}; | ||||
|       md5::MD5Final(digest.data(), std::addressof(ctx)); | ||||
|       EVP_DigestFinal(ctx.get(), digest.data(), NULL); | ||||
|       return epee::to_hex::array(digest); | ||||
|     } | ||||
|   }; | ||||
|  |  | |||
|  | @ -53,12 +53,12 @@ | |||
| #include <boost/spirit/include/qi_string.hpp> | ||||
| #include <cstdint> | ||||
| #include <iterator> | ||||
| #include <openssl/evp.h> | ||||
| #include <string> | ||||
| #include <unordered_map> | ||||
| #include <utility> | ||||
| #include <vector> | ||||
| 
 | ||||
| #include "md5_l.h" | ||||
| #include "string_tools.h" | ||||
| #include "crypto/crypto.h" | ||||
| 
 | ||||
|  | @ -201,16 +201,16 @@ auth_responses parse_response(const http::http_response_info& response) | |||
| 
 | ||||
| std::string md5_hex(const std::string& in) | ||||
| { | ||||
|   md5::MD5_CTX ctx{}; | ||||
|   md5::MD5Init(std::addressof(ctx)); | ||||
|   md5::MD5Update( | ||||
|     std::addressof(ctx), | ||||
|   std::unique_ptr<EVP_MD_CTX, decltype(&EVP_MD_CTX_free)> ctx(EVP_MD_CTX_new(), &EVP_MD_CTX_free); | ||||
|   EVP_DigestInit(ctx.get(), EVP_md5()); | ||||
|   EVP_DigestUpdate( | ||||
|     ctx.get(), | ||||
|     reinterpret_cast<const std::uint8_t*>(in.data()), | ||||
|     in.size() | ||||
|   ); | ||||
| 
 | ||||
|   std::array<std::uint8_t, 16> digest{{}}; | ||||
|   md5::MD5Final(digest.data(), std::addressof(ctx)); | ||||
|   EVP_DigestFinal(ctx.get(), digest.data(), NULL); | ||||
|   return epee::string_tools::pod_to_hex(digest); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Bastian Germann
						Bastian Germann