From cfe19b55a1662686db0e3b6dc2238eb8763fc763 Mon Sep 17 00:00:00 2001 From: Ondrej Mikle Date: Fri, 27 Oct 2017 19:56:43 +0200 Subject: [PATCH] Make the signature wrapped in JSON object to be able to extend structure later --- brmdoor_authenticator.py | 15 +++++++++++++-- write_signed_ndef_on_desfire.py | 4 +++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/brmdoor_authenticator.py b/brmdoor_authenticator.py index 32b3de7..5fefeee 100644 --- a/brmdoor_authenticator.py +++ b/brmdoor_authenticator.py @@ -3,6 +3,7 @@ import sqlite3 import hmac import hashlib import logging +import json import axolotl_curve25519 as curve @@ -184,7 +185,8 @@ class DesfireEd25519Authenthicator(object): nick = record[0] try: - ndefSignature = self.nfcReader.readDesfireNDEF() + ndefJson = json.loads(self.nfcReader.readDesfireNDEF()) + ndefSignature = ndefJson["brmdoorSignature"].decode("hex") if len(ndefSignature) != 64: logging.error("NDEF signature has wrong length") return None @@ -194,7 +196,16 @@ class DesfireEd25519Authenthicator(object): logging.info("Signature check failed for Desfire NDEF for UID %s", uid_hex) return None except NFCError, e: - logging.info("Desfire read NDEF failed: %s" % e.what()) + logging.error("Desfire read NDEF failed: %s", e.what()) + return None + except TypeError, e: + logging.error("Could not decode signature from JSON: %s", e) + return None + except ValueError, e: + logging.error("Could not decode JSON from NDEF: %s", e) + return None + except KeyError, e: + logging.error("Missing signature in JSON: %s", e) return None def shutdown(self): diff --git a/write_signed_ndef_on_desfire.py b/write_signed_ndef_on_desfire.py index 7e0a1be..1f11752 100755 --- a/write_signed_ndef_on_desfire.py +++ b/write_signed_ndef_on_desfire.py @@ -27,7 +27,9 @@ try: print "Got UID %s" % uid_hex signature = signUid(key, uid_hex.decode("hex")) (tempFd, tempFname) = tempfile.mkstemp(dir="/tmp") - os.write(tempFd, signature) + signatureJson = '{"brmdoorSignature": "%s"}' % signature.encode("hex") + print "Writing signature JSON:", signatureJson + os.write(tempFd, signatureJson) os.close(tempFd) print "Wrote signature into %s" % tempFname except NFCError, e: