node-red-contrib-apdu2pcsc

1.0.7 • Public • Published

apdu2pcsc

npm

A simple node for node-red to send apdu to rfid and smartcards

Installation

To make it work on my RaspberryPi 3 with Raspbian Jessie version: November 2016 I've done the following steps. Not all might be nessasary.

prep the apt

sudo apt update
sudo apt full-upgrade

Get the current version of node.js

sudo curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt install nodejs
Detailed information: http://thisdavej.com/beginners-guide-to-installing-node-js-on-a-raspberry-pi/

Reinstall node-red

sudo npm i -g npm@2.x
hash -r
sudo npm cache clean
sudo npm install -g --unsafe-perm node-red
cd ~/.node-red
npm outdated
Detailed information: http://nodered.org/docs/hardware/raspberrypi

Instal the PCSC C-libraries

sudo apt-get install libtool
sudo apt-get install libusb-1.0-0-dev
sudo apt-get install flex
sudo apt-get install automake
cd /usr/src
sudo apt-get install libudev-dev
sudo git clone git://anonscm.debian.org/pcsclite/PCSC.git
cd PCSC
sudo ./bootstrap
sudo ./configure
sudo make
sudo make install
Detailed information: http://pcsclite.alioth.debian.org/pcsclite.html 

Instal the CCID C-libraries

cd /usr/src
sudo git clone --recursive git://anonscm.debian.org/pcsclite/CCID.git
cd CCID
sudo ./bootstrap
sudo ./configure
sudo make
sudo make install
sudo cp src/92_pcscd_ccid.rules /etc/udev/rules.d
Detailed information: https://pcsclite.alioth.debian.org/ccid.html 

Test the pcsc & ccid installation

sudo killall pcscd -9
sudo LIBCCID_ifdLogLevel=0x000F pcscd --foreground --debug --apdu --color

If things are working, your CCID compatible smartcard reader should be connected. And smartcard insertion or NFC card detection should trigger some debug logentries. Here is a complete list of supported/shouldwork/notworking list of smartcard readers: http://pcsclite.alioth.debian.org/ccid/section.html

install pcsclite nodejs wrapper

sudo apt-get install libpcsclite1 libpcsclite-dev
cd ~\.node-red
sudo npm install buffertools
sudo npm install pcsclite
Detailed information: https://www.npmjs.com/package/@pokusew/pcsclite  

Restore the "node-red-start" and "node-red-stop" commands

sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/nodered.service -O /lib/systemd/system>>/nodered.service
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-start -O /usr/bin/node-red-start
sudo wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/node-red-stop -O /usr/bin/node-red-stop
sudo chmod +x /usr/bin/node-red-st*
sudo systemctl daemon-reload

Finaly the apdu2pcsc node-red node to send and receive apdus can be installed

cd ~\node-red
sudo npm install node-red-contrib-apdu2pcsc

Node-Red example

A sample node-red wiring to detect the austrian maestro bank card:

[{"id":"c89fbc96.78b9f","type":"debug","z":"22ba873c.1cd0a8","name":"","active":true,"console":"false","complete":"false","x":506.5,"y":209.33334350585938,"wires":[]},{"id":"4fd940ec.28b05","type":"function","z":"22ba873c.1cd0a8","name":"Austrian maestro detection","func":"if(msg.payload == 'card inserted')\n{\n    msg.payload = '00A40000023F0000';\n    return msg;\n}\nelse if(msg.payload.indexOf('00A40000023F0000') >= 0 &&\n   msg.payload.substr(msg.payload.length - 4, 4) == '9000')\n{\n    msg.payload = '00A404000E315041592E5359532E444446303100';\n    return msg;\n}\nelse if(msg.payload.indexOf('00A404000E315041592E5359532E444446303100') >= 0 &&\n   msg.payload.substr(msg.payload.length - 4, 4) == '9000')\n{\n    msg.payload = '00A4040007A000000004306000'\n    return msg;\n}\nelse if(msg.payload.indexOf('00A4040007A000000004306000') >= 0 &&\n   msg.payload.substr(msg.payload.length - 4, 4) == '9000')\n{\n    msg.payload = 'maestro detected'\n    return msg;\n}\nelse if(msg.payload == 'card removed')\n{\n}\nelse\n{\n    msg.payload = 'none maestro';\n    return msg;\n}\n\n","outputs":1,"noerr":0,"x":192.50001525878906,"y":305.33331298828125,"wires":[["399239ee.3de70e","ecc1190e.28617"]]},{"id":"399239ee.3de70e","type":"function","z":"22ba873c.1cd0a8","name":"trigger on detection","func":"if(msg.payload == 'maestro detected')\n{\n    msg.payload = 1;\n    return msg;\n}\n","outputs":1,"noerr":0,"x":321.5,"y":436.6666259765625,"wires":[["d993acc0.361cf","26ee80a0.3d9b28"]]},{"id":"d993acc0.361cf","type":"trigger","z":"22ba873c.1cd0a8","op1":"0","op2":"1","op1type":"str","op2type":"str","duration":"250","extend":false,"units":"ms","reset":"","name":"","x":312.5,"y":517.6666259765625,"wires":[["9646093e.bbd13"]]},{"id":"9646093e.bbd13","type":"rpi-gpio out","z":"22ba873c.1cd0a8","name":"","pin":"33","set":true,"level":"1","out":"out","x":323.5,"y":584.6666259765625,"wires":[]},{"id":"1cd2f586.d540ca","type":"rpi-gpio out","z":"22ba873c.1cd0a8","name":"","pin":"15","set":true,"level":"0","out":"out","x":967.5,"y":429.6666564941406,"wires":[]},{"id":"26ee80a0.3d9b28","type":"trigger","z":"22ba873c.1cd0a8","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"100","extend":false,"units":"ms","reset":"","name":"","x":799.3333740234375,"y":431.3333435058594,"wires":[["1cd2f586.d540ca"]]},{"id":"ecc1190e.28617","type":"function","z":"22ba873c.1cd0a8","name":"trigger on none maestro","func":"if(msg.payload == 'none maestro')\n{\n    msg.payload = 1;\n    return msg;\n}\n","outputs":1,"noerr":0,"x":549.3333129882812,"y":305.3333435058594,"wires":[["26ee80a0.3d9b28","b523f1d1.bc32d"]]},{"id":"b523f1d1.bc32d","type":"delay","z":"22ba873c.1cd0a8","name":"","pauseType":"delay","timeout":"250","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":789.5000762939453,"y":307.33335876464844,"wires":[["26ee80a0.3d9b28","9193cd82.427bd8"]]},{"id":"9193cd82.427bd8","type":"delay","z":"22ba873c.1cd0a8","name":"","pauseType":"delay","timeout":"250","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1032.3333740234375,"y":307.3333435058594,"wires":[["26ee80a0.3d9b28"]]},{"id":"b5cc3d7a.1b354","type":"inject","z":"22ba873c.1cd0a8","name":"","topic":"","payload":"00A40000023F0000","payloadType":"str","repeat":"","crontab":"","once":false,"x":144.5,"y":89,"wires":[["51d67592.8d7c3c"]]},{"id":"51d67592.8d7c3c","type":"Apdu2Pcsc","z":"22ba873c.1cd0a8","name":"","x":179.50001525878906,"y":207.00001525878906,"wires":[["4fd940ec.28b05","c89fbc96.78b9f"]]}]

On pin 33 a door opener is connected, which is trigged by an impulse. On pin 15 a beeper is connected to give the user some feedback. beeps 1x if the smartcard is identified successfully as maestro bank card. Beeps 3x if any other card is detected)

Maestro AID:

00A4040007A000000004306000

EMV application directory of EMV AIDs available on the smartcard

00A404000E315041592E5359532E444446303100

To simply detect is it is anykind of a EMVCo compatible credit or debit card for international use, you could also simple select the EMV application directory.

Here is a complete list of national and international EMV-AIDs: https://www.eftlab.co.uk/index.php/site-map/knowledge-base/211-emv-aid-rid-pix

Package Sidebar

Install

npm i node-red-contrib-apdu2pcsc

Weekly Downloads

0

Version

1.0.7

License

MIT

Last publish

Collaborators

  • johnnycheng