From fa0a5a20002381c22e5867fb43897238f4bf21ab Mon Sep 17 00:00:00 2001
From: Janik Besendorf <janik@besendorf.org>
Date: Mon, 18 Jan 2021 16:58:13 +0100
Subject: [PATCH] tidying up and comments

---
 .../androidsecurityscanner/MainActivity.java  | 75 +++++++------------
 1 file changed, 27 insertions(+), 48 deletions(-)

diff --git a/app/src/main/java/com/besendorf/androidsecurityscanner/MainActivity.java b/app/src/main/java/com/besendorf/androidsecurityscanner/MainActivity.java
index af69145..35f4f77 100644
--- a/app/src/main/java/com/besendorf/androidsecurityscanner/MainActivity.java
+++ b/app/src/main/java/com/besendorf/androidsecurityscanner/MainActivity.java
@@ -1,48 +1,53 @@
+/*
+    Android Security Scanner
+    Copyright (C) 2021  besendorf
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+ */
+
 package com.besendorf.androidsecurityscanner;
 
 import android.annotation.SuppressLint;
-import android.app.KeyguardManager;
 import android.hardware.fingerprint.FingerprintManager;
-import android.media.Image;
 import android.os.Build;
 import android.os.Bundle;
 import android.security.keystore.KeyGenParameterSpec;
 import android.security.keystore.KeyProperties;
 import android.security.keystore.StrongBoxUnavailableException;
 import android.view.View;
-import android.widget.ImageView;
 import android.widget.TextView;
 import android.content.pm.PackageManager;
-
 import androidx.appcompat.app.AppCompatActivity;
-
 import org.json.JSONException;
 import org.json.JSONObject;
-
 import java.io.BufferedReader;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.lang.reflect.Method;
 import java.math.BigInteger;
 import java.security.InvalidAlgorithmParameterException;
-import java.security.Key;
 import java.security.KeyStore;
 import java.security.KeyStoreException;
 import java.security.NoSuchAlgorithmException;
 import java.security.NoSuchProviderException;
-import java.security.Provider;
-import java.security.Security;
-import java.util.Arrays;
-import java.util.Comparator;
-
-import javax.crypto.Cipher;
 import javax.crypto.KeyGenerator;
+
 public class MainActivity extends AppCompatActivity {
 
-    private KeyStore keyStore;
-    private TextView textViewFingerprintManager, reportTextView;
+    private TextView reportTextView;
     private FingerprintManager fingerprintManager;
-    private KeyguardManager keyguardManager;
     private PackageManager pm;
     private JSONObject json;
     private String sreport;
@@ -52,16 +57,11 @@ public class MainActivity extends AppCompatActivity {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
-
         reportTextView = (TextView) findViewById(R.id.reportTextView);
         json = new JSONObject();
-
         pm = getPackageManager();
-
-
-
-
     }
+
         public void onBtnClick(View view){
             try {
                 json.put("MANUFATURER", Build.MANUFACTURER);
@@ -71,7 +71,6 @@ public class MainActivity extends AppCompatActivity {
                 json.put("CPU_MANUFACTURER", getCpu());
                 json.put("CPU", getProp("ro.board.platform"));
                 json.put("FINGERPRINT",fingerprint());
-                json.put("KEYSTORE",keyStorePresence());
                 json.put("ro.product.first_api_level",getProp("ro.product.first_api_level"));
                 json.put("ro.boot.flash.locked",getProp("ro.boot.flash.locked"));
                 json.put("ro.boot.verifiedbootstate",getProp("ro.boot.verifiedbootstate"));
@@ -91,7 +90,6 @@ public class MainActivity extends AppCompatActivity {
 
         }
 
-
         private boolean fingerprint(){
             //FingerprintManager needs Android 6.0
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
@@ -103,6 +101,7 @@ public class MainActivity extends AppCompatActivity {
         }
 
         private boolean keyStorePresence(){
+            // to check for KeyStore presence we try to get an Instance of KeyStore and if we get the Exception we return false
             try {
                 ks = KeyStore.getInstance(KeyStore.getDefaultType());
                 return true;
@@ -112,21 +111,19 @@ public class MainActivity extends AppCompatActivity {
         }
 
         private boolean isStrongbox(){
+            // similar to keyStorePresence we use .setIsStrongBoxBacked to make using Strongbox mandatory for a dummy Key Generation which will result in StrongBoxUnavailableException if Strongbox is not available
 
             KeyGenerator kg = null;
             try {
                 kg = KeyGenerator.getInstance(
                         KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
-            } catch (NoSuchAlgorithmException e) {
-                return false;
-            } catch (NoSuchProviderException e) {
+            } catch (NoSuchAlgorithmException | NoSuchProviderException e) {
                 return false;
             }
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                 try {
                     kg.init(new KeyGenParameterSpec.Builder("keystore1", 0)
                             .setCertificateSerialNumber(BigInteger.valueOf(1L))
-                            //.setCertificateSubject()
                             .setIsStrongBoxBacked(true) /* Enable StrongBox */
                             .build());
                 } catch (InvalidAlgorithmParameterException e) {
@@ -146,27 +143,8 @@ public class MainActivity extends AppCompatActivity {
             
         }
 
-    private JSONObject securityProviders() throws JSONException {
-        Provider[] providers = Security.getProviders();
-        JSONObject providergroup = new JSONObject();
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) Arrays.sort(providers, new Comparator<Provider>() {
-            @Override
-            public int compare(final Provider o1, final Provider o2) {
-                return (o1.getName().compareTo(o2.getName()));
-            }
-        });
-        for (int i = 0; i < providers.length; i++) {
-            JSONObject provider = new JSONObject().put("Info",providers[i].getInfo());
-
-            provider.put("Version",String.valueOf(providers[i].getVersion()));
-            provider.put("Class",providers[i].getClass().getName());
-            providergroup.put(providers[i].getName(), provider);
-
-        }
-        return providergroup;
-    }
-// from kaltura-device-info-android
     static String getProp(String s) {
+        // from https://bitbucket.org/oF2pks/kaltura-device-info-android/src/master/app/src/main/java/com/oF2pks/kalturadeviceinfos/Utils.java licenced under GPLv3
         try {
             @SuppressLint("PrivateApi")
             Class<?> aClass = Class.forName("android.os.SystemProperties");
@@ -181,6 +159,7 @@ public class MainActivity extends AppCompatActivity {
     }
 
     private static String getCpu() {
+        // from https://bitbucket.org/oF2pks/kaltura-device-info-android/src/master/app/src/main/java/com/oF2pks/kalturadeviceinfos/Collector.java licenced under GPLv3
         try {
             Process p = Runtime.getRuntime().exec("cat /proc/cpuinfo");
             InputStream is = null;
-- 
GitLab