From 28b4d52dc728ff9016890ff3630d1237f1f2650b Mon Sep 17 00:00:00 2001 From: Eugene Crosser Date: Fri, 3 May 2013 13:37:05 +0400 Subject: [PATCH] make errro handling via exception --- src/org/average/nfcauthcr/Check.java | 9 ++++++-- src/org/average/nfcauthcr/Enroll.java | 2 +- src/org/average/nfcauthcr/YkNeo.java | 31 +++++++++------------------ 3 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/org/average/nfcauthcr/Check.java b/src/org/average/nfcauthcr/Check.java index c3738f7..1fc5cea 100644 --- a/src/org/average/nfcauthcr/Check.java +++ b/src/org/average/nfcauthcr/Check.java @@ -14,6 +14,7 @@ import android.util.Log; import android.widget.Toast; import org.average.nfcauthcr.YkNeo; +import org.average.nfcauthcr.CRException; public class Check extends Activity { @@ -61,12 +62,16 @@ public class Check extends Activity { Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); if (tag == null) return; IsoDep isoTag = IsoDep.get(tag); - byte[] response = YkNeo.doChallengeYubiKey( + try { + byte[] response = YkNeo.doChallengeYubiKey( isoTag, slot, challenge); - if (response != null) { Intent data = getIntent(); data.putExtra("response", response); setResult(RESULT_OK, data); + } catch (CRException e) { + Log.v(TAG, e.getMessage()); + Toast.makeText(this, e.getMessage(), + Toast.LENGTH_LONG).show(); } finish(); } diff --git a/src/org/average/nfcauthcr/Enroll.java b/src/org/average/nfcauthcr/Enroll.java index 9f9d535..5b125fa 100644 --- a/src/org/average/nfcauthcr/Enroll.java +++ b/src/org/average/nfcauthcr/Enroll.java @@ -127,7 +127,7 @@ public class Enroll extends Activity { rng.nextBytes(challenge); Log.v(TAG, "Random challenge: " + hex(challenge)); Log.v(TAG, "Launching challenging activity"); - Intent crIntent = new Intent(this, NFCAuthCRCheck.class); + Intent crIntent = new Intent(this, Check.class); crIntent.putExtra("slot", slot); crIntent.putExtra("challenge", challenge); this.startActivityForResult(crIntent, 0); diff --git a/src/org/average/nfcauthcr/YkNeo.java b/src/org/average/nfcauthcr/YkNeo.java index a291eab..1537459 100644 --- a/src/org/average/nfcauthcr/YkNeo.java +++ b/src/org/average/nfcauthcr/YkNeo.java @@ -7,7 +7,8 @@ import android.nfc.NfcAdapter; import android.nfc.Tag; import android.nfc.TagLostException; import android.nfc.tech.IsoDep; -//import android.util.Log; + +import org.average.nfcauthcr.CRException; public class YkNeo { @@ -23,18 +24,16 @@ public class YkNeo { private static final byte SLOT_CHAL_HMAC2 = 0x38; public static final byte[] doChallengeYubiKey(IsoDep isoTag, int slot, - byte[] challenge) { + byte[] challenge) + throws CRException { try { isoTag.connect(); byte[] resp = isoTag.transceive(selectApdu); int length = resp.length; - //Log.v(TAG, "response to select length is " + length); if (resp[length - 2] != (byte)0x90 || resp[length - 1] != 0x00) { - //Log.v(TAG, "Wrong response to select"); - //Toast.makeText(this, R.string.tag_error, - // Toast.LENGTH_LONG).show(); - return null; + throw new CRException( + "NFC Error code in the response to select"); } byte[] crApdu = new byte[69]; crApdu[0] = 0x00; // CLA @@ -52,24 +51,14 @@ public class YkNeo { length = resp.length; if (resp[length - 2] != (byte)0x90 || resp[length - 1] != 0x00) { - //Log.v(TAG, "Wrong response to challenge"); - //Toast.makeText(this, R.string.tag_error, - // Toast.LENGTH_LONG).show(); - return null; + throw new CRException( + "NFC Error code in the response to CR"); } - //Log.v(TAG, "response to challenge length is " + length); return Arrays.copyOf(resp, length-2); } catch (TagLostException e) { - //Log.v(TAG, e.getMessage()); - //Toast.makeText(this, - // R.string.tag_lost, Toast.LENGTH_LONG).show(); + throw new CRException("NFC connection lost", e); } catch (IOException e) { - //Log.v(TAG, e.getMessage()); - //Toast.makeText(this, - // getText(R.string.tag_error) + - // e.getMessage(), - // Toast.LENGTH_LONG).show(); + throw new CRException("NFC I/O error", e); } - return null; } } -- 2.39.2