在此示例代码中

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:“解锁”:找不到标识符

编辑:我的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脚本进行编译,并且没有在调试模式下排除任何模块(使用所有组件构建)。

最佳答案

我刚刚检查了一下,发现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。

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

关于c++ - 标识符“解锁”未定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30987320/

10-13 04:48