【问题标题】:Botan PK_Signer植物学家PK_Signer
【发布时间】:2012-09-06 23:04:57
【问题描述】:

我正在尝试初始化一个 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::AutoSeed_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。

【问题讨论】:

    标签: c++ botan


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      • 2016-06-27
      • 1970-01-01
      相关资源
      最近更新 更多