code: static KeyStore buildKeyStore(final File certChainFile, final File keyFile,
        final char[] keyPasswordChars)
            throws KeyStoreException, NoSuchAlgorithmException,
            NoSuchPaddingException, InvalidKeySpecException, InvalidAlgorithmParameterException,
            CertificateException, KeyException, IOException {
      ByteBuffer encodedKeyBuf = PemReader.readPrivateKey(keyFile);
      byte[] encodedKey = encodedKeyBuf.array();
  
      PKCS8EncodedKeySpec encodedKeySpec = generateKeySpec(keyPasswordChars, encodedKey);
  
      PrivateKey key;
      try {
        key = KeyFactory.getInstance("RSA").generatePrivate(encodedKeySpec);
      } catch (InvalidKeySpecException ignore) {
        try {
          key = KeyFactory.getInstance("DSA").generatePrivate(encodedKeySpec);
        } catch (InvalidKeySpecException ignore2) {
          try {
            key = KeyFactory.getInstance("EC").generatePrivate(encodedKeySpec);
          } catch (InvalidKeySpecException e) {
            throw new InvalidKeySpecException("Neither RSA, DSA nor EC worked", e);
          }
        }
      }
  
      CertificateFactory cf = CertificateFactory.getInstance("X.509");
      List<ByteBuffer> certs = PemReader.readCertificates(certChainFile);
      List<Certificate> certChain = new ArrayList<Certificate>(certs.size());
  
      for (ByteBuffer buf : certs) {
        certChain.add(cf.generateCertificate(new ByteArrayInputStream(buf.array())));
      }
  
      KeyStore ks = KeyStore.getInstance("JKS");
      ks.load(null, null);
      ks.setKeyEntry("key", key, keyPasswordChars,
          certChain.toArray(new Certificate[certChain.size()]));
      return ks;
    }
docs: Generates a new {@link KeyStore}.
  
  @param certChainFile a X.509 certificate chain file in PEM format,
  @param keyFile a PKCS#8 private key file in PEM format,
  @param keyPasswordChars the password of the {@code keyFile}.
  {@code null} if it's not password-protected.
  @return generated {@link KeyStore}.