From ee98128635cba33e27ff15b52c6ac52d0a9a5c38 Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 22 Sep 2021 22:55:39 +0200 Subject: [PATCH] Fixed Android 5 signature error --- .../eu/faircode/email/EncryptionHelper.java | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/EncryptionHelper.java b/app/src/main/java/eu/faircode/email/EncryptionHelper.java index 687ba1d42c..d4d42dec02 100644 --- a/app/src/main/java/eu/faircode/email/EncryptionHelper.java +++ b/app/src/main/java/eu/faircode/email/EncryptionHelper.java @@ -20,6 +20,7 @@ package eu.faircode.email; */ import android.content.Context; +import android.os.Build; import org.bouncycastle.jce.provider.BouncyCastleProvider; @@ -28,19 +29,31 @@ import java.security.Security; public class EncryptionHelper { static { - try { - Provider[] providers = Security.getProviders(); - for (int p = 0; p < providers.length; p++) - if (BouncyCastleProvider.PROVIDER_NAME.equals(providers[p].getName())) { - Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME); - Provider bc = new BouncyCastleProvider(); - Security.insertProviderAt(bc, p + 1); - Log.i("Replacing security provider " + providers[p] + " at " + p + " by " + bc); - break; - } - } catch (Throwable ex) { - Log.e(ex); - } + /* + Caused by: java.lang.SecurityException: Incorrect signature + at org.apache.harmony.security.utils.JarUtils.verifySignature(JarUtils.java:223) + at java.util.jar.JarVerifier.verifyCertificate(JarVerifier.java:294) + at java.util.jar.JarVerifier.readCertificates(JarVerifier.java:268) + at java.util.jar.JarFile.getInputStream(JarFile.java:380) + at libcore.net.url.JarURLConnectionImpl.getInputStream(JarURLConnectionImpl.java:222) + at java.net.URL.openStream(URL.java:470) + at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:444) + at java.lang.Class.getResourceAsStream(Class.java:1334) + */ + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) + try { + Provider[] providers = Security.getProviders(); + for (int p = 0; p < providers.length; p++) + if (BouncyCastleProvider.PROVIDER_NAME.equals(providers[p].getName())) { + Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME); + Provider bc = new BouncyCastleProvider(); + Security.insertProviderAt(bc, p + 1); + Log.i("Replacing security provider " + providers[p] + " at " + p + " by " + bc); + break; + } + } catch (Throwable ex) { + Log.e(ex); + } } static void init(Context context) {