X509CertSelectorImpl.java [plain text]
package gnu.java.security.x509;
import java.io.IOException;
import java.security.Principal;
import java.security.cert.Certificate;
import java.security.cert.CertSelector;
import java.security.cert.X509Certificate;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.security.auth.x500.X500Principal;
public class X509CertSelectorImpl implements CertSelector
{
private Set issuerNames;
private Set subjectNames;
public X509CertSelectorImpl()
{
issuerNames = new HashSet();
subjectNames = new HashSet();
}
public void addIssuerName(byte[] issuerName) throws IOException
{
issuerNames.add(new X500DistinguishedName(issuerName));
}
public void addIssuerName(String issuerName)
{
issuerNames.add(new X500DistinguishedName(issuerName));
}
public void addIssuerName(Principal issuerName) throws IOException
{
if (issuerName instanceof X500DistinguishedName)
issuerNames.add(issuerName);
else if (issuerName instanceof X500Principal)
issuerNames.add(new X500DistinguishedName(((X500Principal) issuerName).getEncoded()));
else
issuerNames.add(new X500DistinguishedName(issuerName.getName()));
}
public Collection getIssuerNames()
{
return Collections.unmodifiableSet(issuerNames);
}
public void addSubjectName(byte[] subjectName) throws IOException
{
subjectNames.add(new X500DistinguishedName(subjectName));
}
public void addSubjectName(String subjectName) throws IOException
{
subjectNames.add(new X500DistinguishedName(subjectName));
}
public void addSubjectName(Principal subjectName) throws IOException
{
if (subjectName instanceof X500DistinguishedName)
subjectNames.add(subjectName);
else if (subjectName instanceof X500Principal)
subjectNames.add(new X500DistinguishedName(((X500Principal) subjectName).getEncoded()));
else
subjectNames.add(new X500DistinguishedName(subjectName.getName()));
}
public Collection getSubjectNames()
{
return Collections.unmodifiableSet(subjectNames);
}
public Object clone()
{
X509CertSelectorImpl copy = new X509CertSelectorImpl();
copy.issuerNames.addAll(issuerNames);
copy.subjectNames.addAll(subjectNames);
return copy;
}
public boolean match(Certificate cert)
{
if (!(cert instanceof X509Certificate))
return false;
boolean matchIssuer = false;
boolean matchSubject = false;
try
{
Principal p = ((X509Certificate) cert).getIssuerDN();
X500DistinguishedName thisName = null;
if (p instanceof X500DistinguishedName)
thisName = (X500DistinguishedName) p;
else if (p instanceof X500Principal)
thisName = new X500DistinguishedName(((X500Principal) p).getEncoded());
else
thisName = new X500DistinguishedName(p.getName());
if (issuerNames.isEmpty())
matchIssuer = true;
else
{
for (Iterator it = issuerNames.iterator(); it.hasNext(); )
{
X500DistinguishedName name = (X500DistinguishedName) it.next();
if (thisName.equals(name))
{
matchIssuer = true;
break;
}
}
}
p = ((X509Certificate) cert).getSubjectDN();
thisName = null;
if (p instanceof X500DistinguishedName)
thisName = (X500DistinguishedName) p;
else if (p instanceof X500Principal)
thisName = new X500DistinguishedName(((X500Principal) p).getEncoded());
else
thisName = new X500DistinguishedName(p.getName());
if (subjectNames.isEmpty())
matchSubject = true;
else
{
for (Iterator it = subjectNames.iterator(); it.hasNext(); )
{
X500DistinguishedName name = (X500DistinguishedName) it.next();
if (thisName.equals(name))
{
matchSubject = true;
break;
}
}
}
}
catch (Exception x)
{
}
return matchIssuer && matchSubject;
}
}