gpt4 book ai didi

c++ - Crypto++ 导致应用程序失败

转载 作者:行者123 更新时间:2023-11-28 03:43:30 25 4
gpt4 key购买 nike

我正在为 Flash 开发 Crypto++ 的 AIR native 扩展,我将作为公共(public)领域发布。我开始使用一些代码来测试散列(在本例中使用 SHA-256)但出于某种原因 CryptoPP::SHA256().CalculateDigest(abDigest, pbData, nDataLen); (由消除过程发现)导致 Flash 编译器无法识别任何可用方法(扩展上下文没有名为 isSupported 的方法。):

这是完整的 C++ 代码:

FREObject isSupported(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
{
FREObject result;

uint32_t isSupportedSwitch = 1;
FRENewObjectFromBool(isSupportedSwitch, &result);

return result;
}

FREObject computeHash(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
{
FREObject result;
FREByteArray actualBytes;

FREAcquireByteArray(argv[0], &actualBytes);

byte const* pbData = (byte*) actualBytes.bytes;
unsigned int nDataLen = strlen((const char*) pbData);
byte abDigest[CryptoPP::SHA256::DIGESTSIZE];
CryptoPP::SHA256().CalculateDigest(abDigest, pbData, nDataLen);

memcpy(actualBytes.bytes, (uint8_t*) abDigest, 32);

FREReleaseByteArray(argv[0]);

FRENewObjectFromBool(1, &result);
return result;
}

void testContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, uint32_t* numFunctions, const FRENamedFunction** functions)
{
*numFunctions = 2;

FRENamedFunction* func = (FRENamedFunction*) malloc(sizeof(FRENamedFunction) * (*numFunctions));

func[0].name = (const uint8_t*) "isSupported";
func[0].functionData = NULL;
func[0].function = &isSupported;

func[1].name = (const uint8_t*) "computeHash";
func[1].functionData = NULL;
func[1].function = &computeHash;

*functions = func;
}

void testContextFinalizer(FREContext ctx)
{
return;
}

void testInitializer(void** extData, FREContextInitializer* ctxInitializer, FREContextFinalizer* ctxFinalizer)
{
*ctxInitializer = &testContextInitializer;
*ctxFinalizer = &testContextFinalizer;
}

void testFinalizer(void* extData)
{
return;
}

在此方面的任何帮助将不胜感激,并将对我在这个项目中的帮助大有帮助。

编辑:澄清一下,我问为什么 CryptoPP::SHA256().CalculateDigest(abDigest, pbData, nDataLen);导致上述应用程序失败以及可能的修复方法。

最佳答案

您似乎假设 actualBytes.bytes 是指向至少 32 字节的内存块的指针,因为您已将 32 硬编码为 memcpy 中的第三个参数。

这可能是一个无效的假设,您应该在执行 memcpy 之前检查以确保 actualBytes.length >= 32

最安全的方法可能是确保您从 ActionScript 端分配了足够大的内存块。或者,您可以尝试在 C++ 中分配内存,然后修改 actualBytes 内容以指向该分配并更改长度值。但这显然充满了危险。

关于c++ - Crypto++ 导致应用程序失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8419911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com