Christmas is coming!

To celebrate the new year and thank for the support from all our dear customers, Christmas promotional activity is being held in JavaCardOS online store.

During the event, you can enjoy many promotional activities - High Discount on JavaCardOS products,Lucky Draw,Double forum Points.

Come to choose your own Christmas gift and try your luck now!

How to change the card Historical Bytes?

Card Products

Moderator: horse dream

GraceGIRL
Posts: 15
Joined: Fri May 15, 2015 3:25 am
Points: 30
Contact:

How to change the card Historical Bytes?

Postby GraceGIRL » Tue Dec 01, 2015 6:30 am

I know that changing Historical bytes is limited to Pre-Personalization step. But I found a method named setATRHistBytes in the GlobalPlatform APIs today.
This is description.
setATRHistBytes

public static boolean setATRHistBytes (byte[] buffer, short bOffset, byte bLength)

This method sets the historical bytes contained in the ATR (Answer To Reset). The sequence of bytes will be set
on a subsequent power-up or reset. Only the “default selected” Application may invoke this method. The Card
Manager locates the AID of the selected Application in the GlobalPlatform Registry and determines if the
Application has the required privilege.

Parameters:
buffer – byte[] Array containing the ATR historical bytes.
bOffset – short Offset within the buffer where ATR historical bytes begin.
bLength – byte Length of the ATR historical bytes in the buffer.

Returns:
TRUE if ATR bytes set, FALSE otherwise.


How can I use this method to change the card historical bytes? Can somebody give me any demo code?

Tarantino
Posts: 100
Joined: Wed Aug 19, 2015 1:56 am
Points: 464
Contact:

Re: How to change the card Historical Bytes?

Postby Tarantino » Thu Dec 03, 2015 5:00 am

Maybe this can help you.

Code: Select all

public class HistoricalBytesChanger extends Applet {
    public static byte[] state = { (byte) 0, (byte) 0 };
    public static byte[] HistByteArray = { (byte) 0x01, (byte) 0x02,
            (byte) 0x03, (byte) 0x04, (byte) 0x05, (byte) 0x06, (byte) 0x07,
            (byte) 0x08, (byte) 0x09, (byte) 0x0a };// assign 0102030405060708090A to Historical Bytes

    public static void install(byte[] bArray, short bOffset, byte bLength) {
        new HistoricalBytesChanger().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
    }

    public void process(APDU apdu) {
        if (selectingApplet()) {
            return;
        }

        byte[] buf = apdu.getBuffer();
        switch (buf[ISO7816.OFFSET_INS]) {
        case (byte) 0x00:
            GPSystem.setATRHistBytes(HistByteArray, (short) 0, (byte) 10);
            HistByteArray[0] = (byte) (HistByteArray[0] + 1);
            break;

        default:
            ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
        }
    }

}
The greatest glory in living lies not in never falling, but in rising every time we fall.--Nelson Mandela

eclessiastes
Posts: 8
Joined: Tue Mar 29, 2016 8:52 am
Points: 117
Contact:

Re: How to change the card Historical Bytes?

Postby eclessiastes » Fri Apr 28, 2017 8:23 am

The code is not changing the ATR. I tried different cards but none works.

User avatar
UNKNwYSHSA
Posts: 628
Joined: Thu May 21, 2015 4:05 am
Points: 2971
Contact:

Re: How to change the card Historical Bytes?

Postby UNKNwYSHSA » Tue May 02, 2017 3:11 am

eclessiastes wrote:The code is not changing the ATR. I tried different cards but none works.


Please check the return value of the method GPSystem.setATRHistBytes(). If it returns false, the HistoryBytes is not set.
And make sure that the privilege of current applet has privilege "Card Reset". If not, this method will be fail.
sense and simplicity

eclessiastes
Posts: 8
Joined: Tue Mar 29, 2016 8:52 am
Points: 117
Contact:

Re: How to change the card Historical Bytes?

Postby eclessiastes » Mon May 08, 2017 7:05 am

GPSystem.setATRHistBytes() returns true and ATR is changed but the first 6 bytes of the atr are the same. Is there any way to change whole atr ?

User avatar
UNKNwYSHSA
Posts: 628
Joined: Thu May 21, 2015 4:05 am
Points: 2971
Contact:

Re: How to change the card Historical Bytes?

Postby UNKNwYSHSA » Tue May 09, 2017 1:35 am

eclessiastes wrote:GPSystem.setATRHistBytes() returns true and ATR is changed but the first 6 bytes of the atr are the same. Is there any way to change whole atr ?

The ATR can not be changed in the applet.
If you want to change the ATR value not only the history bytes, ask your card provider about how to do that.
sense and simplicity


Return to “Card Products”

Who is online

Users browsing this forum: No registered users and 1 guest

JavaCard OS : Disclaimer