Я пытаюсь использовать Crypto ++ на iOS. Я скачал готовую версию библиотеки с GareHub Марека Котевича.
Я изо всех сил пытаюсь бежать этот пример кода из Crypto ++ вики.
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)
Это фрагмент кода из memory.h файла C ++, куда он указывает 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)
Код выглядит нормально для меня.
Я пытаюсь использовать Crypto ++ на iOS. Я скачал предварительно собранную версию библиотеки из GitHub Марека Котевича.
Я просто беру удар в темноте. Предполагается, что код, который вы показали выше, действительно скажем, все, что вы делаете в тесте ViewController
,
Предварительно скомпилированная библиотека, похоже, использует стандартную библиотеку GNU C ++. Я бы переключился на стандартную библиотеку C ++ от LLVM, создав Crypto ++ с -stdlib=c++
(а не GNU -stdlib=stdc++
). Apple перешла на него много лет назад, и Xcode использует его по умолчанию.
Вы можете найти GitHub с толстой библиотекой, используя LLVM Standard C ++ по адресу noloader / cryptopp-5.6.2-ИСН.
Или вы можете создать библиотеку сала самостоятельно. Для этого смотрите iOS (командная строка) на Crypto ++ вики. Готовая библиотека в cryptopp-5.6.2-ИСН использует эти инструкции.
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)));