26inline std::string
sha256(
const std::string& data) {
28 EVP_MD_CTX* ctx = EVP_MD_CTX_new();
30 throw std::runtime_error(
"EVP_MD_CTX_newに失敗");
33 const EVP_MD* md = EVP_sha256();
34 if (EVP_DigestInit_ex(ctx, md,
nullptr) != 1) {
36 throw std::runtime_error(
"EVP_DigestInit_exに失敗");
40 if (EVP_DigestUpdate(ctx, data.data(), data.size()) != 1) {
42 throw std::runtime_error(
"EVP_DigestUpdateに失敗");
45 unsigned char hash[EVP_MAX_MD_SIZE];
46 unsigned int hashLength = 0;
47 if (EVP_DigestFinal_ex(ctx, hash, &hashLength) != 1) {
49 throw std::runtime_error(
"EVP_DigestFinal_exに失敗");
55 std::ostringstream oss;
56 for (
unsigned int i = 0; i < hashLength; ++i) {
57 oss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(hash[i]);
70inline std::string
sha256f(
const fs::path& filePath) {
71 std::ifstream file(filePath, std::ios::binary);
72 if (!file.is_open())
return "ERROR";
75 EVP_MD_CTX* ctx = EVP_MD_CTX_new();
77 throw std::runtime_error(
"EVP_MD_CTX_newに失敗");
80 const EVP_MD* md = EVP_sha256();
81 if (EVP_DigestInit_ex(ctx, md,
nullptr) != 1) {
83 throw std::runtime_error(
"EVP_DigestInit_exに失敗");
87 std::vector<char> buffer(8192);
89 file.read(buffer.data(), buffer.size());
90 if (EVP_DigestUpdate(ctx, buffer.data(), file.gcount()) != 1) {
92 throw std::runtime_error(
"EVP_DigestUpdateに失敗");
96 unsigned char hash[EVP_MAX_MD_SIZE];
97 unsigned int hashLength = 0;
98 if (EVP_DigestFinal_ex(ctx, hash, &hashLength) != 1) {
100 throw std::runtime_error(
"EVP_DigestFinal_exに失敗");
103 EVP_MD_CTX_free(ctx);
106 std::ostringstream oss;
107 for (
unsigned int i = 0; i < hashLength; ++i) {
108 oss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(hash[i]);