C++14 header-only easy-to-use hash library
What is included in this library:
If you are concerned about security, state-of-the-art performance or whatsoever issue, then take your time and go setup OpenSSL or other proven library
Now some features:
- No/none tweaking knobs, it just works!
Works out-of-the-box on little endian & big endian machines - Have similar performance to C implementations: see my rudimentary benchmark: Benchmark.md
- Library only:
- Tests & driver program:
To use this library in your project:
-
Download this repository and unzip it
-
Use it like:
// include the header #include "pathToLib/sha1.h" // If you are using C++14 or C++17, don't forget the "gsl" folder! void example() { // Get an instance Chocobo1::SHA1 sha1; // Feed data & data length to it sha1.addData("hello", 5); // ... or just sha1.addData("hello"); // Tell it to wrap it up sha1.finalize(); // Profit! oops, not really... std::string result = sha1.toString(); // A one-liner std::string result2 = Chocobo1::SHA1().addData("hello").finalize().toString(); // In byte array form auto bytes = Chocobo1::SHA1().addData("hello").finalize().toArray(); // std::array<uint8_t, 20> // Some hash algorithm provides constexpr result under C++17 constexpr uint8_t data[] = {0x00, 0xFF}; constexpr auto bytes2 = Chocobo1::SHA1().addData(data).finalize().toArray(); }
-
There is also a driver program included, you can find it at "src/program"
-
Compile:
cd src/program meson _builddir # initialize build folder cd _builddir ninja # call the `ninja` to build our program
-
Run:
$ ./hash -md5 /path/to/file
-
cd tests
meson _build
cd _build
ninja
./run_tests
- Microsoft/GSL
This library is only required when compiling with C++14 and C++17. In C++20 or later,std::span
will be used in place ofgsl::span
.
No need to download or install it. This repository included a modified version that will compile locally (only forgsl::span
related headers).
See LICENSE file
Please consider donate