Procházet zdrojové kódy

key_manager: Add BIS key getter

Zach Hilman před 7 roky
rodič
revize
d7398283e3
2 změnil soubory, kde provedl 19 přidání a 2 odebrání
  1. 17 2
      src/core/crypto/key_manager.cpp
  2. 2 0
      src/core/crypto/key_manager.h

+ 17 - 2
src/core/crypto/key_manager.cpp

@@ -282,8 +282,23 @@ Key256 KeyManager::GetKey(S256KeyType id, u64 field1, u64 field2) const {
     return s256_keys.at({id, field1, field2});
 }
 
-template <std::size_t Size>
-void KeyManager::WriteKeyToFile(bool title_key, std::string_view keyname,
+Key256 KeyManager::GetBISKey(u8 partition_id) const {
+    Key256 out{};
+
+    for (const auto& bis_type : {BISKeyType::Crypto, BISKeyType::Tweak}) {
+        if (HasKey(S128KeyType::BIS, partition_id, static_cast<u64>(bis_type))) {
+            std::memcpy(
+                out.data() + sizeof(Key128) * static_cast<u64>(bis_type),
+                s128_keys.at({S128KeyType::BIS, partition_id, static_cast<u64>(bis_type)}).data(),
+                sizeof(Key128));
+        }
+    }
+
+    return out;
+}
+
+template <size_t Size>
+void KeyManager::WriteKeyToFile(KeyCategory category, std::string_view keyname,
                                 const std::array<u8, Size>& key) {
     const std::string yuzu_keys_dir = FileUtil::GetUserPath(FileUtil::UserPath::KeysDir);
     std::string filename = "title.keys_autogenerated";

+ 2 - 0
src/core/crypto/key_manager.h

@@ -127,6 +127,8 @@ public:
     Key128 GetKey(S128KeyType id, u64 field1 = 0, u64 field2 = 0) const;
     Key256 GetKey(S256KeyType id, u64 field1 = 0, u64 field2 = 0) const;
 
+    Key256 GetBISKey(u8 partition_id) const;
+
     void SetKey(S128KeyType id, Key128 key, u64 field1 = 0, u64 field2 = 0);
     void SetKey(S256KeyType id, Key256 key, u64 field1 = 0, u64 field2 = 0);