summaryrefslogtreecommitdiff
path: root/src/core/crypto/key_manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/crypto/key_manager.cpp')
-rw-r--r--src/core/crypto/key_manager.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/core/crypto/key_manager.cpp b/src/core/crypto/key_manager.cpp
index 8997c7082..f87fe0abc 100644
--- a/src/core/crypto/key_manager.cpp
+++ b/src/core/crypto/key_manager.cpp
@@ -695,8 +695,9 @@ void KeyManager::WriteKeyToFile(KeyCategory category, std::string_view keyname,
695} 695}
696 696
697void KeyManager::SetKey(S128KeyType id, Key128 key, u64 field1, u64 field2) { 697void KeyManager::SetKey(S128KeyType id, Key128 key, u64 field1, u64 field2) {
698 if (s128_keys.find({id, field1, field2}) != s128_keys.end()) 698 if (s128_keys.find({id, field1, field2}) != s128_keys.end() || key == Key128{}) {
699 return; 699 return;
700 }
700 if (id == S128KeyType::Titlekey) { 701 if (id == S128KeyType::Titlekey) {
701 Key128 rights_id; 702 Key128 rights_id;
702 std::memcpy(rights_id.data(), &field2, sizeof(u64)); 703 std::memcpy(rights_id.data(), &field2, sizeof(u64));
@@ -716,8 +717,9 @@ void KeyManager::SetKey(S128KeyType id, Key128 key, u64 field1, u64 field2) {
716 return std::tie(elem.second.type, elem.second.field1, elem.second.field2) == 717 return std::tie(elem.second.type, elem.second.field1, elem.second.field2) ==
717 std::tie(id, field1, field2); 718 std::tie(id, field1, field2);
718 }); 719 });
719 if (iter2 != s128_file_id.end()) 720 if (iter2 != s128_file_id.end()) {
720 WriteKeyToFile(category, iter2->first, key); 721 WriteKeyToFile(category, iter2->first, key);
722 }
721 723
722 // Variable cases 724 // Variable cases
723 if (id == S128KeyType::KeyArea) { 725 if (id == S128KeyType::KeyArea) {
@@ -745,16 +747,18 @@ void KeyManager::SetKey(S128KeyType id, Key128 key, u64 field1, u64 field2) {
745} 747}
746 748
747void KeyManager::SetKey(S256KeyType id, Key256 key, u64 field1, u64 field2) { 749void KeyManager::SetKey(S256KeyType id, Key256 key, u64 field1, u64 field2) {
748 if (s256_keys.find({id, field1, field2}) != s256_keys.end()) 750 if (s256_keys.find({id, field1, field2}) != s256_keys.end() || key == Key256{}) {
749 return; 751 return;
752 }
750 const auto iter = std::find_if( 753 const auto iter = std::find_if(
751 s256_file_id.begin(), s256_file_id.end(), 754 s256_file_id.begin(), s256_file_id.end(),
752 [&id, &field1, &field2](const std::pair<std::string, KeyIndex<S256KeyType>> elem) { 755 [&id, &field1, &field2](const std::pair<std::string, KeyIndex<S256KeyType>> elem) {
753 return std::tie(elem.second.type, elem.second.field1, elem.second.field2) == 756 return std::tie(elem.second.type, elem.second.field1, elem.second.field2) ==
754 std::tie(id, field1, field2); 757 std::tie(id, field1, field2);
755 }); 758 });
756 if (iter != s256_file_id.end()) 759 if (iter != s256_file_id.end()) {
757 WriteKeyToFile(KeyCategory::Standard, iter->first, key); 760 WriteKeyToFile(KeyCategory::Standard, iter->first, key);
761 }
758 s256_keys[{id, field1, field2}] = key; 762 s256_keys[{id, field1, field2}] = key;
759} 763}
760 764