aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xfingerpass.py20
-rw-r--r--fingerprints.txt21
2 files changed, 31 insertions, 10 deletions
diff --git a/fingerpass.py b/fingerpass.py
index dce8a83..e95534f 100755
--- a/fingerpass.py
+++ b/fingerpass.py
@@ -63,6 +63,16 @@ def connect(reader = None):
print "ATR: %s" % utils.hexdump(newState[0]['Atr'], short = True)
return pycsc.pycsc(reader = readerName, protocol = pycsc.SCARD_PROTOCOL_ANY)
+def fingerprint_rfid(card):
+ # Need RFID
+ if not isinstance(card, cards.rfid_card.RFID_Card):
+ return [""]
+
+ uid = card.get_uid()
+
+ return "%02X" % ord(uid[0])
+ # FIXME: Determine ISO type and then return a value depending on A-fixed UID vs. A-random UID vs. B
+
def fingerprint_7816(card):
# Need ISO 7816-4
if not isinstance(card, cards.iso_7816_4_card.ISO_7816_4_Card):
@@ -190,6 +200,7 @@ def fingerprint(card):
catr = "F:%s" % binascii.b2a_hex(atr)
result.append( catr )
result.extend( fingerprint_7816(card) )
+ result.append( fingerprint_rfid(card) )
return ",".join(result)
@@ -202,9 +213,12 @@ def match_fingerprint(fingerprint, database="fingerprints.txt"):
matched = False
def do_match(line, fingerprint):
- return re.match(line.strip()+"$", fingerprint.strip()) is not None
+ return re.match(line.strip(), fingerprint.strip()) is not None
for line in fp.readlines():
+ if line[0] == "#":
+ continue
+
if line.strip() == "":
matched = False
if len(current_result) > 0:
@@ -245,7 +259,9 @@ if __name__ == "__main__":
cards.generic_card.DEBUG = False
print >>sys.stderr, "Using %s" % card.DRIVER_NAME
-
+
+ if isinstance(card, cards.rfid_card.RFID_Card):
+ print "UID: %s" % utils.hexdump(card.get_uid(), short=True)
fp = fingerprint(card)
print "Fingerprint: %s" % fp
matches = match_fingerprint(fp)
diff --git a/fingerprints.txt b/fingerprints.txt
index f56492e..7141e08 100644
--- a/fingerprints.txt
+++ b/fingerprints.txt
@@ -1,21 +1,26 @@
-1:0b0014
+1:0b0014$
ICode
-0:8080,N
+0:8080,N$
DESfire
-1:030003
+1:030003$
Mifare Ultralight
-1:030001
+1:030001$
Mifare Classic 1k
-0:80919131f06477e30300838290001c,P,.*
+0:80919131f06477e30300838290001c,P[^,]*,
Belgian Passport
(imported from Ludovic Rousseau)
-0:00640411010131800090005a,P,.*
- German Passport
-
0:006404150102009000ee,P:6700,1,569AAA9A
Electronic Passport Specimen, issued by Bundesdruckerei, Germany
+
+0:[^,]*,P:6700,1,5AAAAAAA,08
+ German Passport
+# Observed ATRS:
+# Passport issued Nov 06: 3b 8b 80 01 00 64 04 11 01 01 31 80 00 90 00 5a
+# corresponding fingerprint: 0:00640411010131800090005a,P:6700,1,5AAAAAAA,08
+# Passport issued Apr 07: 3b 89 80 01 00 64 04 15 01 02 00 90 00 ee
+# corresponding fingerprint: 0:006404150102009000ee,P:6700,1,5AAAAAAA,08