package org.jboss.resteasy.security.doseta;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.Key;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.UnrecoverableKeyException;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;

Author:Bill Burke
Version:$Revision: 1 $
/** * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @version $Revision: 1 $ */
public class KeyStoreKeyRepository { private KeyStore keyStore; private String password; public void init(InputStream is, String password) { if (password != null) password = password.trim(); this.password = password; try { keyStore = KeyStore.getInstance("JKS"); keyStore.load(is, password.toCharArray()); } catch (KeyStoreException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } catch (CertificateException e) { throw new RuntimeException(e); } } public KeyStoreKeyRepository(final InputStream is, final String password) { init(is, password); } public KeyStoreKeyRepository(final String filename, final String password) throws IOException { InputStream is = new FileInputStream(filename); init(is, password); is.close(); } public PrivateKey getPrivateKey(Object identity) { try { Key key = keyStore.getKey(identity.toString(), password.toCharArray()); return (PrivateKey) key; } catch (KeyStoreException e) { throw new RuntimeException(e); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } catch (UnrecoverableKeyException e) { throw new RuntimeException(e); } } public PublicKey getPublicKey(Object identity) { Certificate cert = null; try { cert = keyStore.getCertificate(identity.toString()); } catch (KeyStoreException e) { throw new RuntimeException(e); } if (cert == null) return null; return cert.getPublicKey(); } }