Previous Table of Contents Next


PART II
SMART CARD SOFTWARE DEVELOPMENT

Chapter 6
Smart Card Software Development Tools
Chapter 7
Reader-Side Application Programming Interfaces
Chapter 8
Card-Side Application Programming Interfaces
Chapter 9
Smart Cards and Security

CHAPTER 6
SMART CARD SOFTWARE DEVELOPMENT TOOLS

There are no stand-alone smart card programs. Smart card software, by its very nature, is distributed. Some parts of a smart card program exist on the smart card itself and some parts are on the terminal accessing the card. Add to this “smart” smart card readers which provide value-added interfaces to smart cards as well as network computers which may also have to be consulted during a smart card transaction. You can see that building and debugging smart card software is as much a matter of getting the bugs out of the new code as it is ensuring the new code meshes efficiently and correctly with existing code.

Even though you may be developing software for only one site of many in a typical smart card application, you may well find that you will want to have tools that apply to other sites when you need to track the consequences of your software through the entire system. It is also possible that you’ll need to update or extend these other sites to accommodate your new smart card application.

Another challenge to smart card programming is the nature of the smart card itself. A smart card is carefully engineered to resist efforts to see inside it. It can’t tell the difference between a hacker trying to make it divulge its secrets and a legitimate programmer just trying to find out why it isn’t behaving the way he thinks it should. A smart card is constructed to not let anybody see inside; this provides another challenge to the smart card programmer.

This chapter discusses the various tools that are available to help programmers develop smart card programs. The tools are divided into eight categories, which are the first eight sections of the chapter. Within each section is a general discussion of the category, and a table of all known tools in the category. The first section is about tools for host software, the second section is about tools for card software, and the final section describes a collection of miscellaneous other tools. The current contact information for each of the tools can be found at the book’s web site (www.scdk.com).

Tools for Host Software Development

For the most part you will be developing application software that uses smart cards as opposed to software that runs on smart cards. From the point-of-view of an application running on the host, a smart card is just another peripheral, albeit with some unique properties. Today, smart card peripherals are not as well-integrated into programming languages and development environments as hard disks or graphic displays. While this situation is changing quickly due primarily to Microsoft’s PC/SC efforts (see Chapter 7, “Reader-Side Application Programming Interfaces”), working with smart cards from your host application can be awkward and inefficient because you have to use stand-alone tools and proprietary, device-specific function libraries. Nonetheless, there are some good host software development tools available and even though they aren’t fully integrated into your development environment, they are certainly better than hex debuggers.

Smart Card Editors

The discussion begins with the Swiss Army knife of smart card software development: the combination smart card browser, editor, and formatter. In the interest of brevity, we will refer to these tools as simply smart card editors.

A smart card editor is an indispensable software development aid and is part of every smart card programmer’s toolkit. The most basic editors simply let you send numeric commands to the smart card and display the numeric results returned from each command. While this may seem primitive, when you are debugging your own card-side software or trying to discover what the documentation for a card’s command means, this may be both the best and the only way of exploring a card’s behavior.

More elaborate editors let you pick text descriptions of the commands, provide you with helpful prompts for the arguments of the commands, and translate and display the results in more compelling ways than strings of hexadecimal digits. For example, the editor may have a table of the error codes returned by the card and display a text description of the error rather than just its numerical code. An editor might also know how to interpret state and transaction information returned by the card and be able to translate status codes into text and display them in labeled windows.


Previous Table of Contents Next