Апплет JavaCard не работает с шифрованием RSA
Я занимаюсь разработкой апплета JavaCard. Апплет генерирует открытый и закрытый ключи RSA в конструкторе и с помощью команды APDU шифрует некоторый байтовый массив:
public RSATestApplet() {
keyPair = new KeyPair(KeyPair.ALG_RSA_CRT, KeyBuilder.LENGTH_RSA_2048);
keyPair.genKeyPair();
rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
cipher = Cipher.getInstance(Cipher.ALG_RSA_PKCS1, false);
register();
}
И основным методом является:
private void encryptData(APDU apdu) {
if (!rsaPublicKey.isInitialized()) {
ISOException.throwIt(ISO7816.SW_CONDITIONS_NOT_SATISFIED);
}
byte[] apduBuffer = apdu.getBuffer();
apdu.setIncomingAndReceive();
cipher.init(rsaPrivateKey, Cipher.MODE_ENCRYPT);
byte[] encryptedBuffer = new byte[apduBuffer.length];
Util.arrayFillNonAtomic(encryptedBuffer, (short) 0,
(short) encryptedBuffer.length, (byte) 0xAA);
cipher.doFinal(encryptedBuffer, (short) 0, (short) encryptedBuffer.length, apduBuffer, (short) 0);
// Just for testing send 120 bytes
apdu.setOutgoingAndSend((short) 0, (short) 120);
}
И когда я пытаюсь установить апплет APDU ответ 6E00 (что означает: нет точной диагностики).
Я думаю, что проблема может возникнуть при выполнении cipher.doFinal ().
Я пробовал с другими апплетами, и все работает отлично.
Я компилирую свой апплет с JavaCard 2.2.1 и Java 1.2
У вас есть идеи, что происходит?