org.cryptacular.bean.KeyStoreBasedKeyFactoryBean Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of com.liferay.saml.opensaml.integration Show documentation
Show all versions of com.liferay.saml.opensaml.integration Show documentation
Liferay SAML OpenSAML Integration
/* See LICENSE for licensing and NOTICE for copyright. */
package org.cryptacular.bean;
import java.security.Key;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import org.cryptacular.CryptoException;
/**
* Factory that produces either a {@link javax.crypto.SecretKey} or {@link java.security.PrivateKey}.
*
* from a {@link KeyStore}.
*
* @param Type of key, either {@link javax.crypto.SecretKey} or {@link java.security.PrivateKey}.
*
* @author Middleware Services
*/
public class KeyStoreBasedKeyFactoryBean implements FactoryBean
{
/** Keystore containing secret key. */
private KeyStore keyStore;
/** Alias of keystore entry containing secret key. */
private String alias;
/** Password required to read key entry. */
private String password;
/** Creates a new instance. */
public KeyStoreBasedKeyFactoryBean() {}
/**
* Creates a new instance by specifying all properties.
*
* @param keyStore Key store containing encryption key.
* @param alias Name of encryption key entry in key store.
* @param password Password used to decrypt key entry in keystore.
*/
public KeyStoreBasedKeyFactoryBean(final KeyStore keyStore, final String alias, final String password)
{
setKeyStore(keyStore);
setAlias(alias);
setPassword(password);
}
/** @return Keystore that contains the {@link #keyStore}. */
public KeyStore getKeyStore()
{
return keyStore;
}
/**
* Sets the keystore that contains the key.
*
* @param keyStore Non-null keystore.
*/
public void setKeyStore(final KeyStore keyStore)
{
this.keyStore = keyStore;
}
/** @return Alias that specifies the {@link KeyStore} entry containing the key. */
public String getAlias()
{
return alias;
}
/**
* Sets the alias that specifies the {@link KeyStore} entry containing the key.
*
* @param alias Keystore alias of key entry.
*/
public void setAlias(final String alias)
{
this.alias = alias;
}
/**
* Sets the password used to access the key entry.
*
* @param password Key entry password.
*/
public void setPassword(final String password)
{
this.password = password;
}
@Override
@SuppressWarnings("unchecked")
public T newInstance()
{
final Key key;
try {
key = keyStore.getKey(alias, password.toCharArray());
} catch (KeyStoreException | NoSuchAlgorithmException | UnrecoverableKeyException e) {
throw new CryptoException("Error accessing keystore entry " + alias, e);
}
return (T) key;
}
}