Я пытаюсь просто инициализировать объект 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. Спасибо за любую помощь, Хетелек.
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.
Других решений пока нет …