Модераторы: AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> HelloWorld, ну 
V
    Опции темы
Fieral
Дата 22.2.2010, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 10.12.2007

Репутация: нет
Всего: 1



Код

/*
 * Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved.
 * Use is subject to license terms.
 */

// /*
// Workfile:@(#)HelloWorld.java    1.7
// Version:1.7
// Date:01/03/06
//
// Archive:  /Products/Europa/samples/com/sun/javacard/samples/HelloWorld/HelloWorld.java
// Modified:01/03/06 12:13:08
// Original author:  Mitch Butler
// */
package test;

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

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

public class HelloWorld extends Applet {

    /**
     * Instruction: say hello
     */
    private final static byte SAY_HELLO_INS = (byte) 0x01;
    
    /**
     * Instruction: do nothing
     */
    private final static byte DO_NOTHING_INS = (byte) 0x02;

    /**
     * Byte array representing "Hello Java Card world!" string.
     */
    private static byte[] helloMessage = new byte[]
    {
        0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, // "Hello "
        0x4A, 0x61, 0x76, 0x61, 0x20,        // "Java " 
        0x43, 0x61, 0x72, 0x64, 0x20,        // "Card " 
        0x77, 0x6F, 0x72, 0x6C, 0x64, 0x21  // "world!"
    };
    
    /**
     * This method is called once during applet instantiation process.
     * @param bArray 
     * @param bOffset
     * @param bLength
     * @throws ISOException
     */
    public static void install(byte[] bArray, short bOffset, byte bLength  ) 
        throws ISOException 
    {
        new HelloWorld().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
    }
    
    /**
     * This method is called each time the applet receives APDU.
     */
    public void process(APDU apdu) {
        byte[] buffer = apdu.getBuffer();

        // Handle applet selecting.
        if (selectingApplet()) {
            // Return 9000 - selecting is successful
            return;
        }
        
        // Now determine the requested instruction: 
        switch (buffer[ISO7816.OFFSET_INS]) {
        case SAY_HELLO_INS:
            sayHello(apdu);
            return; 
        case DO_NOTHING_INS:
            return;
        default:
            // We do not support any other INS values
            ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
        }
        return;
    }

    /**
     * Sends hello message to host using given APDU.
     * @param apdu APDU that requested hello message
     */
    private void sayHello(APDU apdu) {
        // Here all bytes of the APDU are stored
        byte[] buffer = apdu.getBuffer();

        // Get length of hello message
        short length = (short) helloMessage.length;
        // Tell JVM that we will send data
        apdu.setOutgoing(); 
        // Set the length of data to send
        apdu.setOutgoingLength((byte) length);
        
        // Copy hello message to the APDU buffer
        for (short i = 0; i < length; i++)
            buffer[i] = helloMessage[i]; 
        
        // Send our message starting at 0 position
        apdu.sendBytes((short) 0, length); 
    }
}


запускаю на эмуляторе CREF и получаю:

Код

Java Card 2.2.2 APDU Tool, Version 1.3
Copyright 2005 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.
Opening connection to localhost on port 9025.
Connected.
Received ATR = 0x3b 0xf0 0x11 0x00 0xff 0x01 
CLA: 00, INS: a4, P1: 04, P2: 00, Lc: 09, a0, 00, 00, 00, 62, 03, 01, 08, 01, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b0, P1: 00, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b2, P1: 01, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b4, P1: 01, P2: 00, Lc: 17, 01, 00, 14, de, ca, ff, ed, 01, 02, 04, 00, 01, 0a, 01, 02, 03, 04, 05, 06, 07, 08, 09, 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: bc, P1: 01, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b2, P1: 02, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b4, P1: 02, P2: 00, Lc: 20, 02, 00, 1f, 00, 14, 00, 1f, 00, 0f, 00, 15, 00, 32, 00, 0c, 00, 7b, 00, 23, 00, 12, 00, 00, 00, 6f, 00, 02, 00, 01, 00, 16, 02, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b4, P1: 02, P2: 00, Lc: 02, 01, 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: bc, P1: 02, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b2, P1: 04, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b4, P1: 04, P2: 00, Lc: 18, 04, 00, 15, 02, 03, 01, 07, a0, 00, 00, 00, 62, 01, 01, 00, 01, 07, a0, 00, 00, 00, 62, 00, 01, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: bc, P1: 04, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b2, P1: 03, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b4, P1: 03, P2: 00, Lc: 12, 03, 00, 0f, 01, 0b, 01, 02, 03, 04, 05, 06, 07, 08, 09, 00, 00, 00, 08, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: bc, P1: 03, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b2, P1: 06, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b4, P1: 06, P2: 00, Lc: 0f, 06, 00, 0c, 00, 80, 03, 00, ff, 00, 07, 01, 00, 00, 00, 1c, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: bc, P1: 06, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b2, P1: 07, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b4, P1: 07, P2: 00, Lc: 20, 07, 00, 7b, 00, 01, 10, 18, 8c, 00, 00, 7a, 05, 30, 8f, 00, 01, 3d, 8c, 00, 02, 18, 1d, 04, 41, 18, 1d, 25, 8b, 00, 03, 7a, 02, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b4, P1: 07, P2: 00, Lc: 20, 21, 19, 8b, 00, 04, 2d, 18, 8b, 00, 05, 60, 03, 7a, 1a, 04, 25, 73, 00, 12, 00, 01, 00, 02, 00, 0b, 00, 11, 18, 19, 8c, 00, 06, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b4, P1: 07, P2: 00, Lc: 20, 7a, 7a, 11, 6d, 00, 8d, 00, 07, 7a, 04, 23, 19, 8b, 00, 04, 2d, 7b, 00, 08, 92, 32, 19, 8b, 00, 09, 3b, 19, 1f, 5b, 8b, 00, 0a, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b4, P1: 07, P2: 00, Lc: 1e, 03, 29, 04, 70, 0f, 1a, 16, 04, 7b, 00, 08, 16, 04, 25, 38, 59, 04, 01, 16, 04, 1f, 6c, f0, 19, 03, 1f, 8b, 00, 0b, 7a, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: bc, P1: 07, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b2, P1: 08, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b4, P1: 08, P2: 00, Lc: 20, 08, 00, 23, 00, 02, 00, 01, 00, 01, 03, 00, 16, 48, 65, 6c, 6c, 6f, 20, 4a, 61, 76, 61, 20, 43, 61, 72, 64, 20, 77, 6f, 72, 6c, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b4, P1: 08, P2: 00, Lc: 06, 64, 21, 00, 00, 00, 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: bc, P1: 08, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b2, P1: 05, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b4, P1: 05, P2: 00, Lc: 20, 05, 00, 32, 00, 0c, 06, 80, 03, 00, 01, 00, 00, 00, 06, 00, 00, 01, 03, 80, 03, 02, 03, 80, 0a, 01, 03, 80, 03, 03, 06, 00, 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b4, P1: 05, P2: 00, Lc: 15, 46, 06, 80, 07, 01, 05, 00, 00, 00, 03, 80, 0a, 07, 03, 80, 0a, 09, 03, 80, 0a, 04, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: bc, P1: 05, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b2, P1: 09, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: b4, P1: 09, P2: 00, Lc: 15, 09, 00, 12, 00, 00, 00, 0e, 05, 06, 04, 0a, 07, 05, 16, 08, 07, 04, 06, 07, 0b, 12, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: bc, P1: 09, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00
CLA: 80, INS: ba, P1: 00, P2: 00, Lc: 00, Le: 00, SW1: 90, SW2: 00


Вопрос такой: что должно произойти после запуска HelloWorld апплета? И насколько полученный результат соответствует этому? И как вообще интерпретировать этот результат?
--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
sangino
Дата 31.3.2010, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.8.2007
Где: Москва

Репутация: нет
Всего: нет



Привет, после АТR происходят setup menu и так далее ( во всяком случае на СИМ картах ) после же, должен создаваться инстанс апплета.
далее, Апплет должен реагировать на некое событие, то есть, если это меню в телефоне, то по нажатии на определенный пункт меню, запускается некий метод отвечающий за это. Здесь я думаю стоит сэмулировать команду select applet затем отправить apdu котоую апплет поймет.
так же советую крайне проштудировать спеки 11.11 11.14
Если есть трудности, пиши, постараюсь помочь как могу.  smile 
PM MAIL   Вверх
Fieral
Дата 31.3.2010, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 10.12.2007

Репутация: нет
Всего: 1



наскока я понял - чтоб передать данные на карту нужно сгенерировать скрипт типа такого:

user posted image

Вопрос собсно: а как это сделать?

Мне нужно, например, передать данные на карту.
Откуда брать значения CLA, INS, P1 и P2?

--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
neutrino
Дата 5.4.2010, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Fieral, В коде написано:
Код

        // Now determine the requested instruction: 
        switch (buffer[ISO7816.OFFSET_INS]) {
        case SAY_HELLO_INS:
            sayHello(apdu);
            return; 
        case DO_NOTHING_INS:
            return;
        default:
            // We do not support any other INS values
            ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
        }

Значит нужно передать команду апплету с полем INS равным значению константы SAY_HELLO_INS, т.е.: 80 01 00 00. Здесь 80 - класс комманд (нам безразличен, т.к. мы его апплетом не проверяем), 01 - инструкция скажи "хелло ...", 00 00 - параметр1 и параметр2 соответственно. 

Не забываем, что до того, как использовать апплет, его нужно выбрать на карте командой SELECT.


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
jmdonetsk
Дата 14.5.2011, 04:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.4.2011

Репутация: нет
Всего: нет



neutrino,  а можно чуть подробнее (полную команду, как это выглядит например в JCOP Development Tools)
Если есть информация об это можно линк ?

я так понимаю:

Код

сm>  select D2 76 00 00 60 41 01                                                         --------- аid апплета 
 => 00 A4 04 00 08 A0 00 00 00 03 00 00 00 00          ..............
 (89228 usec)
 <= 6F 10 84 08 A0 00 00 00 03 00 00 00 A5 04 9F 65    o..............e
    01 FF 90 00                                        ....
Status: No Error

cm>  send 8001000000
 => 80 01 00 00 00                                     .....
 (26254 usec)
 <= 69 85                                              i.
Status: Conditions of use not satisfied



но тогда странный ответ получается...

Это сообщение отредактировал(а) jmdonetsk - 14.5.2011, 04:21
PM MAIL   Вверх
neutrino
Дата 15.5.2011, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Последний нуль не нужен. Это поле должно быть равно длине поля данных. А когда поля данных нет, его нужно убрать.

Добавлено через 27 секунд
Цитата(jmdonetsk @  14.5.2011,  03:08 Найти цитируемый пост)
cm>  send 8001000000
 => 80 01 00 00 00                                     .....




--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
jmdonetsk
Дата 15.5.2011, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.4.2011

Репутация: нет
Всего: нет



все равно получаю ошибку, и не могу разобраться... пробую отправить вот так
Код

cm>  /send 80010000
 => 80 01 00 00                                        ....
 (26188 usec)
 <= 69 85                                              i.
Status: Conditions of use not satisfied
cm>  send 80010000
jcshell: Error code: -3 (Invalid API parameter)
jcshell: Command failed: APDU too short/long


Спасибо разобрался. 
Решение (там и собака зарыта была):
 - при подключении к карте с помощью JCOP Shell (из plugin JcopTool 3.1.1.b к Eclipse ) выбрать нужно режим не Jcop Engineering sample,а default

тогда получим следующее
Код

cm>  /select 48656c6c6f576f726c64
 => 00 A4 04 00 0A 48 65 6C 6C 6F 57 6F 72 6C 64 00    .....HelloWorld.
 (45096 usec)
 <= 90 00                                              ..
Status: No Error
cm>  /send 8001000000
 => 80 01 00 00 00                                     .....
 (92745 usec)
 <= 48 65 6C 6C 6F 20 4A 61 76 61 20 43 61 72 64 20    Hello Java Card 
    77 6F 72 6C 64 21 90 00                            world!..
Status: No Error


Это сообщение отредактировал(а) jmdonetsk - 19.5.2011, 16:47
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java Card | Следующая тема »


 




[ Время генерации скрипта: 0.1262 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.