Logger System 0.1.3
High-performance C++20 thread-safe logging system with asynchronous capabilities
Loading...
Searching...
No Matches
kcenon::logger::log_decryptor Class Reference

Utility class for decrypting encrypted log files. More...

#include <encrypted_writer.h>

Collaboration diagram for kcenon::logger::log_decryptor:
Collaboration graph

Public Member Functions

 log_decryptor (const security::secure_key &key)
 Construct decryptor with key.
 
 ~log_decryptor ()
 Destructor - cleans up key material.
 
 log_decryptor (const log_decryptor &)=delete
 
log_decryptoroperator= (const log_decryptor &)=delete
 
 log_decryptor (log_decryptor &&)=delete
 
log_decryptoroperator= (log_decryptor &&)=delete
 
result< size_t > decrypt_file (const std::filesystem::path &input_path, const std::filesystem::path &output_path)
 Decrypt entire file to output file.
 
result< size_t > decrypt_file_streaming (const std::filesystem::path &input_path, std::function< void(const std::string &)> callback)
 Decrypt file with callback for each entry.
 

Private Attributes

security::secure_key key_
 

Detailed Description

Utility class for decrypting encrypted log files.

Provides functionality to read and decrypt log files created by encrypted_writer. Supports streaming decryption for large files.

Definition at line 344 of file encrypted_writer.h.

Constructor & Destructor Documentation

◆ log_decryptor() [1/3]

kcenon::logger::log_decryptor::log_decryptor ( const security::secure_key & key)
explicit

Construct decryptor with key.

Parameters
keyDecryption key (copied for safety)
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/writers/encrypted_writer.h.

Definition at line 537 of file encrypted_writer.cpp.

538 : key_(key.data()) // Copy key data
539{
540#ifdef LOGGER_HAS_OPENSSL_CRYPTO
541 cipher_ctx_ = EVP_CIPHER_CTX_new();
542#endif
543}

◆ ~log_decryptor()

kcenon::logger::log_decryptor::~log_decryptor ( )

Destructor - cleans up key material.

Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/writers/encrypted_writer.h.

Definition at line 545 of file encrypted_writer.cpp.

545 {
546#ifdef LOGGER_HAS_OPENSSL_CRYPTO
547 if (cipher_ctx_) {
548 EVP_CIPHER_CTX_free(cipher_ctx_);
549 cipher_ctx_ = nullptr;
550 }
551#endif
552}

◆ log_decryptor() [2/3]

kcenon::logger::log_decryptor::log_decryptor ( const log_decryptor & )
delete

◆ log_decryptor() [3/3]

kcenon::logger::log_decryptor::log_decryptor ( log_decryptor && )
delete

Member Function Documentation

◆ decrypt_file()

result< size_t > kcenon::logger::log_decryptor::decrypt_file ( const std::filesystem::path & input_path,
const std::filesystem::path & output_path )

Decrypt entire file to output file.

Parameters
input_pathEncrypted log file path
output_pathDecrypted output file path
Returns
Result containing entry count or error
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/writers/encrypted_writer.h.

Definition at line 554 of file encrypted_writer.cpp.

557 {
558 std::ofstream output(output_path, std::ios::binary | std::ios::trunc);
559 if (!output) {
560 return result<size_t>(
562 "Failed to open output file: " + output_path.string()
563 );
564 }
565
566 size_t entry_count = 0;
567 auto callback = [&output, &entry_count](const std::string& decrypted) {
568 output << decrypted << "\n";
569 ++entry_count;
570 };
571
572 auto stream_result = decrypt_file_streaming(input_path, callback);
573 if (!stream_result.has_value()) {
574 return stream_result;
575 }
576
577 return result<size_t>(entry_count);
578}
result< size_t > decrypt_file_streaming(const std::filesystem::path &input_path, std::function< void(const std::string &)> callback)
Decrypt file with callback for each entry.

References decrypt_file_streaming(), and kcenon::logger::file_open_failed.

Here is the call graph for this function:

◆ decrypt_file_streaming()

result< size_t > kcenon::logger::log_decryptor::decrypt_file_streaming ( const std::filesystem::path & input_path,
std::function< void(const std::string &)> callback )

Decrypt file with callback for each entry.

Parameters
input_pathEncrypted log file path
callbackFunction called with each decrypted entry
Returns
Result containing entry count or error
Examples
/home/runner/work/logger_system/logger_system/include/kcenon/logger/writers/encrypted_writer.h.

Definition at line 580 of file encrypted_writer.cpp.

583 {
584#ifdef LOGGER_HAS_OPENSSL_CRYPTO
585 std::ifstream input(input_path, std::ios::binary);
586 if (!input) {
587 return result<size_t>(
589 "Failed to open input file: " + input_path.string()
590 );
591 }
592
593 size_t entry_count = 0;
594 std::vector<uint8_t> buffer;
595
596 while (input.good()) {
597 // Read header
598 encrypted_log_header header;
599 input.read(reinterpret_cast<char*>(&header), sizeof(header));
600
601 if (input.gcount() == 0) {
602 break; // End of file
603 }
604
605 if (input.gcount() != sizeof(header)) {
606 return result<size_t>(
608 "Incomplete header at entry " + std::to_string(entry_count)
609 );
610 }
611
612 // Validate header
613 if (header.magic != encrypted_log_header::kMagic) {
614 return result<size_t>(
616 "Invalid magic number at entry " + std::to_string(entry_count)
617 );
618 }
619
620 // Read encrypted data
621 buffer.resize(sizeof(header) + header.encrypted_length);
622 std::memcpy(buffer.data(), &header, sizeof(header));
623 input.read(
624 reinterpret_cast<char*>(buffer.data() + sizeof(header)),
625 header.encrypted_length
626 );
627
628 if (static_cast<size_t>(input.gcount()) != header.encrypted_length) {
629 return result<size_t>(
631 "Incomplete data at entry " + std::to_string(entry_count)
632 );
633 }
634
635 // Decrypt entry
636 auto decrypt_result = encrypted_writer::decrypt_entry(buffer, key_);
637 if (!decrypt_result.has_value()) {
638 return result<size_t>(
639 decrypt_result.error_code(),
640 "Decryption failed at entry " + std::to_string(entry_count) +
641 ": " + decrypt_result.error_message()
642 );
643 }
644
645 callback(decrypt_result.value());
646 ++entry_count;
647 }
648
649 return result<size_t>(entry_count);
650#else
651 return result<size_t>(
653 "OpenSSL not available - decryption disabled"
654 );
655#endif
656}
static result< std::string > decrypt_entry(const std::vector< uint8_t > &encrypted_data, const security::secure_key &key)
Decrypt a single encrypted log entry.

References kcenon::logger::encrypted_writer::decrypt_entry(), kcenon::logger::decryption_failed, kcenon::logger::encrypted_log_header::encrypted_length, kcenon::logger::file_open_failed, kcenon::logger::file_read_failed, key_, kcenon::logger::encrypted_log_header::kMagic, and kcenon::logger::encrypted_log_header::magic.

Referenced by decrypt_file().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator=() [1/2]

◆ operator=() [2/2]

log_decryptor & kcenon::logger::log_decryptor::operator= ( log_decryptor && )
delete

Member Data Documentation

◆ key_


The documentation for this class was generated from the following files: