我正在尝试在iOS上使用Crypto ++。我从Marek Kotewicz's GitHub下载了预建版本的库。
我很难从Crypto ++ wiki中运行this sample code。
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(code = 1,address = 0x0)错误 指向这行代码库
-> 0x1065dfa8d <+85>: movq -0x58(%rbp), %rdi
答案 0 :(得分:0)
它崩溃了以下。它出现在Xcode输出窗口中:
BAD_ACCESS(code=EXC_I386_GPFLT)
代码看起来不错。
我正在尝试在iOS上使用Crypto ++。我从Marek Kotewicz的GitHub下载了一个预建版本的库。
我只是在黑暗中刺伤。它假定您上面显示的代码真的您正在做的所有事情,例如,测试ViewController
。
预编译库似乎使用GNU的标准C ++库。我将通过使用-stdlib=c++
构建Crypto ++(而不是GNU&#39; s -stdlib=stdc++
)来切换到LLVM的标准C ++库。 Apple在几年前就改用了它,Xcode默认使用它。
您可以在noloader/cryptopp-5.6.2-ios使用LLVM标准C ++在胖库中找到GitHub。
或者,您可以自己构建胖库。为此,请参阅Crypto ++ wiki上的iOS (Command Line)。 cryptopp-5.6.2-ios上的预建库使用这些说明。
AutoSeededRandomPool prng, rrng;
你只需要其中一个。
StringSource s(message, true, new SignerFilter(rrng, ECDSA<ECP, CryptoPP::SHA256>::Signer(privateKey), new StringSink(signature)));
多年来,我开始怀疑为管道创建的临时签名者。我已经更改了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)));