Browse Source

reuse ctx in mgf1

Signed-off-by: crueter <crueter@eden-emu.dev>
pull/3606/head
crueter 2 weeks ago
parent
commit
77ba33d5fc
No known key found for this signature in database GPG Key ID: 425ACD2D4830EBC6
  1. 14
      src/core/crypto/key_manager.cpp

14
src/core/crypto/key_manager.cpp

@ -518,17 +518,27 @@ static std::array<u8, target_size> MGF1(const std::array<u8, in_size>& seed) {
std::array<u8, in_size + 4> seed_exp{}; std::array<u8, in_size + 4> seed_exp{};
std::memcpy(seed_exp.data(), seed.data(), in_size); std::memcpy(seed_exp.data(), seed.data(), in_size);
EVP_MD_CTX* ctx = EVP_MD_CTX_new();
const EVP_MD* sha256 = EVP_sha256();
std::vector<u8> out; std::vector<u8> out;
size_t i = 0; size_t i = 0;
while (out.size() < target_size) { while (out.size() < target_size) {
out.resize(out.size() + 0x20);
size_t offset = out.size();
out.resize(offset + 0x20);
seed_exp[in_size + 3] = u8(i); seed_exp[in_size + 3] = u8(i);
u32 hash_len = 0; u32 hash_len = 0;
EVP_Digest(seed_exp.data(), seed_exp.size(), out.data(), &hash_len, EVP_sha256(), nullptr);
EVP_DigestInit_ex(ctx, sha256, nullptr);
EVP_DigestUpdate(ctx, seed_exp.data(), seed_exp.size());
EVP_DigestFinal_ex(ctx, out.data() + offset, &hash_len);
++i; ++i;
} }
EVP_MD_CTX_free(ctx);
std::array<u8, target_size> target; std::array<u8, target_size> target;
std::memcpy(target.data(), out.data(), target_size); std::memcpy(target.data(), out.data(), target_size);
return target; return target;

Loading…
Cancel
Save