package org.jboss.net.axis.security;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import java.util.Enumeration;
import java.util.Properties;
import javax.security.auth.x500.X500Principal;
import org.apache.log4j.Logger;
import org.apache.ws.security.components.crypto.Merlin;
public class JBoss14Crypto extends Merlin implements JBossCrypto
{
private Logger log = Logger.getLogger(getClass());
public JBoss14Crypto(KeyStore keystore) throws Exception
{
super(null);
this.properties = new Properties();
if (keystore != null)
{
if (log.isDebugEnabled())
log.debug("Creating new JBoss14Crypto using a " + keystore.getType() + " keystore.");
setKeyStore(keystore);
}
else
{
if (log.isDebugEnabled())
log.debug("Creating new JBoss14Crypto WITHOUT a keystore.");
}
}
public String getAliasForX500Principal(X500Principal dn) throws Exception
{
String alias = null;
foundcert : for (Enumeration enu = keystore.aliases(); enu.hasMoreElements();)
{
String element = (String) enu.nextElement();
Certificate[] certs = keystore.getCertificateChain(element);
if (certs == null)
{
Certificate cert = keystore.getCertificate(element);
if (cert != null)
certs = new Certificate[]{cert};
}
if (certs != null)
{
for (int i = 0; i < certs.length; i++)
{
if (!(certs[i] instanceof X509Certificate))
continue;
X509Certificate x509cert = (X509Certificate) certs[i];
if (dn.equals(x509cert.getSubjectX500Principal()))
{
alias = element;
break foundcert;
}
}
}
}
return alias;
}
}