Refactoring the Java Card Framework

  Writeup (.pdf)
  Writeup (.doc)
  Poster (.pdf)
  Poster (.ppt)
  Advanced JC Flow
  Java Compiler

Geraud Campion & Michael O'Connor

  Faculty Advisors:
    Steve Zdancewic
    Alwyn Goodloe


     Our project involves Smart Cards. Smart Cards (SC) have a small CPU and a limited amount of memory; they communicate with a terminal specifically programmed to interact with a SC. SC and Terminal programs are developed in Java; however, SCs use a language that is a subset of Java. For this project, we assumed that it was a strict subset, referred to as Java Card language (JCL). The SCs have to be programmed around receiving data from the terminal they are being used with. So not only are Smart Card programs limited by the language restraints, the master-slave interaction they have with the terminal is another limitation. Our project hopes to alleviate the master-slave portion of this problem. We will modify a Java compiler to allow SC code that can request the terminal to do work for it.

     Our project will take in a Java program with both Terminal code and SC code written in the same file. The code will make use of Java annotations to determine what resources (methods and fields) are card resources and what resources are terminal resources. The program will then translate the card and terminal code to allow the SC program to send a request to the terminal, and wait for a response. The crux of this translation is that it allows the SC and terminal programs to maintain their states while this unintended request is processed.