diff --git a/MobileAuthApp/app/src/main/AndroidManifest.xml b/MobileAuthApp/app/src/main/AndroidManifest.xml index be2c120..f592e7e 100644 --- a/MobileAuthApp/app/src/main/AndroidManifest.xml +++ b/MobileAuthApp/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + + timer.cancel() + requireActivity().runOnUiThread { + binding!!.timeCounter.text = getString(R.string.card_detected) + } + val card = IsoDep.get(tag) + card.timeout = 32768 + card.use { + try { + val comms = Comms(it, viewModel.userCan) + val response = comms.readPersonalData(byteArrayOf(1, 2, 6)) + viewModel.setUserFirstName(response[1]) + viewModel.setUserLastName(response[0]) + viewModel.setUserIdentificationNumber(response[2]) + requireActivity().runOnUiThread{ + binding!!.timeCounter.text = getString(R.string.data_read) + } + } catch (e: Exception) { + requireActivity().runOnUiThread { + binding!!.timeCounter.text = getString(R.string.no_success) + } + // Gives user some time to read the error message + Thread.sleep(1000) + goToTheStart() + } finally { + adapter.disableReaderMode(activity) + } + } + }, NfcAdapter.FLAG_READER_NFC_A, null) } private fun goToNextFragment() { - //Dummy data for now - viewModel.setUserFirstName("John") - viewModel.setUserLastName("Doe") - viewModel.setUserIdentificationNumber("012345678910") timer.cancel() findNavController().navigate(R.id.action_authFragment_to_userFragment) } diff --git a/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/MainActivity.kt b/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/MainActivity.kt index bb85fbc..bc93c57 100644 --- a/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/MainActivity.kt +++ b/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/MainActivity.kt @@ -1,7 +1,9 @@ package com.tarkvaraprojekt.mobileauthapp +import android.nfc.NfcAdapter import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import android.util.Log import androidx.navigation.NavController import androidx.navigation.fragment.NavHostFragment import com.tarkvaraprojekt.mobileauthapp.databinding.ActivityMainBinding diff --git a/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/NFC/Comms.java b/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/NFC/Comms.java index e9cce29..a4d184b 100644 --- a/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/NFC/Comms.java +++ b/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/NFC/Comms.java @@ -95,6 +95,10 @@ public class Comms { keyMAC = keys[1]; } + public byte[] getAuthenticationCertificate() { + return new byte[0]; + } + /** * Calculates the message authentication code * diff --git a/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/PinFragment.kt b/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/PinFragment.kt index ec3e69b..23ed504 100644 --- a/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/PinFragment.kt +++ b/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/PinFragment.kt @@ -34,6 +34,9 @@ class PinFragment : Fragment() { binding!!.nextButton.setOnClickListener { goToNextFragment() } binding!!.cancelButton.setOnClickListener { goToTheStart() } + // Currently PIN 1 is not required and thus this step is immediately skipped. + // In the future the UI flow will be changed in the nav_graph. + goToNextFragment() } private fun goToNextFragment() { @@ -44,8 +47,11 @@ class PinFragment : Fragment() { ) findNavController().navigate(R.id.action_pinFragment_to_canFragment) } else { - Toast.makeText(requireContext(), getString(R.string.length_pin), Toast.LENGTH_SHORT) - .show() + // Currently it is not important to enter PIN1 so we will allow the user to leave this field empty + //Toast.makeText(requireContext(), getString(R.string.length_pin), Toast.LENGTH_SHORT) + // .show() + viewModel.setUserPin("1234") + findNavController().navigate(R.id.action_pinFragment_to_canFragment) } } diff --git a/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/UserFragment.kt b/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/UserFragment.kt index 5e7735a..632e1fa 100644 --- a/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/UserFragment.kt +++ b/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/UserFragment.kt @@ -13,8 +13,8 @@ import com.tarkvaraprojekt.mobileauthapp.model.SmartCardViewModel /** * Fragment that is used to display the persons name and national identification number. - * Currently needed in order to test that the app is working because the results at the moment - * are not sent to some other website or app. + * Currently needed in order to test that the app is working and information is read + * from the ID card via NFC. */ class UserFragment : Fragment() { diff --git a/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/auth/Authenticator.kt b/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/auth/Authenticator.kt new file mode 100644 index 0000000..a92d716 --- /dev/null +++ b/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/auth/Authenticator.kt @@ -0,0 +1,22 @@ +package com.tarkvaraprojekt.mobileauthapp.auth + +import android.nfc.tech.IsoDep +import com.tarkvaraprojekt.mobileauthapp.NFC.Comms +import java.math.BigInteger + +class Authenticator(val comms : Comms) { + + public fun authenticate(nonce: BigInteger, challengeUrl: String, pin1: String) { + + // Ask PIN 1 from the user and get the authentication certificate from the ID card. + val authenticationCertificate : ByteArray = comms.getAuthenticationCertificate(); + + // Create the authentication token (OpenID X509) + + // Hash the authentication token. + + // Send the authentication token hash to the ID card for signing and get signed authentication token as response. + + // Return the signed authentication token. + } +} \ No newline at end of file diff --git a/MobileAuthApp/app/src/main/res/values/strings.xml b/MobileAuthApp/app/src/main/res/values/strings.xml index b82e7fe..0274330 100644 --- a/MobileAuthApp/app/src/main/res/values/strings.xml +++ b/MobileAuthApp/app/src/main/res/values/strings.xml @@ -7,21 +7,24 @@ KATKESTA - Palun sisesta PIN1 - PIN1 + Palun sisesta PIN 1 + PIN 1 Näide. 1234 - PIN1 lubatud pikkus on 4-12 + PIN 1 lubatud pikkus on 4..12 Näide. 123456 CAN Sisesta ID kaardi CAN (Card Access Number) CANi pikkus on vale + Kaart on tuvastatud. Hoia kaarti vastu telefoni. + Andmed loetud. Võid edasi minna. ID kaardiga ühenduse loomiseks pane kaart vastu telefoni Aega on jäänud %d sek Aeg on otsas + Vale CAN NIMI