emv
Advanced tools
Comparing version 1.0.2 to 1.0.3
@@ -1,6 +0,6 @@ | ||
var cardreader = require('card-reader'); | ||
var hexify = require('hexify'); | ||
var emvTags = require('../lib/emvTags'); | ||
var emvApplication = require('../lib/emvApplication'); | ||
'use strict'; | ||
let cardreader = require('card-reader'); | ||
let emvTags = require('../lib/emv-tags'); | ||
let emvApplication = require('../lib/emv-application'); | ||
@@ -33,28 +33,35 @@ | ||
var application = emvApplication(cardreader); | ||
application.selectPse() | ||
let application = emvApplication(cardreader); | ||
application | ||
.selectPse() | ||
.then(function (response) { | ||
console.info(`Select PSE Response:\n${emvTags.format(response)}`); | ||
var sfi = 1; | ||
var record = 0; | ||
while (record++ < 10) { | ||
application.readRecord(sfi, record).then(function (response) { | ||
if (response.isOk()) { | ||
console.info(`Read Record Response: ${emvTags.format(response)}`); | ||
var aid = emvTags.findTag(response, 0x4f); | ||
if (aid) { | ||
console.info(`Application ID: '${aid.toString('hex')}`); | ||
let sfi = emvTags.findTag(response, 0x88).toString('hex'); | ||
let records = [0, 1, 2, 3, 4, 5, 6]; | ||
let aids = []; | ||
let queue = Promise.resolve(); | ||
records.forEach(function (record) { | ||
queue = queue.then(function () { | ||
return application.readRecord(sfi, record).then(function (response) { | ||
if (response.isOk()) { | ||
console.info(`Read Record Response: \n${emvTags.format(response)}`); | ||
let aid = emvTags.findTag(response, 0x4f); | ||
if (aid) { | ||
console.info(`Application ID: '${aid.toString('hex')}`); | ||
aids.push(aid.toString('hex')); | ||
} | ||
} | ||
} | ||
return response; | ||
}).catch(function (error) { | ||
console.error('Read Record Error:', error, error.stack); | ||
return aids; | ||
}).catch(function (error) { | ||
console.error('Read Record Error:', error, error.stack); | ||
}); | ||
}); | ||
} | ||
}); | ||
return queue; | ||
}).then(function(applicationIds) { | ||
console.info(`Application IDs: '${applicationIds}'`); | ||
}).catch(function (error) { | ||
console.error('Error:', error, error.stack); | ||
}); | ||
console.error('Error:', error, error.stack); | ||
}); | ||
}); |
{ | ||
"name": "emv", | ||
"version": "1.0.2", | ||
"version": "1.0.3", | ||
"main": "lib/emv-application.js", | ||
@@ -33,5 +33,5 @@ "description": "", | ||
"dependencies": { | ||
"card-reader": "^0.0.24", | ||
"card-reader": "^0.0.25", | ||
"hexify": "^1.0.1", | ||
"iso7816": "^1.0.14", | ||
"iso7816": "^1.0.15", | ||
"tlv": "^1.1.1" | ||
@@ -38,0 +38,0 @@ }, |
@@ -11,16 +11,75 @@ # EMV | ||
var cardreader = require('card-reader'); | ||
var emv = require('emv'); | ||
var emvTags = require('../lib/emvTags'); | ||
var emvApplication = require('../lib/emvApplication'); | ||
cardreader.on('card-inserted', function () { | ||
var application = emv(cardreader); | ||
application.selectPse() | ||
.then(function (response) { | ||
console.info('Select PSE response:\n', response.toTlvString()); | ||
}).catch(function (error) { | ||
console.error('Select PSE', error); | ||
}); | ||
cardreader.on('device-activated', function (reader) { | ||
console.info(`Device '${reader.name}' activated`); | ||
}); | ||
cardreader.on('device-deactivated', function (reader) { | ||
console.info(`Device '${reader}' deactivated`); | ||
}); | ||
cardreader.on('card-removed', function (reader) { | ||
console.info(`Card removed from '${reader.name}' `); | ||
}); | ||
cardreader.on('issue-command', function (reader, command) { | ||
console.info(`Command '${command.toString('hex')}' issued to '${reader.name}' `); | ||
}); | ||
cardreader.on('receive-response', function (reader, response) { | ||
console.info(`Response '${response}' received from '${reader.name}' `); | ||
}); | ||
cardreader.on('card-inserted', function (reader, status) { | ||
console.info(`Card inserted into '${reader.name}', atr: '${status.atr.toString('hex')}'`); | ||
var application = emvApplication(cardreader); | ||
application | ||
.selectPse() | ||
.then(function (response) { | ||
console.info(`Select PSE Response:\n${emvTags.format(response)}`); | ||
var sfi = 1; | ||
var record = 0; | ||
while (record++ < 10) { | ||
application.readRecord(sfi, record).then(function (response) { | ||
if (response.isOk()) { | ||
console.info(`Read Record Response: ${emvTags.format(response)}`); | ||
var aid = emvTags.findTag(response, 0x4f); | ||
if (aid) { | ||
console.info(`Application ID: '${aid.toString('hex')}`); | ||
} | ||
} | ||
return response; | ||
}).catch(function (error) { | ||
console.error('Read Record Error:', error, error.stack); | ||
}); | ||
} | ||
}).catch(function (error) { | ||
console.error('Error:', error, error.stack); | ||
}); | ||
}); | ||
``` | ||
## Compatible Readers | ||
Tested on Mac OSX with the SCM SCR3500 Smart Card Reader. | ||
This library *should* work with most PC/SC readers - I'll update this page when I get to test others. | ||
If you know of any other devices that work please let me know. | ||
<div align="center"> | ||
<img src="docs/scr3500-collapsed.JPG" width=600 style="margin:1rem;" /> | ||
</div> | ||
<div align="center"> | ||
<img src="docs/scr3500-expanded.JPG" width=600 style="margin:1rem;" /> | ||
</div> |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
1682691
13
563
84
0
+ Addedcard-reader@0.0.25(transitive)
- Removedcard-reader@0.0.24(transitive)
Updatedcard-reader@^0.0.25
Updatediso7816@^1.0.15