0

我正在尝试在 iOS 上使用 Crypto++。我从Marek Kotewicz 的 GitHub下载了该库的预构建版本。

我正在努力从 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(code=1 , address=0x0) 错误

 ->  0x1065dfa8d <+85>:  movq   -0x58(%rbp), %rdi

这是调试器输出

4

1 回答 1

0

它与以下内容崩溃。它显示在 Xcode 输出窗口中:

BAD_ACCESS(code=EXC_I386_GPFLT)  

代码对我来说看起来不错。


我正在尝试在 iOS 上使用 Crypto++。我从 Marek Kotewicz 的 GitHub 下载了该库的预构建版本。

我只是在黑暗中刺伤。它假定您上面显示的代码实际上就是您在测试中所做的一切ViewController

预编译库似乎使用 GNU 的标准 C++ 库。-stdlib=c++我会通过使用(而不是 GNU 的-stdlib=stdc++)构建 Crypto++ 来切换到 LLVM 的标准 C++ 库。Apple 几年前切换到它,Xcode 默认使用它。

你可以在noloader/cryptopp-5.6.2-ios找到一个使用 LLVM 标准 C++ 的胖库的 GitHub 。

或者,您可以自己构建 fat 库。为此,请参阅Crypto++ wiki 上的iOS(命令行) 。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)));
于 2015-06-21T01:13:22.287 回答