Ботан ПК_Сигнер

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

3

Решение

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.

1

Другие решения

Других решений пока нет …