I just want to know the APDU commands and sequences/algorithm to make a successful read. Apologies, I'm very new to this SAM-NFC-RF ID programming. Hope you can help me. Use the scriptgen tool to convert the CAP file into an (installation) APDU script file. Then use the apdutool to send the script file (installation APDU commands and CAP file) to the C- JCRE, or a JCRE on the Java Card device. The JCRE stores the CAP file in the card's memory. The following figure summarizes these steps.
The procedures for CAP file download and applet instance creation are described in the following sections, as are the on-card installer APDU protocol events and APDU types.
Downloading the CAP File
In this procedure, the CAP file is downloaded but applet creation (instantiation) is postponed until a later time. Follow these steps to perform this installation:
- Use
scriptgen
to convert a CAP file to an APDU script file. - Prepend these commands to the APDU script file:
- Append this command to the APDU script file:
- Invoke
apdutool
with this APDU script file path as the argument.
Creating an Applet Instance
In this procedure, the applet from a previously downloaded CAP file or an applet compiled in the mask is created. For example, follow these steps to create the JavaPurse applet:
- Determine the applet AID.
- Create an APDU script similar to this:
- Invoke
apdutool
with this APDU script file path as the argument.
On-card Installer APDU Protocol
The on-card installer APDU protocol follows a specific time sequence of events in the transmission of Applet Protocol Data Units as shown in Figure 9-2.
Figure 9-2 On-card Installer APDU Transmission Sequence
Description of 'Figure 9-2 On-card Installer APDU Transmission Sequence'
APDU Types
There are many different APDU types, which are distinguished by their fields and field values. The following sections describe these APDU types in more detail, including their bit frame formats, field names and field values.
- Note:In the following APDU commands, the
x
in the second nibble of the class byte indicates that the installer can be invoked on channels 0, 1, or 2. For example,0x8x
.
Select APDU Command
Table 9-5 specifies the field sequence in the
Select
APDU, which is used to invoke the on-card installer. Table 9-5 Select APDU Command
Command | Lc | Installer | Le |
---|---|---|---|
0x0x, 0xa4, 0x04, 0x00 | Lc field | Installer AID | Le field |
Response APDU Command
Table 9-6 specifies the field sequence in the Response APDU. A Response APDU is sent as a response by the on-card installer after each APDU that it receives. The Response APDU can be either an Acknowledgment (called an ACK), which indicates that the most recent APDU was received successfully, or it can be a Negative Acknowledgement (called a NAK), which indicates that the most recent APDU was not received successfully and must be either resent or the entire installer transmission must be restarted. The first ACK indicates that the on-card installer is ready to receive. The value for an ACK frame SW1SW2 is 9000, and the value for a NAK frame SW1SW2 is 6XXX.
Table 9-6 Response APDU Command
Data | Response |
---|---|
[optional response data] | SW1SW2 |
CAP Begin
Table 9-7 specifies the field sequence in the CAP Begin APDU. The CAP Begin APDU is sent to the on-card installer, and indicates that the CAP file components are going to be sent next, in sequentially numbered APDUs.
Table 9-7 CAP Begin APDU Command
Command | Lc | data | Le |
---|---|---|---|
0x8x, 0xb0, 0x00, 0x00 | [Lc field] | [optional data] | Le field |
CAP End
Table 9-8 specifies the field sequence in the CAP End APDU. The CAP End APDU is sent to the on-card installer, and indicates that all of the CAP file components have been sent.
Table 9-8 CAP End APDU Command
Command | Lc | data | Le |
---|---|---|---|
0x8x, 0xba, 0x00, 0x00 | [Lc field] | [optional data] | Le field |
Component ## Begin
Table 9-9 specifies the field sequence in the Component ## Begin APDU. The double pound sign indicates the component token of the component being sent. The CAP file is divided into many components, based on class, method, and so on. The Component ## Begin APDU is sent to the on-card installer, and indicates that component ## of the CAP file is going to be sent next.
Table 9-9 Component ## Begin APDU Command
Command | Lc | data | Le |
---|---|---|---|
0x8x, 0xb2, 0x##, 0x00 | [Lc field] | [optional data] | Le field |
Component ## End
Table 9-10 specifies the field sequence in the Component ## End APDU. The Component ## End APDU is sent to the on-card installer, and indicates that component ## of the CAP file has been sent.
Table 9-10 Component ## End APDU Command
Command | Lc | data | Le |
---|---|---|---|
0x8x, 0xbc, 0x##, 0x00 | [Lc field] | [optional data] | Le field |
Component ## Data
Table 9-11 specifies the field sequence in the Component ## Data APDU. The Component ## Data APDU is sent to the on-card installer, and contains the data for component ## of the CAP file.
Table 9-11 Component ## Data APDU Command
Command | Lc | data | Le |
---|---|---|---|
0x8x, 0xb4, 0x##, 0x00 | Lc field | Data field | Le field |
Create Applet
Table 9-12 specifies the field sequence in the Create Applet APDU. The Create Applet APDU is sent to the on-card installer, and tells the on-card installer to create an applet instance from each of the already sequentially transmitted components of the CAP file.
Table 9-12 Create Applet APDU Command
Command | Lc | AID length | AID | Parameter length | Parameter | Le |
---|---|---|---|---|---|---|
0x8x, 0xb8, 0x00, 0x00 | Lc field | AID length field | AID field | parameter length field | [parameters] | Le field |
Abort
Table 9-13 specifies the data sequence in the Abort APDU. The Abort APDU indicates that the transmission of the CAP file is terminated, and that the transmission is not complete and must be redone from the beginning in order to be successful.
Table 9-13 Abort APDU Command
Command | Lc | data | Le |
---|---|---|---|
0x8x, 0xbe, 0x00, 0x00 | Lc field | [optional data] | Le field |
APDU Responses to Installation Requests
If a command completes successfully, the installer sends a response code of 0x9000. A number of codes can be sent in response to unsuccessful installation requests, as shown in Table 9-14.
Table 9-14 APDU Responses to Installation Requests
Response Code | Description |
---|---|
0x6402 | Invalid CAP file magic number.
|
0x6403 | Invalid CAP file minor number.
|
0x6404 | Invalid CAP file major number.
|
0x640b | Integer not supported.
|
0x640c | Duplicate package AID found.
|
0x640d | Duplicate Applet AID found.
|
0x640f | Installation aborted.
|
0x6421 | Installer in error state.
|
0x6422 | CAP file component out of order.
|
0x6424 | Exception occurred.
|
0x6425 | Install APDU command out of order.
|
0x6428 | Invalid component tag number.
|
0x6436 | Invalid install instruction.
|
0x6437 | On-card package max exceeded.
|
0x6438 | Imported package not found.
|
0x643a | On-card applet package max exceeded.
|
0x6442 | Maximum allowable package methods exceeded.
|
0x6443 | Applet not found for installation.
|
0x6444 | Applet creation failed.
|
0x644f | Package name is too long.
|
0x6445 | Maximum allowable applet instances exceeded.
|
0x6446 | Memory allocation failed.
|
0x6447 | Imported class not found.
|
A Sample APDU Script
The following is a sample APDU script to download, create, and select the HelloWorld applet.