Test for the supported modes in javax.crypto

I tested the supported transformations for the Cipher class in javax.crypto on various Android SDKs.

Here is the test code:

public static void getProviders() {
    Provider[] providers = Security.getProviders();
    for (Provider provider : providers) {
        Set<Service> services = provider.getServices();
        for (Service service : services) {
            if (service.getType().equals("Cipher")) {
                System.out.println("Provider: " + provider.getName() + ", Algorithm: " + service.getAlgorithm());
            }
        }
    }
}

Here are the results:

Android API level 19 (Android 4.4)
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/NoPadding
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/PKCS1Padding
Provider: AndroidOpenSSL, Algorithm: AES/ECB/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES/ECB/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: AES/CBC/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES/CBC/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: AES/CFB/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES/CFB/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: AES/CTR/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES/CTR/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: AES/OFB/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES/OFB/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: DESEDE/CBC/NoPadding
Provider: AndroidOpenSSL, Algorithm: DESEDE/CBC/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: DESEDE/CFB/NoPadding
Provider: AndroidOpenSSL, Algorithm: DESEDE/CFB/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: DESEDE/ECB/NoPadding
Provider: AndroidOpenSSL, Algorithm: DESEDE/ECB/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: DESEDE/OFB/NoPadding
Provider: AndroidOpenSSL, Algorithm: DESEDE/OFB/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: ARC4
Provider: BC, Algorithm: AES
Provider: BC, Algorithm: AESWRAP
Provider: BC, Algorithm: PBEWITHSHAAND128BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHAAND192BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHAAND256BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHA256AND128BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHA256AND192BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHA256AND256BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHMD5AND128BITAES-CBC-OPENSSL
Provider: BC, Algorithm: PBEWITHMD5AND192BITAES-CBC-OPENSSL
Provider: BC, Algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
Provider: BC, Algorithm: ARC4
Provider: BC, Algorithm: PBEWITHSHAAND128BITRC4
Provider: BC, Algorithm: PBEWITHSHAAND40BITRC4
Provider: BC, Algorithm: BLOWFISH
Provider: BC, Algorithm: DES
Provider: BC, Algorithm: PBEWITHMD5ANDDES
Provider: BC, Algorithm: PBEWITHSHA1ANDDES
Provider: BC, Algorithm: DESEDE
Provider: BC, Algorithm: DESEDEWRAP
Provider: BC, Algorithm: PBEWITHSHAAND3-KEYTRIPLEDES-CBC
Provider: BC, Algorithm: PBEWITHSHAAND2-KEYTRIPLEDES-CBC
Provider: BC, Algorithm: PBEWITHMD5ANDRC2
Provider: BC, Algorithm: PBEWITHSHA1ANDRC2
Provider: BC, Algorithm: PBEWITHSHAAND128BITRC2-CBC
Provider: BC, Algorithm: PBEWITHSHAAND40BITRC2-CBC
Provider: BC, Algorithm: PBEWITHSHAANDTWOFISH-CBC
Provider: BC, Algorithm: RSA
Android API level 21 (Android 5.0)
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/NoPadding
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/PKCS1Padding
Provider: AndroidOpenSSL, Algorithm: AES/ECB/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES/ECB/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: AES/CBC/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES/CBC/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: AES/CFB/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES/CTR/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES/OFB/NoPadding
Provider: AndroidOpenSSL, Algorithm: DESEDE/ECB/NoPadding
Provider: AndroidOpenSSL, Algorithm: DESEDE/ECB/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: DESEDE/CBC/NoPadding
Provider: AndroidOpenSSL, Algorithm: DESEDE/CBC/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: DESEDE/CFB/NoPadding
Provider: AndroidOpenSSL, Algorithm: DESEDE/OFB/NoPadding
Provider: AndroidOpenSSL, Algorithm: ARC4
Provider: BC, Algorithm: AES
Provider: BC, Algorithm: AESWRAP
Provider: BC, Algorithm: GCM
Provider: BC, Algorithm: PBEWITHSHAAND128BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHAAND192BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHAAND256BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHA256AND128BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHA256AND192BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHA256AND256BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHMD5AND128BITAES-CBC-OPENSSL
Provider: BC, Algorithm: PBEWITHMD5AND192BITAES-CBC-OPENSSL
Provider: BC, Algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
Provider: BC, Algorithm: ARC4
Provider: BC, Algorithm: PBEWITHSHAAND128BITRC4
Provider: BC, Algorithm: PBEWITHSHAAND40BITRC4
Provider: BC, Algorithm: BLOWFISH
Provider: BC, Algorithm: DES
Provider: BC, Algorithm: PBEWITHMD5ANDDES
Provider: BC, Algorithm: PBEWITHSHA1ANDDES
Provider: BC, Algorithm: DESEDE
Provider: BC, Algorithm: DESEDEWRAP
Provider: BC, Algorithm: PBEWITHSHAAND3-KEYTRIPLEDES-CBC
Provider: BC, Algorithm: PBEWITHSHAAND2-KEYTRIPLEDES-CBC
Provider: BC, Algorithm: PBEWITHMD5ANDRC2
Provider: BC, Algorithm: PBEWITHSHA1ANDRC2
Provider: BC, Algorithm: PBEWITHSHAAND128BITRC2-CBC
Provider: BC, Algorithm: PBEWITHSHAAND40BITRC2-CBC
Provider: BC, Algorithm: PBEWITHSHAANDTWOFISH-CBC
Provider: BC, Algorithm: RSA
Android API level 23 (Android 6.0)
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/NoPadding
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/PKCS1Padding
Provider: AndroidOpenSSL, Algorithm: AES/ECB/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES/ECB/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: AES/CBC/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES/CBC/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: AES/CTR/NoPadding
Provider: AndroidOpenSSL, Algorithm: DESEDE/CBC/NoPadding
Provider: AndroidOpenSSL, Algorithm: DESEDE/CBC/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: ARC4
Provider: AndroidOpenSSL, Algorithm: AES/GCM/NoPadding
Provider: BC, Algorithm: AES
Provider: BC, Algorithm: AESWRAP
Provider: BC, Algorithm: AES/GCM/NOPADDING
Provider: BC, Algorithm: PBEWITHSHAAND128BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHAAND192BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHAAND256BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHA256AND128BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHA256AND192BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHA256AND256BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHMD5AND128BITAES-CBC-OPENSSL
Provider: BC, Algorithm: PBEWITHMD5AND192BITAES-CBC-OPENSSL
Provider: BC, Algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
Provider: BC, Algorithm: ARC4
Provider: BC, Algorithm: PBEWITHSHAAND128BITRC4
Provider: BC, Algorithm: PBEWITHSHAAND40BITRC4
Provider: BC, Algorithm: BLOWFISH
Provider: BC, Algorithm: DES
Provider: BC, Algorithm: PBEWITHMD5ANDDES
Provider: BC, Algorithm: PBEWITHSHA1ANDDES
Provider: BC, Algorithm: DESEDE
Provider: BC, Algorithm: DESEDEWRAP
Provider: BC, Algorithm: PBEWITHSHAAND3-KEYTRIPLEDES-CBC
Provider: BC, Algorithm: PBEWITHSHAAND2-KEYTRIPLEDES-CBC
Provider: BC, Algorithm: PBEWITHMD5ANDRC2
Provider: BC, Algorithm: PBEWITHSHA1ANDRC2
Provider: BC, Algorithm: PBEWITHSHAAND128BITRC2-CBC
Provider: BC, Algorithm: PBEWITHSHAAND40BITRC2-CBC
Provider: BC, Algorithm: PBEWITHSHAANDTWOFISH-CBC
Provider: BC, Algorithm: RSA
Provider: AndroidKeyStoreBCWorkaround, Algorithm: AES/ECB/NoPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: AES/ECB/PKCS7Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: AES/CBC/NoPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: AES/CBC/PKCS7Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: AES/CTR/NoPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: AES/GCM/NoPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/NoPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/PKCS1Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/OAEPPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/OAEPWithSHA-1AndMGF1Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/OAEPWithSHA-224AndMGF1Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/OAEPWithSHA-256AndMGF1Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/OAEPWithSHA-384AndMGF1Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/OAEPWithSHA-512AndMGF1Padding
Android API level 31 (Android 12)
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/NoPadding
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/PKCS1Padding
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/OAEPPadding
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/OAEPWithSHA-1AndMGF1Padding
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/OAEPWithSHA-224AndMGF1Padding
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/OAEPWithSHA-256AndMGF1Padding
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/OAEPWithSHA-384AndMGF1Padding
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/OAEPWithSHA-512AndMGF1Padding
Provider: AndroidOpenSSL, Algorithm: AES/ECB/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES/ECB/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: AES/CBC/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES/CBC/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: AES/CTR/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES_128/ECB/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES_128/ECB/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: AES_128/CBC/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES_128/CBC/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: AES_256/ECB/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES_256/ECB/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: AES_256/CBC/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES_256/CBC/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: DESEDE/CBC/NoPadding
Provider: AndroidOpenSSL, Algorithm: DESEDE/CBC/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: ARC4
Provider: AndroidOpenSSL, Algorithm: AES/GCM/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES_128/GCM/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES_256/GCM/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES/GCM-SIV/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES_128/GCM-SIV/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES_256/GCM-SIV/NoPadding
Provider: AndroidOpenSSL, Algorithm: ChaCha20
Provider: AndroidOpenSSL, Algorithm: ChaCha20/Poly1305/NoPadding
Provider: BC, Algorithm: AES
Provider: BC, Algorithm: AESWRAP
Provider: BC, Algorithm: PBEWITHSHAAND128BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHAAND192BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHAAND256BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHA256AND128BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHA256AND192BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHA256AND256BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHMD5AND128BITAES-CBC-OPENSSL
Provider: BC, Algorithm: PBEWITHMD5AND192BITAES-CBC-OPENSSL
Provider: BC, Algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
Provider: BC, Algorithm: PBEWITHSHAAND128BITRC4
Provider: BC, Algorithm: PBEWITHSHAAND40BITRC4
Provider: BC, Algorithm: BLOWFISH
Provider: BC, Algorithm: DES
Provider: BC, Algorithm: PBEWITHMD5ANDDES
Provider: BC, Algorithm: PBEWITHSHA1ANDDES
Provider: BC, Algorithm: DESEDE
Provider: BC, Algorithm: DESEDEWRAP
Provider: BC, Algorithm: PBEWITHSHAAND3-KEYTRIPLEDES-CBC
Provider: BC, Algorithm: PBEWITHSHAAND2-KEYTRIPLEDES-CBC
Provider: BC, Algorithm: PBEWITHMD5ANDRC2
Provider: BC, Algorithm: PBEWITHSHA1ANDRC2
Provider: BC, Algorithm: PBEWITHSHAAND128BITRC2-CBC
Provider: BC, Algorithm: PBEWITHSHAAND40BITRC2-CBC
Provider: BC, Algorithm: PBEWITHSHAANDTWOFISH-CBC
Provider: BC, Algorithm: RSA
Provider: AndroidKeyStoreBCWorkaround, Algorithm: AES/ECB/NoPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: AES/ECB/PKCS7Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: AES/CBC/NoPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: AES/CBC/PKCS7Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: AES/CTR/NoPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: AES/GCM/NoPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/NoPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/PKCS1Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/OAEPPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/OAEPWithSHA-1AndMGF1Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/OAEPWithSHA-224AndMGF1Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/OAEPWithSHA-256AndMGF1Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/OAEPWithSHA-384AndMGF1Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/OAEPWithSHA-512AndMGF1Padding
Android API level 33 (Android 13)
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/NoPadding
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/PKCS1Padding
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/OAEPPadding
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/OAEPWithSHA-1AndMGF1Padding
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/OAEPWithSHA-224AndMGF1Padding
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/OAEPWithSHA-256AndMGF1Padding
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/OAEPWithSHA-384AndMGF1Padding
Provider: AndroidOpenSSL, Algorithm: RSA/ECB/OAEPWithSHA-512AndMGF1Padding
Provider: AndroidOpenSSL, Algorithm: AES/ECB/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES/ECB/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: AES/CBC/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES/CBC/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: AES/CTR/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES_128/ECB/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES_128/ECB/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: AES_128/CBC/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES_128/CBC/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: AES_256/ECB/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES_256/ECB/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: AES_256/CBC/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES_256/CBC/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: DESEDE/CBC/NoPadding
Provider: AndroidOpenSSL, Algorithm: DESEDE/CBC/PKCS5Padding
Provider: AndroidOpenSSL, Algorithm: ARC4
Provider: AndroidOpenSSL, Algorithm: AES/GCM/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES_128/GCM/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES_256/GCM/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES/GCM-SIV/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES_128/GCM-SIV/NoPadding
Provider: AndroidOpenSSL, Algorithm: AES_256/GCM-SIV/NoPadding
Provider: AndroidOpenSSL, Algorithm: ChaCha20
Provider: AndroidOpenSSL, Algorithm: ChaCha20/Poly1305/NoPadding
Provider: BC, Algorithm: AES
Provider: BC, Algorithm: AESWRAP
Provider: BC, Algorithm: PBEWITHSHAAND128BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHAAND192BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHAAND256BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHA256AND128BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHA256AND192BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHSHA256AND256BITAES-CBC-BC
Provider: BC, Algorithm: PBEWITHMD5AND128BITAES-CBC-OPENSSL
Provider: BC, Algorithm: PBEWITHMD5AND192BITAES-CBC-OPENSSL
Provider: BC, Algorithm: PBEWITHMD5AND256BITAES-CBC-OPENSSL
Provider: BC, Algorithm: PBEWITHSHAAND128BITRC4
Provider: BC, Algorithm: PBEWITHSHAAND40BITRC4
Provider: BC, Algorithm: BLOWFISH
Provider: BC, Algorithm: DES
Provider: BC, Algorithm: PBEWITHMD5ANDDES
Provider: BC, Algorithm: PBEWITHSHA1ANDDES
Provider: BC, Algorithm: DESEDE
Provider: BC, Algorithm: DESEDEWRAP
Provider: BC, Algorithm: PBEWITHSHAAND3-KEYTRIPLEDES-CBC
Provider: BC, Algorithm: PBEWITHSHAAND2-KEYTRIPLEDES-CBC
Provider: BC, Algorithm: PBEWITHMD5ANDRC2
Provider: BC, Algorithm: PBEWITHSHA1ANDRC2
Provider: BC, Algorithm: PBEWITHSHAAND128BITRC2-CBC
Provider: BC, Algorithm: PBEWITHSHAAND40BITRC2-CBC
Provider: BC, Algorithm: PBEWITHSHAANDTWOFISH-CBC
Provider: BC, Algorithm: RSA
Provider: AndroidKeyStoreBCWorkaround, Algorithm: AES/ECB/NoPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: AES/ECB/PKCS7Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: AES/CBC/NoPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: AES/CBC/PKCS7Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: AES/CTR/NoPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: DESede/CBC/NoPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: DESede/CBC/PKCS7Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: DESede/ECB/NoPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: DESede/ECB/PKCS7Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: AES/GCM/NoPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/NoPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/PKCS1Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/OAEPPadding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/OAEPWithSHA-1AndMGF1Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/OAEPWithSHA-224AndMGF1Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/OAEPWithSHA-256AndMGF1Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/OAEPWithSHA-384AndMGF1Padding
Provider: AndroidKeyStoreBCWorkaround, Algorithm: RSA/ECB/OAEPWithSHA-512AndMGF1Padding

Conclusion:

  1. AES-CCM method, the current encryption method of Joplin, is not supported in javax.crypto on Android.
    It means I cannot implement a compatible layer of sjcl to improve the decryption speed when migrating the crypto method of notes on Android.
  2. AES-GCM method, which I chose as the new encryption method, has the built-in OpenSSL implementation since Android 6.0.
    It means I can implement AES-GCM method with javax.crypto library on Android. With this PR merged, the minimum Android SDK version requirement of Joplin is bumped to Android 6.0 so the OpenSSL implementation is always available on the Android client.
1 Like

You do not need to implement a compatible layer - we will continue to ship sjcl indefinitely with the app so that old notes can still be decrypted.

What you'll create for this project is a new, separate, encryption method so you don't need to consider sjcl - simply pick the encryption method based on how secure it is and how feasible it is to use it.

Yes I will use the new crypto methods. This topic is just for the test results I did a few weeks ago. I was getting familar with the javax.crypto library at that time.