org.cryptacular.x509.dn.NameReader 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.x509.dn;
import java.security.cert.X509Certificate;
import javax.security.auth.x500.X500Principal;
import org.bouncycastle.asn1.x500.AttributeTypeAndValue;
import org.bouncycastle.asn1.x500.X500Name;
/**
* Reads X.509 subject and issuer DNs as a raw sequence of attributes to facilitate precise handling of name parsing.
*
* @author Middleware Services
*/
public class NameReader
{
/** Certificate to read. */
private final X509Certificate certificate;
/**
* Creates a new instance to support reading subject and issuer information on the given certificate.
*
* @param cert Certificate to read.
*/
public NameReader(final X509Certificate cert)
{
if (cert == null) {
throw new IllegalArgumentException("Certificate cannot be null.");
}
this.certificate = cert;
}
/**
* Reads the subject field from the certificate.
*
* @return Subject DN as an RDN sequence.
*/
public RDNSequence readSubject()
{
return readX500Principal(certificate.getSubjectX500Principal());
}
/**
* Reads the issuer field from the certificate.
*
* @return Issuer DN as an RDN sequence.
*/
public RDNSequence readIssuer()
{
return readX500Principal(certificate.getIssuerX500Principal());
}
/**
* Converts the given X.500 principal to a list of relative distinguished names that contains the attributes
* comprising the DN.
*
* @param principal Principal to convert.
*
* @return X500 principal as an RDN sequence.
*/
public static RDNSequence readX500Principal(final X500Principal principal)
{
final X500Name name = X500Name.getInstance(principal.getEncoded());
final RDNSequence sequence = new RDNSequence();
for (org.bouncycastle.asn1.x500.RDN rdn : name.getRDNs()) {
final Attributes attributes = new Attributes();
for (AttributeTypeAndValue tv : rdn.getTypesAndValues()) {
attributes.add(tv.getType().getId(), tv.getValue().toString());
}
sequence.add(new RDN(attributes));
}
return sequence;
}
}