Skip to Main Content

Java Card

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

6F00 in some cases: mysterious Java Card....

923272Jun 19 2012 — edited Jul 18 2012
Hi,

I actually work on an applet which must register the AID of other applets (client applet )present on the smart card, that is to say it stores them in a list of byte arrays.
I succeed in registering them during their instantiation thanks to a shareable interface and in listing them in an APDU.
I am testing the deletion of the registration. This one occurs on request of the client applet. I use the following method eGoUnregister(temp) with temp which is the APDU buffer. Indeed, as I recover the AID via a shareable interface, I must use a global array.
Then I have retrieved the buffer containing the AID of the client applet, I make a search into the list of stored AIDs: I seearch the index of the list of AID and after that, I shift all the other AIDS to delete the client AId which want the deletion of its registration.
Here is my code:
/**
* Delete an AID from the list of AID.
* @param bArray the array containing the AID of the applet whose the deletion of the registration is required.
* @return true if the AID has been deleted from the list of AID, false else.
*/
public boolean deleteAID(byte[] bArray) {

byte length = bArray[0]; //= anAID.getBytes(bufferTemp, (short)0);
/* Research of the AID into the list*/
byte index = MAX_NB_AID;
for (byte i = 0x00; i<MAX_NB_AID;i++){
if (length == list.getLength()){

if (Util.arrayCompare(list[i].getEgoAID(), (short)0, bArray, (short)1, length)==0){

index = i;
break; // index checked
}

}

}

/*Shift the others egoAID in the list if a deletion must be realized*/
if (index == MAX_NB_AID) return false;
else{
for (byte i = index; i< MAX_NB_AID-1;i++){

list[i].setLength(list[i+1].getLength());
list[i].setEgoAID_Byte(list[i+1].getEgoAID());

}

ISOException.throwIt((short)0x6565);

Util.arrayFillNonAtomic(bArray, (short)0, (short)0x10, (byte)0x00);

list[MAX_NB_AID-1].setEgoAID_Byte(bArray);
list[MAX_NB_AID-1].setLength((byte)0);
return true;
}

}
Thos code works when the last registered applet want to delete its registration. But, if I want to delete the registration of the other applet than the last applet, I have a status word 6F00 and the deletion of the registration is not done.
Have you an idea of the problem???
Thanks very much in advance for all your ideas. I do not know where to search anymore.
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Aug 15 2012
Added on Jun 19 2012
1 comment
918 views