Android keystore2.AndroidKeyStoreProvider throws NPE on Samsung devices with API 31

Viewed 166

I'm getting lots of crash reported on samsung devices running android 12 from yesterday. AndroidKeyStoreProvider throws NPE when calling X509Certificate.getPublicKey(). it's working fine on other brands devices.

Key pair generation method :

   public void generateKeys(Context context) throws GeneratePairKeyException {
    KeyPairGenerator keyPairGenerator;
    try {
        if(KeyStoreUtil.getPrivateKey() == null){
            Calendar start = GregorianCalendar.getInstance();
            Calendar end = GregorianCalendar.getInstance();
            end.add(Calendar.YEAR, 10);
            keyPairGenerator = KeyPairGenerator.getInstance("RSA", ANDROID_KEY_STORE);
            keyPairGenerator.initialize(new KeyPairGeneratorSpec.Builder(context)
                    .setAlias(ALIAS)
                    .setSerialNumber(BigInteger.valueOf(1))
                    .setStartDate(start.getTime())
                    .setEndDate(end.getTime())
                    .setSubject(new X500Principal("CN=Pushe_CA"))
                    .build());
            keyPairGenerator.generateKeyPair();
        }
    } catch (NoSuchAlgorithmException |
            NoSuchProviderException | InvalidAlgorithmParameterException e) {
        Logger.e(e);
        throw new GeneratePairKeyException("pair key not created");
    } catch (IllegalStateException e) {
        throw e;
    } catch (Exception e) {
        throw new GeneratePairKeyException("pair key not created");
    }
}

App crashes when i'm trying to get private key like this :

 KeyStore keyStore = KeyStore.getInstance(ANDROID_KEY_STORE);
 keyStore.load(null);
 (PrivateKey) keyStore.getKey(ALIAS, null);

here's the crash log :

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'java.security.PublicKey java.security.cert.X509Certificate.getPublicKey()' on a null object reference at android.security.keystore2.AndroidKeyStoreProvider.makeAndroidKeyStorePublicKeyFromKeyEntryResponse(AndroidKeyStoreProvider.java:220) at android.security.keystore2.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyFromKeystore(AndroidKeyStoreProvider.java:401) at android.security.keystore2.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyFromKeystore(AndroidKeyStoreProvider.java:343) at android.security.keystore2.AndroidKeyStoreSpi.engineGetKey(AndroidKeyStoreSpi.java:110) at java.security.KeyStore.getKey(KeyStore.java:1062)

Any solutions?

0 Answers
Related