diff options
author | Lioncash <mathew1800@gmail.com> | 2018-10-13 15:13:19 +0200 |
---|---|---|
committer | Lioncash <mathew1800@gmail.com> | 2018-10-13 15:13:19 +0200 |
commit | 6da2ed4232d3b3ecde7a04621c554f66de558fab (patch) | |
tree | 83184a61eecca6dcc5f543a5f69f93234eacdbc6 /src/core/crypto/key_manager.cpp | |
parent | partition_data_manager: Dehardcode array bounds (diff) | |
download | yuzu-6da2ed4232d3b3ecde7a04621c554f66de558fab.tar yuzu-6da2ed4232d3b3ecde7a04621c554f66de558fab.tar.gz yuzu-6da2ed4232d3b3ecde7a04621c554f66de558fab.tar.bz2 yuzu-6da2ed4232d3b3ecde7a04621c554f66de558fab.tar.lz yuzu-6da2ed4232d3b3ecde7a04621c554f66de558fab.tar.xz yuzu-6da2ed4232d3b3ecde7a04621c554f66de558fab.tar.zst yuzu-6da2ed4232d3b3ecde7a04621c554f66de558fab.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/crypto/key_manager.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/core/crypto/key_manager.cpp b/src/core/crypto/key_manager.cpp index d2ce4f5bf..fd0786068 100644 --- a/src/core/crypto/key_manager.cpp +++ b/src/core/crypto/key_manager.cpp @@ -98,7 +98,7 @@ std::array<u8, 144> DecryptKeyblob(const std::array<u8, 176>& encrypted_keyblob, return keyblob; } -void KeyManager::DeriveGeneralPurposeKeys(u8 crypto_revision) { +void KeyManager::DeriveGeneralPurposeKeys(std::size_t crypto_revision) { const auto kek_generation_source = GetKey(S128KeyType::Source, static_cast<u64>(SourceKeyType::AESKekGeneration)); const auto key_generation_source = @@ -270,6 +270,9 @@ static std::array<u8, size> operator^(const std::array<u8, size>& lhs, template <size_t target_size, size_t in_size> static std::array<u8, target_size> MGF1(const std::array<u8, in_size>& seed) { + // Avoids truncation overflow within the loop below. + static_assert(target_size <= 0xFF); + std::array<u8, in_size + 4> seed_exp{}; std::memcpy(seed_exp.data(), seed.data(), in_size); @@ -277,7 +280,7 @@ static std::array<u8, target_size> MGF1(const std::array<u8, in_size>& seed) { size_t i = 0; while (out.size() < target_size) { out.resize(out.size() + 0x20); - seed_exp[in_size + 3] = i; + seed_exp[in_size + 3] = static_cast<u8>(i); mbedtls_sha256(seed_exp.data(), seed_exp.size(), out.data() + out.size() - 0x20, 0); ++i; } |