2015-01-28 3 views
-1

Это простой 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 сказал в первом комментарии, по-видимому моя среда разработки не будет собирать такую ​​вещь, так что есть два вопроса:

  1. Какие нативные методы? Любой пример?
  2. Как я могу скомпилировать их и конвертировать те программы, которые имеют такие методы внутри, в .cap файлов, чтобы попытаться загрузить их на карту?
+0

Я думаю, что они просто означают местные методы. Это будет сложно проверить, потому что предположительно ваша среда разработки даже не будет компилировать такую ​​вещь, а это значит, что вы не можете ее протестировать на своей карте. – TonyK

+0

@TonyK И в чем смысл родных методов? не могли бы вы, пожалуйста, очистить его примером? и «Это будет трудно проверить», но должен быть способ, нет? что это? Спасибо – TheGoodUser

+0

Родные методы предоставляются вашим продавцом смарт-карт с его реализацией JavaCard. Пример: на некоторых картах NXP вы можете использовать класс com.nxp.id.jcopx.UtilX, который не является стандартным классом JavaCard. UtilX использует некоторые аппаратные сопроцессоры, специфичные для карт NXP, с которыми вы не сможете получить доступ со своими собственными классами. Чтобы скомпилировать апплет с помощью UtilX, вам нужно добавить специальный файл jar в ваш путь к классам. – vojta

ответ

2

Нативный метод - это метод, написанный на другом языке программирования (т. Е. Не на Java), который может быть вызван программой Java. Для смарт-карт собственный метод обычно записывается в код C или машинный код и выполняется непосредственно на базовом процессоре смарт-карт (тогда как приложения Java Card выполняются внутри виртуальной машины Java Card).

Что касается языка Java Card и выполнения апплетов, загруженных на Java Card с помощью CAP файлы, которые вы на самом деле не придется беспокоиться о собственных методов:

  • Спецификация Java Card не поддерживает native ключевое слово, поэтому вы не можете объявлять собственные методы (см. Спецификация виртуальной машины, платформа платформы Java, версия 2.2.2 на стр. 2-4).
  • Формат файла CAP не поддерживает собственные методы, поэтому вы не можете загружать апплеты, объявляя собственные методы. (см. Спецификация среды выполнения, платформа платформы Java, версия 2.2.2 на стр. Глоссарий-6).
+0

Я думаю, что это правильно - вы не можете его протестировать просто потому, что не существует способа указать собственный метод в файле CAP. Таким образом, правило цели безопасности автоматически выполняется. – TonyK

+0

Единственный способ реализовать собственный код под Java Card - это концепция SecureBox от NXP. –

+0

Правильно. Производители ОС обычно предоставляют * запатентованные * механизмы для выполнения собственного кода в безопасной среде. Например. SecureBox для NXP/JCOP. –

Смежные вопросы