diff options
Diffstat (limited to 'lib/nes/app/application.cc')
| -rw-r--r-- | lib/nes/app/application.cc | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/nes/app/application.cc b/lib/nes/app/application.cc index 09c9f34..5646fa9 100644 --- a/lib/nes/app/application.cc +++ b/lib/nes/app/application.cc @@ -4,6 +4,8 @@ #include "nes/app/ui/screen.hh" #include "nes/app/graphics/renderer.hh" #include "nes/app/action.hh" +#include "nes/app/crypto/aes256.hh" +#include "nes/app/crypto/sha256.hh" namespace nes::app { @@ -54,6 +56,7 @@ namespace nes::app , screen_settings_{ input_manager_, preferences_ } , screen_error_{ keyboard } , screen_confirm_quit_{ keyboard } + , screen_prompt_key_{ keyboard } { display_.visible_screen = &screen_title_; } @@ -153,6 +156,12 @@ namespace nes::app display_.visible_screen = nullptr; break; } + case action::type::prompt_key: + { + screen_prompt_key_.reset(a.get_file_name()); + display_.visible_popup = &screen_prompt_key_; + break; + } case action::type::launch_game: { u8 buffer[sys::cartridge::max_file_size]; @@ -163,6 +172,13 @@ namespace nes::app break; } + if (!a.get_key().is_empty()) + { + auto const key = span{ reinterpret_cast<u8 const*>(a.get_key().get_data()), a.get_key().get_length() }; + auto const key_hash = sha256::hash(key); + aes256::decrypt(span{ buffer, length }, key_hash.get_data()); + } + console_.emplace(display_, span<u8 const>{ buffer, length }); if (console_->get_status() != status::success) { |
