summaryrefslogtreecommitdiff
path: root/src/core/crypto
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/crypto')
-rw-r--r--src/core/crypto/key_manager.cpp27
-rw-r--r--src/core/crypto/key_manager.h3
2 files changed, 30 insertions, 0 deletions
diff --git a/src/core/crypto/key_manager.cpp b/src/core/crypto/key_manager.cpp
index e61a59fc9..eb5dd8cb1 100644
--- a/src/core/crypto/key_manager.cpp
+++ b/src/core/crypto/key_manager.cpp
@@ -1290,4 +1290,31 @@ bool KeyManager::AddTicket(const Ticket& ticket) {
SetKey(S128KeyType::Titlekey, key.value(), rights_id[1], rights_id[0]);
return true;
}
+
+bool KeyManager::IsFirmwareAvailable() const {
+ // Check for essential keys that would only be present with firmware
+ if (!HasKey(S128KeyType::Master, 0)) {
+ return false;
+ }
+
+ // Check for at least one titlekek
+ bool has_titlekek = false;
+ for (size_t i = 0; i < CURRENT_CRYPTO_REVISION; ++i) {
+ if (HasKey(S128KeyType::Titlekek, i)) {
+ has_titlekek = true;
+ break;
+ }
+ }
+
+ if (!has_titlekek) {
+ return false;
+ }
+
+ // Check for header key
+ if (!HasKey(S256KeyType::Header)) {
+ return false;
+ }
+
+ return true;
+}
} // namespace Core::Crypto
diff --git a/src/core/crypto/key_manager.h b/src/core/crypto/key_manager.h
index 0adf3701f..2a5f0c093 100644
--- a/src/core/crypto/key_manager.h
+++ b/src/core/crypto/key_manager.h
@@ -296,6 +296,9 @@ public:
void ReloadKeys();
bool AreKeysLoaded() const;
+ // Check if firmware is installed by verifying essential keys
+ bool IsFirmwareAvailable() const;
+
private:
KeyManager();