2016-09-21 40 views
0

我在我的ndk项目中使用PolorSSL。但是,当我运行mpi_self_test()时,它会在Android 5.0及更高版本中导致崩溃。在使用JNI时,PolarSSl bignum.c将导致Android 5.0及更高版本崩溃

int mpi_self_test(int verbose) 
{ 
int ret, i; 
mpi A, E, N, X, Y, U, V; 

mpi_init(&A); mpi_init(&E); mpi_init(&N); mpi_init(&X); 
mpi_init(&Y); mpi_init(&U); mpi_init(&V); 

MPI_CHK(mpi_read_string(&A, 16, 
    "EFE021C2645FD1DC586E69184AF4A31E" \ 
    "D5F53E93B5F123FA41680867BA110131" \ 
    "944FE7952E2517337780CB0DB80E61AA" \ 
    "E7C8DDC6C5C6AADEB34EB38A2F40D5E6")); 

MPI_CHK(mpi_read_string(&E, 16, 
    "B2E7EFD37075B9F03FF989C7C5051C20" \ 
    "34D2A323810251127E7BF8625A4F49A5" \ 
    "F3E27F4DA8BD59C47D6DAABA4C8127BD" \ 
    "5B5C25763222FEFCCFC38B832366C29E")); 

MPI_CHK(mpi_read_string(&N, 16, 
    "0066A198186C18C10B2F5ED9B522752A" \ 
    "9830B69916E535C8F047518A889A43A5" \ 
    "94B6BED27A168D31D4A52F88925AA8F5")); 

MPI_CHK(mpi_mul_mpi(&X, &A, &N)); 

MPI_CHK(mpi_read_string(&U, 16, 
    "602AB7ECA597A3D6B56FF9829A5E8B85" \ 
    "9E857EA95A03512E2BAE7391688D264A" \ 
    "A5663B0341DB9CCFD2C4C5F421FEC814" \ 
    "8001B72E848A38CAE1C65F78E56ABDEF" \ 
    "E12D3C039B8A02D6BE593F0BBBDA56F1" \ 
    "ECF677152EF804370C1A305CAF3B5BF1" \ 
    "30879B56C61DE584A0F53A2447A51E")); 

if(verbose != 0) 
    polarssl_printf(" MPI test #1 (mul_mpi): "); 

if(mpi_cmp_mpi(&X, &U) != 0) 
{ 
    if(verbose != 0) 
     polarssl_printf("failed\n"); 

    ret = 1; 
    goto cleanup; 
} 

if(verbose != 0) 
    polarssl_printf("passed\n"); 

MPI_CHK(mpi_div_mpi(&X, &Y, &A, &N)); 

MPI_CHK(mpi_read_string(&U, 16, 
    "256567336059E52CAE22925474705F39A94")); 

MPI_CHK(mpi_read_string(&V, 16, 
    "6613F26162223DF488E9CD48CC132C7A" \ 
    "0AC93C701B001B092E4E5B9F73BCD27B" \ 
    "9EE50D0657C77F374E903CDFA4C642")); 

if(verbose != 0) 
    polarssl_printf(" MPI test #2 (div_mpi): "); 

if(mpi_cmp_mpi(&X, &U) != 0 || 
    mpi_cmp_mpi(&Y, &V) != 0) 
{ 
    if(verbose != 0) 
     polarssl_printf("failed\n"); 

    ret = 1; 
    goto cleanup; 
} 

if(verbose != 0) 
    polarssl_printf("passed\n"); 

MPI_CHK(mpi_exp_mod(&X, &A, &E, &N, NULL)); 

MPI_CHK(mpi_read_string(&U, 16, 
    "36E139AEA55215609D2816998ED020BB" \ 
    "BD96C37890F65171D948E9BC7CBAA4D9" \ 
    "325D24D6A3C12710F10A09FA08AB87")); 

if(verbose != 0) 
    polarssl_printf(" MPI test #3 (exp_mod): "); 

if(mpi_cmp_mpi(&X, &U) != 0) 
{ 
    if(verbose != 0) 
     polarssl_printf("failed\n"); 

    ret = 1; 
    goto cleanup; 
} 

if(verbose != 0) 
    polarssl_printf("passed\n"); 

MPI_CHK(mpi_inv_mod(&X, &A, &N)); 

MPI_CHK(mpi_read_string(&U, 16, 
    "003A0AAEDD7E784FC07D8F9EC6E3BFD5" \ 
    "C3DBA76456363A10869622EAC2DD84EC" \ 
    "C5B8A74DAC4D09E03B5E0BE779F2DF61")); 

if(verbose != 0) 
    polarssl_printf(" MPI test #4 (inv_mod): "); 

if(mpi_cmp_mpi(&X, &U) != 0) 
{ 
    if(verbose != 0) 
     polarssl_printf("failed\n"); 

    ret = 1; 
    goto cleanup; 
} 

if(verbose != 0) 
    polarssl_printf("passed\n"); 

if(verbose != 0) 
    polarssl_printf(" MPI test #5 (simple gcd): "); 

for(i = 0; i < GCD_PAIR_COUNT; i++) 
{ 
    MPI_CHK(mpi_lset(&X, gcd_pairs[i][0])); 
    MPI_CHK(mpi_lset(&Y, gcd_pairs[i][1])); 

    MPI_CHK(mpi_gcd(&A, &X, &Y)); 

    if(mpi_cmp_int(&A, gcd_pairs[i][2]) != 0) 
    { 
     if(verbose != 0) 
      polarssl_printf("failed at %d\n", i); 

     ret = 1; 
     goto cleanup; 
    } 
} 

if(verbose != 0) 
    polarssl_printf("passed\n"); 

cleanup: 

if(ret != 0 && verbose != 0) 
    polarssl_printf("Unexpected error, return code = %08X\n", ret); 

mpi_free(&A); mpi_free(&E); mpi_free(&N); mpi_free(&X); 
mpi_free(&Y); mpi_free(&U); mpi_free(&V); 

if(verbose != 0) 
    polarssl_printf("\n"); 

return(ret); 
} 

而且我觉得这个问题是在mpi_function,像mpi_mul_hlp()

void mpi_mul_hlp(size_t i, t_uint *s, t_uint *d, t_uint b) 
{ 
t_uint c = 0, t = 0; 

#if defined(MULADDC_HUIT) 
for(; i >= 8; i -= 8) 
{ 
    MULADDC_INIT 
    MULADDC_HUIT 
    MULADDC_STOP 
} 

for(; i > 0; i--) 
{ 
    MULADDC_INIT 
    MULADDC_CORE 
    MULADDC_STOP 
} 
#else /* MULADDC_HUIT */ 
for(; i >= 16; i -= 16) 
{ 
    MULADDC_INIT 
    MULADDC_CORE MULADDC_CORE 
    MULADDC_CORE MULADDC_CORE 
    MULADDC_CORE MULADDC_CORE 
    MULADDC_CORE MULADDC_CORE 

    MULADDC_CORE MULADDC_CORE 
    MULADDC_CORE MULADDC_CORE 
    MULADDC_CORE MULADDC_CORE 
    MULADDC_CORE MULADDC_CORE 
    MULADDC_STOP 
} 

for(; i >= 8; i -= 8) 
{ 
    MULADDC_INIT 
    MULADDC_CORE MULADDC_CORE 
    MULADDC_CORE MULADDC_CORE 

    MULADDC_CORE MULADDC_CORE 
    MULADDC_CORE MULADDC_CORE 
    MULADDC_STOP 
} 

for(; i > 0; i--) 
{ 
    MULADDC_INIT 
    MULADDC_CORE 
    MULADDC_STOP 
} 
#endif /* MULADDC_HUIT */ 

t++; 

do { 
    *d += c; c = (*d < c); d++; 
} 
while(c != 0); 
} 

我发现这是在bn_mul.h difined汇编代码。

/* 
    *  Multiply source vector [s] with b, add result 
    *  to destination vector [d] and set carry c. 
    * 
    *  Currently supports: 
    * 
    *   . IA-32 (386+)   . AMD64/EM64T 
    *   . IA-32 (SSE2)   . Motorola 68000 
    *   . PowerPC, 32-bit  . MicroBlaze 
    *   . PowerPC, 64-bit  . TriCore 
    *   . SPARC v8    . ARM v3+ 
    *   . Alpha    . MIPS32 
    *   . C, longlong   . C, generic 
    */ 
    #ifndef POLARSSL_BN_MUL_H 
    #define POLARSSL_BN_MUL_H 

    #include "BigNum.h" 

    #if defined(POLARSSL_HAVE_ASM) 

    #if defined(__GNUC__) 
    #if defined(__i386__) 

    #define MULADDC_INIT    \ 
    asm("       \ 
     movl %%ebx, %0;   \ 
     movl %5, %%esi;   \ 
     movl %6, %%edi;   \ 
     movl %7, %%ecx;   \ 
     movl %8, %%ebx;   \ 
     " 

    #define MULADDC_CORE    \ 
     "       \ 
     lodsl;      \ 
     mull %%ebx;    \ 
     addl %%ecx, %%eax;  \ 
     adcl $0,  %%edx;  \ 
     addl (%%edi), %%eax;  \ 
     adcl $0,  %%edx;  \ 
     movl %%edx, %%ecx;  \ 
     stosl;      \ 
     " 

    #if defined(POLARSSL_HAVE_SSE2) 

    #define MULADDC_HUIT     \ 
     "        \ 
     movd  %%ecx,  %%mm1;  \ 
     movd  %%ebx,  %%mm0;  \ 
     movd  (%%edi), %%mm3;  \ 
     paddq %%mm3,  %%mm1;  \ 
     movd  (%%esi), %%mm2;  \ 
     pmuludq %%mm0,  %%mm2;  \ 
     movd  4(%%esi), %%mm4;  \ 
     pmuludq %%mm0,  %%mm4;  \ 
     movd  8(%%esi), %%mm6;  \ 
     pmuludq %%mm0,  %%mm6;  \ 
     movd  12(%%esi), %%mm7;  \ 
     pmuludq %%mm0,  %%mm7;  \ 
     paddq %%mm2,  %%mm1;  \ 
     movd  4(%%edi), %%mm3;  \ 
     paddq %%mm4,  %%mm3;  \ 
     movd  8(%%edi), %%mm5;  \ 
     paddq %%mm6,  %%mm5;  \ 
     movd  12(%%edi), %%mm4;  \ 
     paddq %%mm4,  %%mm7;  \ 
     movd  %%mm1,  (%%edi); \ 
     movd  16(%%esi), %%mm2;  \ 
     pmuludq %%mm0,  %%mm2;  \ 
     psrlq $32,  %%mm1;  \ 
     movd  20(%%esi), %%mm4;  \ 
     pmuludq %%mm0,  %%mm4;  \ 
     paddq %%mm3,  %%mm1;  \ 
     movd  24(%%esi), %%mm6;  \ 
     pmuludq %%mm0,  %%mm6;  \ 
     movd  %%mm1,  4(%%edi); \ 
     psrlq $32,  %%mm1;  \ 
     movd  28(%%esi), %%mm3;  \ 
     pmuludq %%mm0,  %%mm3;  \ 
     paddq %%mm5,  %%mm1;  \ 
     movd  16(%%edi), %%mm5;  \ 
     paddq %%mm5,  %%mm2;  \ 
     movd  %%mm1,  8(%%edi); \ 
     psrlq $32,  %%mm1;  \ 
     paddq %%mm7,  %%mm1;  \ 
     movd  20(%%edi), %%mm5;  \ 
     paddq %%mm5,  %%mm4;  \ 
     movd  %%mm1,  12(%%edi); \ 
     psrlq $32,  %%mm1;  \ 
     paddq %%mm2,  %%mm1;  \ 
     movd  24(%%edi), %%mm5;  \ 
     paddq %%mm5,  %%mm6;  \ 
     movd  %%mm1,  16(%%edi); \ 
     psrlq $32,  %%mm1;  \ 
     paddq %%mm4,  %%mm1;  \ 
     movd  28(%%edi), %%mm5;  \ 
     paddq %%mm5,  %%mm3;  \ 
     movd  %%mm1,  20(%%edi); \ 
     psrlq $32,  %%mm1;  \ 
     paddq %%mm6,  %%mm1;  \ 
     movd  %%mm1,  24(%%edi); \ 
     psrlq $32,  %%mm1;  \ 
     paddq %%mm3,  %%mm1;  \ 
     movd  %%mm1,  28(%%edi); \ 
     addl  $32,  %%edi;  \ 
     addl  $32,  %%esi;  \ 
     psrlq $32,  %%mm1;  \ 
     movd  %%mm1,  %%ecx;  \ 
     " 

    #define MULADDC_STOP   \ 
     "      \ 
     emms;     \ 
     movl %4, %%ebx;  \ 
     movl %%ecx, %1;  \ 
     movl %%edi, %2;  \ 
     movl %%esi, %3;  \ 
     "      \ 
     : "=m" (t), "=m" (c), "=m" (d), "=m" (s)  \ 
     : "m" (t), "m" (s), "m" (d), "m" (c), "m" (b) \ 
     : "eax", "ecx", "edx", "esi", "edi"    \ 
    ); 

    #else 

    #define MULADDC_STOP   \ 
     "      \ 
     movl %4, %%ebx;  \ 
     movl %%ecx, %1;  \ 
     movl %%edi, %2;  \ 
     movl %%esi, %3;  \ 
     "      \ 
     : "=m" (t), "=m" (c), "=m" (d), "=m" (s)  \ 
     : "m" (t), "m" (s), "m" (d), "m" (c), "m" (b) \ 
     : "eax", "ecx", "edx", "esi", "edi"    \ 
    ); 
    #endif /* SSE2 */ 
    #endif /* i386 */ 

    #if defined(__amd64__) || defined (__x86_64__) 

....但是,我不知道为什么它在Android版以及4,4

#ifndef POLARSSL_CONFIG_H 
#define POLARSSL_CONFIG_H 
#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) 
#define _CRT_SECURE_NO_DEPRECATE 1 
#endif 
#define POLARSSL_HAVE_LONGLONG 
#define POLARSSL_HAVE_ASM 
#define POLARSSL_HAVE_READDIR_R 
#define POLARSSL_HAVE_TIME 
#define POLARSSL_CIPHER_MODE_CBC 
#define POLARSSL_CIPHER_MODE_CFB 
#define POLARSSL_CIPHER_MODE_CTR 
#define POLARSSL_CIPHER_NULL_CIPHER 
#define POLARSSL_CIPHER_PADDING_PKCS7 
#define POLARSSL_CIPHER_PADDING_ONE_AND_ZEROS 
#define POLARSSL_CIPHER_PADDING_ZEROS_AND_LEN 
#define POLARSSL_CIPHER_PADDING_ZEROS 
#define POLARSSL_ENABLE_WEAK_CIPHERSUITES 
#define POLARSSL_ECP_NIST_OPTIM 
#define POLARSSL_ERROR_STRERROR_BC 
#define POLARSSL_ERROR_STRERROR_DUMMY 
#define POLARSSL_FS_IO 
#define POLARSSL_PKCS1_V15 
#define POLARSSL_SELF_TEST 
#define POLARSSL_SSL_ALERT_MESSAGES 
#define POLARSSL_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO 
#define POLARSSL_SSL_MAX_FRAGMENT_LENGTH 
#define POLARSSL_SSL_SESSION_TICKETS 
#define POLARSSL_SSL_SERVER_NAME_INDICATION 
#define POLARSSL_SSL_TRUNCATED_HMAC 
#define POLARSSL_BASE64_C 
// #define POLARSSL_AES_C 
// #define POLARSSL_ASN1_PARSE_C 
#define POLARSSL_BIGNUM_C 
// #define POLARSSL_CTR_DRBG_C 
#define POLARSSL_MD_C 
#define POLARSSL_OID_C 
// #define POLARSSL_PK_C 
#define POLARSSL_RSA_C 

#if defined(POLARSSL_CONFIG_OPTIONS) 
#define POLARSSL_MPI_WINDOW_SIZE   6 /**< Maximum windows size used. */ 
#define POLARSSL_MPI_MAX_SIZE    512 /**< Maximum number of bytes for usable MPIs. */ 
#define CTR_DRBG_ENTROPY_LEN    48 /**< Amount of entropy used per seed by default (48 with SHA-512, 32 with SHA-256) */ 
#define CTR_DRBG_RESEED_INTERVAL  10000 /**< Interval before reseed is performed by default */ 
#define CTR_DRBG_MAX_INPUT    256 /**< Maximum number of additional input bytes */ 
#define CTR_DRBG_MAX_REQUEST    1024 /**< Maximum number of requested bytes per call */ 
#define CTR_DRBG_MAX_SEED_INPUT   384 /**< Maximum size of (re)seed buffer */ 
#define ENTROPY_MAX_SOURCES    20 /**< Maximum number of sources supported */ 
#define ENTROPY_MAX_GATHER    128 /**< Maximum amount requested from entropy sources */ 
#define MEMORY_ALIGN_MULTIPLE    4 /**< Align on multiples of this value */ 
#define POLARSSL_MEMORY_STDMALLOC  malloc /**< Default allocator to use, can be undefined */ 
#define POLARSSL_MEMORY_STDFREE   free /**< Default free to use, can be undefined */ 
#define SSL_CACHE_DEFAULT_TIMEOUT  86400 /**< 1 day */ 
#define SSL_CACHE_DEFAULT_MAX_ENTRIES  50 /**< Maximum entries in cache */ 
#define SSL_MAX_CONTENT_LEN    16384 /**< Size of the input/output buffer */ 
#define SSL_DEFAULT_TICKET_LIFETIME  86400 /**< Lifetime of session tickets (if enabled) */ 
#endif /* POLARSSL_CONFIG_OPTIONS */ 

/* 
* Sanity checks on defines and dependencies 
*/ 
#if defined(POLARSSL_CERTS_C) && !defined(POLARSSL_PEM_PARSE_C) 
#error "POLARSSL_CERTS_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_CTR_DRBG_C) && !defined(POLARSSL_AES_C) 
#error "POLARSSL_CTR_DRBG_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_DHM_C) && !defined(POLARSSL_BIGNUM_C) 
#error "POLARSSL_DHM_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_ECDH_C) && !defined(POLARSSL_ECP_C) 
#error "POLARSSL_ECDH_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_ECDSA_C) &&   \ 
    (!defined(POLARSSL_ECP_C) ||   \ 
     !defined(POLARSSL_ASN1_PARSE_C) || \ 
     !defined(POLARSSL_ASN1_WRITE_C)) 
#error "POLARSSL_ECDSA_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_ECP_C) && (!defined(POLARSSL_BIGNUM_C) || ( \ 
    !defined(POLARSSL_ECP_DP_SECP192R1_ENABLED) &&     \ 
    !defined(POLARSSL_ECP_DP_SECP224R1_ENABLED) &&     \ 
    !defined(POLARSSL_ECP_DP_SECP256R1_ENABLED) &&     \ 
    !defined(POLARSSL_ECP_DP_SECP384R1_ENABLED) &&     \ 
    !defined(POLARSSL_ECP_DP_SECP521R1_ENABLED) &&     \ 
    !defined(POLARSSL_ECP_DP_BP256R1_ENABLED) &&     \ 
    !defined(POLARSSL_ECP_DP_BP384R1_ENABLED) &&     \ 
    !defined(POLARSSL_ECP_DP_BP512R1_ENABLED))) 
#error "POLARSSL_ECP_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_ENTROPY_C) && (!defined(POLARSSL_SHA512_C) &&  \ 
            !defined(POLARSSL_SHA256_C)) 
#error "POLARSSL_ENTROPY_C defined, but not all prerequisites" 
#endif 
#if defined(POLARSSL_ENTROPY_C) && defined(POLARSSL_SHA512_C) &&   \ 
    defined(POLARSSL_CONFIG_OPTIONS) && (CTR_DRBG_ENTROPY_LEN > 64) 
#error "CTR_DRBG_ENTROPY_LEN value too high" 
#endif 
#if defined(POLARSSL_ENTROPY_C) && !defined(POLARSSL_SHA512_C) &&  \ 
    defined(POLARSSL_CONFIG_OPTIONS) && (CTR_DRBG_ENTROPY_LEN > 32) 
#error "CTR_DRBG_ENTROPY_LEN value too high" 
#endif 

#if defined(POLARSSL_GCM_C) && (          \ 
     !defined(POLARSSL_AES_C) && !defined(POLARSSL_CAMELLIA_C)) 
#error "POLARSSL_GCM_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_HAVEGE_C) && !defined(POLARSSL_TIMING_C) 
#error "POLARSSL_HAVEGE_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED) && !defined(POLARSSL_DHM_C) 
#error "POLARSSL_KEY_EXCHANGE_DHE_PSK_ENABLED defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED) &&      \ 
    !defined(POLARSSL_ECDH_C) 
#error "POLARSSL_KEY_EXCHANGE_ECDHE_PSK_ENABLED defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED) &&     \ 
    (!defined(POLARSSL_DHM_C) || !defined(POLARSSL_RSA_C) ||   \ 
     !defined(POLARSSL_X509_CRT_PARSE_C) || !defined(POLARSSL_PKCS1_V15)) 
#error "POLARSSL_KEY_EXCHANGE_DHE_RSA_ENABLED defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED) &&     \ 
    (!defined(POLARSSL_ECDH_C) || !defined(POLARSSL_RSA_C) ||   \ 
     !defined(POLARSSL_X509_CRT_PARSE_C) || !defined(POLARSSL_PKCS1_V15)) 
#error "POLARSSL_KEY_EXCHANGE_ECDHE_RSA_ENABLED defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) &&     \ 
    (!defined(POLARSSL_ECDH_C) || !defined(POLARSSL_ECDSA_C) ||   \ 
     !defined(POLARSSL_X509_CRT_PARSE_C)) 
#error "POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED) &&     \ 
    (!defined(POLARSSL_RSA_C) || !defined(POLARSSL_X509_CRT_PARSE_C) ||\ 
     !defined(POLARSSL_PKCS1_V15)) 
#error "POLARSSL_KEY_EXCHANGE_RSA_PSK_ENABLED defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_KEY_EXCHANGE_RSA_ENABLED) &&      \ 
    (!defined(POLARSSL_RSA_C) || !defined(POLARSSL_X509_CRT_PARSE_C) ||\ 
     !defined(POLARSSL_PKCS1_V15)) 
#error "POLARSSL_KEY_EXCHANGE_RSA_ENABLED defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_MEMORY_BUFFER_ALLOC_C) && !defined(POLARSSL_MEMORY_C) 
#error "POLARSSL_MEMORY_BUFFER_ALLOC_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_PBKDF2_C) && !defined(POLARSSL_MD_C) 
#error "POLARSSL_PBKDF2_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_PEM_PARSE_C) && !defined(POLARSSL_BASE64_C) 
#error "POLARSSL_PEM_PARSE_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_PEM_WRITE_C) && !defined(POLARSSL_BASE64_C) 
#error "POLARSSL_PEM_WRITE_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_PK_PARSE_C) && !defined(POLARSSL_PK_C) 
#error "POLARSSL_PK_PARSE_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_PK_WRITE_C) && !defined(POLARSSL_PK_C) 
#error "POLARSSL_PK_WRITE_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_PKCS11_C) && !defined(POLARSSL_PK_C) 
#error "POLARSSL_PKCS11_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_RSA_C) && (!defined(POLARSSL_BIGNUM_C) ||   \ 
    !defined(POLARSSL_OID_C)) 
#error "POLARSSL_RSA_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_SSL_PROTO_SSL3) && (!defined(POLARSSL_MD5_C) ||  \ 
    !defined(POLARSSL_SHA1_C)) 
#error "POLARSSL_SSL_PROTO_SSL3 defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_SSL_PROTO_TLS1) && (!defined(POLARSSL_MD5_C) ||  \ 
    !defined(POLARSSL_SHA1_C)) 
#error "POLARSSL_SSL_PROTO_TLS1 defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_SSL_PROTO_TLS1_1) && (!defined(POLARSSL_MD5_C) ||  \ 
    !defined(POLARSSL_SHA1_C)) 
#error "POLARSSL_SSL_PROTO_TLS1_1 defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_SSL_PROTO_TLS1_2) && (!defined(POLARSSL_SHA1_C) &&  \ 
    !defined(POLARSSL_SHA256_C) && !defined(POLARSSL_SHA512_C)) 
#error "POLARSSL_SSL_PROTO_TLS1_2 defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_SSL_CLI_C) && !defined(POLARSSL_SSL_TLS_C) 
#error "POLARSSL_SSL_CLI_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_SSL_TLS_C) && (!defined(POLARSSL_CIPHER_C) ||  \ 
    !defined(POLARSSL_MD_C)) 
#error "POLARSSL_SSL_TLS_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_SSL_SRV_C) && !defined(POLARSSL_SSL_TLS_C) 
#error "POLARSSL_SSL_SRV_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_SSL_TLS_C) && (!defined(POLARSSL_SSL_PROTO_SSL3) && \ 
    !defined(POLARSSL_SSL_PROTO_TLS1) && !defined(POLARSSL_SSL_PROTO_TLS1_1) && \ 
    !defined(POLARSSL_SSL_PROTO_TLS1_2)) 
#error "POLARSSL_SSL_TLS_C defined, but no protocols are active" 
#endif 

#if defined(POLARSSL_SSL_TLS_C) && (defined(POLARSSL_SSL_PROTO_SSL3) && \ 
    defined(POLARSSL_SSL_PROTO_TLS1_1) && !defined(POLARSSL_SSL_PROTO_TLS1)) 
#error "Illegal protocol selection" 
#endif 

#if defined(POLARSSL_SSL_TLS_C) && (defined(POLARSSL_SSL_PROTO_TLS1) && \ 
    defined(POLARSSL_SSL_PROTO_TLS1_2) && !defined(POLARSSL_SSL_PROTO_TLS1_1)) 
#error "Illegal protocol selection" 
#endif 

#if defined(POLARSSL_SSL_TLS_C) && (defined(POLARSSL_SSL_PROTO_SSL3) && \ 
    defined(POLARSSL_SSL_PROTO_TLS1_2) && (!defined(POLARSSL_SSL_PROTO_TLS1) || \ 
    !defined(POLARSSL_SSL_PROTO_TLS1_1))) 
#error "Illegal protocol selection" 
#endif 

#if defined(POLARSSL_SSL_SESSION_TICKETS) && defined(POLARSSL_SSL_TLS_C) && \ 
    (!defined(POLARSSL_AES_C) || !defined(POLARSSL_SHA256_C) ||   \ 
     !defined(POLARSSL_CIPHER_MODE_CBC)) 
#error "POLARSSL_SSL_SESSION_TICKETS_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_THREADING_DUMMY) 
#if !defined(POLARSSL_THREADING_C) || defined(POLARSSL_THREADING_IMPL) 
#error "POLARSSL_THREADING_DUMMY defined, but not all prerequisites" 
#endif 
#define POLARSSL_THREADING_IMPL 
#endif 

#if defined(POLARSSL_THREADING_PTHREAD) 
#if !defined(POLARSSL_THREADING_C) || defined(POLARSSL_THREADING_IMPL) 
#error "POLARSSL_THREADING_PTHREAD defined, but not all prerequisites" 
#endif 
#define POLARSSL_THREADING_IMPL 
#endif 

#if defined(POLARSSL_THREADING_ALT) 
#if !defined(POLARSSL_THREADING_C) || defined(POLARSSL_THREADING_IMPL) 
#error "POLARSSL_THREADING_ALT defined, but not all prerequisites" 
#endif 
#define POLARSSL_THREADING_IMPL 
#endif 

#if defined(POLARSSL_THREADING_C) && !defined(POLARSSL_THREADING_IMPL) 
#error "POLARSSL_THREADING_C defined, single threading implementation required" 
#endif 
#undef POLARSSL_THREADING_IMPL 

#if defined(POLARSSL_X509_USE_C) && (!defined(POLARSSL_BIGNUM_C) || \ 
    !defined(POLARSSL_OID_C) || !defined(POLARSSL_ASN1_PARSE_C) ||  \ 
    !defined(POLARSSL_PK_PARSE_C)) 
#error "POLARSSL_X509_USE_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_X509_CREATE_C) && (!defined(POLARSSL_BIGNUM_C) || \ 
    !defined(POLARSSL_OID_C) || !defined(POLARSSL_ASN1_WRITE_C) ||  \ 
    !defined(POLARSSL_PK_WRITE_C)) 
#error "POLARSSL_X509_CREATE_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_X509_CRT_PARSE_C) && (!defined(POLARSSL_X509_USE_C)) 
#error "POLARSSL_X509_CRT_PARSE_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_X509_CRL_PARSE_C) && (!defined(POLARSSL_X509_USE_C)) 
#error "POLARSSL_X509_CRL_PARSE_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_X509_CSR_PARSE_C) && (!defined(POLARSSL_X509_USE_C)) 
#error "POLARSSL_X509_CSR_PARSE_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_X509_CRT_WRITE_C) && (!defined(POLARSSL_X509_CREATE_C)) 
#error "POLARSSL_X509_CRT_WRITE_C defined, but not all prerequisites" 
#endif 

#if defined(POLARSSL_X509_CSR_WRITE_C) && (!defined(POLARSSL_X509_CREATE_C)) 
#error "POLARSSL_X509_CSR_WRITE_C defined, but not all prerequisites" 
#endif 

#endif /* config.h */ 
+0

什么是崩溃? –

+0

ndk碰撞信号11(SIGSEGV),代码1(SEGV_MAPERR),故障地址0x7b65 – Zijian

+0

在此处放置完整的碰撞记录。 (寻找'DEBUG' logcat标签)。 – Sergio

回答

1

简单的解决方案:从配置 删除/禁用POLARSSL_HAVE_ASM,因为它使mpi_mul_hlp()的行为只有C代码没有汇编优化。

+0

是的,我也可以用arm64-v8添加支持,它也解决了这个问题。 – Zijian