5

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 Answers0