From 2b0dfed0126a3b5bb77e79108d036fcddffe8ab8 Mon Sep 17 00:00:00 2001
From: str4d <str4d@mail.i2p>
Date: Fri, 7 Mar 2014 08:27:14 +0000
Subject: [PATCH] Fixed Android API version detection, load cacerts dir for API
 >= 14

---
 core/java/src/net/i2p/crypto/KeyStoreUtil.java | 11 ++++++++---
 core/java/src/net/i2p/util/SystemVersion.java  |  2 +-
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/core/java/src/net/i2p/crypto/KeyStoreUtil.java b/core/java/src/net/i2p/crypto/KeyStoreUtil.java
index 654a058683..fb690b7cf6 100644
--- a/core/java/src/net/i2p/crypto/KeyStoreUtil.java
+++ b/core/java/src/net/i2p/crypto/KeyStoreUtil.java
@@ -94,9 +94,14 @@ public class KeyStoreUtil {
             success = loadCerts(new File(override), ks);
         if (!success) {
             if (SystemVersion.isAndroid()) {
-                // thru API 13. As of API 14 (ICS), the file is gone, but
-                // ks.load(null, pw) will bring in the default certs?
-                success = loadCerts(new File(System.getProperty("java.home"), "etc/security/cacerts.bks"), ks);
+                if (SystemVersion.getAndroidVersion() >= 14) {
+                    try {
+                        ks.load(null, DEFAULT_KEYSTORE_PASSWORD.toCharArray());
+                        success = addCerts(new File(System.getProperty("java.home"), "etc/security/cacerts"), ks) > 0;
+                    } catch (Exception e) {}
+                } else {
+                    success = loadCerts(new File(System.getProperty("java.home"), "etc/security/cacerts.bks"), ks);
+                }
             } else {
                 success = loadCerts(new File(System.getProperty("java.home"), "lib/security/jssecacerts"), ks);
                 if (!success)
diff --git a/core/java/src/net/i2p/util/SystemVersion.java b/core/java/src/net/i2p/util/SystemVersion.java
index 639bab00b6..224b79031e 100644
--- a/core/java/src/net/i2p/util/SystemVersion.java
+++ b/core/java/src/net/i2p/util/SystemVersion.java
@@ -47,7 +47,7 @@ public abstract class SystemVersion {
         int sdk = 0;
         if (_isAndroid) {
             try {
-                Class<?> ver = Class.forName("android.os.Build.VERSION", true, ClassLoader.getSystemClassLoader());
+                Class<?> ver = Class.forName("android.os.Build$VERSION", true, ClassLoader.getSystemClassLoader());
                 Field field = ver.getField("SDK_INT");
                 sdk = field.getInt(null);
             } catch (Exception e) {}
-- 
GitLab