BAD_ACCESS(code = EXC_I386_GPFLT)用ECDSA签名时
我正在尝试在iOS上使用Crypto ++。 我从Marek Kotewicz的GitHub下载了预build版的图书馆。
我正努力从Crypto ++ wiki运行这个示例代码 。
ECDSA<ECP, CryptoPP::SHA256>::PrivateKey privateKey; ECDSA<ECP, CryptoPP::SHA256>::PublicKey publicKey; AutoSeededRandomPool prng, rrng; privateKey.Initialize(prng, CryptoPP::ASN1::secp256k1()); privateKey.MakePublicKey(publicKey); string signature; string message = "Do or do not. There is no try."; StringSource s(message, true, new SignerFilter(rrng, ECDSA<ECP, CryptoPP::SHA256>::Signer(privateKey), new StringSink(signature)));
它与下面的崩溃。 它出现在Xcode输出窗口中:
BAD_ACCESS (code=EXC_I386_GPFLT)
这是C ++文件的memory.h中指向BAD_ACCESS的代码片段
_LIBCPP_INLINE_VISIBILITY ~auto_ptr() throw() {delete __ptr_;}
我得到BAD_ACCESS(代码= 1,地址= 0x0)错误指向库的这一行代码
-> 0x1065dfa8d <+85>: movq -0x58(%rbp), %rdi
它与下面的崩溃。 它出现在Xcode输出窗口中:
BAD_ACCESS(code=EXC_I386_GPFLT)
代码对我来说看起来不错。
我正在尝试在iOS上使用Crypto ++。 我从Marek Kotewicz的GitHub下载了预build版的图书馆。
我只是在黑暗中刺伤。 它假定你上面展示的代码实际上就是你正在做的一个testingViewController
。
预编译的库似乎在使用GNU的标准C ++库。 我将通过使用-stdlib=c++
(而不是GNU的-stdlib=stdc++
)构buildCrypto ++来切换到LLVM的标准C ++库。 苹果在几年前转向它,而Xcode默认使用它。
您可以在noloader / cryptopp-5.6.2-ios上使用LLVM标准C ++在胖库中findGitHub。
或者,你可以自己build立胖库。 为此,请参阅Crypto ++ wiki上的iOS(命令行) 。 cryptopp-5.6.2-ios的预build库使用这些指令。
AutoSeededRandomPool prng, rrng;
你只需要其中的一个。
StringSource s(message, true, new SignerFilter(rrng, ECDSA<ECP, CryptoPP::SHA256>::Signer(privateKey), new StringSink(signature)));
多年来,我开始怀疑为这个pipe道创build的临时签署者。 我已经改变了Crypto ++ wiki来停止使用它们。 改用这个代码:
ECDSA<ECP, CryptoPP::SHA256>::PrivateKey privateKey; ... ECDSA<ECP, CryptoPP::SHA256>::Signer signer(privateKey); ... StringSource s(message, true, new SignerFilter(prng, signer, new StringSink(signature)));