【问题标题】:Application crashes when signing message with Crypto++ ECDSA under Xcode?在 Xcode 下使用 Crypto++ ECDSA 签署消息时应用程序崩溃?
【发布时间】:2019-10-11 10:08:59
【问题描述】:

我正在使用 Crypto++ 在 Mac OS 上执行 ECDSA 签名。命令行是可以的,但是在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

【问题讨论】:

  • 你好,杰夫?谢谢!我现在可以使用 Xcode 构建库并使用它而不会出错。
  • @jww 你好,我可以下载 xip 文件,如果你需要,请告诉我放在哪里。
  • 您好,我正在下载它,它超过 5 GB,我可能需要几个小时才能下载它。下载后我会发邮件给你。
  • “我现在可以用 Xcode 构建库并正确使用它” - 你应该提供一个答案。它可能会帮助其他人。可以回答您自己的问题。

标签: xcode macos crypto++ ecdsa


【解决方案1】:

我使用Xcode构建项目创建一个库,然后可以正确调用该库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多