Это простой Hello World апплет для Javacards:Как использовать Native Methods в апплетах Java-карты?
package helloWorldPackage;
import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISO7816;
import javacard.framework.ISOException;
import javacard.framework.Util;
public class HelloWorldApplet extends Applet {
private static final byte[] helloWorld = {(byte)'H',(byte)'e',(byte)'l',(byte)'l',(byte)'o',(byte)' ',(byte)'W',(byte)'o',(byte)'r',(byte)'l',(byte)'d',};
private static final byte HW_CLA = (byte)0x80;
private static final byte HW_INS = (byte)0x00;
public static void install(byte[] bArray, short bOffset, byte bLength) {
new HelloWorldApplet().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
}
public void process(APDU apdu) {
if (selectingApplet()) {
return;
}
byte[] buffer = apdu.getBuffer();
byte CLA = (byte) (buffer[ISO7816.OFFSET_CLA] & 0xFF);
byte INS = (byte) (buffer[ISO7816.OFFSET_INS] & 0xFF);
if (CLA != HW_CLA)
{
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
}
switch (INS) {
case HW_INS:
getHelloWorld(apdu);
break;
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
}
private void getHelloWorld(APDU apdu)
{
byte[] buffer = apdu.getBuffer();
short length = (short) helloWorld.length;
Util.arrayCopyNonAtomic(helloWorld, (short)0, buffer, (short)0, (short) length);
apdu.setOutgoingAndSend((short)0, length);
}
}
вопрос: «Что есть смысл собственных методов в Java карт?»
В целях безопасности смарт-карт написано, что «использование Native Methods в приложениях предотвращено». вопрос: «Как я могу проверить его на конкретную карту?» В другом слове я хочу, чтобы вы изменили выше код и добавили к нему некоторые собственные методы, и позвольте мне проверить, можно ли его преобразовать в .cap и загрузить его на мою карточку или нет.
Update:
Как дорогой TonyK сказал в первом комментарии, по-видимому моя среда разработки не будет собирать такую вещь, так что есть два вопроса:
- Какие нативные методы? Любой пример?
- Как я могу скомпилировать их и конвертировать те программы, которые имеют такие методы внутри, в .cap файлов, чтобы попытаться загрузить их на карту?
Я думаю, что они просто означают местные методы. Это будет сложно проверить, потому что предположительно ваша среда разработки даже не будет компилировать такую вещь, а это значит, что вы не можете ее протестировать на своей карте. – TonyK
@TonyK И в чем смысл родных методов? не могли бы вы, пожалуйста, очистить его примером? и «Это будет трудно проверить», но должен быть способ, нет? что это? Спасибо – TheGoodUser
Родные методы предоставляются вашим продавцом смарт-карт с его реализацией JavaCard. Пример: на некоторых картах NXP вы можете использовать класс com.nxp.id.jcopx.UtilX, который не является стандартным классом JavaCard. UtilX использует некоторые аппаратные сопроцессоры, специфичные для карт NXP, с которыми вы не сможете получить доступ со своими собственными классами. Чтобы скомпилировать апплет с помощью UtilX, вам нужно добавить специальный файл jar в ваш путь к классам. – vojta