2014-10-21 10 views
11

Sto cercando di implementare l'algoritmo RSA in un'applicazione Android. Sto usando la funzione java.math.BigInteger.modPow() per l'en/decryption che funziona bene per il mio Computer (Windows e Xubuntu) e il mio Raspberry Pi (anche Debian). Quando lo stesso codice viene eseguito sul mio telefono (Android 4.4.4) la seguente eccezione viene generata al 2 ° chiamata a modPow():Android BigInteger ArithmeticException

java.jang.ArithmeticException: error:0306B06B:bignum routines:BN_div:not initialized 
    at java.math.NativeBN.BN_mod_exp(NativeMethod) 
    at java.math.BigInt.modExp(BigInt.java:327) 
    at java.math.BigInteger.modPow(BigInteger.java:997) 
    at "where I call java.math.BigInteger.modPow()" 

ho controllato l'esponente e modulo: entrambi sono positivi in ​​modo che la documentazione doesn' davvero un aiuto. Anche la riduzione della dimensione della chiave (esponente e modulo) non ha modificato nulla. Purtroppo non sono riuscito a trovare la fonte per la funzione nativa e sono fuori di idee cosa potrebbe succedere.

Avete idea del motivo per cui questa eccezione potrebbe essere generata o cosa si intende per codice di errore?

+0

Per curiosità, prova una versione precedente di Android (ad esempio 4.2.2) - ci sono stati molti cambiamenti in 4.4 e anche alcuni bug. –

+2

Sembra un errore dal codice nativo openssl sottostante, il che suggerisce che si tratta di un bug di Android. –

+0

stai usando SpongyCastle? – EpicPandaForce

risposta

0

Poiché non è stato inizializzato, la creazione del BigInteger deve essere stata in qualche modo fallita.

Dal libcrypto:

La biblioteca bignum generalmente vive in libcrypto, che viene fornito con OpenSSL. La sua API è definita in openssl/bn.h. Questa libreria esporta il tipo BIGNUM. Gli oggetti BIGNUM devono sempre essere inizializzati prima dell'uso, anche se sono dichiarati staticamente.

Quindi, controlla se è possibile inizializzarlo dal codice o provare una versione di API inferiore, poiché non sono così approfondito.

Controllare anche se le librerie in bundle corrispondono alla propria architettura di piattaforma 32/64 bit.

Un'altra ipotesi: Android 4.4.4 ha un possibile [bug] (code.google.com/p/android/issues/detail?id=77262) sulla creazione di BigIntegers se la coda degli errori SSL non è vuota, forse questo è in cosa ti sei imbattuto

Problemi correlati