do not use BC provider on android 22+

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/crypto/axolotl/XmppAxolotlMessage.java | 5 
src/main/java/eu/siacs/conversations/utils/Compatibility.java               | 4 
2 files changed, 7 insertions(+), 2 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/crypto/axolotl/XmppAxolotlMessage.java 🔗

@@ -24,6 +24,7 @@ import javax.crypto.spec.IvParameterSpec;
 import javax.crypto.spec.SecretKeySpec;
 
 import eu.siacs.conversations.Config;
+import eu.siacs.conversations.utils.Compatibility;
 import eu.siacs.conversations.xml.Element;
 import rocks.xmpp.addr.Jid;
 
@@ -180,7 +181,7 @@ public class XmppAxolotlMessage {
 		try {
 			SecretKey secretKey = new SecretKeySpec(innerKey, KEYTYPE);
 			IvParameterSpec ivSpec = new IvParameterSpec(iv);
-			Cipher cipher = Cipher.getInstance(CIPHERMODE, PROVIDER);
+			Cipher cipher = Compatibility.twentyTwo() ? Cipher.getInstance(CIPHERMODE) : Cipher.getInstance(CIPHERMODE, PROVIDER);
 			cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
 			this.ciphertext = cipher.doFinal(Config.OMEMO_PADDING ? getPaddedBytes(plaintext) : plaintext.getBytes());
 			if (Config.PUT_AUTH_TAG_INTO_KEY && this.ciphertext != null) {
@@ -296,7 +297,7 @@ public class XmppAxolotlMessage {
 					key = newKey;
 				}
 
-				Cipher cipher = Cipher.getInstance(CIPHERMODE, PROVIDER);
+				Cipher cipher = Compatibility.twentyTwo() ? Cipher.getInstance(CIPHERMODE) : Cipher.getInstance(CIPHERMODE, PROVIDER);
 				SecretKeySpec keySpec = new SecretKeySpec(key, KEYTYPE);
 				IvParameterSpec ivSpec = new IvParameterSpec(iv);
 

src/main/java/eu/siacs/conversations/utils/Compatibility.java 🔗

@@ -32,6 +32,10 @@ public class Compatibility {
         return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O;
     }
 
+    public static boolean twentyTwo() {
+        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1;
+    }
+
     private static boolean getBooleanPreference(Context context, String name, @BoolRes int res) {
         return getPreferences(context).getBoolean(name, context.getResources().getBoolean(res));
     }