Java Card client-server Shareable interface returns 6F00

1chenar :

I've tried to create a simple Client and Server applets in java card 2.2.2 using Eclipse 3.7 SDK using the Shareable Interfaces. When the method JCSystem.getAppletShareableInterfaceObject is called it throws an exception and so the return SW sets to 6F00.

This is the Client app code (Test_Client.java):

    package client;

import server.Test_ServerInf;
import javacard.framework.AID;
import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISO7816;
import javacard.framework.ISOException;
import javacard.framework.JCSystem;

public class Test_Client extends Applet {

    protected static final byte INS1 = (byte)0xE2;
    protected static final byte INS2 = (byte)0x21;

    byte[] ServerAIDbyte={(byte)0x20,(byte)0x21,(byte)0x22,(byte)0x23,(byte)0x24,(byte)0x25,(byte)0x26,(byte)0x27,(byte)0x01};
    AID ServerAID;

    private Test_Client() {
    }

    public static void install(byte bArray[], short bOffset, byte bLength)
            throws ISOException {
        new Test_Client().register();
    }

    public void process(APDU apdu) throws ISOException {
        // TODO Auto-generated method stub
        byte[] apduBuffer = apdu.getBuffer();

        byte Ins=apduBuffer[ISO7816.OFFSET_INS];
        short byteread = apdu.setIncomingAndReceive();

        if (selectingApplet())
            return;

        switch (Ins){
        case INS1:
            Ins1_Handler(apdu);
            return;
        case INS2:
            Ins2_Handler(apdu,apduBuffer);
            return;
        default:
            ISOException.throwIt(ISO7816.SW_FUNC_NOT_SUPPORTED);
        }
    }
    private void Ins1_Handler(APDU apdu){
        Test_ServerInf sio = null;
        ServerAID=JCSystem.lookupAID(ServerAIDbyte,(short) 0,(byte) ServerAIDbyte.length);
        if(ServerAID==null)
            ISOException.throwIt( (short) 0x6A82);
        ////server request
        try{
        sio=(Test_ServerInf)(JCSystem.getAppletShareableInterfaceObject(ServerAID, (byte) 0));
        }
        catch(SecurityException e)
       {
           ISOException.throwIt((short)0x12);
       }
       catch(Exception e)
       {
           ISOException.throwIt((short)0x10);
       }
        if(sio==null)
            ISOException.throwIt((short)0x6A00);

    }

    private void Ins2_Handler(APDU apdu,byte[] apduBuffer){
            Test_ServerInf sio = null;
           ////connect to server  
          ServerAID=JCSystem.lookupAID(ServerAIDbyte,(short) 0,(byte) ServerAIDbyte.length);
           if(ServerAID==null)
                ISOException.throwIt( (short) 0x6A82);
           ////server request
           try{
               sio=(Test_ServerInf)(JCSystem.getAppletShareableInterfaceObject(ServerAID, (byte) 0));
           }
           catch(SecurityException e)
           {
               ISOException.throwIt((short)0x12);
           }
           catch(Exception e)
           {
               ISOException.throwIt((short)0x10);
           }
           if(sio==null)
                ISOException.throwIt((short)0x6A00); 
    }


}

And this is Server applet code (Test_Server.java):

  package server;

import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISOException;
import server.Test_ServerInf;
import javacard.framework.Shareable;
import javacard.framework.AID;

public class Test_Server extends Applet implements Test_ServerInf{


    private Test_Server() {
    }

    public static void install(byte bArray[], short bOffset, byte bLength)
            throws ISOException {
        new Test_Server().register();
    }

    public void process(APDU apdu) throws ISOException {
        // TODO Auto-generated method stub

    }

    public Shareable getShareableInterfaceObject(AID clientAID, byte parameter) {
        return this;
    }

    public short method1(){
        return (short)0x01;
    }
    public short method2(){
        return (short)0x02;
    }

}

and the shareable interface file (Test_ServerInf.java):

package server;

import javacard.framework.Shareable;

public interface Test_ServerInf extends Shareable {

    public short method1();
    public short method2();

}
1chenar :

I found the source of this error. I used to load and install applets using an internally developed application instead of GPShell. When I tried to load and install applets using GPShell the problem solved and everything is ok. I don't know how that application compromises the loaded package but it works fine right know (After 2 weeks of debugging).

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=101683&siteId=1