title: Unable to retrieve Private Key from KeyStore
body: <p>I am trying to make an Chat app which uses RSA algorithm for encryption. After But when I try to decrypt messages I am getting this error below.</p>
  
  <p>Here is how I am creating keys;</p>
  
  <pre><code>  if (!keyStore.containsAlias(alias)) {
                  Calendar start = Calendar.getInstance();
                  Calendar end = Calendar.getInstance();
                  end.add(Calendar.YEAR, 25);
                  KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(getApplicationContext())
                          .setAlias(alias)
                          .setSubject(new X500Principal("CN=Sample Name, O=Android Authority"))
                          .setSerialNumber(BigInteger.ONE)
                          .setStartDate(start.getTime())
                          .setEndDate(end.getTime())
                          .build();
                  KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
                  generator.initialize(spec);
  
              }
  </code></pre>
  
  <p>And here is how I tryed to decrypt messages;</p>
  
  <p>Definition the KeyStore;</p>
  
  <pre><code> static KeyStore keyStore;
  </code></pre>
  
  <p>Loading keyStore in onCreate method:</p>
  
  <pre><code>  try{
          keyStore = KeyStore.getInstance("AndroidKeyStore");
          keyStore.load(null);
      } 
      catch (CertificateException | NoSuchAlgorithmException | KeyStoreException | IOException e) {
          e.printStackTrace();
      } 
  </code></pre>
  
  <p>Decrypt Function:</p>
  
  <pre><code>      public String decryptString(String alias, String decrypted) {
      try {
  
          KeyStore.Entry entry;
          //ERROR HAPPENS HERE.
          entry = keyStore.getEntry(alias, null);
  
          KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry) entry;
  
          Cipher output = Cipher.getInstance("RSA/ECB/PKCS1Padding");
          output.init(Cipher.DECRYPT_MODE, privateKeyEntry.getPrivateKey());
  
  
          CipherInputStream cipherInputStream = new CipherInputStream(
                  new ByteArrayInputStream(Base64.decode(decrypted, Base64.DEFAULT)), output);
          ArrayList&lt;Byte&gt; values = new ArrayList&lt;&gt;();
          int nextByte;
          while ((nextByte = cipherInputStream.read()) != -1) {
              values.add((byte) nextByte);
          }
  
          byte[] bytes = new byte[values.size()];
          for (int i = 0; i &lt; bytes.length; i++) {
              bytes[i] = values.get(i);
          }
  
          String finalText = new String(bytes, 0, bytes.length, "UTF-8");
          return finalText;
  
      } catch (IOException | KeyStoreException | NoSuchPaddingException | UnrecoverableEntryException | InvalidKeyException | NoSuchAlgorithmException e) {
          e.printStackTrace();
      }
      return "Error";
  }
  </code></pre>
  
  <p>I am getting this error below;</p>
  
  <pre><code>E/AndroidRuntime: FATAL EXCEPTION: main
                                                                 Process: com.furkan.profil, PID: 10591
                                                                 java.lang.NullPointerException: Attempt to invoke virtual method 'java.security.KeyStore$Entry java.security.KeyStore.getEntry(java.lang.String, java.security.KeyStore$ProtectionParameter)' on a null object reference
                                                                     at com.furkan.profil.RSAHelper.decryptString(RSAHelper.java:180)
                                                                     at com.furkan.profil.Chat.ChatActivity$4.onChildAdded(ChatActivity.java:251)
                                                                     at com.google.android.gms.internal.zzblz.zza(Unknown Source)
                                                                     at com.google.android.gms.internal.zzbnz.zzYj(Unknown Source)
                                                                     at com.google.android.gms.internal.zzboc$1.run(Unknown Source)
                                                                     at android.os.Handler.handleCallback(Handler.java:739)
                                                                     at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                     at android.os.Looper.loop(Looper.java:148)
                                                                     at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                     at java.lang.reflect.Method.invoke(Native Method)
                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
  </code></pre>