Friday, March 21, 2008

Setting up the number of Channel in BIP

<Instance Aid="A0000000185000000000000052414441" Index="1" ApplicationSpecificParameters="7110A0000000185201050000000040534357" EepromSize="0000" RamSize="0000" InstallToken="" Privilege="00">
<!--If you add another Instance, you should increase his Index number-->
<GSMParameter TextMaxLength="14" MaxNumberOfMenuEntries="01" PriorityLevel="FF" TimerMaxNumber="00" Menus="0000">
<!--You can customize the GSM parameters of this Instance here-->
<SIMR5Parameter MaximumChannels="02">
<!--2 Channel -->
</SIMR5Parameter>

</GSMParameter>
<UICCParameter>
<!--You can customize the UICC parameters of this Instance here-->
<UICCToolkitParameter>
<UICCR6ToolkitParameter MaximumNumberOfServices="00"/>
</UICCToolkitParameter>
<!--You can customize the UICC Access Application parameters of this Instance here-->
<UICCAccessApplicationParameter Index="1">
<UICCR6AccessApplicationParameter AccessDomainParameter="00" AccessDomainData=""/>
</UICCAccessApplicationParameter>
</UICCParameter>
</Instance>

Sunday, March 16, 2008

Multimedia Ready Card

AID : A0 00 00 00 18 43 4D 08 09 0A 0B 0C 00 00 00

Edit : C:\Documents and Settings\$User\GemXploreDeveloper\keyfiles\scws carddefault.keys
aid.security_domain=hex/A0 00 00 00 18 43 4D 08 09 0A 0B 0C 00 00 00

And For MMready1.0 card, you need modify something in your .gdp file to be able to load it in your real card.
Remove the SecurityDomainAid value in gdp file. For example,
  1. Modify SecurityDomainAid="A0000000185201050000000030534357" to SecurityDomainAid=""
  2. Modify ApplicationSpecificParameters="7110A0000000185201050000000040534357" to ApplicationSpecificParameters="7110A0000000185201050000000030534357"
reference : Gemalto forum

Parsing Query in Smart Web Server

SharedByteString name = new SharedByteString();
SharedByteString value= new SharedByteString();
StringValueBuffer stringValueBuffer = new StringValueBuffer((short) 50, (short) 100); //short sizeRAM, short sizeEEPROM
FormParser formParser = new FormParser(true);
ByteString queryString = req.getQueryString();
if (queryString != null) {
formParser.parse(this, queryString, stringValueBuffer, name,value);
}

Display response page in SCWS

HttpCardServletOutputStream

You can call it in following methods :
  1. public void doDelete(HttpCardServletRequest req,httpCardServletResponse resp) throws Exception
  2. public void doGet(HttpCardServletRequest req, HttpCardServletResponse resp)throws Exception
  3. public void doHead(HttpCardServletRequest req, HttpCardServletResponse resp)throws UserException, Exception
  4. public void doOptions(HttpCardServletRequest req,HttpCardServletResponse resp) throws Exception
  5. public void doPost(HttpCardServletRequest req, HttpCardServletResponse resp)throws Exception
  6. public void doPut(HttpCardServletRequest req, HttpCardServletResponse resp)throws Exception
byte [] hello = {'h','e','l','l','o'};
resp.setStatus(HttpCardServletResponse.SC_OK);
resp.setContentType(stringContainer.getConstantString(HttpStringContainer.TEXT_HTML_KEY));
HttpCardServletOutputStream out = resp.getOutputStream();
resp.setContentLength((short)5);
out.write(hello, (short) 0,(short)5);

Friday, March 14, 2008

Get Input stream content in Smart Card Web Server

HttpCardServletInputStream

You can call it in following methods :
  1. public void doDelete(HttpCardServletRequest req,httpCardServletResponse resp) throws Exception
  2. public void doGet(HttpCardServletRequest req, HttpCardServletResponse resp)throws Exception
  3. public void doHead(HttpCardServletRequest req, HttpCardServletResponse resp)throws UserException, Exception
  4. public void doOptions(HttpCardServletRequest req,HttpCardServletResponse resp) throws Exception
  5. public void doPost(HttpCardServletRequest req, HttpCardServletResponse resp)throws Exception
  6. public void doPut(HttpCardServletRequest req, HttpCardServletResponse resp)throws Exception
byte data;
byte[] content = JCSystem.makeTransientByteArray((short) req .getContentLength(), JCSystem.CLEAR_ON_RESET);

HttpCardServletInputStream in = req.getInputStream();
try {
for (short i = 0; i < content.length; i++)
{
data = in.read();
content[i] = data;
}
}
catch (EndOfStreamException e) { }
// or
in.read(content,0,content.length);

HttpCardServletContainer

It manages (add and remove) servlet

HttpCardServlet servlet
HttpCardServletContainer servletContainer;
static byte[] prefix = { '/', 'p','o','s','t'}
AID server = JCSystem.lookupAID(buffer, offset, aidLen);
servletContainer = (HttpCardServletContainer) JCSystem.getAppletShareableInterfaceObject( server, HttpCardServletContainer.HTTP_CARD_SERVLET_CONTAINER_SERVICE);
servletContainer.add(servlet, new ByteString(prefix));
servletContainer.remove(servlet)

You can call it http://URL/post

Thursday, March 13, 2008

Parsing Form in Smart Web Server

There are 2 class that have been already provided FormHandler and FormParser.

FormHandler
We should implement FormHandler in class. This class has 3 methods, start , form and end.

Start : start of the document parsing, perhaps you can add some codes that initialized the value of variable

Form : Each form value will be known in here. Just compare the form value with the first input parameter.

End : end of the document parsing

for example :
import com.gemplus.javacard.multimedia.framework.ByteString;
import com.gemplus.javacard.multimedia.framework.FormHandler;

public class FormPosting implements FormHandler {

public byte [] username;
public byte [] usermail;
private static final byte[] USERNAME={'u','s','e','r','n','a','m','e'};
private static final byte[] USERMAIL={'u','s','e','r','m','a','i','l'};

public void start() {
username=null;
usermail=null;
}

public void form(ByteString arg0, ByteString arg1) {

if (arg0.compareTo(USERNAME, (short) 0, (short) USERNAME.length) == 0)
{
username = arg1.getBytes();
}
else if (arg0.compareTo(USERMAIL, (short) 0, (short) USERMAIL.length) == 0)
usermail = arg1.getBytes();

}


public void end() {
// TODO Auto-generated method stub
}

}

FormParser
SharedByteString name = new SharedByteString();
SharedByteString value= new SharedByteString();
StringValueBuffer stringValueBuffer = new StringValueBuffer((short) 50, (short) 100); //short sizeRAM, short sizeEEPROM
FormParser formParser = new FormParser(true);

// some methods
HttpCardServletRequest req
byte data;
byte[] content = JCSystem.makeTransientByteArray((short) req.getContentLength(), JCSystem.CLEAR_ON_RESET);
stringValueBuffer.reset();

HttpCardServletInputStream in = req.getInputStream();
try {
for (short i = 0; i < content.length; i++) {
data = in.read();
content[i] = data;
} } catch (EndOfStreamException e) { }
// URL encoded
formParser.parse(FormPosting, new ByteString(content), stringValueBuffer, name, value);

Saturday, February 23, 2008

Create File with Java Card code

You should read
  • ETSI TS 102.226 (8.2.1.3.2.2.2 and 8.2.1.3.2.2.4) that explains the UICC access parameters. The Application is only granted to access files according UICC access parameters.
  • ETSI TS 102.241(8) that describes AdminFIleView objects and operation
  • Each file operation is mentioned at ETSI TS 102.222 (8)
2 different classes of file
  • Dedicated files DF (directories)
  • Elementary files EF (data files)
3 different types of elementary files
  • Transparent files
  • Linear fixed files
  • Cyclic files
Package : uicc.access

EF TAG
  1. File descriptor(TS 102.221 11.1.1.4.3)*
    • Tag = '82'
    • Length = '02' or '04'
    • value :
      • Data Coding ='21'
      • File Desc value :
        • No Information given = '20'
        • Transparent Structure ='41'
        • Linear Fixed = '42'
        • Cyclic = '46'
      • Record length = '0001' to '00FF'
      • Number of record = '01' to 'FE'
  2. File ID*
    • Tag = '83'
    • Length = '02'
  3. Life Cycle Status Information*
    • Tag = '8A'
    • Length = '01'
  4. Security attribute *
    • Tag Compact ='8A', Expanded = 'AB', Referenced ='8B'
    • Length = n
  5. File Size *
    • Tag = '80'
    • Length = n
  6. Short File Identifier
    • Tag ='88'
    • Length = '00' or '01'
  7. Proprietary
    • Tag = 'A5' or '85'
DF TAG
  1. File descriptor*
    • Tag = '82'
    • Length = '02'
  2. File ID*
    • Tag = '83'
    • Length = '02'
  3. DF Name(AID)
    • Tag = '84'
    • Length
    • Value 1-16 byte
  4. Life Cycle Status Information*
    • Tag = '8A'
    • Length = '01'
  5. Total File Size*
    • tag ='81'
    • length
  6. Security Atribute*
    • Tag Compact ='8C', Expanded = 'AB', Referenced ='8B'
    • Length = n
  7. Pin Status Template *
    • Tag = 'C6'
    • length
    • Length = n
  8. Data Coding Byte
    • Tag ='21'
  9. Proprietary
    • Tag = 'A5' or '85'


Friday, February 22, 2008

SCWS Local Server

  1. Open BIP TCP Server mode
  2. At least support 2 channel, HTTP and HTTPS
  3. HTTP port 3516
  4. HTTPS (TLS) port 4116
  5. Enable automatically, not such BIP Client mode

Thursday, February 21, 2008

Terminal Response

  • OPEN CHANNEL <-- Channel Identifier
ProactiveResponseHandler ProRespHdlr; // get the system instance
ProRespHdlr = ProactiveResponseHandlerSystem.getTheHandler();
ChannelID = ProRespHdlr.getChannelIdentifier() ;
  • SEND DATA <-- Channel Data Length
  • CLOSE CHANNEL <-- OK
  • GET CHANNEL STATUS <-- Channel Status
  • RECEIVE DATA <-- Channel Data Length , Data
ProactiveResponseHandler ProRespHdlr; // get the system instance
ProRespHdlr = ProactiveResponseHandlerSystem.getTheHandler();
ProRespHdlr.findTLV(TAG_CHANNEL_DATA ,0);
sOffset= ProRespHdlr.copyChannelData(byte[] dstBuffer, short dstOffset, short dstLength) ;
ProRespHdlr.findTLV(TAG_CHANNEL_DATA_LENGTH ,0);
datalength=ProRespHdlr.getValueVyte((short)0x0000);

EVENT DOWNLOAD CHANNEL STATUS

  1. Channel Status*
    1. Channel Status Tag = '38'
    2. Length = '02'
    3. Channel Status
      1. bit 1 -3 : Channel Identifier 1- 7 , 0 --> No Channel Available
      2. BIP TCP Client
        • bit 4-7 : RFU
        • bit 8 : 0 -> Link not established/Packet data service not activated, 1 -> Opposite
      3. BIP TCP Server
        • bit 4-6 : RFU
        • bit 7-8 :
          • 00 = TCP in CLOSED state
          • 01 = TCP in LISTEN state
          • 10 = TCP in ESTABLISHED state
          • 11 = reserved
  1. Device identities*
    1. device identities tag = '82'
    2. Length = '02'
    3. Source Device identity = '82' --> Terminal
    4. Destination Device Identity ='81' --> UICC
  2. Event List*
    1. Event List Tag= '19'
    2. Length = '01'
    3. Event List : Channel Status = '0A'
  3. Bearer Description
    1. Bearer Description Tag = '35'
    2. Length
    3. Bearer Type = '02' (GSM/3GPP) --> GPRS
    4. Bearer Parameter
      1. Precedence Class ( Priority) = '00'
      2. Delay Class = '00'
      3. Reability Class = '03'
      4. Peak Throughput '00'
      5. Mean Throughput = '00'
      6. PDP IP = '02'
  4. Other Data Destination Address Tag = '3E'
    1. Length = '05'
    2. Type of Address = '21' (IPv4)
    3. Address ( 4 byte , XX.XX.XX.XX)
You don't need to remember the tag value if you use appendTLV function. All of the tag value are explained briefly in uicc.toolkit.ToolkitConstant library.

note :
* mark means mandatory
Only one event in Event list
Bearer Description is needed after OPEN Channel

Device Identities SCWS











CommandSourceDestination
Open ChannelUICCTerminal
Set Up Event ListUICCTerminal
Close ChannelUICCChannel x
Receive dataUICCChannel x
Send DataUICCChannel x
Get Channel StatusUICCTerminal
Event Download Data AvailableTerminalUICC
Event Download Channel StatusTerminalUICC

Command Coding SCWS

  • Open Channel ='40'
  • Set Up Even List = '05'
  • Close Channel = '41'
  • Receive data = '42'
  • Send data = '43'
  • Get Channel Status = '44'

EVENT DOWNLOAD DATA AVAILABLE

  1. Event Download Tag* = '22'
  2. Device identities*
    1. device identities tag = '82'
    2. Length = '02'
    3. Source Device identity = '82' --> Terminal
    4. Destination Device Identity = '81' --> UICC
  3. Channel Status*
    1. Channel Status Tag = '38'
    2. Length = '02'
    3. Channel Status
      1. bit 1 -3 : Channel Identifier 1- 7 , 0 --> No Channel Available
      2. BIP TCP Client
        • bit 4-7 : RFU
        • bit 8 : 0 -> Link not established/Packet data service not activated, 1 -> Opposite
      3. BIP TCP Server
        • bit 4-6 : RFU
        • bit 7-8 :
          • 00 = TCP in CLOSED state
          • 01 = TCP in LISTEN state
          • 10 = TCP in ESTABLISHED state
          • 11 = reserved
  4. Channel Data Length*
    1. Channel Data Length Tag = '37'
    2. Length = '01'
    3. Channel data length
  5. Event List*
    1. Event List Tag= '19'
    2. Length = '01'
    3. Event List = '09' --> Data Available
You don't need to remember the tag value if you use appendTLV function. All of the tag value are explained briefly in uicc.toolkit.ToolkitConstant library.

note :
* mark means mandatory

Wednesday, February 20, 2008

SET UP EVENT LIST

Set Up Event List can be used for set new event, replace old event or remove an event.
The terminal will send TERMINAL RESPONSE(OK) if it has been removed or set the list of event. If Event list is null, it means the terminal to remove all events in the list.
  1. Command details*
    1. command details tag = '81'
    2. length = '03' (1 byte)
    3. command number 01 - FE (1 byte)
    4. Type of Command ='05' (SET UP EVENT LIST)
    5. Command Qualifier : RFU
  2. Device identities*
    1. device identities tag = '82'
    2. Length = '02'
    3. Source Device identity = '81' --> UICC
    4. Destination Device Identity ='82' --> Terminal
  3. Event List*
    1. Event List Tag= '19'
    2. Length = '01'
    3. Event List
      • Data Available = '09'
      • Channel Status = '0A'
You don't need to remember the tag value if you use appendTLV function. All of the tag value are explained briefly in uicc.toolkit.ToolkitConstant library.

note :
* mark means mandatory

GET CHANNEL STATUS

  1. Command details*
    1. command details tag = '81'
    2. length = '03' (1 byte)
    3. command number 01 - FE (1 byte)
    4. Type of Command ='44' (GET CHANNEL STATUS)
    5. Command Qualifier : RFU
  2. Device identities*
    1. device identities tag = '82'
    2. Length = '02'
    3. Source Device identity = '81' --> UICC
    4. Destination Device Identity = '82' --> Terminal

SEND DATA

The data can be sent immediately or store in a Tx buffer.
  1. Command details*
    1. command details tag = '81'
    2. length = '03' (1 byte)
    3. command number 01 - FE (1 byte)
    4. Type of Command ='43' (SEND DATA)
    5. Command Qualifier : RFU
  2. Device identities*
    1. device identities tag = '82'
    2. Length = '02'
    3. Source Device identity = '81' --> UICC
    4. Destination Device Identity = '21'-'27' --> channel ID (PRE_ID _CHANNEL_BASE='20')
  3. Channel Data
    1. Channel Data Length = '36'
    2. Length = '01'
    3. Channel data length
  4. Alpha Identifier
    1. Alpha identifier TAG = '05'
    2. Length = 0
    3. Alpha Identifier (TS 131 102)
  5. Icon Identifier
    1. Icon Identifier Tag
    2. Length = '02'
    3. Icon Qualifier
      1. bit 1, 0 = self explanatory, 1 = non self explanatory
      2. bit 2-8 =0 (RFU)
    4. Icon Identifier (TS 131 102)
  6. Text Attribute
    1. Text Attribute Tag = '50'
    2. Length
    3. Text formatting ( TS 123 040)
  7. Frame Identifier
    1. Frame Identifier Tag
    2. Length = '03'
    3. Identifier of Frame, the value is between '00' - '0F'
You don't need to remember the tag value if you use appendTLV function. All of the tag value are explained briefly in uicc.toolkit.ToolkitConstant library.

note :
* mark means mandatory

RECEIVE DATA

  1. Command details*
    1. command details tag = '81'
    2. length = '03' (1 byte)
    3. command number 01 - FE (1 byte)
    4. Type of Command ='42' (RECEIVE DATA)
    5. Command Qualifier : RFU
  2. Device identities*
    1. device identities tag = '82'
    2. Length = '02'
    3. Source Device identity = '81' --> UICC
    4. Destination Device Identity = '21'-'27' --> channel ID (PRE_ID _CHANNEL_BASE='20')
  3. Channel Data Length
    1. Channel Data Length Tag = '37'
    2. Length = '01'
    3. Channel data length
  4. Alpha Identifier
    1. Alpha identifier TAG = '05'
    2. Length = 0
    3. Alpha Identifier (TS 131 102)
  5. Icon Identifier
    1. Icon Identifier Tag
    2. Length = '02'
    3. Icon Qualifier
      1. bit 1, 0 = self explanatory, 1 = non self explanatory
      2. bit 2-8 =0 (RFU)
    4. Icon Identifier (TS 131 102)
  6. Text Attribute
    1. Text Attribute Tag = '50'
    2. Length
    3. Text formatting ( TS 123 040)
  7. Frame Identifier
    1. Frame Identifier Tag
    2. Length = '03'
    3. Identifier of Frame, the value is between '00' - '0F'
You don't need to remember the tag value if you use appendTLV function. All of the tag value are explained briefly in uicc.toolkit.ToolkitConstant library.

note :
* mark means mandatory

CLOSE CHANNEL BIP

After OPEN Channel, You should know how to close it. Here are some important things you should be aware.
  1. Command details*
    1. command details tag = '81'
    2. length = '03' (1 byte)
    3. command number 01 - FE (1 byte)
    4. Type of Command ='41' (CLOSE CHANNEL)
    5. Command Qualifier :
      • RFU for BIP Client Mode
      • bit 1
        • 0 : close TCP Connection and go to "TCP in CLOSED state"
        • 1 : close TCP Connection and go to "TCP in LISTEN state"
  2. Device identities*
    1. device identities tag = '82'
    2. Length = '02'
    3. Source Device identity = '81' --> UICC
    4. Destination Device Identity = '21'-'27' --> channel ID (PRE_ID _CHANNEL_BASE='20')
  3. Alpha Identifier
    1. Alpha identifier TAG = '05'
    2. Length = 0
    3. Alpha Identifier (TS 131 102)
  4. Icon Identifier
    1. Icon Identifier Tag
    2. Length = '02'
    3. Icon Qualifier
      1. bit 1, 0 = self explanatory, 1 = non self explanatory
      2. bit 2-8 =0 (RFU)
    4. Icon Identifier (TS 131 102)
  5. Text Attribute
    1. Text Attribute Tag = '50'
    2. Length
    3. Text formatting ( TS 123 040)
  6. Frame Identifier
    1. Frame Identifier Tag
    2. Length = '03'
    3. Identifier of Frame, the value is between '00' - '0F'
You don't need to remember the tag value if you use appendTLV function. All of the tag value are explained briefly in uicc.toolkit.ToolkitConstant library.

note :
* mark means mandatory
Channel indentifier must be valid

OPEN CHANNEL BIP TCP Server Mode

I have already posted BIP TCP client mode requirement before. Here are my little explanation for TCP Server mode.
  1. Command details*
    1. command details tag = '81'
    2. length = '03' (1 byte)
    3. command number 01 - FE (1 byte)
    4. Type of Command ='40' (OPEN CHANNEL)
    5. Command Qualifier : RFU
  2. Device identities*
    1. device identities tag = '82'
    2. Length = '02'
    3. Source Device identity = '81' --> UICC
    4. Destination Device Identity = '82' --> Terminal
  3. Alpha Identifier
    1. Alpha identifier TAG = '05'
    2. Length = 0
    3. Alpha Identifier (TS 131 102)
  4. Icon Identifier
    1. Icon Identifier Tag
    2. Length = '02'
    3. Icon Qualifier
      1. bit 1, 0 = self explanatory, 1 = non self explanatory
      2. bit 2-8 =0 (RFU)
    4. Icon Identifier (TS 131 102)
  5. Buffer Size*
    1. Buffer Size Tag = '39'
    2. Length = '02'
    3. Byte 3-4 = Buffer size, for example 1000 bytes = 03E8
  6. UICC/ Terminal Interface
    1. UICC/ Terminal Interface level tag = '3C'
    2. Length = '03'
    3. Transport Protocol Type = '03' (TCP,UICC in server mode)
    4. Port Number(2 bytes) = '0DBC' (3516)
  7. Text Attribute
    1. Text Attribute Tag = '50'
    2. Length
    3. Text formatting ( TS 123 040)
  8. Frame Identifier
    1. Frame Identifier Tag
    2. Length = '03'
    3. Identifier of Frame, the value is between '00' - '0F'
You don't need to remember the tag value if you use appendTLV function. All of the tag value are explained briefly in uicc.toolkit.ToolkitConstant library.

note :
* mark means mandatory

OPEN CHANNEL BIP TCP Client Mode

According to TS 102 223(6.6.27.2), the requirement for setting up Open Channel command in BIP TCP Client are
  1. Command details*
    1. command details tag = '81'
    2. length = '03' (1 byte)
    3. command number 01 - FE (1 byte)
    4. Type of Command ='40' (OPEN CHANNEL)
    5. Command Qualifier :
      • bit 1 : 0 = for Demand link establishment, 1 = immediate link establishment
      • bit 2 : 0 = no automatic reconnection, 1 = automatic reconnection
      • bit 3 : 0 = no background mode, 1 = immediate link establishment in background mode
      • bit 4-8 = RFU
  2. Device identities*
    1. device identities tag = '82'
    2. Length = '02'
    3. Source Device identity = '81' --> UICC
    4. Destination Device Identity = '82' --> Terminal
  3. Alpha Identifier
    1. Alpha identifier TAG = '05'
    2. Length = 0
    3. Alpha Identifier (TS 131 102)
  4. Icon Identifier
    1. Icon Identifier Tag
    2. Length = '02'
    3. Icon Qualifier
      1. bit 1, 0 = self explanatory, 1 = non self explanatory
      2. bit 2-8 =0 (RFU)
    4. Icon Identifier (TS 131 102)
  5. Bearer Description*
    1. Bearer Description Tag = '35'
    2. Length
    3. Bearer Type = '02' (GSM/3GPP) --> GPRS
    4. Bearer Parameter
      1. Precedence Class ( Priority) = '00'
      2. Delay Class = '00'
      3. Reability Class = '03'
      4. Peak Throughput '00'
      5. Mean Throughput = '00'
      6. PDP IP = '02'
  6. Buffer Size*
    1. Buffer Size Tag = '39'
    2. Length = '02'
    3. Byte 3-4 = Buffer size, for example 1000 bytes = 03E8
  7. Network Access Name
    1. Network Access Name Tag = '47'
    2. Length
    3. Network Access Name
  8. Other Data Destination Address (local)
    1. Other Data Destination Address Tag = '3E'
    2. Length = '05'
    3. Type of Address = '21' (IPv4)
    4. Address ( 4 byte , XX.XX.XX.XX)
  9. Login
    1. Text String Tag = '0D'
    2. Length
    3. Data Coding Scheme = null
    4. Text String = your username
  10. Password
    1. Text String Tag = '0D'
    2. Length
    3. Data Coding Scheme = null
    4. Text String = your password
  11. UICC/ Terminal Interface
    1. UICC/ Terminal Interface level tag = '3C'
    2. Length = '03'
    3. Transport Protocol Type = '02' (TCP,UICC in client mode)
    4. Port Number(2 bytes) = '00' '50' (80)
  12. Data destination address
    1. Data Destination Address Tag = '3E'
    2. Length = '05'
    3. Type of Address = '21' (IPv4)
    4. Address ( 4 byte , XX.XX.XX.XX)
  13. Text Attribute
    1. Text Attribute Tag = '50'
    2. Length
    3. Text formatting ( TS 123 040)
  14. Frame Identifier
    1. Frame Identifier Tag
    2. Length = '03'
    3. Identifier of Frame, the value is between '00' - '0F'
You don't need to remember the tag value if you use appendTLV function. All of the tag value are explained briefly in uicc.toolkit.ToolkitConstant library.

note :
* mark means mandatory

Friday, January 4, 2008

Declaration String to bytes variable in Smart Card Coding


/**

* This program is really useful for programmer who is so lazy

* to type word/ sentence in bytes when he/she codes in Smart card

*/



import java.lang.*;

/**

* @version 1.0

* @author kapulaga

*

*/

public class stringtobyte {



public stringtobyte(String variablename, String variablevalue)

{

int i;

System.out.print("byte[] "+variablename+"={");

for(i=0;i

{

if(i

System.out.print("'"+variablevalue.charAt(i)+"'"+",");

else

System.out.print("'"+variablevalue.charAt(i)+"'"+"};");

}



}





public static void main(String[] args) {

stringtobyte stb = new stringtobyte("variable","byte value");



}



}