3

我正在尝试初始化一个 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 继承。感谢您的帮助,Hetelek。

4

1 回答 1

1

Botan::SHA_160是一个类,所以emsa你定义的变量是一个函数而不是一个EMSA3实例。

根据 Botan 1.8 中的示例,您可以使用:

 #include <botan/look_pk.h>
 ...
 Botan::PK_Signer signer(pkey, get_emsa("EMSA3(SHA-1)"));

这也应该在 Botan 1.10 中工作。

于 2012-09-07T01:12:01.833 回答