summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java31
-rw-r--r--app/src/test/java/se/leap/bitmaskclient/base/utils/ConfigHelperTest.java22
2 files changed, 53 insertions, 0 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java b/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java
index cd5d1fca..428d0a4f 100644
--- a/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java
+++ b/app/src/main/java/se/leap/bitmaskclient/base/utils/ConfigHelper.java
@@ -34,6 +34,7 @@ import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
+import java.security.cert.CertificateEncodingException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
@@ -119,6 +120,36 @@ public class ConfigHelper {
return null;
}
+ public static String parseX509CertificatesToString(ArrayList<X509Certificate> certs) {
+ StringBuilder sb = new StringBuilder();
+ for (X509Certificate certificate : certs) {
+
+ byte[] derCert = new byte[0];
+ try {
+ derCert = certificate.getEncoded();
+ byte[] encodedCert = Base64.encode(derCert);
+ String base64Cert = new String(encodedCert);
+
+ // add cert header
+ sb.append("-----BEGIN CERTIFICATE-----\n");
+
+ // split base64 string into lines of 64 characters
+ int index = 0;
+ while (index < base64Cert.length()) {
+ sb.append(base64Cert.substring(index, Math.min(index + 64, base64Cert.length())))
+ .append("\n");
+ index += 64;
+ }
+
+ // add cert footer
+ sb.append("-----END CERTIFICATE-----\n");
+ } catch (CertificateEncodingException e) {
+ e.printStackTrace();
+ }
+ }
+ return sb.toString().trim();
+ }
+
public static void ensureNotOnMainThread(@NonNull Context context) throws IllegalStateException{
Looper looper = Looper.myLooper();
if (looper != null && looper == context.getMainLooper()) {
diff --git a/app/src/test/java/se/leap/bitmaskclient/base/utils/ConfigHelperTest.java b/app/src/test/java/se/leap/bitmaskclient/base/utils/ConfigHelperTest.java
index 6e0ceb56..c6387165 100644
--- a/app/src/test/java/se/leap/bitmaskclient/base/utils/ConfigHelperTest.java
+++ b/app/src/test/java/se/leap/bitmaskclient/base/utils/ConfigHelperTest.java
@@ -1,6 +1,7 @@
package se.leap.bitmaskclient.base.utils;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import com.tngtech.java.junit.dataprovider.DataProvider;
import com.tngtech.java.junit.dataprovider.DataProviderRunner;
@@ -11,6 +12,12 @@ import org.junit.runner.RunWith;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+import java.io.IOException;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+
+import se.leap.bitmaskclient.testutils.TestSetupHelper;
+
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(DataProviderRunner.class)
public class ConfigHelperTest {
@@ -57,4 +64,19 @@ public class ConfigHelperTest {
assertEquals("domain.co.uk", ConfigHelper.getDomainFromMainURL("https://subdomain.domain.co.uk"));
assertEquals("domain.co.uk", ConfigHelper.getDomainFromMainURL("https://domain.co.uk"));
}
+
+ @Test
+ public void testParseX509CertificatesFromString() throws IOException {
+ ArrayList<X509Certificate> certs = ConfigHelper.parseX509CertificatesFromString(TestSetupHelper.getInputAsString(getClass().getClassLoader().getResourceAsStream("updated_cert.pem")));
+ assertTrue(certs != null);
+ }
+
+ @Test
+ public void testParseX509CertificatesToString() throws IOException {
+ String certsString = TestSetupHelper.getInputAsString(getClass().getClassLoader().getResourceAsStream("updated_cert.pem"));
+ ArrayList<X509Certificate> certs = ConfigHelper.parseX509CertificatesFromString(certsString);
+ String parsedCerts = ConfigHelper.parseX509CertificatesToString(certs);
+ assertEquals(certsString, parsedCerts);
+ }
+
} \ No newline at end of file