@@ -23,7 +23,7 @@ limitations under the License.
23
23
24
24
#include < re2/re2.h>
25
25
#if defined(__linux__) and !defined(MINIMAL_BUILD) and !defined(__EMSCRIPTEN__)
26
- #include < openssl/sha .h>
26
+ #include < openssl/evp .h>
27
27
#endif
28
28
#include < cstring>
29
29
#include < fstream>
@@ -144,22 +144,22 @@ std::string calculate_file_sha256sum(const std::string& filename) {
144
144
return " " ;
145
145
}
146
146
147
- SHA256_CTX sha256_context ;
148
- SHA256_Init (&sha256_context );
147
+ std::unique_ptr<EVP_MD_CTX, decltype (&EVP_MD_CTX_free)> ctx ( EVP_MD_CTX_new (), EVP_MD_CTX_free) ;
148
+ EVP_DigestInit_ex (ctx. get (), EVP_sha256 (), nullptr );
149
149
150
150
constexpr size_t buffer_size = 4096 ;
151
151
char buffer[buffer_size];
152
152
while (file.read (buffer, buffer_size)) {
153
- SHA256_Update (&sha256_context , buffer, buffer_size);
153
+ EVP_DigestUpdate (ctx. get () , buffer, buffer_size);
154
154
}
155
- SHA256_Update (&sha256_context , buffer, file.gcount ());
155
+ EVP_DigestUpdate (ctx. get () , buffer, file.gcount ());
156
156
157
- unsigned char digest[SHA256_DIGEST_LENGTH] ;
158
- SHA256_Final ( digest, &sha256_context );
157
+ std::vector< uint8_t > digest ( EVP_MD_size ( EVP_sha256 ())) ;
158
+ EVP_DigestFinal_ex (ctx. get (), digest. data (), nullptr );
159
159
160
- std::stringstream ss;
161
- for (int i = 0 ; i < SHA256_DIGEST_LENGTH; ++i ) {
162
- ss << std::hex << std::setw (2 ) << std::setfill (' 0' ) << static_cast < unsigned >(digest[i]) ;
160
+ std::ostringstream ss;
161
+ for (auto & c : digest ) {
162
+ ss << std::hex << std::setw (2 ) << std::setfill (' 0' ) << ( int )c ;
163
163
}
164
164
return ss.str ();
165
165
}
0 commit comments