C++ Blake2b哈希本机C库用法

C++ Blake2b哈希本机C库用法,c++,c,hash,C++,C,Hash,我试图在我的项目(这一个)中使用本机C库,但我不清楚如何使用它:似乎可以使用一个分步版本(blake2b_init、blake2b_update和blake2b_final)和更简单的版本(blake2b) 在这里()我找到了一个关于它的完整解释和一个使用示例(第26页),其中他们只是这样做(我也不想使用这个键): 我的一个问题是,在库源代码(blake2.h)中,我发现一个“简单API”,如下所示 int blake2b( void *out, size_t outlen, const voi

我试图在我的项目(这一个)中使用本机C库,但我不清楚如何使用它:似乎可以使用一个分步版本(blake2b_init、blake2b_update和blake2b_final)和更简单的版本(blake2b)

在这里()我找到了一个关于它的完整解释和一个使用示例(第26页),其中他们只是这样做(我也不想使用这个键):

我的一个问题是,在库源代码(blake2.h)中,我发现一个“简单API”,如下所示

int blake2b( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );
所以语法是不同的:输入和键位置是交换的

此外,在前面的一个问题()中,它说应该检查结果(正确的结果是0)。我知道这里他们使用blake2s,但结果的含义也应该与blake2b相同

我的主要问题是,我尝试了这两种用法,但结果总是-1。因此,我认为我没有正确使用图书馆

这是我的密码

const char* pInput = "test text";
char* pOutput = new char[128];
int nRes = blake2b(pOutput, 128, pInput, strlen(pInput), NULL, 0);

结果总是-1,并且在输出中我没有我的散列


是否有人使用过该库和/或有关于该库的更新文档显示其正确用法?

问题在于,您要求blake2b()生成128字节的输出,而它最多只能生成32字节。头文件中有一个
enum
:BLAKE2B_OUTBYTES。所以写下:

const char *pInput = "test text";
char *pOutput = new char[BLAKE2B_OUTBYTES];
int nRes = blake2b(pOutput, BLAKE2B_OUTBYTES, pInput, strlen(pInput), NULL, 0);
const char* pInput = "test text";
char* pOutput = new char[128];
int nRes = blake2b(pOutput, 128, NULL, 0, pInput, strlen(pInput));
const char *pInput = "test text";
char *pOutput = new char[BLAKE2B_OUTBYTES];
int nRes = blake2b(pOutput, BLAKE2B_OUTBYTES, pInput, strlen(pInput), NULL, 0);