Подтвердить что ты не робот

Android BigInteger ArithmeticException

Я пытаюсь реализовать RSA-алгоритм в приложении для Android. Я использую функцию java.math.BigInteger.modPow() для en-/decryption, которая отлично работает для моего компьютера (Windows и Xubuntu) и моей малины 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()"

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

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

4b9b3361

Ответ 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 не пуста, может быть, это то, что вы столкнулись.