viernes, 1 de julio de 2011

DesfireWrapper. Libreria .NET para Desfire

Buenas. Hoy toca autobombo. He abierto un proyecto en sourceforge.net, DesfireWrapper.

Es un wrapper orientado a objetos de las librerías de SpringCard SDK para poder acceder desde .NET a smartcards Desfire.

SpringCard es un fabricante de hardware. Ofrece varias librerías opensource para controlar sus dispositivos. Pero parece que los diferentes proyectos han crecido sin intención de integración entre si. Así que he envuelto dos de estas librerías para conseguir un API de alto nivel en C# (en lugar de C) para acceder a tarjetas inteligentes Desfire.

PC/SC es un standard para la integración de smartcards en ordenadores personales. Permite enviar chorros de bytes a las tarjetas a través de lectores compatibles con el estándar. Windows ofrece una implementación completa del estándar desde Win2k en winscard.dll .

Hay varias tecnologías de smartcard. Quizás la principal familia de productos sea Mifare, propiedad de NXP Semiconductors ( que surgió hace unos años del gigante holandésPhilips ) . Mifare Desfire es uno de los productos de la familia. La especificación del producto define una serie de comandos de alto nivel a los que debería responder la tarjeta. Un buen API para Desfire debería implementar todos estos comandos para que los programadores no se preocupen de qué bytes hay que mandar por el USB para que la tarjeta reconozca el comando.

NXP ofrece la implementación de referencia, pero es código cerrado. Ciertas partes del código son distribuídas compiladas sin fuente. Y cobran por la patente de sus tarjetas y por el propio API.

Así que creo que SpringCard se quiso desmarcar e implementó un API para Desfire completamente opensource, basado en el estándar PC/SC.

Estoy desarrollando un software que necesita hablar con tarjetas Desfire y al principio usaba el API de NXP. Pero tenía varias limitaciones. Sobre todo, no sabíamos qué comandos son los que se enviaban a la tarjeta para poder usarla desde dispositivos no PC/SC. Así que Google ayudó.

SpringCard ofrece un API completa (y legible) en C de toda la vida y varios ejemplos de cómo usar PC/SC desde C#. Así que dediqué unas noches para ser feliz en mi trabajo y envolví todo esto en un API C# orientado a objetos. Para sourceforge añadí una aplicacioncita de demo. Cualquier persona que necesite acceder a una tarjeta Desfire (o incluso usar comandos PC/SC) desde .NET podría usar mi API y ser feliz sin tener que perder días con temas de marshalling de tipos y llamadas a funciones nativas.

Pero siempre hay un problema. La SpringCard SDK License permite incluir su código en otros productos siempre que se respete la información de autoría pero SÓLO cuando ese software se vaya a usar con hardware de SpringCard. Así que he desarrollado un API objectual C# completamente estándar para PC/SC + Desfire , pero limitado por licencia para ser usado sólo con hardware SpringCard.

¿Va a evolucionar el proyecto? Puede. Quizás el siguiente paso sea hacer este mismo wrapper para Java.

Recuerda, DesfireWrapper.

2 comentarios:

  1. Muy interesante el proyecto. ¿Has pensado en añadirle soporte para un módulo SAM?

    ResponderEliminar
  2. Pues la verdad es que no tenía pensado continuarlo. Es algo que hice por temas laborales, que no se prolongó más en el tiempo y que consideré interesante compartir. Eso si, si tú te animas, eres bienvenido para continuar el proyecto de sourceforge.

    ResponderEliminar