Ботан ПК_Сигнер
Я пытаюсь просто инициализировать объект PK_Signer, который, кажется, доставляет мне гораздо больше проблем, чем Botan версии 1.8.10. В настоящее время я использую последний стабильный выпуск Botan (1.10), и у меня возникли проблемы...
В Botan 1.8.10 я вижу примеры, где программисты работают так:
Botan::RSA_PrivateKey pkey(rng, p, q, 65537, 0, n);
Botan::PK_Signer signer(pkey, "EMSA3(SHA-1)");
В Botan 1.10.3 нет такого конструктора для класса PK_Signer. Есть 2 производителя:
Botan::PK_Signer(const PK_Signer &);
Botan::PK_Signer(const PK_Signing_Key &key, EMSA *emsa);
Это не было проблемой, пока у меня не начались проблемы со вторым конструктором.
Я пытался изменить многие вещи, но наиболее разумный способ заключается в следующем: Botan::AutoSeeded_RNG rng; Botan::RSA_PrivateKey pkey(rng, p, q, 0x10001, 0, n);
Botan::EMSA3 emsa(Botan::SHA_160);
Botan::PK_Signer signer(pkey, &emsa);
Это приводит к ошибке:
error: no matching function for call to 'Botan::PK_Signer::PK_Signer(Botan::RSA_PrivateKey&, Botan::EMSA3 (*)(Botan::SHA_160))'
Я понятия не имею, почему это происходит, поскольку согласно документации Botan EMSA3 наследуется от абстрактного класса EMSA. Спасибо за любую помощь, Хетелек.
1 ответ
Botan::SHA_160
это класс, поэтому emsa
переменная, которую вы определяли, была функцией, а не EMSA3
пример.
Согласно примерам из Botan 1.8, вы можете использовать:
#include <botan/look_pk.h>
...
Botan::PK_Signer signer(pkey, get_emsa("EMSA3(SHA-1)"));
который также должен работать в ботане 1.10.