From daf88aafa7653ef9bb008a8a438cdf009641c2c1 Mon Sep 17 00:00:00 2001 From: frankmorgner Date: Wed, 10 Nov 2010 18:42:16 +0000 Subject: [PATCH] changed default values for emulated target to match German identity card git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@352 96b47cad-a561-4643-ad3b-153ac7d7599c --- pcsc-relay/src/lnfc.c | 51 ++++++++++--------------------------------- 1 file changed, 12 insertions(+), 39 deletions(-) diff --git a/pcsc-relay/src/lnfc.c b/pcsc-relay/src/lnfc.c index 99017be..7203a43 100644 --- a/pcsc-relay/src/lnfc.c +++ b/pcsc-relay/src/lnfc.c @@ -102,9 +102,16 @@ static size_t get_historical_bytes(unsigned char *atr, size_t atrlen, static int lnfc_connect(void **driver_data) { struct lnfc_data *data; + /* data derived from German (test) identity card issued 2010 */ nfc_target_t ntEmulatedTarget = { - .nm.nmt = NMT_ISO14443A, - .nm.nbr = NBR_106, + .nti.nai.abtAtqa = {0x00, 0x08}, + .nti.nai.btSak = 0x20, + .nti.nai.szUidLen = 4, + .nti.nai.abtUid = {0x08, 0xdb, 0x02, 0xfe}, + .nti.nai.szAtsLen = 8, + .nti.nai.abtAts = {0x78, 0x77, 0xd4, 0x02, 0x00, 0x00, 0x90, 0x00}, + .nm.nmt = NMT_ISO14443A, + .nm.nbr = NBR_106, }; if (!driver_data) @@ -116,42 +123,6 @@ static int lnfc_connect(void **driver_data) return 0; *driver_data = data; - /* FIXME - * ntEmulatedTarget.nti.nai.abtUid - * ntEmulatedTarget.nti.nai.abtAtqa - * ntEmulatedTarget.nti.nai.btSak - * ntEmulatedTarget.nti.nai.abtAts - */ - // We can only emulate a short UID, so fix length & ATQA bit: - ntEmulatedTarget.nti.nai.szUidLen = 4; - ntEmulatedTarget.nti.nai.abtAtqa[1] &= (0xFF-0x40); - // First byte of UID is always automatically replaced by 0x08 in this mode anyway - ntEmulatedTarget.nti.nai.abtUid[0] = 0x08; - // ATS is always automatically replaced by PN532, we've no control on it: - // ATS = (05) 75 33 92 03 - // (TL) T0 TA TB TC - // | | | +-- CID supported, NAD supported - // | | +----- FWI=9 SFGI=2 => FWT=154ms, SFGT=1.21ms - // | +-------- DR=2,4 DS=2,4 => supports 106, 212 & 424bps in both directions - // +----------- TA,TB,TC, FSCI=5 => FSC=64 - // It seems hazardous to tell we support NAD if the tag doesn't support NAD but I don't know how to disable it - // PC/SC pseudo-ATR = 3B 80 80 01 01 if there is no historical bytes - - // Creates ATS and copy max 48 bytes of Tk: - /* - byte_t * pbtTk; - size_t szTk; - pbtTk = iso14443a_locate_historical_bytes (ntEmulatedTarget.nti.nai.abtAts, ntEmulatedTarget.nti.nai.szAtsLen, &szTk); - szTk = (szTk > 48) ? 48 : szTk; - byte_t pbtTkt[48]; - memcpy(pbtTkt, pbtTk, szTk); - ntEmulatedTarget.nti.nai.abtAts[0] = 0x75; - ntEmulatedTarget.nti.nai.abtAts[1] = 0x33; - ntEmulatedTarget.nti.nai.abtAts[2] = 0x92; - ntEmulatedTarget.nti.nai.abtAts[3] = 0x03; - ntEmulatedTarget.nti.nai.szAtsLen = 4 + szTk; - memcpy(&(ntEmulatedTarget.nti.nai.abtAts[4]), pbtTkt, szTk); - */ // Try to open the NFC emulator device data->pndTarget = nfc_connect (NULL); @@ -217,8 +188,10 @@ static int lnfc_send_rapdu(void *driver_data, return 0; - if (!nfc_target_send_bytes(data->pndTarget, rapdu, len)) + if (!nfc_target_send_bytes(data->pndTarget, rapdu, len)) { nfc_perror (data->pndTarget, "nfc_target_send_bytes"); + return 0; + } return 1;