2011-08-17 67 views
2

我想通過NDK在C上的Android上創建最基本的x509公鑰證書文件。我構建了libcrypto和libssl(儘管我目前只使用libcrypto的東西)與https://github.com/guardianproject/openssl-android的東西。Openssl X509_set_pubkey()Android NDK中的崩潰

由於我有一些問題得到這個工作,我最終得到它在Linux中的工作,我有一個更愉快的調試設置。我有工作在我的Linux機器的代碼如下:

void x509(RSA *rsa_keys) {   

    EVP_PKEY *evp = EVP_PKEY_new(); 
    X509 *x509 = X509_new(); 

    EVP_PKEY_assign_RSA(evp, rsa_keys); 

    X509_gmtime_adj(X509_get_notBefore(x509),0); 
    X509_gmtime_adj(X509_get_notAfter(x509), (long) 60*60*24*365); 

    X509_set_pubkey(x509, evp); 

    unsigned char *out = NULL; 

    int length = i2d_X509(x509, &out); 

    FILE *x509_file = fopen("cert.cer", "w"); 
    fwrite(out, 1, length, x509_file); 
} 

此代碼運行正常,並寫出當我運行相同的被解析罰款由openssl的

openssl x509 -inform DER -text -in cert.cer 

文件代碼在Android上的NDK我得到了遠達X509_set_pubkey(x509,evp)調用(由打印輸出調試確定),而沒有任何由ERR_get_error()報告的openssl錯誤,然後得到信號11(SIGSEGV),代碼1(SEGV_MAPPER)與大堆棧跟蹤

唯一看起來很有用的東西堆棧跟蹤是崩潰的libcrypto.so

08-17 01:40:41.261: INFO/DEBUG(10354):   #00 pc 00041d1a /system/lib/libcrypto.so 
08-17 01:40:41.261: INFO/DEBUG(10354):   #01 pc 000357c6 /system/lib/libcrypto.so 
08-17 01:40:41.261: INFO/DEBUG(10354):   #02 pc 000337ba /system/lib/libcrypto.so 
08-17 01:40:41.261: INFO/DEBUG(10354):   #03 pc 000338c8 /system/lib/libcrypto.so 
08-17 01:40:41.268: INFO/DEBUG(10354):   #04 pc 000339e6 /system/lib/libcrypto.so 
08-17 01:40:41.268: INFO/DEBUG(10354):   #05 pc 00033f00 /system/lib/libcrypto.so 
08-17 01:40:41.268: INFO/DEBUG(10354):   #06 pc 00033b20 /system/lib/libcrypto.so 
08-17 01:40:41.268: INFO/DEBUG(10354):   #07 pc 00033f44 /system/lib/libcrypto.so 
08-17 01:40:41.268: INFO/DEBUG(10354):   #08 pc 00033f9c /system/lib/libcrypto.so 
08-17 01:40:41.268: INFO/DEBUG(10354):   #09 pc 000770e6 /system/lib/libcrypto.so 
08-17 01:40:41.268: INFO/DEBUG(10354):   #10 pc 00076fec /system/lib/libcrypto.so 
08-17 01:40:41.268: INFO/DEBUG(10354):   #11 pc 00036b68 /system/lib/libcrypto.so 
08-17 01:40:41.268: INFO/DEBUG(10354):   #12 pc 0007ed1a /system/lib/libcrypto.so 

我能想到的唯一的事情是,有與Openssl的一個問題,我建,但似乎有點不太可能,任何想法發生了深刻的?

感謝

回答

0

這可能是你需要使用RSA函數之前調用OpenSSL_add_all_algorithms()。