I just created a very simple applet. This is a “hello world” in Java map technology. I pasted the code below.
public class helloworld extends Applet {
private byte[] echoBytes;
private static final short LENGTH_ECHO_BYTES = 256;
public static void install(byte[] bArray, short bOffset, byte bLength) {
new helloworld();
}
protected helloworld() {
echoBytes = new byte[LENGTH_ECHO_BYTES];
register();
}
@Override
public void process(APDU apdu) {
byte buffer[] = apdu.getBuffer();
if ((buffer[ISO7816.OFFSET_CLA] == 0) && (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));
apdu.sendBytes((short) 0, (short) 5);
apdu.sendBytesLong(echoBytes, (short) 0, echoOffset);
}
}
After that, I decided to install it on a real map (J3A081) using the global platform, but this did not succeed. First of all, I checked if there is any applet already installed on the map with the command:
java -jar gp.jar -l
Answer:
AID: A000000003000000 (|........|)
ISD OP_READY: Security Domain, Card lock, Card terminate, Default selected, CVM (PIN) management
When I decided to install the applet using the * .cap file, I have:
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
Could you tell me what I am doing wrong. This card is brand new, never used before. I am using an NFC Card Reader ACR122U and a NXP J3A081 card.
EDIT
. , - ACR122U. , GPShell script:
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
:
mode_211
enable_trace
establish_context
card_connect
select -AID a000000003000000
Command
Wrapped command
Response <
open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4 f -enc_key 404142434445464748494a4b4c4d4e4f
Command
Wrapped command
Response <
Command
Wrapped command
Response <
Command
Wrapped command
Response <
card_disconnect
release_context
, , , , :
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
:
mode_211
enable_trace
establish_context
card_connect
select -AID a000000003000000
Command
Wrapped command
Response <
open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4 f -enc_key 404142434445464748494a4b4c4d4e4f
Command
Wrapped command
Response <
Command
Wrapped command
Response <
Command
Wrapped command
Response <
install -file helloworld.cap -nvDataLimit 2000 -instParam 00 -priv 2
Command
Wrapped command
Response <
Command
Wrapped command
load() returns 0x0000001F (Urzdzenie doczone do komputera nie dziaa.
- ? , ?
2
, . GlobalPlatformPro, vlp, 16 .
hello world applet, my, GlobalPlatformPro:
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)