- Notifications
You must be signed in to change notification settings - Fork58
PCSC smartcard reader library for nodejs
License
tomkp/smartcard
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Smartcard library.
This is a simple wrapper aroundSantiago Gimeno's greatpcsclite library.
Used byCard Spy
The following objects are defined by thesmartcard
library, each contains its own set of methods and events.
A general object that provides access to all smartcard related devices.
Thedevices
object emits the following events
Emitted when a card reader is attached.Returns:
Object
Device
Array
: List of all devices, returned viadevices.listDevices()
Emitted when a card reader is detached.Returns:
Object
Device
Array
: List of all devices, returned viadevices.listDevices()
Emitted when an error occursReturnsObject
:
- error
Error
The following methods are available within thedevices
class.
The constructor for a devices object takes no arguments,
devices=newDevices();
ReturnsPromise
- Resolves with activationevent
ReturnsPromise
- Resolves with deactivationevent
ReturnsObject
a list of the different devices attached, each adevice
object
name
String
: The text name of a deviceReturns
Device
An object representing a specific card reader (device).
The following methods are available within thedevice
class.
Returns the name of the attached device.
Sends a command to the connected device
- data
Buffer
: data to be transmitted - res_len
Number
: Maximum length of the expected response, includes the 2 byte response (sw1 and sw2) - protocol
Number
: Protocol to be used in the transmission - cb(error,response)
Function
: Called when transmit function completes- error
Error
- output
Buffer
- error
Thedevice
object emits the following events
Emitted when a smartcard is inserted into a card reader
ReturnsObject
:
- device
Device
- card
Card
Emitted when a smartcard is removed from a card reader
ReturnsObject
:
- name
String
- card
Card
An object representing an attached smart card.
The following methods are available within thecard
class.
ReturnsString
containing the atr of the card
Sends a command to the card
- commandApdu: The command to be sent to the card
String
Buffer
Array
CommandApdu
- callback(error,response): (optional) Function to call upon completion of the command
- error
Error
- response
Buffer
- error
ReturnsPromise
- Resolves withresponse
Buffer
- Rejects witherror
Error
If no callback is specified, returns aPromise
*
Thecard
object emits the following events
Emitted when a command is sent to the smartcard.
ReturnsObject
:
- card
Card
- command
Buffer
Emitted when a response is received from the card.
ReturnsObject
:
- card
Card
- command
Buffer
- response
ResponseApdu
An object representing a command to send to a smart card
TheCommandApdu
class has the following methods.
Creates a new instance and sets the appropriate items
- obj
Object
- cla
Number
: The class of the command, typically 0 - ins
Number
: The instruction - p1
Number
: The value of p1 - p2
Number
: The value of p2 - data
Array
(optional): The value of data - le
Number
(optional): The value of le
- cla
OR
- obj
Array
: Byte array representing the whole command
Converts the command to a Buffer
- Returns
Buffer
Converts the command to a hex string
- Returns
String
Converts the command to a byte array
- Returns
Array
Updates the le value of the command
- le
Number
: The new le value
Class representing a response from the card
TheResponseApdu
class has the following methods.
Interprets the return code and attempts to provide a text translation.
- Returns
String
Returns the response data without including the status code
- Returns
String
Returns only the status code
- Returns
String
Check if the status code is 9000
- Returns
Boolean
Returns the whole buffer, status code and data
- Returns
Buffer
Reads the status code and looks for a 61 as sw1, meaning more data is available
- Returns
Boolean
Reads sw2 staus code to return number of bytes left, when sw1 is 61. A value of 0 means there are more than 256 bytes remaining.
- Returns
Number
Checks status code for 6c as sw1
- Returns
Boolean
If sw1 is 6c, returns the correct length from sw2. A value of 0 means there are more than 256 bytes remaining.
- Returns
Number
An object offering general commands to most ISO7816 compliant smart cards.
Sets up theIso7816Application
object
- card
Card
: The card to communicate with using ISO7816 standards
Sends the provided command to the card. Automatically retrieve the full response, even if it requires multiple GET_RESPONSE commands
- commandApdu
CommandApdu
: Command to send to the card
Returns
ResponseApdu
Complete response from card
Sends the SELECT command to the card, often called selecting an application
- bytes
Buffer
: The resource locater (AID, etc) - p1
Number
: Value to specify as the p1 value - p2
Number
: Value to specify as the p2 value
Returns
ResponseApdu
Complete response from card
Sends a single GET_RESPONSE command to the card
- length
Number
: The length of the response expected, maximum is 0xFF
Returns
ResponseApdu
Complete response from card
Sends a READ_RECORD command to the card
- sfi
Number
: The sfi - record
Number
: The record
Returns
ResponseApdu
Complete response from card
Sends a GET_DATA command to the card
- p1
Number
: Value to specify as the p1 value - p2
Number
: Value to specify as the p2 value
Returns
ResponseApdu
Complete response from card
TheIso7816Application
class emits the following events
Emitted when a successful reply to aselectFile()
command is received.
ReturnsObject
:
- application
String
'use strict';constsmartcard=require('smartcard');constDevices=smartcard.Devices;constdevices=newDevices();devices.on('device-activated',(event=>{console.log(`Device '${event.device}' activated`);event.devices.map((device,index)=>{console.log(`Device #${index+1}: '${device.name}'`);});}));
'use strict';constsmartcard=require('smartcard');constDevices=smartcard.Devices;constdevices=newDevices();devices.onActivated().then(event=>{console.log(`Device '${event.device}' activated`);event.devices.map((device,index)=>{console.log(`Device #${index+1}: '${device.name}'`);});});
'use strict';constsmartcard=require('smartcard');constDevices=smartcard.Devices;constIso7816Application=smartcard.Iso7816Application;constdevices=newDevices();devices.on('device-activated',event=>{constcurrentDevices=event.devices;letdevice=event.device;console.log(`Device '${device}' activated, devices:${currentDevices}`);for(letpropincurrentDevices){console.log("Devices: "+currentDevices[prop]);}device.on('card-inserted',event=>{letcard=event.card;console.log(`Card '${card.getAtr()}' inserted into '${event.device}'`);card.on('command-issued',event=>{console.log(`Command '${event.command}' issued to '${event.card}' `);});card.on('response-received',event=>{console.log(`Response '${event.response}' received from '${event.card}' in response to '${event.command}'`);});constapplication=newIso7816Application(card);application.selectFile([0x31,0x50,0x41,0x59,0x2E,0x53,0x59,0x53,0x2E,0x44,0x44,0x46,0x30,0x31]).then(response=>{console.info(`Select PSE Response: '${response}' '${response.meaning()}'`);}).catch(error=>{console.error('Error:',error,error.stack);});});device.on('card-removed',event=>{console.log(`Card removed from '${event.name}' `);});});devices.on('device-deactivated',event=>{console.log(`Device '${event.device}' deactivated, devices: [${event.devices}]`);});
About
PCSC smartcard reader library for nodejs
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors4
Uh oh!
There was an error while loading.Please reload this page.