An educational example of a command parser for CLI applications, written in modern C++23. Demonstrates clean and efficient command parsing, using up-to-date C++ features and best practices. Ideal for learning how to build robust CLI tools in C++.
- Hash text or files using MD5, SHA1, or SHA256
- Verify hashes for files or text against expected values
- Short, UNIX-style CLI flags:
-h,-t,-f,-o,-v,-e - Secure, modern C++23 code with strong error handling
- Refuses duplicate or unknown arguments
- Safe file handling: only user-owned, non-symlinked files can be hashed/verified
Requirements:
- C++23 compiler (GCC 13+, Clang 16+, MSVC 2022+)
- OpenSSL (dev package, e.g.
libssl-devon Linux) - CMake 3.20+
Build steps:
git clone https://github.com/mavirique/command_parser.git cd command_parser mkdir build && cd build cmake .. cmake --build . # Hash text command_parser -h <algo> -t <text> # Hash file command_parser -h <algo> -f <file> # Hash text, write output command_parser -h <algo> -t <text> -o <out> # Hash file, write output command_parser -h <algo> -f <file> -o <out> # Verify text command_parser -v -h <algo> -t <text> -e <hash> # Verify file command_parser -v -h <algo> -f <file> -e <hash> # Show usage command_parser --help command_parser -H -h <algo> Hash algorithm: md5, sha1, sha256 -t <text> Text to hash -f <file> File to hash -o <out> Output file (optional, for hash command) -v Verification mode -e <hash> Expected hash (required for verification) --help Show usage -H Show usage Only one of -t or -f may be specified per command. Duplicate or unknown flags are rejected with an error. Output: Prints hash/OK/FAIL to stdout, or writes to file with -o.
Hash a file:
command_parser -h sha256 -f myfile.txt Hash text and write to file:
command_parser -h md5 -t "hello world" -o hash.txt Verify a file’s hash:
./command_parser -v -h sha256 -f sample.txt -e 7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069 Refuses to hash or verify files not owned by the user.
Refuses to hash or verify symlinked files.
All command-line arguments are validated and parsed safely using modern C++23 practices.
Code is modern C++23 and clang-tidy clean.
Pull requests for more algorithms, CLI improvements, or security reviews are welcome!
To test or audit, see the source for unit-testable logic in cli_parse.cpp and hash_util.cpp.
MIT Built by cybersecurity enthusiasts, for cybersecurity practitioners.