Невозможно создать SymmetricKey

Прежде всего, я использую версию Botan - Botan-1.10.9, и я пишу управляемую оболочку в Visual C++.

Следуя этому примеру, я пытаюсь создать SymmetricKey из хеша строки, чтобы я мог передать его в метод fe1_encrypt модуля FPE

Подпись fe1_encrypt является

BigInt FPE::fe1_encrypt(const BigInt &n, const BigInt &X, const SymmetricKey &key, const std::vector<byte> &tweak)

Я хочу, чтобы значение, которое я передаю в параметр ключа, было хэшем открытого текста (без возможности расшифровки). Поэтому на самом деле мне все равно, что это SymmetricKey, просто нужен этот тип, потому что метод требует его в качестве параметра.

Но в их примере они передали SymmetricKey свой хеш-метод, который возвращает std: vector

Однако не существует конструктора для SymmetricKey, который принимает этот тип.

У кого-нибудь есть идеи?

РЕДАКТИРОВАТЬ: я попробовал это без удачи

std::vector<byte> re = SHA_1(plaintextAsString);
Botan::OctetString key(re, re.size());

ОШИБКА

Ошибка 15 ошибка C2664: "Botan::OctetString::OctetString(Botan::RandomNumberGenerator &,size_t)": невозможно преобразовать параметр 1 из "std::vector<_Ty>" в "Botan:: RandomNumberGenerator &"

1 ответ

Решение

В документацииSymmetricKey (который является просто typedef для OctetString) может принимать байтовый массив и длину в качестве конструктора. Кроме того, вы можете закодировать ключ в виде шестнадцатеричной строки. Если у вас уже есть ключ как std::vector<byte>тогда этого должно хватить:

std::vector<byte> keybytes;
// ...fill the vector...

SymmetricKey key( keybytes.data(), keybytes.size() );

Более поздние версии Botan определяют другой конструктор OctetString (const std::vector<byte> &in),

Другие вопросы по тегам