Сбой приложения при подписании сообщения с помощью Crypto ++ ECDSA под Xcode? - PullRequest
1 голос
/ 11 октября 2019

Я выполняю ECDSA-подпись на Mac OS с Crypto ++. Командная строка в порядке, но в Xcode EXC_BAD_ACCESS возникает ошибка при подписании сообщения.

Тесты в cryptest.exe из командной строки проходят. cryptest.exe - это программа проверки библиотеки.

Я пытался собрать библиотеку, используя clang ++ и libc ++, и собрать ее с помощью XCode, у всех есть эта проблема.

clang++ -DNDEBUG -g2 -O2 -stdlib=libc++ -DCRYPTOPP_DISABLE_MIXED_ASM -fPIC -pthread -pipe -c 

Воткод.

AutoSeededRandomPool prng;

ECDSA<ECP, SHA256>::PrivateKey k1;   
k1.Initialize( prng, ASN1::secp256r1() );

ECDSA<ECP, SHA256>::PublicKey pKey;
k1.MakePublicKey( pKey );

const ECP::Point& q = pKey.GetPublicElement();    
const Integer& qx = q.x;
const Integer& qy = q.y;

std::cout << "x: " << std::hex << qx << std::endl;    
std::cout << "y: " << std::hex << qy << std::endl;

const Integer& x = k1.GetPrivateExponent();
std::cout << "K1: " << std::hex << x << std::endl;

ByteQueue queue;
k1.Save(queue);

ECDSA<ECP, SHA256>::Signer signer(k1);

std::string message = "Do or do not. There is no try.";
size_t siglen = signer.MaxSignatureLength();
std::string signature(siglen, 0x00);

siglen = signer.SignMessage( prng, (const byte*)&message[0], message.size(), (byte*)&signature[0] );
signature.resize(siglen);

Я прилагаю трассировку стека ниже:

* thread #1: tid = 0x15fc20, 0x00007fff910a9d26 libsystem_platform.dylib`_platform_bzero$VARIANT$Merom + 22, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
  frame #0: 0x00007fff910a9d26 libsystem_platform.dylib`_platform_bzero$VARIANT$Merom + 22  
* frame #1: 0x00000001000ccc23 testCrypto`CryptoPP::DL_SignatureMessageEncodingMethod_DSA::ComputeMessageRepresentative(this=<unavailable>, rng=<unavailable>, recoverableMessage=<unavailable>,   
  recoverableMessageLength=<unavailable>, hash=0x0000000104e7df30, hashIdentifier=<unavailable>, messageEmpty=false, representative=0x0000000000000000, representativeBitLength=<unavailable>) const + 83 at gfpcrypt.cpp:96  
  frame #2: 0x0000000100019ae8 testCrypto`CryptoPP::DL_VerifierBase<CryptoPP::EC2NPoint>::VerifyAndRestart(this=0x00007fff5fbfdab8, messageAccumulator=0x0000000104e7de40) const + 568 at pubkey.h:1693 
  frame #3: 0x0000000100034c1e testCrypto`CryptoPP::PK_Verifier::VerifyMessage(this=0x00007fff5fbfdab8, message=<unavailable>, messageLen=<unavailable>, signature=<unavailable>, signatureLen=<unavailable>) const + 94 at cryptlib.cpp:942
  frame #4: 0x000000010000464a testCrypto`ValidateECDSA() + 2762 at main.cpp:257
  frame #5: 0x0000000100004a35 testCrypto`main(argc=1, argv=0x00007fff5fbff9e0) + 53 at main.cpp:272
  frame #6: 0x00007fff8fec95c9 libdyld.dylib`start + 1

1 Ответ

0 голосов
/ 21 октября 2019

Я использую Xcode, чтобы создать проект для создания библиотеки, затем могу вызвать библиотеку без ошибок.

...