import android.widget.Toast;
import org.average.nfcauthcr.YkNeo;
+import org.average.nfcauthcr.CRException;
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();
}
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);
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 {
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
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;
}
}