Android BigInteger ArithmeticException

Я пытаюсь реализовать алгоритм RSA в приложении для Android. Я использую java.math.BigInteger.modPow() функция для расшифровки / расшифровки, которая отлично работает для моего компьютера (Windows и Xubuntu) и моего Raspberry Pi (также Debian). Когда тот же код выполняется на моем телефоне (Android 4.4.4), при втором вызове возникает следующее исключение modPow():

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()"

Я проверил экспоненту и модуль: оба положительные, поэтому документация не очень помогает. Уменьшение размера ключа (экспонента и модуль) также ничего не изменило. К сожалению, я не смог найти источник для нативной функции и не знаю, что может происходить.

У вас есть идея, почему это исключение может быть сгенерировано или что должен означать код ошибки?

1 ответ

Поскольку он говорит, что вы не инициализированы, создание BigInteger должно было как-то провалиться.

По состоянию на libcrypto:

Библиотека BIGNUM обычно находится в libcrypto, который поставляется с OpenSSL. Его API определен в openssl/bn.h. Эта библиотека экспортирует тип BIGNUM. BIGNUM объекты всегда должны быть инициализированы перед использованием, даже если они объявлены статически.

Так что проверьте, можете ли вы инициализировать его из своего кода или попробуйте более низкую версию API, поскольку я не настолько глубоко в этом разбираюсь.

Также проверьте, соответствуют ли связанные библиотеки вашей архитектуре платформы 32/64 бит.

Еще одно предположение: в Android 4.4.4 есть возможная [ошибка] (code.google.com/p/android/issues/detail?id=77262) при создании BigIntegers, если очередь ошибок SSL не пуста, возможно, это то, с чем вы столкнулись,

Другие вопросы по тегам