[英]Crypto++ causing application failure
我正在開發一個Crypto ++ for Flash的AIR Native Extension,我將作為公共域發布。 我開始使用一些代碼來測試散列(在這種情況下使用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內容以指向該分配並更改長度值。 但這肯定似乎充滿了危險。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.