X-Git-Url: http://www.average.org/gitweb/?p=YkNeoCR.git;a=blobdiff_plain;f=src%2Forg%2Faverage%2Fnfcauthcr%2FNFCAuthCREnroll.java;h=daea0d848c0bbe42103db9f6841ca48a3542dc57;hp=098011a558537164450c2846b6ea751a7ed567bb;hb=d68162938933f84fdde11f7a4ae5b919ccc469a1;hpb=90d8da4bab1e22629daa43f86ce1c6f1d18e81d9 diff --git a/src/org/average/nfcauthcr/NFCAuthCREnroll.java b/src/org/average/nfcauthcr/NFCAuthCREnroll.java index 098011a..daea0d8 100644 --- a/src/org/average/nfcauthcr/NFCAuthCREnroll.java +++ b/src/org/average/nfcauthcr/NFCAuthCREnroll.java @@ -1,16 +1,24 @@ package org.average.nfcauthcr; +import java.util.Random; + import android.os.Bundle; import android.app.Activity; +import android.app.AlertDialog; import android.preference.PreferenceManager; +import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; +import android.content.DialogInterface; import android.util.Log; import android.view.View; +import android.widget.TextView; import android.widget.RadioButton; -public class NFCAuthCREnroll extends Activity -{ +import org.average.nfcauthcr.NFCAuthCRCheck; + +public class NFCAuthCREnroll extends Activity { + private final String TAG = getClass().getName(); private static boolean waitingForResult = false; @@ -69,6 +77,62 @@ public class NFCAuthCREnroll extends Activity public void onEnrollClicked(View view) { Log.v(TAG, "Enroll clicked"); - if (!waitingForResult) { finish(); } + if (slot > 0) { + runEnrollment(slot); + } else { + showEnrollResult("Must specify which slot to use"); + } + } + + public void onActivityResult(int requestCode, int resultCode, + Intent intent) { + Log.v(TAG, "Got activity result"); + waitingForResult = false; + + 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) { + Log.v(TAG, "Show result: \"" + msg + "\""); + + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(R.string.enrollresult); + builder.setMessage(msg); + builder.setPositiveButton(android.R.string.ok, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + if (!waitingForResult) { finish(); } + } + }); + AlertDialog dialog = builder.create(); + dialog.show(); + } + + 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 ""; + for (byte b: a) sb.append(String.format("%02x", b&0xff)); + return sb.toString(); } }