I posted the same question on StackOverflow but it might be Cryptopp
specific issue:Enter code here.
http://stackoverflow.com/questions/28900187/android5-0-with-artandroid-runtime-segfaults-on-cryptos-rsapublickey-load
We have implemented a small wrapper for Cryptopp to exchange keys between
iOS and Android(JNI). Shared code works on iOS and pre-ART android devices.
Supposedly ART and its garbage collector is a lot stricter now.
It might be important to point out that set private key function succeeds
on both Dalvik and ART.
Code:
--> setting public key :
jboolean *isCopy;
//get bytes from jbytearray
jbyte* ba = (jbyte *)env->GetByteArrayElements( byteArray, isCopy);
//load bytearray to crypto bytequeue
ByteQueue queue2;
queue2.Put2((byte*)ba, 1000, 0, true);
//build public key
AutoSeededRandomPool rnd;
RSA::PublicKey publicKey;
publicKey.Load(*queue2); //<-------- CRASH
--> setting private key
jboolean *isCopy;
jbyte* ba = (jbyte *)env->GetByteArrayElements( byteArray, isCopy);
//load bytearray to bytequeue
ByteQueue queue2;
queue2.Put2((byte*)ba, 3072, 0, true);
//fill up the key
RSA::PrivateKey privateKey;
privateKey.Load(queue2);
Stack trace:
backtrace:
#00 pc 00027e6c <project_name>/lib/arm/libstlport_shared.so
#01 pc 00027e79 <project_name>/lib/arm/libstlport_shared.so
#02 pc 00027efb <project_name>/lib/arm/libstlport_shared.so
(std::terminate()+6)
#03 pc 000273d3 <project_name>/lib/arm/libstlport_shared.so
#04 pc 000268c9 <project_name>/lib/arm/libstlport_shared.so
#05 pc 0002698b <project_name>/lib/arm/libstlport_shared.so
(__cxa_throw+34)
#06 pc 001b3ce4 <project_name>/lib/arm/libcryptopp.so
(CryptoPP::BERDecodeError()+128)
#07 pc 001b1598 <project_name>/lib/arm/libcryptopp.so
(CryptoPP::BERGeneralDecoder::Init(unsigned char)+56)
#08 pc 001b1638 <project_name>/lib/arm/libcryptopp.so
(CryptoPP::BERGeneralDecoder::BERGeneralDecoder(CryptoPP::BufferedTransformation&,
unsigned char)+104)
#09 pc 0027697c <project_name>/lib/arm/libcryptopp.so
(CryptoPP::Integer::BERDecode(CryptoPP::BufferedTransformation&)+20)
#10 pc 002aec7c <project_name>/lib/arm/libcryptopp.so
(CryptoPP::RSAFunction::BERDecodePublicKey(CryptoPP::BufferedTransformation&,
bool, unsigned int)+64)
#11 pc 001b20e0 <project_name>/lib/arm/libcryptopp.so
(CryptoPP::X509PublicKey::BERDecode(CryptoPP::BufferedTransformation&)+264)
#12 pc 00014a0b <project_name>/lib/arm/libsecurity.so
(CryptoPP::ASN1CryptoMaterial<CryptoPP::PublicKey>::Load(CryptoPP::BufferedTransformation&)+6)
Might be worth mentioning that new (mostly) Google devices (Nexus 4,5,7)
use ART by default now.
Please advice!
--
--
You received this message because you are subscribed to the "Crypto++ Users"
Google Group.
To unsubscribe, send an email to [email protected].
More information about Crypto++ and this group is available at
http://www.cryptopp.com.
---
You received this message because you are subscribed to the Google Groups
"Crypto++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.