Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java Card > Зачем этот раздел


Автор: v2v 16.1.2008, 23:33
наверное моя тема будет первой в этом разделе.
Итак мой вопрос к создателям : 
"Зачем этот раздел?"  smile

Добавлено через 3 минуты и 27 секунд
Добавлено

сам на него и отвечу
Цитата

Java Card API позволяет программам, написанным на языке Java, исполняться на интеллектуальных картах и других устройствах с ограниченными ресурсами.

Интеллектуальные карты (смарт-карты) представляют собой сегодня одни из самых маленьких вычислительных устройств. Например, вы можете встретить устройство с 24 Kb памяти. Естественно, в таких условиях возможна поддержка только некоторого подмножества языка Java.

Виртуальная Java Card машина состоит из двух частей, одна из которых работает непосредственно на самой карте, а другая – на хост-машине вне карты. Вне Java Card исполняются такие процессы, как загрузка классов, проверка байт-кода, оптимизация и т.п. Критерием такого разделения является наличие или отсутствие ограничений на выполнение процесса во время работы программы.

В дополнение к собственно языку Java технология Java Card поддерживает среду исполнения, что влючает в себя вопросы работы с памятью карты, передачи данных, безопасности и выполнения программ. Для Java Cards эта среда соответствует стандарту ISO 7816.

Основная задача этой среды есть строгое разделение собственно смарт-карты и Java приложения. Среда служит своеобразным прокси-сервером, скрывающим от приложения детали собственной реализации. Взаимодействие с программой осуществляется через стандартизованные интерфейсы высокого уровня.

Приложения, написанные для платформы Java Card называются апплетами. Название было выбрано из схожести модели выполнения со стандартными апплетами, исполняемыми в виртуальной машине Java (JVM) веб-браузера.

Платформа Java Card включает в себя три части:

    * Виртуальную машину Java Card 2.1 Virtual Machine (JCVM). Спецификация определяет подмножество языка Java и спецификацию JVM, подходящую для смарт-карт.
    * Программные интерфейсы Java Card 2.1 Application Programming Interface (API). Спецификация описывает Java пакеты и классы для программирования смарт-карт
    * Программные интерфейсы Java Card 2.1 Application Programming Interface (API). Спецификация описывает Java пакеты и классы для программирования смарт-карт 

Подмножество языка программирования

Как уже было отмечено выше, в силу ограничений по доступной памяти, платформа Java Card поддерживает только выделенное подмножество языка программирования Java. Оставлены только самые необходимые для программирования опции. Вместе с тем, это по-прежнему объектно-ориентированный язык, и это по-прежнему Java. Например, что поддерживается:

    * короткие примитивные типы данных: boolean, byte, short
    * одномерные массивы
    * пакеты, классы, интерфейсы и исключительные ситуации
    * объектно-ориентированные свойства Java: наследование, виртуальные функции, перезагрузка методов, динамическое создание объектов, области видимости. 

Не поддерживаются:

    * длинные примитивные типы данных: long, double, float
    * символы и строки
    * многомерные массивы
    * динамическая загрузка классов
    * сборка мусора
    * многопотоковость
    * сериализация и клонирование объектов 

В этом языковом ограничении возможны вариации. Так, например, на некоторых устройствах поддерживается сборка мусора. 

http://citforum.univ.kiev.ua/hardware/articles/jcard.shtml

Автор: Kangaroo 16.1.2008, 23:51
Цитата(v2v @  16.1.2008,  22:33 Найти цитируемый пост)
"Зачем этот раздел?"

Что-то я не разу не видел вопроса по этой теме на форуме...  smile 

Автор: v2v 17.1.2008, 00:03
плохо искал!
один есть 
http://forum.vingrad.ru/forum/topic-17924/unread-1/hl/javacard/index.html

Автор: Samotnik 17.1.2008, 00:46
Цитата(v2v @  17.1.2008,  00:03 Найти цитируемый пост)
один есть 

+1 !!!       smile     да! 1  вопрос,  рещает, создавать новый  раздел  или  нет   smile  smile  smile 

Автор: Alexandr87 17.1.2008, 08:31
ИМХО, раздел нужен.

Автор: v2v 17.1.2008, 09:25
его надо было назвать "Java Безопасность" тогда можно было бы перенести в него всё jsse.

Автор: javastic 17.1.2008, 10:59
Всё очень просто. Появились люди которым эта тема интересна, а в рунете особо форумов нормальных нет по Джава Карду.
Так что мы будем первыми. Готовится несколько статей и материалов.

Автор: Kangaroo 17.1.2008, 11:06
Цитата(javastic @  17.1.2008,  09:59 Найти цитируемый пост)
Всё очень просто. Появились люди которым эта тема интересна, а в рунете особо форумов нормальных нет по Джава Карду.
Так что мы будем первыми. Готовится несколько статей и материалов.

Вот, наконец-то объяснили.
Спасибо, будем просвещаться. Ждем интересных статей  smile 

Автор: Samotnik 17.1.2008, 12:46
Kangaroo,  Ага,   хоть что - то пояснили, уже  клева!  smile 

Автор: Alexandr87 17.1.2008, 19:23
Цитата(v2v @  17.1.2008,  12:25 Найти цитируемый пост)
его надо было назвать "Java Безопасность" тогда можно было бы перенести в него всё jsse.

+1
имхо, слишком специфичный раздел. Боюсь, что новые темы будут появляться очень редко.

Автор: AntonSaburov 18.1.2008, 12:36
Я почитал про Java Card - вообщем думаю, что можно попробовать отдельный раздел вытянуть. Он конечно достаточно специфический, но я очень подозреваю, что на самом деле он может быть ничуть не хуже чем J2ME.

Начал готовить материал кое-какой. Хотелось бы посоветоваться с теми, кто тоже готовит материал - что они собираются делать. Я честно собрался вольно переводить кое-какой материал с официального сайта Sun Microsystems. Дальше посмотрим.

Так что будем раскручиваться. Может кто и заинтересуется и раздел начнет расти.

Автор: nornad 18.1.2008, 12:41
Цитата(v2v @  17.1.2008,  02:33 Найти цитируемый пост)
Платформа Java Card включает в себя три части:

    * Виртуальную машину Java Card 2.1 Virtual Machine (JCVM). Спецификация определяет подмножество языка Java и спецификацию JVM, подходящую для смарт-карт.
    * Программные интерфейсы Java Card 2.1 Application Programming Interface (API). Спецификация описывает Java пакеты и классы для программирования смарт-карт
    * Программные интерфейсы Java Card 2.1 Application Programming Interface (API). Спецификация описывает Java пакеты и классы для программирования смарт-карт 

И где ж тут три части? Копипаст рулит  smile 
Цитата(v2v @  17.1.2008,  02:33 Найти цитируемый пост)
* сборка мусора

Ура! Наконец-то сишникам радость - теперь можно будет удалить созданный объект вручную и со стопроцентным успехом. Хотя бы в Java Card smile

Добавлено через 3 минуты и 15 секунд
Цитата(AntonSaburov @  18.1.2008,  15:36 Найти цитируемый пост)
Может кто и заинтересуется и раздел начен расти.

Ну, лично мне интересно. Только вот сферы реального приложения пока нет. Если кроме статей появится инфа о том, как в домашних условиях енто дело опробовать - будет антереснее. А так... так у нас пока не слышал, чтобы требовалось что-то подобное. Ну, правда, у нас и не мегаполис.

Автор: AntonSaburov 18.1.2008, 12:57
Цитата(nornad @  18.1.2008,  12:41 Найти цитируемый пост)
И где ж тут три части? Копипаст рулит

Ну ошибся, бывает. Но там действительно три части - забыли про Java Card Runtime Environment.

Добавлено через 2 минуты и 2 секунды
Цитата(nornad @  18.1.2008,  12:41 Найти цитируемый пост)
Только вот сферы реального приложения пока нет. Если кроме статей появится инфа о том, как в домашних условиях енто дело опробовать - будет антереснее.

Мне тоже это интересно стало. Кстати в Питере в метро используются бесконтактные смарт-карты. Сейчас уже даже в наземном транспорте кондукторы проверяют такие проездные спец-девайсом.

Так что думаю, что это уже не за горами.

Автор: AntonSaburov 18.1.2008, 13:21
Цитата(v2v @  16.1.2008,  23:33 Найти цитируемый пост)
http://citforum.univ.kiev.ua/hardware/articles/jcard.shtml 

Ну статья вообщем не новая - аж 2002 года. Кстати спецификация 2.1 тоже уже очень не новая - аж 1999 года.

Я смотрел спеку 2.2.2 - она датирована мартом 2006.

Цитата(nornad @  18.1.2008,  12:41 Найти цитируемый пост)
Ура! Наконец-то сишникам радость

В новой спецификации 2.2.2 я такого не нашел - что нет сборщика. Искал, искал, но пока не обнаружил. Нашел только вот такое:
Aside from its persistent nature, the Java Card virtual machine is just like the Java virtual machine.

Persistance nature - это означает, что при исчезновении питания JVM на карте не уничтожается как процесс - "она запущена всегда".
Мало того, JavaCard JVM восстанавливает хип (даже не восстанавливает, а просто его использует, т.к. он тоже не уничтожается), который был во время отключения. Если конечно использоваться будет тот же апплет. Если другой - ну значит его загрузит JVM и он "поедет"

Автор: nornad 18.1.2008, 15:00
Цитата(AntonSaburov @  18.1.2008,  15:57 Найти цитируемый пост)

Так что думаю, что это уже не за горами. 

Ну, то, что в Питере и Москве меня интересует постольку поскольку. В нашей деревне енто дело может и через двадцать лет только появиться. Хотя, в общих чертах познакомиться с технологией интересно. А ежели ещё и найти, как в домашних условиях поиграться - вообще классно будет.

Автор: AntonSaburov 18.1.2008, 15:23
Цитата(nornad @  18.1.2008,  15:00 Найти цитируемый пост)
А ежели ещё и найти, как в домашних условиях поиграться - вообще классно будет.

Вот поучим, посмотрим - может и правда в домашних условиях сделаем что-нибудь.

Автор: v2v 18.1.2008, 15:38
Цитата(AntonSaburov @  18.1.2008,  15:23 Найти цитируемый пост)

Вот поучим, посмотрим - может и правда в домашних условиях сделаем что-нибудь. 

не так то просто будет... для реализации работы с java card ведь нужно ещё спец. hardware:
как минимум считыватель (стоимостью от 10у.е.) ну и карточка (стоимостью от 3у.е.) ... так что не каждый себе может такое позволить , для того , что-бы "просто попробовать" что это такое...

Автор: Alexandr87 18.1.2008, 15:42
А что, эмуляторов нет?

Автор: v2v 18.1.2008, 15:44
хмм. не подумал... действительно наверное есть... но ведь эффект не тот smile

Автор: AntonSaburov 18.1.2008, 15:46
Эмулятор есть - думаю, что на следующей неделе выдам первый материал.

Автор: v2v 18.1.2008, 16:11
действительно есть, и на сколько я понял он входит в java card developer kit 

was is das:
Цитата

The Java Card Development Kit provides a complete, standalone development environment in which applets written for the Java Card platform can be developed and tested. It includes :
    * Programming tools essential to the development and deployment of Java Card applications
    * Emulation and simulation components that comply fully with the latest Java Card Platform Specification, including the newest cryptographic features
    * Sample source and documentation designed to help Java Card developers bring secure and interoperable smart cards applications to market quickly


вообщем кто хочет поигратся качайте JCDK , читайте java доки и запускайте примерчики.

AntonSaburov, на самом деле, я думаю щас было бы более интересно разобрать тему (возможности) 6й явы. а также рассмотреть бессплатные java framework - и, по крайне мере для меня. ведь материала на эти темы в рунете тоже нету (очень мало).

Автор: nornad 18.1.2008, 16:56
Цитата(v2v @  18.1.2008,  18:38 Найти цитируемый пост)
как минимум считыватель (стоимостью от 10у.е.) ну и карточка (стоимостью от 3у.е.) ...

Ну, я к таким ценам готов. Чтобы поиграться - хватит, думаю, карточек 10 (если они не перепрограммируются). Итого - от 40 уёв. В принципе, сносно для баловства. Зато при случае можно будет подключиться к какому-нибудь проекту.
Цитата(v2v @  18.1.2008,  19:11 Найти цитируемый пост)
разобрать тему (возможности) 6й явы. а также рассмотреть бессплатные java framework - и, по крайне мере для меня. ведь материала на эти темы в рунете тоже нету (очень мало).

А я бы непрочь глянуть на что-нибудь начальное по Hibernate + EJB3 на русском. Получив базу можно и на инглише что-то глядеть, но базу лучше на русском. Кстати, извиняюсь за офтоп - может, такое уже есть где? Глядел сегодня литературу на форуме и особо не нашёл. Да и не особо тоже - только инглиш. smile

Автор: v2v 18.1.2008, 17:08
Цитата(nornad @  18.1.2008,  16:56 Найти цитируемый пост)
В принципе, сносно для баловства. Зато при случае можно будет подключиться к какому-нибудь проекту.

сабж не сильно сложный.. если голова есть можно и без баловства подключатся).  smile 
в своё время занимался схожей темой на сях.

Автор: AntonSaburov 18.1.2008, 18:50
Цитата(v2v @  18.1.2008,  16:11 Найти цитируемый пост)
разобрать тему (возможности) 6й явы

Да вообщем-то писал уже - http://forum.vingrad.ru/articles/topic-191562.html

Цитата(nornad @  18.1.2008,  16:56 Найти цитируемый пост)
А я бы непрочь глянуть на что-нибудь начальное по Hibernate + EJB3 на русском.

По Hibernate пока нет, а некоторые наметки по EJB 3.0 (самые простые) я делал http://antonsaburov.narod.ru/students/content.html - части 11, 12, 13

И давайте не будем флеймить - и так уже достаточно много. Здесь обсуждаем Java Card. Раздел новый, пробный. Может месяца через 3-4 и закроем из-за непопулярности.

Автор: v2v 18.1.2008, 22:31
Цитата(AntonSaburov @  18.1.2008,  18:50 Найти цитируемый пост)
Да вообщем-то писал уже - http://forum.vingrad.ru/articles/topic-191562.html

вот прочтения этой статьи меня и заинтересовало  ... напр., хотелось бы побоольше узнать про скриптинг 


Цитата

• PersonalJava. PersonalJava является подмножеством стандартной платформы Java, спроектированной для поддержки среды обработки информации, ограниченной в ресурсах.
• Java Card. Платформа Java Card является подмножеством платформы PersonalJava, которая определяет минимальную конфигурацию Java, требуемую для поддержки приложений Java, работающих со смарт-картами.

что получается jc является частью j2me ?

Автор: Alexandr87 19.1.2008, 08:21
Цитата(nornad @  18.1.2008,  18:00 Найти цитируемый пост)
В нашей деревне енто дело может и через двадцать лет только появиться.

деньги налом получаете? интернет -банкингов нет? e-cash нет? мобильников тоже нет? Кстати у вас водительские удостоверения в караганде старого образца?

Автор: AntonSaburov 21.1.2008, 17:20
Цитата(v2v @  18.1.2008,  22:31 Найти цитируемый пост)
что получается jc является частью j2me ? 

Нет - Java Card является подмножеством Java со своими особенностями. С J2ME можно сказать не имеет ничего общего - условно конечно. Язык все-таки JAVA.
Но основные концепции - другие совсем.

Автор: firstone 22.1.2008, 11:22
Доброго времени суток, господа программисты!

Пожалуй это я стал инициатором. И я премного благодарен администрации форума за то, что поддержали идею. Как правильно заметил AntonSaburov, в Рунете нет ни одного нормального ресурса по этой технологии, а ведь она ой как проста! 

О себе: Программист в компании OTI (www.otiglobal.com) занимающийся преимущественно разработкой офф-кард сервисов и апплетов для Java Card (пусть слово апплет вас не вгонит в заблуждение. В JC апплет - это программа, которая записывается на smart card).

Моя конечная цель - показать насколько это просто (и дешево) создавать самому приложения на smart cards. Представляете! Вы сможете сами написать программу для входа в Линукс при помощи smart card! И у кого не будет такой карты не сможет ничего сделать! В общем, применений можно найти уйму.

Просьба: я не живу в СНГ уже 9 лет и посему мой русский хромает (в добавок я дислект  smile ), поэтому если кто-нибудь видит ошибку в моих статьях, очень прошу ее исправить.

Надеюсь наше пионерство пойдет далеко.

Удачи!

Добавлено через 3 минуты и 7 секунд
Чтобы вас не мучали сомнения, скажу, что цена смарт карты (engineer sample card) ~ $5, 
Smart card reader - уже почти стандартное устройство. А кроме этих двух компонент вам более ничего не надо!

Автор: javastic 22.1.2008, 16:03
Ну вот и славненько! Видите как форум пошел развиваться, значит не зря письма писал. =))

Автор: Bulat 25.1.2008, 15:22
Цитата(AntonSaburov @  18.1.2008,  18:50 Найти цитируемый пост)
И давайте не будем флеймить - и так уже достаточно много. Здесь обсуждаем Java Card. Раздел новый, пробный. Может месяца через 3-4 и закроем из-за непопулярности. 

Стоять не трогать. Я хоть сейчас абсолютно на перле, но яву не забываю, как не забывается первая любовь smile Если будет побольше интересного чтива, а главное чтоб было понятно какую это может принести пользу, не только индивидуально тебе, а в целом.

Автор: Samuil 29.1.2008, 11:38
firstone, уважаю. 
Приведи пожалуйста самый простенький пример на JC, как Hello World и как его откомпилить. Эта тема заинтересовала многих, и я думаю им тоже будет интересно.
Заранее благодарен.

Автор: nornad 29.1.2008, 16:51
Цитата(Alexandr87 @  19.1.2008,  11:21 Найти цитируемый пост)
деньги налом получаете? интернет -банкингов нет? e-cash нет? мобильников тоже нет? Кстати у вас водительские удостоверения в караганде старого образца? 

Удостоверения - не знаю, машины нет, прав тоже. Да и не горю желанием машину приобретать - на дорогах и без меня гонщиков валом.
Деньги у нас всё чаще карточками, но в магазин у нас с карточкой ходить неудобно - редко, где принимают.
Интернет-банкинга у нас нет. Точнее, были попытки у пары банков, но это ТАК удобно, что все их нафиг послали.
e-cash у нас только вебмани, да и те всего в нескольких точках в городе. Добавим, что продают их не весь день, а только в определённые часы и за бешенные деньги (курс бакса процентов на 20 выше, чем в обменнике, если покупать и несколько ниже, если продавать) - выходит, что и их практически нет. smile
Вот я и говорю - деревня. smile)))

Автор: firstone 30.1.2008, 14:15
Здравствуйте, Samuil.

Попытаюсь по максимуму объяснить как и что работает, но все же необходимо написать отдельную статью.
И так, любая программа для Java Card (тут я имею в виду физическую карту) есть класс наследуемый от абстрактного класса javacard.framework.Applet. Есть минимальный набор методов, которые должны быть реализованы для того, чтобы обеспечить загрузку апплета в память карты и его функционирование, а именно:
  • public static void install(byte[] bArray, short bOffset, byte bLength) - этот метод вызывается при создании объекта апплета в памяти карты (instantiation)
  • public void process(APDU apdu) - этот метод вызывается при каждой посылке APDU (см. статью "Смарт Карты. Общие сведения") апплету. Эти данные передаются как параметр. Далее функция process обрабатывает данные посланные ей в зависимости от требований. Эта функция может также послать необходимые данные обратно офф-карт сервису.

Для того, чтобы лучше понять следующее Вам желательно ознакомиться со статьей "Смарт карты. Общие сведения".

И так, самый простой апплет будет следующего вида:

Код

package ru.vingrad.forum.javacard.test;

import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISO7816;
import javacard.framework.ISOException;

public class Test extends Applet {

    public static void install(byte[] bArray, short bOffset, byte bLength) {
        // GP-compliant JavaCard applet registration
        new Test().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
    }

    public void process(APDU apdu) {
        // Good practice: Return 9000 on SELECT
        if (selectingApplet()) {
            return;
        }

        byte[] buf = apdu.getBuffer();
        switch (buf[ISO7816.OFFSET_INS]) {
        case (byte) 0x00:
            break;
        default:
            // good practice: If you don't know the INStruction, say so:
            ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
        }
    }
}


И так, давайте посмотрим, что у нас есть. 
Метод install не использует опциональные параметры установки апплета, которые могут быть посланы. Единственное, что он производит - это обязательную регистрацию самого апплета в реестре смарт карты (Java Card Run-time Environment). Таким образом смарт карта будет "знать", что у нее установлен этот апплет. Каждый апплет должен иметь уникальное имя AID (Application ID) которое сохраняется в коде аплета (после компиляции) и в реестре JCRE после регистрации. Еще одна важная вещь, касающаяся установки апплетов. Вся память, которая когда-либо потребуется нашему апплету должна быть (настоятельно рекомендовано) выделена при установке. Ресурсы памяти у смарт карты ограничены и не могут быть выделены при каждом new. 

Метод process на первый взгляд немного посложнее. В первой проверке (if (selectingApplet()) ... ) проверяется, не была ли последняя команда  SELECT (определена в ISO/IEC 7816-4) запущена для выборки этого самого апплета. Дело в том, что для того, чтобы послать что-то определенному апплету, необходимо его заведомо выбрать командой SELECT. Это объясняется тем, что на одной карте могут быть установлены несколько апплетов.
Далее мы получаем все байты посланного APDU в массив buf. По хорошему после этого нам бы следовало проверить первый байт (CLA - класс команды APDU) на предмет его принадлежности к поддерживаемым CLA значениям нашего апплета, но мы этого не делаем для простоты примера. Далее мы проверяем значение второго байта APDU - INS (INStruction  code - код команды). INS определяет команду, которую нужно выполнить будь то получить какие-либо данные персонализации (имя, фамилия, номер студента, аддресс и т.д.), послать какие-либо данные или выполнить любую другую операцию (например отнять от текущего баланса стоимость телефонного разговора).
Как видно из примера единственный поддерживаемый код - 00. При получении этого кода наш апплет ничего не делает.
Особого внимания заслуживает ситуация default. Поскольку память у смарт карты ограничена несколькими десятками килобайтов, ее нельзя попросту использовать, как ОЗУ у ПК. Поэтому мы не можем просто так создать объект класса ISOException. Для того, чтобы выкинуть exception, необходимо воспользоваться предлагаемым методом: throwIt.

Ну что ж, давайте порпобуем скомпилировать и установить на карточку нашу программу.
Прежде всего несколько слов о компиляции. Нужно использовать транслятор для Java версии 4. после того, как мы получили .class файл, его необходимо сконвертировать утилитой от SUN (в пакете JC Development Kit) в .cap файл. Далее этот файл загружается на карту. Процесс загрузки описан в открытом стандарте Global Platform и Java Card Specification. Я написал свой собственный uploader. В последующих статьях я буду детально описывать формат .cap файла и каким образом он должен быть переслан на карту.

И так, после загрузки и установки апплета, выберем его по его AID:
Код

 => 00 A4 04 00 07 A0 00 00 02 47 55 55 00             .........GUU.
 (17027 usec)
 <= 90 00                                              ..
Status: No Error

Сразу объясню что и как. Здесь стрелочка => указывает на то, что данные были посланы карте, а стрелочка <= - на получение данных с карты.
И так, первая команда: 00 A4 04 00 07 A0 00 00 02 47 55 55 00. Если Вы читали мою первую статью, то должны знать, что:
CLA: 00 - класс команд ISO
INS: A4 - инструкция (команда) SELECT (см. ISO/IEC 7816-4 раздел 7.1.1)
P1: 04 - первый параметр команды SELECT (выбрать по имени аппликации, т.е. AID)
P2: 00 - второй параметр (выбрать при первом или единственном случае)
Lc: 07 - длина поля Data (в нашел случае содержит AID)
Data: A0 00 00 02 47 55 55 - поле Data хранит AID нашего апплета (я задал его изначально).
Le: 00 - количество байт в сообщении response на это APDU.

Обратите внимание, что код возврата - 9000, т.е. карта сообщает об успешном выполнении операции (команды SELECT).

Далее мы можем уже послать команду непосредственно нашему апплету.:
Код

 => 80 00 00 00 00                                     .....
 (16044 usec)
 <= 90 00                                              ..
Status: No Error

Давайте посмотрим, что это за команда. На самом деле она нигде не определена.
CLA: 80 - выбрал его просто так
INS: 00 - единственный код инструкции, который поддерживает наш апплет.
P1: 00 - я не определял никаких параметров для инструкции
P2: 00 - || --- || --- || --- || --- || --- || --- || --- || --- || --- || --- || --- || --- || ---
Обратите внимание, здесь нет опциональных полей Lc и Data.
Наш апплет работает. На наш запрос вернулся ответ 9000 - индикатор успешного выполнения операции.
Давайте попробуем вызвать ошибку. Сделать это просто - послать любой другой код инструкции, например 01:
Код

 => 80 01 00 00 00                                     .....
 (16004 usec)
 <= 6D 00                                              m.
Status: INS value not supported


Ч.т.д.

Надеюсь этот пример пролил немного света на технологию Java Card.
Если что-то непонятно, или понятно но не до конца, спросите. Я буду рад Вам помочь.

С уважением, firstone.

Автор: firstone 30.1.2008, 15:43
nornad, доброго времени суток!

Скоро у вас (в Казахстане) появятся новые водительские удостоверения. На картах будут установлены апплеты Java Card. Наша компания учавствует в этом проекте.


Автор: LSD 30.1.2008, 18:11
Цитата(firstone @  30.1.2008,  14:15 Найти цитируемый пост)
Каждый апплет должен иметь уникальное имя AID (Application ID) которое сохраняется в коде аплета (после компиляции) и в реестре JCRE после регистрации.

Я не увидел его в коде апплета. AID как-то генерируется компилятором (наподобие serialVersionUID) или просто здесь пропущен?

Цитата(firstone @  30.1.2008,  14:15 Найти цитируемый пост)
Метод install не использует опциональные параметры установки апплета, которые могут быть посланы. Единственное, что он производит - это обязательную регистрацию самого апплета в реестре смарт карты (Java Card Run-time Environment).

Можно поподробней о входных параметрах, и что за метод был вызван в коде? И надо обязательно реализовывать его как static?

Автор: firstone 30.1.2008, 19:10
Приветствую, LSD.

Цитата(LSD @  30.1.2008,  18:11 Найти цитируемый пост)
Я не увидел его в коде апплета. AID как-то генерируется компилятором (наподобие serialVersionUID) или просто здесь пропущен?

Это скорее я неправильно выразился. 
Всего есть 3 разных AID на карте, если мы загружаем апплет:
1) для package (появляется после загрузки package'а)
2) для класса апплета (появляется после загрузки package'а)
3) для объекта апплета (появляется только после установки - install)

В одном package могут быть несколько апплетов. При установке необходимо указать AID package, AID класса апплета и AID нового объекта апплета. AID package и AID класса сохраняются в скомпилированном коде .cap файла. Туда его записывает программа-конвертор (есть программы, которые и компилируют и конвертируют). Когда package и класс(ы) апплета(ов) записываются на карту, они регистрируются но с помощью специальных APDU команд. Далее при установке, указывается еще один AID - для объекта апплета.

Цитата(LSD @  30.1.2008,  18:11 Найти цитируемый пост)
Можно поподробней о входных параметрах, и что за метод был вызван в коде? И надо обязательно реализовывать его как static? 

Входные параметры могут содержать информацию о, например, количестве необходимой памяти для апплета. Если вам известно, что в процесс персонализации карты (т.е. записи в нее информации о уже конкретном человеке) будет использовано до 14кб для фотографии лица, то в методе install нужно будет выделить этот буфер.

Извините, я не понял Ваш вопрос касательно "что за метод был вызван в коде?". Если вы о register, то у него есть два перегрузчика:
Код

protected final void register(byte[] bArray,
                              short bOffset,
                              byte bLength);
protected final void register();

Первый метод получает AID для объекта апплета и регистрирует его. Второй берет AID класса апплета и регистрирует объект с тем же AID.

Касательно Вашего третьего вопроса - ответ да. Когда вызывается метод install, объект апплета еще не инстанциирован (или как там по-русски будет instantiated). В классическом случае именно install должен вызвать конструктор апплета.

Надеюсь это немного помогло Вам.

Добавлено через 6 минут и 38 секунд
Все же я забыл сказать. Все AID прописываются вручную.

Автор: LSD 5.2.2008, 15:09
Цитата(firstone @  30.1.2008,  19:10 Найти цитируемый пост)
1) для package (появляется после загрузки package'а)

Под package подразумевается .cap файл или package-и Java?


Цитата(firstone @  30.1.2008,  19:10 Найти цитируемый пост)
Если вы о register, то у него есть два перегрузчика:
...

Да я об этом.

Тогда мне непонятен код примера:
Код

public static void install(byte[] bArray, short bOffset, byte bLength) {
  // GP-compliant JavaCard applet registration
  new Test().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
}

мы получили AID, а вот дальше делаем с ним, что-то странное. Почему мы просто не передаем полученный AID методу register самого апплета?

Автор: firstone 6.2.2008, 20:10
Добрый вечер, LSD.

Извиняюсь за отсутствие. Работа, жена, дети...

К сожалению у меня не получается ответить полно в одном посте. Поэтому получается диалог.

Цитата(LSD @  5.2.2008,  15:09 Найти цитируемый пост)
Под package подразумевается .cap файл или package-и Java?

Package-и Java. Каждый такой package должен содержать один или более апплетов.
Тут важно еще уяснить терминологию. В серии стандартов ISO 7816 определена следующая иерархия: Executable Load File под ним могут быть несколько Executable Load File Modules. Так вот этот Executable Load File = package, а Executable Load File Module = applet. Ну а application = instance of applet. 

Цитата(LSD @  5.2.2008,  15:09 Найти цитируемый пост)

Тогда мне непонятен код примера:

ОК. Дело в том, что я упустил тут кое что. Посмотрите на прототип метода install:
Код

public static void install(byte[] bArray, short bOffset, byte bLength) {...}

Здесь первый параметр содержит в себе три составляющих, а именно:
  • bArray[0] = длина (Li) AID объекта апплета (instance),
  • bArray[1..Li] = AID объекта апплета,
  • bArray[Li+1]= длина (Lc) контрольных данных,
  • bArray[Li+2..Li+Lc+1] = контрольные данные,
  • bArray[Li+Lc+2] = длина (La) данных апплета,
  • bArray[Li+Lc+2..Li+Lc+La+1] = данные апплета 

AID объекта апплета уже обсуждалось.
Контрольные данные - это в принципе привилегии (privileges) для апплета (т.е. перечень специальных действий которые ему разрешается выполнять). Обычно 1-3 байта
Данные апплета = параметры для апплета (определяются разработчиком)

Автор: jmdonetsk 18.4.2011, 02:03
firstone,  а можно поподробнее ( или ткнуть где почитать)
Интересно :
   -  взял пример http://forum.vingrad.ru/articles/topic-206206/anchor-entry2332063/0.html, но там все заканчивается на самом интересном месте : "Давайте теперь запустим наше приложение на карте."   smile  на карту записываю ( использую  eclipse и jcop tool ) но как запустить апплет ?
- еще было бы интересно узнать как выполнить этот апплет с помощью клиента написанного на C++ или Delphi

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)