pcsc/README.md
2021-02-21 08:18:39 +01:00

3.8 KiB

PC/SC for PHP

About

This is the only extension for using PC/SC based smart cards with PHP. It is a wrapper to the wonderful and free project by Ludovic Rousseau, PCSC-Lite, which is the middleware to access a smart card using SCard API (PC/SC). Since PCSC-Lite is compatible to the winscard API it should be possible to compile this extension using a Windows or macOS operating system.

Thanks are going to Johann Dantant! He provided a PC/SC extension for PHP since 2005 and I reused some of his code. He allowed me to relicense these parts under the terms of the PHP license so I could integrate PCSC-Lite native into PHP.

Installation

I recommend to install the PECL extension the "PHP" way:

pecl install pcsc-beta

You can install the latest code by downloading the sources and compile yourself too.

git clone https://github.com/pcsc-for-php/pcsc.git
cd pcsc
phpize
./configure
make
make install

After that you have all needed files in ./modules/ .

API

The extension currently provides the following API:

scard_cancel($context);

NOT IMPLEMENTED! Maybe not useful because of this extension is for server side usage designed but since we want the API implemented it should be available.

scard_connect($context, "OMNIKEY CardMan 5x21 00 00" [, int $protocol]);

Connects to a card. Returns the $connection to a reader or FALSE.

Where optional $protocol is:

  • 1 = T=0
  • 2 = T=1

Default $protocol is T=1.

scard_disconnect($connection);

Disconnects the $connection to a card. Returns the TRUE if disconnecting was succesful or FALSE.

scard_errstr($errno) - Not PC/SC standard.

Returns $errstr for $errno or NULL.

scard_establish_context();

Returns the application $context to the PC/SC resource manager.

scard_is_valid_context($context);

Returns TRUE if $context is valid or FALSE if $context is not valid.

scard_last_errno() - Not PC/SC standard.

Returns the last $errno or nothing? NULL or FALSE? (TODO)

scard_list_readers($context);

Returns an array of available readers or FALSE.

Example:

array(3) {
  [0]=>
  string(26) "OMNIKEY CardMan 5x21 00 00"
  [1]=>
  string(26) "OMNIKEY CardMan 5x21 00 01"
  [2]=>
  string(76) "SCL01x Contactless Reader [SCL01x Contactless Reader] (21161009200722) 00 00"
}

scard_reconnect($connection);

Returns the $connection to a reader or FALSE.

NOT IMPLEMENTED! Should be available.

scard_release_context($context);

Releases the application $context.

scard_status($connection);

Returns the status array or FALSE.

Example:

array(7) {
  ["state"]=>
  int(52)
  ["SCARD_PRESENT"]=>
  int(1)
  ["SCARD_POWERED"]=>
  int(1)
  ["SCARD_NEGOTIABLE"]=>
  int(1)
  ["SCARD_PROTOCOL_T0"]=>
  int(1)
  ["PROTOCOL"]=>
  string(3) "T=1"
  ["ATR"]=>
  string(28) "3B8980014A434F5033315632324A"
}

scard_transmit($connection, $apdu);

Returns the response $apdu as string or FALSE.

License

This code is licensed under the terms of the PHP License version 3.01. PCSC-Lite is licensed in a way where it is possible to integrate it native in the PHP environment.