PC/SC
# PC/SC

PC/SC (Personal Computer/Smart Card) es un conjunto de especificaciones para la integración de tarjetas inteligentes en ordenadores personales. En particular se define un API de programación que permite a los desarrolladores trabajar de forma uniforme con lectores de tarjetas de distintos fabricantes (que cumplan con la especificación).

El API de PC/SC está incorporada en sistemas Microsoft Windows 200x/XP y disponible también Microsoft Windows NT/9x. También hay una implementación libre, de código abierto, llamada PC/SC Lite (proyecto MUSCLE) para sistemas operativos GNU Linux.

## Grupo de trabajo

Las especificaciones PC/SC se desarrollan por un comité (PC/SC Workgroup) en el que participan varias empresas del sector.

Los miembros principales del grupo son:

* Gemalto (Axalto + Gemplus)
* Infineon
* Microsoft
* Toshiba

## Organización de la especificación

La especificación se divide en 9 partes que contienen los requisitos detallados de interoperabilidad de dispositivos compatibles, información de diseño, interfaces de programación, etc:

* Parte 1. Introducción y visión general de la arquitectura
* Parte 2. Requisitos de interoperabilidad para las tarjetas y los lectores
* Parte 3. Requisitos de interoperabilidad para los lectores
* Parte 4. Consideraciones de diseño de los lectores e información de referencia
* Parte 5. Definición de la interfaz del Resource Manager
* Parte 6. Definición de la interfaz del Service Provider
* Parte 7. Consideraciones de diseño para el desarrollo de aplicaciones
* Parte 8. Recomendación para la implementación de servicios de seguridad y privacidad con tarjetas inteligentes
* Parte 9. Lectores con capacidades extendidas

## Principales funciones del API

El API de programación es sencilla y proporciona funcionalidades simples. A continuación se enumeran las principales para dar una visión general del modo en que se programa usando este API:

* SCardEstablishContext y SCardReleaseContext (inicialización y liberación de recursos)
* SCardConnect, SCardReconnect y SCardDisconnect (conexión y desconexión a una tarjeta en un lector)
* SCardListReaderGroups, SCardListReaders, ... (exploración de lectores conectados)
* SCardGetAttrib (obtención de propiedades de los lectores conectados)
* SCardTransmit (envío de comandos APDU's a una tarjeta conectada)
