При использовании библиотек bouncycastle я получаю странную ошибку:
ERROR/AndroidRuntime(1226): FATAL EXCEPTION: Thread-10
ERROR/AndroidRuntime(1226): java.lang.IllegalAccessError: tried to access class org.bouncycastle.crypto.engines.RSACoreEngine from class org.bouncycastle.crypto.engines.RSAEngine
ERROR/AndroidRuntime(1226): at org.bouncycastle.crypto.engines.RSAEngine.init(Unknown Source)
ERROR/AndroidRuntime(1226): at org.bouncycastle.crypto.encodings.PKCS1Encoding.init(PKCS1Encoding.java:90)
Я добавил файл jar bouncycastle ( bcprov145.jar ) в проект eclipse.
Код, сгенерировавший это исключение:
public int encrypt(byte[] source, int sourceLength, byte[] destination,
int destinationLength) throws CryptoError
{
int offset = 0;
byte[] encrypted;
org.bouncycastle.crypto.AsymmetricBlockCipher engine =
new org.bouncycastle.crypto.engines.RSAEngine();
engine = new org.bouncycastle.crypto.encodings.PKCS1Encoding(engine);
BigInteger mod = publicKey.getModulus();
BigInteger exp = publicKey.getPublicExponent();
org.bouncycastle.crypto.params.RSAKeyParameters keyParams =
new org.bouncycastle.crypto.params.RSAKeyParameters(false, mod, exp);
//When running the following line, the sh*t hits the fan....
engine.init(true, keyParams);
try
{
encrypted = engine.processBlock(source, offset, source.length);
}
catch (org.bouncycastle.crypto.InvalidCipherTextException e)
{
throw new CryptoError(e);
}
int length = Math.min(encrypted.length, destinationLength);
BufferTools.copyByteArray(encrypted, destination, length);
return length;
}
Самое смешное: он отлично работает на немодированном телефоне Android 2.2, но я получаю эту ошибку на своем телефоне, модифицированном CyanogenMod 7.0.2.1 (Android 2.3?).И мододированный, и немодированный телефон - HTC Desire.
Проект построен на основе библиотек Android 2.2.Это проблема?Если это так, я должен создавать разные build-проекты, чтобы различать эти версии?Это было бы очень неприятно ....
Я уже проверял подобную проблему здесь: IllegalAccessError с Android и BouncyCastle , но они решили отказаться от библиотек bouncycastle, которые в моем случаеэто не вариант.
У кого-нибудь есть подсказка?