title: Installing applet (Java Card) on J3A081
body: <p>I've just created a very simple applet. It's a "hello world" in Java card technology. I pasted a code below.</p>
  
  <pre><code>public class helloworld extends Applet {
      private byte[] echoBytes;
      private static final short LENGTH_ECHO_BYTES = 256;
      /**
       * Installs this applet.
       * 
       * @param bArray
       *            the array containing installation parameters
       * @param bOffset
       *            the starting offset in bArray
       * @param bLength
       *            the length in bytes of the parameter data in bArray
       */
      public static void install(byte[] bArray, short bOffset, byte bLength) {
          new helloworld();
      }
  
      /**
       * Only this class's install method should create the applet object.
       */
      protected helloworld() {
          echoBytes = new byte[LENGTH_ECHO_BYTES];
          register();
      }
  
      /**
       * Processes an incoming APDU.
       * 
       * @see APDU
       * @param apdu
       *            the incoming APDU
       */
      @Override
      public void process(APDU apdu) {
          //Insert your code here
          //
          byte buffer[] = apdu.getBuffer();
          if ((buffer[ISO7816.OFFSET_CLA] ==  0) &amp;&amp; (buffer[ISO7816.OFFSET_INS] == (byte) (0xA4))){
              return;
          }
          short bytesRead = apdu.setIncomingAndReceive();
          short echoOffset = (short) 0;
  
          Util.arrayCopyNonAtomic(buffer, ISO7816.OFFSET_CDATA, echoBytes, echoOffset, bytesRead);
          echoOffset += bytesRead;
  
          apdu.setOutgoing();
          apdu.setOutgoingLength((short)(echoOffset + 5));
  
          //echo header
          apdu.sendBytes((short) 0, (short) 5);
          //echo data
          apdu.sendBytesLong(echoBytes, (short) 0, echoOffset);
      }
  }
  </code></pre>
  
  <p>After that I decided to install it on real card (J3A081) using Global Platform but it failed. 
  First of all, I checked if there is any applet already installed on card with command:</p>
  
  <pre><code>java -jar gp.jar -l
  </code></pre>
  
  <p>The response is:</p>
  
  <pre><code>AID: A000000003000000 (|........|)
       ISD OP_READY: Security Domain, Card lock, Card terminate, Default selected, CVM (PIN) management
  </code></pre>
  
  <p>When I decided to install applet using *.cap file I've got:</p>
  
  <pre><code>java -jar gp.jar -install krystian.cap
  
  javax.smartcardio.CardException: sun.security.smartcardio.PCSCException: Unknown error 0x1f
          at sun.security.smartcardio.ChannelImpl.doTransmit(ChannelImpl.java:219)
          at sun.security.smartcardio.ChannelImpl.transmit(ChannelImpl.java:90)
          at pro.javacard.gp.GlobalPlatform.transmit(GlobalPlatform.java:661)
          at pro.javacard.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:727)
          at pro.javacard.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:686)
          at pro.javacard.gp.GPTool.main(GPTool.java:453)
  Caused by: sun.security.smartcardio.PCSCException: Unknown error 0x1f
          at sun.security.smartcardio.PCSC.SCardTransmit(Native Method)
          at sun.security.smartcardio.ChannelImpl.doTransmit(ChannelImpl.java:188)
          ... 5 more
  Exception in thread "main" javax.smartcardio.CardException: sun.security.smartcardio.PCSCException: Unknown error 0x1f
          at sun.security.smartcardio.ChannelImpl.doTransmit(ChannelImpl.java:219)
          at sun.security.smartcardio.ChannelImpl.transmit(ChannelImpl.java:90)
          at pro.javacard.gp.GlobalPlatform.transmit(GlobalPlatform.java:661)
          at pro.javacard.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:727)
          at pro.javacard.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:686)
          at pro.javacard.gp.GPTool.main(GPTool.java:453)
  Caused by: sun.security.smartcardio.PCSCException: Unknown error 0x1f
          at sun.security.smartcardio.PCSC.SCardTransmit(Native Method)
          at sun.security.smartcardio.ChannelImpl.doTransmit(ChannelImpl.java:188)
          ... 5 more
  </code></pre>
  
  <p>Could you tell me what i'm doing wrong. This card is completly new, never used before. I'm using ACR122U NFC Card reader and card J3A081 by NXP. </p>
  
  <p><strong>EDIT</strong></p>
  
  <p>After a few hours of tries I managed to achive a few things. First of all, I updated a drivers for ACR122U smart card reader. Moreover I get familiar with GPShell and created a simple script:</p>
  
  <pre><code>mode_211
  enable_trace
  establish_context
  card_connect
  select -AID a000000003000000
  open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f   
  card_disconnect
  release_context
  </code></pre>
  
  <p>Which outputs:</p>
  
  <pre><code>mode_211
  enable_trace
  establish_context
  card_connect
  select -AID a000000003000000
  Command --&gt; 00A4040008A000000003000000
  Wrapped command --&gt; 00A4040008A000000003000000
  Response &lt;-- 6F658408A000000003000000A5599F6501FF9F6E06479100783400734A06072A864                                                                   886FC6B01600C060A2A864886FC6B02020101630906072A864886FC6B03640B06092A864886FC6B0                                                                   40215650B06092B8510864864020103660C060A2B060104012A026E01029000
  open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4                                                                   f -enc_key 404142434445464748494a4b4c4d4e4f
  Command --&gt; 80CA006600
  Wrapped command --&gt; 80CA006600
  Response &lt;-- 664C734A06072A864886FC6B01600C060A2A864886FC6B02020101630906072A864                                                                   886FC6B03640B06092A864886FC6B040215650B06092B8510864864020103660C060A2B060104012                                                                   A026E01029000
  Command --&gt; 805000000853DFBA4B056DAE8800
  Wrapped command --&gt; 805000000853DFBA4B056DAE8800
  Response &lt;-- 0000510101086197846701020018CC282BD831DB0145313B12DB3E169000
  Command --&gt; 84820100103294E6632BFE5E59879A2C9C03EE345E
  Wrapped command --&gt; 84820100103294E6632BFE5E59879A2C9C03EE345E
  Response &lt;-- 9000
  card_disconnect
  release_context
  </code></pre>
  
  <p>So i guess that everything works fine, but when I want to install applet using this:</p>
  
  <pre><code>mode_211
  enable_trace
  establish_context
  card_connect
  select -AID a000000003000000
  open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f
  install -file helloworld.cap -nvDataLimit 2000 -instParam 00 -priv 2
  card_disconnect
  release_context
  </code></pre>
  
  <p>I got an exception:</p>
  
  <pre><code>mode_211
  enable_trace
  establish_context
  card_connect
  select -AID a000000003000000
  Command --&gt; 00A4040008A000000003000000
  Wrapped command --&gt; 00A4040008A000000003000000
  Response &lt;-- 6F658408A000000003000000A5599F6501FF9F6E06479100783400734A06072A864                                                                   886FC6B01600C060A2A864886FC6B02020101630906072A864886FC6B03640B06092A864886FC6B0                                                                   40215650B06092B8510864864020103660C060A2B060104012A026E01029000
  open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4                                                                   f -enc_key 404142434445464748494a4b4c4d4e4f
  Command --&gt; 80CA006600
  Wrapped command --&gt; 80CA006600
  Response &lt;-- 664C734A06072A864886FC6B01600C060A2A864886FC6B02020101630906072A864                                                                   886FC6B03640B06092A864886FC6B040215650B06092B8510864864020103660C060A2B060104012                                                                   A026E01029000
  Command --&gt; 8050000008ADBD20501C2C87A400
  Wrapped command --&gt; 8050000008ADBD20501C2C87A400
  Response &lt;-- 0000510101086197846701020019DFABEED157EA9E2F7E75EAA739E89000
  Command --&gt; 848201001014781742A86F6C5026B0D999238ABEBA
  Wrapped command --&gt; 848201001014781742A86F6C5026B0D999238ABEBA
  Response &lt;-- 9000
  install -file helloworld.cap -nvDataLimit 2000 -instParam 00 -priv 2
  Command --&gt; 80E602001E07D0D1D2D3D4D50108A000000003000000000AEF08C6020160C80207D0                                                                   0000
  Wrapped command --&gt; 84E602002607D0D1D2D3D4D50108A000000003000000000AEF08C6020160                                                                   C80207D000B9A71938B63B8CFB00
  Response &lt;-- 009000
  Command --&gt; 80E80000EFC4820157010011DECAFFED010204000107D0D1D2D3D4D50102001F0011                                                                   001F000C000B0026000C003B0019000F0000005D00020001000C01010004000B01000107A0000000                                                                   62010103000C0108D0D1D2D3D4D50101000C06000C00800300FF0007010000001707003B00011018                                                                   8C0000188B00017A02308F00023D8C00033B7A0521198B00042D198B00053B7B0006031A037B0006                                                                   928D00073B19037B0006928B00087A08001900020001000103000C48656C6C6F20576F726C642100                                                                   00000005002600090680030003800301010000000600000103800A0103800A060500000006801002                                                                   03800A0809000F000000
  Wrapped command --&gt; 84E80000F7C4820157010011DECAFFED010204000107D0D1D2D3D4D50102                                                                   001F0011001F000C000B0026000C003B0019000F0000005D00020001000C01010004000B01000107                                                                   A000000062010103000C0108D0D1D2D3D4D50101000C06000C00800300FF0007010000001707003B                                                                   000110188C0000188B00017A02308F00023D8C00033B7A0521198B00042D198B00053B7B0006031A                                                                   037B0006928D00073B19037B0006928B00087A08001900020001000103000C48656C6C6F20576F72                                                                   6C64210000000005002600090680030003800301010000000600000103800A0103800A0605000000                                                                   0680100203800A0809000F00000067CDD7B27E70D011
  load() returns 0x0000001F (Urzdzenie doczone do komputera nie dziaa.
  </code></pre>
  
  <p>Could anyone got a similar error? Do you know what thoes it means?</p>
  
  <p><strong>EDIT 2</strong>
  I finally managed to install applet on my card. I used modified GlobalPlatformPro, as vlp wrote, it's necessary to change load block to 16 bytes. </p>
  
  <p>But I was only able to install hello world applet, during processing mine, GlobalPlatformPro returned exception:</p>
  
  <pre><code>java -jar gp_16byteLoadBlock.jar --install inzynierka.cap
  pro.javacard.gp.GPException: LOAD failed SW: 6A80
          at pro.javacard.gp.GlobalPlatform.check(GlobalPlatform.java:1092)
          at pro.javacard.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:728)
          at pro.javacard.gp.GlobalPlatform.loadCapFile(GlobalPlatform.java:686)
          at pro.javacard.gp.GPTool.main(GPTool.java:453)
  </code></pre>