From dd22e1ab7ab7b5bac841dae2b62bfa200b36c4d8 Mon Sep 17 00:00:00 2001 From: Hannes Schulze Date: Wed, 12 Feb 2025 23:57:32 +0100 Subject: add encryption/decryption --- app/encrypt/CMakeLists.txt | 13 ++++++++++++ app/encrypt/main.cc | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 app/encrypt/CMakeLists.txt create mode 100644 app/encrypt/main.cc (limited to 'app/encrypt') diff --git a/app/encrypt/CMakeLists.txt b/app/encrypt/CMakeLists.txt new file mode 100644 index 0000000..5da53af --- /dev/null +++ b/app/encrypt/CMakeLists.txt @@ -0,0 +1,13 @@ +add_executable(nes_app_test) + +target_include_directories(nes_app_test PRIVATE .) +target_link_libraries( + nes_app_test + PRIVATE + nes::options + nes::nes) + +target_sources( + nes_app_test + PRIVATE + main.cc) \ No newline at end of file diff --git a/app/encrypt/main.cc b/app/encrypt/main.cc new file mode 100644 index 0000000..3b32159 --- /dev/null +++ b/app/encrypt/main.cc @@ -0,0 +1,52 @@ +#include "nes/app/crypto/aes256.hh" +#include "nes/app/crypto/sha256.hh" +#include "nes/common/utils.hh" +#include "nes/common/containers/string-view.hh" +#include +#include +#include + +auto main(int const argc, char** argv) -> int +{ + if (argc != 2) + { + std::cerr << "Usage:\n"; + std::cerr << " " << argv[0] << " < input > output" << std::endl; + return EXIT_FAILURE; + } + + auto const key_str = nes::string_view{ argv[1] }; + auto const key = nes::span{ reinterpret_cast(key_str.get_data()), key_str.get_length() }; + auto const key_hash = nes::app::sha256::hash(key); + + auto data = std::vector{}; + nes::u8 buffer[1024]{}; + while (true) + { + auto const bytes = read(STDIN_FILENO, buffer, sizeof(buffer)); + if (bytes < 0) + { + perror("read"); + return EXIT_FAILURE; + } + + if (bytes == 0) + { + break; + } + + auto offset = data.size(); + data.resize(offset + bytes); + nes::copy(buffer, &data[offset], bytes); + } + + nes::app::aes256::encrypt(nes::span{ data.data(), static_cast(data.size()) }, key_hash.get_data()); + + if (write(STDOUT_FILENO, data.data(), data.size()) < 0) + { + perror("write"); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} \ No newline at end of file -- cgit v1.3.1