Crash casting AndroidKeyStoreRSAPrivateKey para RSAPrivateKey

Estou seguindo este tutorial:Como usar o Keystore Android para armazenar senhas e outras informações confidenciais. Ele (vagamente) se vincula ao aplicativo Google Sample:BasicAndroidKeyStore.

Posso criptografar meus dados usando a chave pública e descriptografar em dispositivos executando o Lollipop. No entanto, eu tenho um marshmallow em execução no Nexus 6 e isso trava, causando o erro:

java.lang.RuntimeException: Unable to create application com.android.test: java.lang.ClassCastException: android.security.keystore.AndroidKeyStoreRSAPrivateKey cannot be cast to java.security.interfaces.RSAPrivateKey

Aqui está o código em que ele trava:

KeyStore.Entry entry;

//Get Android KeyStore
ks = KeyStore.getInstance(KeystoreHelper.KEYSTORE_PROVIDER_ANDROID_KEYSTORE);

// Weird artifact of Java API.  If you don't have an InputStream to load, you still need to call "load", or it'll crash.
ks.load(null);

// Load the key pair from the Android Key Store
entry = ks.getEntry(mAlias, null);

KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry) entry;

//ERROR OCCURS HERE::
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) privateKeyEntry.getPrivateKey();

Cipher output = Cipher.getInstance("RSA/ECB/PKCS1Padding", "AndroidOpenSSL");

output.init(Cipher.DECRYPT_MODE, rsaPrivateKey);

Estou relutante em atribuir isso a uma estranheza do Android M, pois não vejo razão para que as bibliotecas de criptografia java tenham mudado. Se a versão M aparecer e nosso aplicativo travar imediatamente na M, estarei com um grande problema.

Eu estou fazendo algo errado? O erro diz muito especificamente que você não pode transmitir para o RSAPrivateKey. Alguém conhece uma maneira melhor de obter o RSAPrivateKey a partir da entrada?

Muitíssimo obrigado.

questionAnswers(4)

yourAnswerToTheQuestion