标识符“解锁”未定义

时间:2015-06-22 18:34:41

标签: c++ visual-c++ botan

在此示例代码中

http://botan.randombit.net/manual/fpe.html

我试图在Visual C ++托管包装器中使用一种方法,但是我在“解锁”时不断收到编译错误这是什么? (它可能是互斥::解锁)我该如何解决错误?

std::vector<byte> sha1(const std::string& acct_name)
   {
   SHA_160 hash;
   hash.update(acct_name);
   return unlock(hash.final());
   }

错误16错误C3861:'unlock':找不到标识符

编辑:我的Stdafx.h文件现在看起来像这样,但它仍然没有编译(即使包括secmem.h)

#pragma once

#include <botan/botan.h>
#include <botan/fpe_fe1.h>
#include <botan/sha160.h>
#include <botan/secmem.h>
#include <stdexcept>
#include <vector>

编辑:附加信息 - 我正在使用的Botan库的版本是版本1.10.9(最新的稳定版)。我使用python脚本编译,并没有在调试模式下排除任何模块(用所有内容构建)。

2 个答案:

答案 0 :(得分:1)

我刚检查过,看起来像Botan v。1.10.9没有unlock。你有两个选择。

版本1.10.9有另一个final方法,您可以传递byte的向量作为参考来获得返回。

类似的东西:

byte out[hash.output_length()];
hash.final(out);

另一种选择是从SecureVector转换为std::vector

SecureVector<byte> temp = hash.final();
std::vector<byte> ret(temp.begin(), temp.end());

根据我的申请,我会选择其中一个。

以防万一有人提出这个问题而且正在使用Botan 1.11。

要从SecureVector转换为std::vector的方法unlock位于标题secman.h中。 此外,SHA_160类还有另一个final方法,您可以将std::vector<byte>作为参数传递以获取输出。使用此方法,您将不需要解锁功能。

答案 1 :(得分:0)

本教程使用此

using namespace Botan;

可能是命名空间问题。您也可以将Botan命名空间声明为&#34;使用&#34;,或者使用Botan::unlock而不是解锁。

我推荐第二个,即使看起来更长。这是值得的!