|
EnigmaMachineCore 0.1.0
A modular Enigma Machine simulation in C++20
|
EnigmaMachineCore is a C++ project that simulates the behavior of the Enigma Machine.
The Enigma Machine was a cipher device used for secure communication in the first half of the 20th century. For more details, see Enigma Machine.
This project provides a modular and extensive implementation of Enigma's core components and their behaviors.
Features:
To build and run this project, you will need a C++20 compatible compiler, CMake 3.15+, and Git.
For a complete list of dependencies and detailed environment setup, please refer to the Building and Testing guide.
For more detailed build configurations and VS Code integration, see docs/Building.md.
To use EnigmaCore as a library in your own project, include the namespaced public API gateway:
If the library is installed on your system, you can find it using find_package:
Refer to the Library API Specification for full interface details.
You can install the library and CLI globally on your system:
This will install:
/usr/local/include/EnigmaMachineCore//usr/local/lib/libEnigmaCore.so (or .dll/.dylib)/usr/local/bin/EnigmaMachineCore/usr/local/share/EnigmaMachineCore/assets/The installed CLI and Library are intelligent enough to find their assets in the system's share/ directory if a local assets/ folder is not present.
The project uses Google Test (GTest) for unit testing and CTest for execution. By default, tests are disabled to keep the build fast. To run them, you must explicitly enable them:
For a detailed overview of the testing infrastructure, VS Code integration, and how to add new tests, refer to the Testing Guide.
EnigmaMachineCore includes a high-resolution benchmarking suite using Google Benchmark. This is used to measure encryption throughput and component latency.
For more details on performance metrics and benchmarking options, see docs/Benchmarking.md.
If you have Doxygen installed, you can generate the project documentation.
Using the modern CMake CLI:
Using the traditional Makefile approach:
HTML documentation is generated in: docs/doxygen-gen-files/html/index.html
For a detailed view of our future plans, architectural evolution, and platform support strategy (including WASM, Android, and Embedded targets), please refer to our Project Roadmap.
Significant design choices and their rationales are documented in our Architectural Decision Records (ADRs).
This project uses clang-format to maintain a consistent coding style. To format all source files:
The project integrates clang-tidy to detect bugs and enforce modern C++ practices. This check is optional and can be enabled during configuration:
We welcome contributions! Please see our Contributing Guide for details on:
main, development, feature/*).Rotors and Reflectors can be created and customized. Use the assets directory to place your customized components.
Alternatively, you can specify a custom assets directory at runtime using the --assets command-line option.
***Note:** The build system automatically copies the assets/ folder to the binary directory after each build, ensuring the executable always has access to the latest configuration files.*
[Apache-2.0](LICENSE)