Excited to tell you that our welfare activity has been upgraded - Paying only $5.00 + Freight to get JCOP J3H145 card and A40CR card.
Please check this post for more details.

Get 6D00 when sending Extended APDU

JavaCard Applet Development Related Questions and Answers.
RexLi
Posts: 9
Joined: Wed Dec 21, 2016 11:46 pm
Points :82
Contact:

Get 6D00 when sending Extended APDU

Post by RexLi » Wed Mar 15, 2017 2:01 am

Hi. I have a problem about Extended APDU. When I sent extended APDU below to my card via pyApdutool, it returned 6D00,which means the INS parameter is not supported. But INS: 20 has been already defined in my code. It made me confused. Does anyone help me figure out the problem? Thanks a lot.

Code: Select all

CLA: 00 INS: 20 P1: 00 P2: 00 LC: 00 03 10 LE: 00 03 
Data: 30 82 03 0C 30 82 01 F4 A0 03 02 01 02 02 03 01 00 20 30 0D 06 09 2A 86 48 86 F7 0D
01 01 05 05 00 30 3E 31 0B 30 09 06 03 55 04 06 13 02 50 4C 31 1B 30 19 06 03 55 04 0A 13
12 55 6E 69 7A 65 74 6F 20 53 70 2E 20 7A 20 6F 2E 6F 2E 31 12 30 10 06 03 55 04 03 13 09
43 65 72 74 75 6D 20 43 41 30 1E 17 0D 30 32 30 36 31 31 31 30 34 36 33 39 5A 17 0D 32 37
30 36 31 31 31 30 34 36 33 39 5A 30 3E 31 0B 30 09 06 03 55 04 06 13 02 50 4C 31 1B 30 19
06 03 55 04 0A 13 12 55 6E 69 7A 65 74 6F 20 53 70 2E 20 7A 20 6F 2E 6F 2E 31 12 30 10 06
03 55 04 03 13 09 43 65 72 74 75 6D 20 43 41 30 82 01 22 30 0D 06 09 2A 86 48 86 F7 0D 01
01 01 05 00 03 82 01 0F 00 30 82 01 0A 02 82 01 01 00 CE B1 C1 2E D3 4F 7C CD 25 CE 18 3E
4F C4 8C 6F 80 6A 73 C8 5B 51 F8 9B D2 DC BB 00 5C B1 A0 FC 75 03 EE 81 F0 88 EE 23 52 E9
E6 15 33 8D AC 2D 09 C5 76 F9 2B 39 80 89 E4 97 4B 90 A5 A8 78 F8 73 43 7B A4 61 B0 D8 58
CC E1 6C 66 7E 9C F3 09 5E 55 63 84 D5 A8 EF F3 B1 2E 30 68 B3 C4 3C D8 AC 6E 8D 99 5A 90
4E 34 DC 36 9A 8F 81 88 50 B7 6D 96 42 09 F3 D7 95 83 0D 41 4B B0 6A 6B F8 FC 0F 7E 62 9F
67 C4 ED 26 5F 10 26 0F 08 4F F0 A4 57 28 CE 8F B8 ED 45 F6 6E EE 25 5D AA 6E 39 BE E4 93
2F D9 47 A0 72 EB FA A6 5B AF CA 53 3F E2 0E C6 96 56 11 6E F7 E9 66 A9 26 D8 7F 95 53 ED
0A 85 88 BA 4F 29 A5 42 8C 5E B6 FC 85 20 00 AA 68 0B A1 1A 85 01 9C C4 46 63 82 88 B6 22
B1 EE FE AA 46 59 7E CF 35 2C D5 B6 DA 5D F7 48 33 14 54 B6 EB D9 6F CE CD 88 D6 AB 1B DA
96 3B 1D 59 02 03 01 00 01 A3 13 30 11 30 0F 06 03 55 1D 13 01 01 FF 04 05 30 03 01 01 FF
30 0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 03 82 01 01 00 B8 8D CE EF E7 14 BA CF EE B0
44 92 6C B4 39 3E A2 84 6E AD B8 21 77 D2 D4 77 82 87 E6 20 41 81 EE E2 F8 11 B7 63 D1 17
37 BE 19 76 24 1C 04 1A 4C EB 3D AA 67 6F 2D D4 CD FE 65 31 70 C5 1B A6 02 0A BA 60 7B 6D
58 C2 9A 49 FE 63 32 0B 6B E3 3A C0 AC AB 3B B0 E8 D3 09 51 8C 10 83 C6 34 E0 C5 2B E0 1A
B6 60 14 27 6C 32 77 8C BC B2 72 98 CF CD CC 3F B9 C8 24 42 14 D6 57 FC E6 26 43 A9 1D E5
80 90 CE 03 54 28 3E F7 3F D3 F8 4D ED 6A 0A 3A 93 13 9B 3B 14 23 13 63 9C 3F D1 87 27 79
E5 4C 51 E3 01 AD 85 5D 1A 3B B1 D5 73 10 A4 D3 F2 BC 6E 64 F5 5A 56 90 A8 C7 0E 4C 74 0F
2E 71 3B F7 C8 47 F4 69 6F 15 F2 11 5E 83 1E 9C 7C 52 AE FD 02 DA 12 A8 59 67 18 DB BC 70
DD 9B B1 69 ED 80 CE 89 40 48 6A 0E 35 CA 29 66 15 21 94 2C E8 60 2A 9B 85 4A 40 F3 6B 8A
24 EC 06 16 2C 73

User avatar
mabel
Posts: 234
Joined: Mon May 18, 2015 3:09 am
Points :1655
Contact:

Re: Get 6D00 when sending Extended APDU

Post by mabel » Wed Mar 15, 2017 3:19 am

Could you show some related code to us?

RexLi
Posts: 9
Joined: Wed Dec 21, 2016 11:46 pm
Points :82
Contact:

Re: Get 6D00 when sending Extended APDU

Post by RexLi » Wed Mar 15, 2017 3:24 am

My applet:

Code: Select all

public class RCApp extends Applet implements ExtendedLength {

    // Card status
    private final static byte ST_UNINITIALIZED     = (byte) 0x01;
    private final static byte ST_INITIALIZED       = (byte) 0x02;

    // Instructions
    private final static byte INS_INIT_UPDATE      = (byte) 0x50;
    private final static byte INS_EXT_AUTH         = (byte) 0x82;

    private final static byte INS_INITIALIZE       = (byte) 0x20;

    // Card is not initialized
    private final static short SW_CARD_ALREADY_INITIALIZED   = (short) 0x9102;

    private Data content;
    private short cardStatus;

     public static void install(byte[] bArray, short bOffset, byte bLength) {
          new REApp( bArray, bOffset, bLength);
     }

    public REApp(byte[] bArray, short bOffset, byte bLength) {
        cardStatus = ST_UNINITIALIZED;
        content = new Data();
       
        byte aidLen = bArray[bOffset];
        if (aidLen== (byte)0){
            register();
        } else {
            register(bArray, (short)(bOffset+1), aidLen);
        }
    }

    public void process(APDU apdu) {
          if (selectingApplet()) {
               return;
          }
        byte[] buffer = apdu.getBuffer();

        byte cla = buffer[ISO7816.OFFSET_CLA];
        byte ins = buffer[ISO7816.OFFSET_INS];
        SecureChannel sc = GPSystem.getSecureChannel();
        if ((byte) (cla & 0x80) == (byte) 0x80) {
            switch (ins) {
                case INS_INIT_UPDATE:
                case INS_EXT_AUTH:
                    apdu.setOutgoingAndSend(ISO7816.OFFSET_CDATA, sc.processSecurity(apdu));
                    return;
            default:
                ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
            }
        } else
            switch (ins) {
                case INS_INITIALIZE:
                    processInitialize(apdu);
                    break;
                default:
                    ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
            }
     }

    private void processInitialize(APDU apdu) {
        if(cardStatus == ST_INITIALIZED)
            ISOException.throwIt(SW_CARD_ALREADY_INITIALIZED);
        byte[] buffer = apdu.getBuffer();
        short lc = apdu.getIncomingLength();
        short rcvLen = apdu.setIncomingAndReceive();

        byte[] data = new byte[lc];
        short destOffset = 0;
        while (rcvLen > 0) {
            short dataOffset = apdu.getOffsetCdata();
            Util.arrayCopy(buffer, dataOffset, data, destOffset, rcvLen);
            destOffset += rcvLen;
            rcvLen = apdu.receiveBytes(dataOffset);
        }
        content.setData(data);
        cardStatus = ST_INITIALIZED;
    }

}


User avatar
mabel
Posts: 234
Joined: Mon May 18, 2015 3:09 am
Points :1655
Contact:

Re: Get 6D00 when sending Extended APDU

Post by mabel » Wed Mar 15, 2017 4:55 am

It seems that your code doesn't have any question. Under which protocol do you use Extended APDU?

RexLi
Posts: 9
Joined: Wed Dec 21, 2016 11:46 pm
Points :82
Contact:

Re: Get 6D00 when sending Extended APDU

Post by RexLi » Wed Mar 15, 2017 11:16 pm

mabel wrote:It seems that your code doesn't have any question. Under which protocol do you use Extended APDU?


I sent Extended APDU via T0. Is there any question with this protocol?

User avatar
mabel
Posts: 234
Joined: Mon May 18, 2015 3:09 am
Points :1655
Contact:

Re: Get 6D00 when sending Extended APDU

Post by mabel » Thu Mar 16, 2017 5:36 am

It's a little complex under T0. If you need to send data which is more than 255 bytes, then you have to implement command chaining.
With T=1 you can send large data of some 65535 bytes of in a single APDU. But if want to send that amount of data with T=0 then you will need more than 1 APDUs.

Samuel
Posts: 1
Joined: Thu May 10, 2018 11:54 pm
Points :8
Contact:

Re: Get 6D00 when sending Extended APDU

Post by Samuel » Fri May 11, 2018 12:20 am

In ISO 7816 T0 mode, The extension APDU is essentially split by serial commands and sent to the smart card. So it's a good idea to find a tool that supports an automatic split.

jennyvenus
Posts: 23
Joined: Sun Aug 23, 2015 11:14 pm
Points :314
Contact:

Re: Get 6D00 when sending Extended APDU

Post by jennyvenus » Thu May 17, 2018 3:29 am

under T0 mode, Use envelope command(C2) format APDU into TPDU and send them to card

TPDU format under T0
Cla ins p1 p2 p3
Or
Cla ins p1 p2 p3 + p3 length data

so the card must support envelope mechanism

Post Reply Previous topicNext topic

Who is online

Users browsing this forum: No registered users and 2 guests

JavaCard OS : Disclaimer