From 75779ea77a27a759126ed6e0ec73f300678961a2 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Mon, 9 Sep 2019 15:17:01 +0200 Subject: [PATCH] Integrated PIV applet https://github.com/arekinath/PivApplet --- .gitmodules | 3 ++ ACardEmulator/ACardEmulator.iml | 4 +- ACardEmulator/app/app.iml | 39 ++++++++++--------- ACardEmulator/app/build.gradle | 1 + ACardEmulator/app/src/main/external/PivApplet | 1 + .../acardemulator/SettingsActivity.java | 1 + .../emulators/EmulatorSingleton.java | 1 + .../acardemulator/emulators/JCEmulator.java | 14 +++++++ .../app/src/main/res/values/strings.xml | 7 ++++ .../app/src/main/res/xml/aid_list.xml | 8 ++++ .../app/src/main/res/xml/settings.xml | 6 +++ 11 files changed, 64 insertions(+), 21 deletions(-) create mode 160000 ACardEmulator/app/src/main/external/PivApplet diff --git a/.gitmodules b/.gitmodules index bf2fc04..69b7951 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,3 +19,6 @@ [submodule "virtualsmartcard/win32/DevMsi"] path = virtualsmartcard/win32/DevMsi url = https://github.com/nickrussler/DevMsi.git +[submodule "ACardEmulator/app/src/main/external/PivApplet"] + path = ACardEmulator/app/src/main/external/PivApplet + url = https://github.com/frankmorgner/PivApplet diff --git a/ACardEmulator/ACardEmulator.iml b/ACardEmulator/ACardEmulator.iml index 5557158..8d5ac92 100644 --- a/ACardEmulator/ACardEmulator.iml +++ b/ACardEmulator/ACardEmulator.iml @@ -1,5 +1,5 @@ - + @@ -13,7 +13,7 @@ - + \ No newline at end of file diff --git a/ACardEmulator/app/app.iml b/ACardEmulator/app/app.iml index 44206a3..2a93701 100644 --- a/ACardEmulator/app/app.iml +++ b/ACardEmulator/app/app.iml @@ -1,5 +1,5 @@ - + @@ -17,24 +17,23 @@ - + - - @@ -62,6 +61,7 @@ + @@ -81,7 +81,8 @@ - + + @@ -109,18 +110,18 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + \ No newline at end of file diff --git a/ACardEmulator/app/build.gradle b/ACardEmulator/app/build.gradle index 0c4451e..25a668d 100644 --- a/ACardEmulator/app/build.gradle +++ b/ACardEmulator/app/build.gradle @@ -20,6 +20,7 @@ android { main.java.srcDirs += 'src/main/external/GidsApplet/src' main.java.exclude('**/gidsAppletTests/*.java') main.java.srcDirs += 'src/main/external/IsoApplet/src' + main.java.srcDirs += 'src/main/external/PivApplet/src' main.java.srcDirs += 'src/main/external/android-scio/src/main' main.java.srcDirs += 'src/main/external/ykneo-openpgp/applet/src' main.java.srcDirs += 'src/main/external/ykneo-oath/applet/src' diff --git a/ACardEmulator/app/src/main/external/PivApplet b/ACardEmulator/app/src/main/external/PivApplet new file mode 160000 index 0000000..eea6dc9 --- /dev/null +++ b/ACardEmulator/app/src/main/external/PivApplet @@ -0,0 +1 @@ +Subproject commit eea6dc9d101cfde27abb4ce068bc5260d6f8f658 diff --git a/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/SettingsActivity.java b/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/SettingsActivity.java index 0cf7cfd..b60d50e 100644 --- a/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/SettingsActivity.java +++ b/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/SettingsActivity.java @@ -185,6 +185,7 @@ public class SettingsActivity extends AppCompatPreferenceActivity { bindPreferenceSummaryToValue(findPreference("emulator")); bindPreferenceSummaryToValue(findPreference("activate_helloworld")); + bindPreferenceSummaryToValue(findPreference("activate_pivapplet")); bindPreferenceSummaryToValue(findPreference("activate_openpgp")); bindPreferenceSummaryToValue(findPreference("activate_oath")); bindPreferenceSummaryToValue(findPreference("activate_isoapplet")); diff --git a/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/emulators/EmulatorSingleton.java b/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/emulators/EmulatorSingleton.java index d0fcdbd..9383e55 100644 --- a/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/emulators/EmulatorSingleton.java +++ b/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/emulators/EmulatorSingleton.java @@ -85,6 +85,7 @@ public class EmulatorSingleton { SP.getBoolean("activate_openpgp", false), SP.getBoolean("activate_oath", false), SP.getBoolean("activate_isoapplet", false), + SP.getBoolean("activate_pivapplet", false), SP.getBoolean("activate_gidsapplet", false)); } } diff --git a/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/emulators/JCEmulator.java b/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/emulators/JCEmulator.java index 1ff6967..90bfbce 100644 --- a/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/emulators/JCEmulator.java +++ b/ACardEmulator/app/src/main/java/com/vsmartcard/acardemulator/emulators/JCEmulator.java @@ -13,6 +13,7 @@ import com.vsmartcard.acardemulator.R; import com.vsmartcard.acardemulator.Util; import net.pwendland.javacard.pki.isoapplet.IsoApplet; +import net.cooperi.pivapplet.PivApplet; import openpgpcard.OpenPGPApplet; import pkgYkneoOath.YkneoOath; @@ -27,6 +28,7 @@ public class JCEmulator implements Emulator { boolean activate_openpgp, boolean activate_oath, boolean activate_isoapplet, + boolean activate_pivapplet, boolean activate_gidsapplet) { String aid, name, extra_install = "", extra_error = ""; simulator = new Simulator(new SimulatorRuntime()); @@ -75,6 +77,18 @@ public class JCEmulator implements Emulator { } } + if (activate_pivapplet) { + name = context.getResources().getString(R.string.applet_pivapplet); + aid = context.getResources().getString(R.string.aid_pivapplet); + try { + simulator.installApplet(AIDUtil.create(aid), PivApplet.class); + extra_install += "\n" + name + " (AID: " + aid + ")"; + } catch (Exception e) { + e.printStackTrace(); + extra_error += "\n" + "Could not install " + name + " (AID: " + aid + ")"; + } + } + if (activate_isoapplet) { name = context.getResources().getString(R.string.applet_isoapplet); aid = context.getResources().getString(R.string.aid_isoapplet); diff --git a/ACardEmulator/app/src/main/res/values/strings.xml b/ACardEmulator/app/src/main/res/values/strings.xml index 6eea7fc..4aa8b57 100644 --- a/ACardEmulator/app/src/main/res/values/strings.xml +++ b/ACardEmulator/app/src/main/res/values/strings.xml @@ -20,6 +20,12 @@ My Smart Logon\'s GIDS Applet F276A288BCFBA69D34F31001 Philip Wendland\'s ISO Applet + A00000030800001000 + A000000308000010 + A0000003080000 + A00000030800 + A000000308 + Alex Wilson\'s PIV Applet F000000001 jCardSim Team\'s Hello World Applet D27600012401 @@ -33,6 +39,7 @@ Hello World Applet (AID F000000001)\n OpenPGP Applet (AID D2760001240102000000000000010000)\n OATH Applet (AID A000000527210101)\n + PIV Applet (AID A00000030800001000)\n ISO Applet (AID F276A288BCFBA69D34F31001)\n GIDS Applet (AID A000000397425446590201)\n \n diff --git a/ACardEmulator/app/src/main/res/xml/aid_list.xml b/ACardEmulator/app/src/main/res/xml/aid_list.xml index 5b3f8d2..e72c5a1 100644 --- a/ACardEmulator/app/src/main/res/xml/aid_list.xml +++ b/ACardEmulator/app/src/main/res/xml/aid_list.xml @@ -21,6 +21,14 @@ + + + + + + + + diff --git a/ACardEmulator/app/src/main/res/xml/settings.xml b/ACardEmulator/app/src/main/res/xml/settings.xml index 2b33d30..5cd4c59 100644 --- a/ACardEmulator/app/src/main/res/xml/settings.xml +++ b/ACardEmulator/app/src/main/res/xml/settings.xml @@ -37,6 +37,12 @@ android:key="activate_isoapplet" android:defaultValue="true" /> +