README.md
# hash
Библиотека C++ для хэширования.
На текущий момент имеется реализация алгоритмов:
- Keccak
- SHA-3
- SHAKE
Может когда-нибудь залью ещё какую-нибудь реализацию.
Сборка
mkdir build
cd build
cmake ..
cmake --build .
Использование
#include "hash/include/sha3.hxx"
#include <iostream>
int main(int argc, char* argv[]) try {
// Юзер дай мне аргумент!
if (argc < 2) {
std::cerr << "At least 1 arguette is required!" << std::endl;
return EXIT_FAILURE;
}
// Перебераем все полученные аргументы и хэшируем их
--argc; ++argv;
for(;argc ; --argc, ++argv) {
auto sha3_224 = hash::sha3::calculate<hash::sha3::hash_type_t::sha_3_224>(std::string_view(*argv));
auto sha3_256 = hash::sha3::calculate<hash::sha3::hash_type_t::sha_3_256>(std::string_view(*argv));
auto sha3_384 = hash::sha3::calculate<hash::sha3::hash_type_t::sha_3_384>(std::string_view(*argv));
auto sha3_512 = hash::sha3::calculate<hash::sha3::hash_type_t::sha_3_512>(std::string_view(*argv));
auto keccak_224 = hash::sha3::calculate<hash::sha3::hash_type_t::keccak_224>(std::string_view(*argv));
auto keccak_256 = hash::sha3::calculate<hash::sha3::hash_type_t::keccak_256>(std::string_view(*argv));
auto keccak_384 = hash::sha3::calculate<hash::sha3::hash_type_t::keccak_384>(std::string_view(*argv));
auto keccak_512 = hash::sha3::calculate<hash::sha3::hash_type_t::keccak_512>(std::string_view(*argv));
auto shake_128 = hash::sha3::calculate<hash::sha3::hash_type_t::shake_128, char, std::char_traits<char>, 48>(std::string_view(*argv));
auto shake_256 = hash::sha3::calculate<hash::sha3::hash_type_t::shake_256, char, std::char_traits<char>, 48>(std::string_view(*argv));
// Ещё есть шаблонны calculate для std::span
std::cout
<< "Input: \"" << *argv << '"' << std::endl
<< "| keccak_224: " << keccak_224.to_hex() << std::endl
<< "| keccak_256: " << keccak_256.to_hex() << std::endl
<< "| keccak_384: " << keccak_384.to_hex() << std::endl
<< "| keccak_512: " << keccak_512.to_hex() << std::endl
<< "| sha3_224: " << sha3_224.to_hex() << std::endl
<< "| sha3_256: " << sha3_256.to_hex() << std::endl
<< "| sha3_384: " << sha3_384.to_hex() << std::endl
<< "| sha3_512: " << sha3_512.to_hex() << std::endl
<< "| shake_128: " << shake_128.to_hex() << std::endl
<< "| shake_256: " << shake_256.to_hex() << std::endl
<< "+----------------------------------" << std::endl;
}
return EXIT_SUCCESS;
} catch(const std::exception& e) {
// hash::sha3::calculate потенциально может бросить std::runtime_error,
// но только в случае если некорректно указан state_size
std::cerr << e.what() << std::endl;
return EXIT_FAILURE;
} catch(...) {
std::cerr << "Unhandled exception!" << std::endl;
return EXIT_FAILURE;
}
Конвейеры
0 успешных
0 с ошибкой