Теряются значения из EEPROM

 
0
 
Java
ava
whazza | 03.10.2013, 22:44
Здравствуйте.

Пишу первые пробные программки под ява карты, столкнулся с тем, что значение в EEPROM не остается.

Исходник почти полностью сделан из примеров. Однако же, на 80 20 00 00 10 карта отвечает 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00 всегда, независимо от предыдущих попыток записи.

В чем тут промах? Массив оказался в RAM вместо EEPROM?


package HW;

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 byte[] login;
    
    /*protected HelloWorldApplet()
    {
        login = new byte[(short)16];  
        // transient reference to the selected file
        //ram_selectedFile = JCSystem.makeTransientByteArray((short) 0, JCSystem.CLEAR_ON_DESELECT);
    }*/

    public static void install(byte[] bArray, short bOffset, byte bLength) {
        login = new byte[(short)16]; 
        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 (byte)0x00: getHelloWorld(apdu); break;
            case (byte)0x10: writeLogin(apdu); break;
            case (byte)0x20: readLogin(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);
    }
    
    private void writeLogin(APDU apdu)
    {
        byte[] buffer = apdu.getBuffer();
        if((byte) (buffer[ISO7816.OFFSET_LC] & 0xFF) != (byte)0x10)
        {
            ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);
        }
        Util.arrayCopyNonAtomic(buffer, ISO7816.OFFSET_CDATA, login, (short)0, (short)16);
    }
    
    private void readLogin(APDU apdu)
    {
        byte[] buffer = apdu.getBuffer();
        Util.arrayCopyNonAtomic(login, (short)0, buffer, (short)0, (short)16);
        apdu.setOutgoingAndSend((short)0, (short)16);
    }

}
Comments (0)

Comments are not added

Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  whazza
advanced
Submit