From Dogtag
Jump to: navigation, search

CoolKey Applet Information

The following is a collection of information about the CoolKey applet. This document includes general information that would assist in compiling a document to Gemalto that would describe to them how to create a card at the factory on behalf of the customer.

We are working on code that allows the applet to accept a "Phone Home URL" upon initialization at the factory. The following information takes that into account.

  • Applet Package AID: 627601FF0000
  • Application Instance AID: 627601FF000000
  • Applet Instance size: 18000 bytes
  • Example Recommended applet file: 1.3.44724DDE.ijc, note this will change with subsequent builds of the applet.
    • Here is a build of the latest applet: Latest Applet
    • This applet has support for the including a "Phone Home URL" which is discussed below.

The new builds numbers will be appended at the end of the file name as new builds are done.

  • Applet Install Parameters Data
  The following is a pseudo code fragment that represents how the server instantiates the applet
  during a "Format" operation.
  Here we will add the data needed for the phone home url:

A APDU is being constructed with a buffer of data.

//Install Command APDU
   Buffer data;
   data.reserve(32); // pre-allocate
2-bytes   data += packageAID.size();
n-bytes   data += packageAID;
2-bytes   data += appletAID.size();
n-bytes   data += appletAID;
2-bytes   data += appletAID.size();
n-bytes   data += appletAID;
1-byte   data += 0x01; // length of application privileges byte
1-byte   data += appPrivileges;
   //Next block will be application specific initialization data
   //This will include an example phone home url
   // Phone home url will be different for each deployment
   Buffer phone_home_url="abcd";
   Buffer installParams; 
1-byte  installParams += 0xEF;
1-byte   installParams += 0x04;
1-byte   installParams += 0xC8;
1-byte   installParams += 0x02;
   Short instanceSize = 18000; Example applet instance size
//Next 2 bytes represent the instance size
1-byte   installParams += (instanceSize>>8) & 0xff;
1-byte   installParams += instanceSize & 0xff;
1-byte   installParams += 0xC9;  //Constant app specific data tag
   Byte appDataSize=0x07; //Example size of application data
1-byte   installParams += appDataSize;
   Byte phoneHomeUrlSize = 0x4 //example phone home URL size from above
1-byte   installParams += phoneHomeUrlSize;
n-bytes  installParams +=  phone_home_url;
1-byte   installParams += 0x0; //Optional memory size, default to 0
1-byte   installParams += 0x0; //Optional bit mask size, default to 0
//Append app specific data to the install data
2-bytes   data += installParams.size();
n-bytes   data += installParams;
1-byte    data += (BYTE) 0x00; // size of token return data
   //Example data string of install command
   // Phone Home URL "abc"
 //Install APDU
   //84 E6 0C 00 32 [INSTALL]
 //Install Header Data
   //06 62 76 01 FF 00 00 07 62 76 01 FF 00 00 00 
   //07 62 76 01 FF 00 00 00 01 00 0F EF 04 C8 02 20 00 C9
//What follows is the entire app specific initialization data including the phone home url
App specific data length  0x7
Phone Home URL length     0x4
Phone Home URL            4 bytes
Custom memory data size   0x0
Custom bitflags data size 0x0
   // 07 04 61 62 63 64 00 00 00