Проблема, скорее всего, заключается в использовании заглавной буквы.Я использую Botan 2.9.0 и работает "Blake2b", а "BLAKE2b" вылетает.Основная ветвь Botan также принимает "BLAKE2b", но это было добавлено только недавно .Длина вывода по умолчанию установлена в 512 бит, вы можете адаптировать ее, передав, например, «Blake2b (256)» или напрямую вызвав конструктор Blake2b (как в связанном коммите).
Небольшой рабочий пример (основной.cpp):
#include <iostream>
#include <memory>
#include <string>
#include "botan/hash.h"
#include "botan/hex.h"
std::string hex_hash(const std::string& in, const std::string& HASH) {
std::unique_ptr<Botan::HashFunction> hash(Botan::HashFunction::create(HASH));
return Botan::hex_encode(hash->process(in));
}
int main(int argc, char** argv) {
std::cout << "Blake2b " << hex_hash("abc", "Blake2b") << std::endl;
std::cout << "Blake2b(256) " << hex_hash("abc", "Blake2b(256)") << std::endl;
return 0;
}
$ g++ `pkgconf --cflags --libs botan-2` main.cpp && ./a.out
Blake2b BA80A53F981C4D0D6A2797B69F12F6E94C212F14685AC4B74B12BB6FDBFFA2D17D87C5392AAB792DC252D5DE4533CC9518D38AA8DBF1925AB92386EDD4009923
Blake2b(256) BDDD813C634239723171EF3FEE98579B94964E3BB1CB3E427262C8C068D52319
Если это не работает для вас, также убедитесь, что ваш Botan скомпилирован с поддержкой Blake2b, например,
$ grep BLAKE /usr/include/botan-2/botan/build.h
#define BOTAN_HAS_BLAKE2B 20130131