package org.average.nfcauthcr;
+import java.util.Random;
+
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
public void onEnrollClicked(View view) {
Log.v(TAG, "Enroll clicked");
if (slot > 0) {
- runChallenge(slot);
+ runEnrollment(slot);
} else {
showEnrollResult("Must specify which slot to use");
}
Intent intent) {
Log.v(TAG, "Got activity result");
waitingForResult = false;
- if (resultCode == RESULT_OK) {
- String res = intent.getStringExtra("response");
- Log.v(TAG, "Response is \"" + res + "\"");
- } else {
+
+ if (resultCode != RESULT_OK) {
Log.v(TAG, "Error result code " + resultCode);
+ return;
}
+ byte[] challenge = intent.getByteArrayExtra("challenge");
+ Log.v(TAG, "Challenge is \"" + hex(challenge) + "\"");
+ byte[] response = intent.getByteArrayExtra("response");
+ Log.v(TAG, "Response is \"" + hex(response) + "\"");
}
private void showEnrollResult(final String msg) {
dialog.show();
}
- private void runChallenge(int slot) {
+ private void runEnrollment(int slot) {
+ Random rng = new Random();
+ byte[] challenge = new byte[63];
+ rng.nextBytes(challenge);
+ Log.v(TAG, "Random challenge: " + hex(challenge));
Log.v(TAG, "Launching challenging activity");
Intent crIntent = new Intent(this, NFCAuthCRCheck.class);
crIntent.putExtra("slot", slot);
+ crIntent.putExtra("challenge", challenge);
this.startActivityForResult(crIntent, 0);
waitingForResult = true;
}
+
+ private String hex(byte[] a) {
+ StringBuilder sb = new StringBuilder();
+ if (a == null) return "<null>";
+ for (byte b: a) sb.append(String.format("%02x", b&0xff));
+ return sb.toString();
+ }
}