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 с ошибкой