diff options
Diffstat (limited to 'src/core/crypto')
-rw-r--r-- | src/core/crypto/key_manager.cpp | 43 | ||||
-rw-r--r-- | src/core/crypto/key_manager.h | 3 |
2 files changed, 6 insertions, 40 deletions
diff --git a/src/core/crypto/key_manager.cpp b/src/core/crypto/key_manager.cpp index fc45e7ab5..db8b22c85 100644 --- a/src/core/crypto/key_manager.cpp +++ b/src/core/crypto/key_manager.cpp @@ -10,44 +10,13 @@ #include <string_view> #include "common/common_paths.h" #include "common/file_util.h" +#include "common/hex_util.h" +#include "common/logging/log.h" #include "core/crypto/key_manager.h" #include "core/settings.h" namespace Core::Crypto { -static u8 ToHexNibble(char c1) { - if (c1 >= 65 && c1 <= 70) - return c1 - 55; - if (c1 >= 97 && c1 <= 102) - return c1 - 87; - if (c1 >= 48 && c1 <= 57) - return c1 - 48; - throw std::logic_error("Invalid hex digit"); -} - -template <size_t Size> -static std::array<u8, Size> HexStringToArray(std::string_view str) { - std::array<u8, Size> out{}; - for (size_t i = 0; i < 2 * Size; i += 2) { - auto d1 = str[i]; - auto d2 = str[i + 1]; - out[i / 2] = (ToHexNibble(d1) << 4) | ToHexNibble(d2); - } - return out; -} - -std::array<u8, 16> operator""_array16(const char* str, size_t len) { - if (len != 32) - throw std::logic_error("Not of correct size."); - return HexStringToArray<16>(str); -} - -std::array<u8, 32> operator""_array32(const char* str, size_t len) { - if (len != 64) - throw std::logic_error("Not of correct size."); - return HexStringToArray<32>(str); -} - KeyManager::KeyManager() { // Initialize keys const std::string hactool_keys_dir = FileUtil::GetHactoolConfigurationPath(); @@ -83,20 +52,20 @@ void KeyManager::LoadFromFile(const std::string& filename, bool is_title_keys) { out[1].erase(std::remove(out[1].begin(), out[1].end(), ' '), out[1].end()); if (is_title_keys) { - auto rights_id_raw = HexStringToArray<16>(out[0]); + auto rights_id_raw = Common::HexStringToArray<16>(out[0]); u128 rights_id{}; std::memcpy(rights_id.data(), rights_id_raw.data(), rights_id_raw.size()); - Key128 key = HexStringToArray<16>(out[1]); + Key128 key = Common::HexStringToArray<16>(out[1]); SetKey(S128KeyType::Titlekey, key, rights_id[1], rights_id[0]); } else { std::transform(out[0].begin(), out[0].end(), out[0].begin(), ::tolower); if (s128_file_id.find(out[0]) != s128_file_id.end()) { const auto index = s128_file_id.at(out[0]); - Key128 key = HexStringToArray<16>(out[1]); + Key128 key = Common::HexStringToArray<16>(out[1]); SetKey(index.type, key, index.field1, index.field2); } else if (s256_file_id.find(out[0]) != s256_file_id.end()) { const auto index = s256_file_id.at(out[0]); - Key256 key = HexStringToArray<32>(out[1]); + Key256 key = Common::HexStringToArray<32>(out[1]); SetKey(index.type, key, index.field1, index.field2); } } diff --git a/src/core/crypto/key_manager.h b/src/core/crypto/key_manager.h index c4c53cefc..0c62d4421 100644 --- a/src/core/crypto/key_manager.h +++ b/src/core/crypto/key_manager.h @@ -87,9 +87,6 @@ struct hash<Core::Crypto::KeyIndex<KeyType>> { namespace Core::Crypto { -std::array<u8, 0x10> operator"" _array16(const char* str, size_t len); -std::array<u8, 0x20> operator"" _array32(const char* str, size_t len); - class KeyManager { public: KeyManager(); |