Class X500Name

java.lang.Object
org.mozilla.jss.netscape.security.x509.X500Name
All Implemented Interfaces:
Serializable, Principal, GeneralNameInterface

public class X500Name extends Object implements Principal, GeneralNameInterface
X.500 names are used to identify entities, such as those which are identified by X.509 certificates. They are world-wide, hierarchical, and descriptive. Entities can be identified by attributes, and in some systems can be searched for according to those attributes.

This class exposes only partial X.500 name functionality. Most notably, it works best if Relative Distinguished Names only have one (unique) attribute each, and if only the most common attributes need to be visible to applications. This limitation, and others, will be lifted over time.

Version:
1.35
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • dn

      private String dn
    • names

      private RDN[] names
    • commonName_oid

      public static final ObjectIdentifier commonName_oid
      OID for the "CN=" attribute, denoting a person's common name.
    • uidName_oid

      public static final ObjectIdentifier uidName_oid
      OID for the "UID=" attribute, denoting a person's ID.
    • countryName_oid

      public static final ObjectIdentifier countryName_oid
      OID for the "C=" attribute, denoting a country.
    • localityName_oid

      public static final ObjectIdentifier localityName_oid
      OID for the "L=" attribute, denoting a locality (such as a city)
    • orgName_oid

      public static final ObjectIdentifier orgName_oid
      OID for the "O=" attribute, denoting an organization name
    • orgUnitName_oid

      public static final ObjectIdentifier orgUnitName_oid
      OID for the "OU=" attribute, denoting an organizational unit name
    • stateName_oid

      public static final ObjectIdentifier stateName_oid
      OID for the "S=" attribute, denoting a state (such as Delaware)
    • streetAddress_oid

      public static final ObjectIdentifier streetAddress_oid
      OID for the "STREET=" attribute, denoting a street address.
    • title_oid

      public static final ObjectIdentifier title_oid
      OID for the "T=" attribute, denoting a person's title.
    • email_oid

      public static final ObjectIdentifier email_oid
      OID for the "E=" attribute, denoting a person's email address.
    • ipAddress_data

      private static final int[] ipAddress_data
    • ipAddress_oid

      public static final ObjectIdentifier ipAddress_oid
      OID for "IP=" IP address attributes, used with SKIP.
  • Constructor Details

    • X500Name

      public X500Name(String ldapDNString) throws IOException
      Constructs a name from a Ldap DN string, such as "CN=Dave, OU=JavaSoft, O=Sun Microsystems, C=US". The older "/C=US/O=Sun Microsystems, Inc/OU=JavaSoft/CN=Dave" syntax is not currently supported. (The former is RFC 1779 style.)
      Parameters:
      ldapDNString - a Ldap DN String e.g. as defined in RFC1779
      Throws:
      IOException
    • X500Name

      public X500Name(String ldapDNString, LdapDNStrConverter ldapDNStrConverter, byte[] tags) throws IOException
      Constructs a X500Name from a Ldap DN String using the specified LdapDNStrConverter. Also use the input tags.
      Parameters:
      ldapDNString - a Ldap DN String e.g. as defined in RFC1779.
      ldapDNStrConverter - A LdapDNStrConverter
      Throws:
      IOException
      See Also:
    • X500Name

      public X500Name(String ldapDNString, byte[] tags) throws IOException
      Throws:
      IOException
    • X500Name

      public X500Name(String ldapDNString, LdapDNStrConverter ldapDNStrConverter) throws IOException
      Constructs a X500Name from a Ldap DN String using the specified LdapDNStrConverter.
      Parameters:
      ldapDNString - a Ldap DN String e.g. as defined in RFC1779.
      ldapDNStrConverter - A LdapDNStrConverter
      Throws:
      IOException
      See Also:
    • X500Name

      public X500Name(String commonName, String organizationUnit, String organizationName, String country) throws IOException
      Constructs a X500Name from fields common in enterprise application environments.
      Parameters:
      commonName - common name of a person, e.g. "Vivette Davis"
      organizationUnit - small organization name, e.g. "Purchasing"
      organizationName - large organization name, e.g. "Onizuka, Inc."
      country - two letter country code, e.g. "CH"
      Throws:
      IOException
    • X500Name

      public X500Name(String commonName, String organizationUnit, String organizationName, String localityName, String stateName, String country) throws IOException
      Constructs a X500Name from fields common in Internet application environments.
      Parameters:
      commonName - common name of a person, e.g. "Vivette Davis"
      organizationUnit - small organization name, e.g. "Purchasing"
      organizationName - large organization name, e.g. "Onizuka, Inc."
      localityName - locality (city) name, e.g. "Palo Alto"
      stateName - state name, e.g. "California"
      country - two letter country code, e.g. "CH"
      Throws:
      IOException
    • X500Name

      public X500Name(DerValue value) throws IOException
      Constructs a name from an ASN.1 encoded value. The encoding of the name in the stream uses DER (a BER/1 subset).
      Parameters:
      value - a DER-encoded value holding an X.500 name.
      Throws:
      IOException
    • X500Name

      public X500Name(DerInputStream in) throws IOException
      Constructs a name from an ASN.1 encoded input stream. The encoding of the name in the stream uses DER (a BER/1 subset).
      Parameters:
      in - DER-encoded data holding an X.500 name.
      Throws:
      IOException
    • X500Name

      public X500Name(byte[] name) throws IOException
      Constructs a name from an ASN.1 encoded byte array.
      Parameters:
      name - DER-encoded byte array holding an X.500 name.
      Throws:
      IOException
    • X500Name

      public X500Name(RDN[] rdns)
      Constructs a X500Name from array of RDN. The RDNs are expected to be in big endian order i.e. most significant first.
      Parameters:
      rdns - an array of RDN.
    • X500Name

      public X500Name(Vector<RDN> rdnVector)
      convenience method.
      Parameters:
      rdnVector - a vector of rdns.
  • Method Details

    • hashCode

      public int hashCode()
      Specified by:
      hashCode in interface Principal
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object obj)
      Specified by:
      equals in interface Principal
      Overrides:
      equals in class Object
    • clear

      private void clear()
      Sets private data to a null state
    • getString

      private String getString(DerValue attribute) throws IOException
      Returns the name component as a Java string, regardless of its encoding restrictions.
      Throws:
      IOException
    • getType

      public int getType()
      Return type of GeneralName.
      Specified by:
      getType in interface GeneralNameInterface
    • getCountry

      public String getCountry() throws IOException
      Returns a "Country" name component. If more than one such attribute exists, the topmost one is returned.
      Returns:
      "C=" component of the name, if any.
      Throws:
      IOException
    • getOrganization

      public String getOrganization() throws IOException
      Returns an "Organization" name component. If more than one such attribute exists, the topmost one is returned.
      Returns:
      "O=" component of the name, if any.
      Throws:
      IOException
    • getOrganizationalUnit

      public String getOrganizationalUnit() throws IOException
      Returns an "Organizational Unit" name component. If more than one such attribute exists, the topmost one is returned.
      Returns:
      "OU=" component of the name, if any.
      Throws:
      IOException
    • getCommonName

      public String getCommonName() throws IOException
      Returns a "Common Name" component. If more than one such attribute exists, the topmost one is returned.
      Returns:
      "CN=" component of the name, if any.
      Throws:
      IOException
    • getUserID

      public String getUserID() throws IOException
      Returns a "UID" component. If more than one such attribute exists, the topmost one is returned.
      Returns:
      "UID=" component of the name, if any.
      Throws:
      IOException
    • getLocality

      public String getLocality() throws IOException
      Returns a "Locality" name component. If more than one such component exists, the topmost one is returned.
      Returns:
      "L=" component of the name, if any.
      Throws:
      IOException
    • getState

      public String getState() throws IOException
      Returns a "State" name component. If more than one such component exists, the topmost one is returned.
      Returns:
      "S=" component of the name, if any.
      Throws:
      IOException
    • getEmail

      public String getEmail() throws IOException
      Returns a "Email" name component. If more than one such component exists, the topmost one is returned.
      Returns:
      "E=" component of the name, if any.
      Throws:
      IOException
    • toLdapDNString

      public String toLdapDNString() throws IOException
      Returns a Ldap DN String from the X500Name using the global default LdapDNStrConverter
      Returns:
      Ldap DN string of this X500Name using the default converter.
      Throws:
      IOException
      See Also:
    • getAttributesForOid

      public List<String> getAttributesForOid(ObjectIdentifier oid) throws IOException
      Return a list of attributes of the given type. The "most specific" value comes last. If there are no name attributes of the given type, an empty list is returned.
      Throws:
      IOException
    • toLdapDNString

      public String toLdapDNString(LdapDNStrConverter ldapDNStrConverter) throws IOException
      Returns a Ldap DN String from the X500Name using the specified LdapDNStrconverter. For example, RFC1779String converter can be passed to convert the DN to RFC1779 string syntax.
      Parameters:
      ldapDNStrConverter - a LdapDNStrConverter
      Returns:
      Ldap DN string of the X500Name
      Throws:
      IOException
      See Also:
    • toString

      public String toString()
      Returns a Ldap DN string, using the global default LdapDNStrConverter or null if an error occurs in the conversion.
      Specified by:
      toString in interface Principal
      Overrides:
      toString in class Object
    • getName

      public String getName()
      Returns the value of toString(). This call is needed to implement the java.security.Principal interface.
      Specified by:
      getName in interface Principal
    • findAttribute

      private DerValue findAttribute(ObjectIdentifier attribute)
      Find the first instance of this attribute in a "top down" search of all the attributes in the name.
    • getRDNs

      public Enumeration<RDN> getRDNs()
      Returns an enumerator of RDNs in the X500Name.
      Returns:
      enumeration of rdns in this X500Name.
    • getNames

      public RDN[] getNames()
      Returns an array of RDN in the X500Name.
      Returns:
      array of RDN in this X500name.
    • getNamesLength

      public int getNamesLength()
      Returns the number of RDNs in the X500Name.
      Returns:
      number of RDNs in this X500Name.
    • parseDER

      private void parseDER(DerInputStream in) throws IOException
      Throws:
      IOException
    • encode

      public void encode(DerOutputStream out) throws IOException
      Encodes the name in DER-encoded form.
      Specified by:
      encode in interface GeneralNameInterface
      Parameters:
      out - where to put the DER-encoded X.500 name
      Throws:
      IOException - thrown if the GeneralName could not be encoded.
    • getEncoded

      public byte[] getEncoded() throws IOException
      Gets the name in DER-encoded form.
      Returns:
      the DER encoded byte array of this name, null if no names are present.
      Throws:
      IOException
    • generateDN

      private void generateDN(LdapDNStrConverter ldapDNStrConverter) throws IOException
      Throws:
      IOException
    • intern

      static ObjectIdentifier intern(ObjectIdentifier oid) throws IOException
      Throws:
      IOException