116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropackage org.bouncycastle.asn1.x500; 216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport java.util.Enumeration; 416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Choice; 616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Encodable; 716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Object; 816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1ObjectIdentifier; 916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Primitive; 1016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Sequence; 1116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1TaggedObject; 1216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.DERSequence; 1316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.x500.style.BCStyle; 1416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 1516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro/** 16bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * The X.500 Name object. 1716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * <pre> 1816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * Name ::= CHOICE { 1916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * RDNSequence } 2016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * 2116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * RDNSequence ::= SEQUENCE OF RelativeDistinguishedName 2216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * 2316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue 2416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * 2516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * AttributeTypeAndValue ::= SEQUENCE { 2616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * type OBJECT IDENTIFIER, 2716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * value ANY } 2816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * </pre> 2916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 3016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropublic class X500Name 3116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro extends ASN1Object 3216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro implements ASN1Choice 3316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro{ 3416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro private static X500NameStyle defaultStyle = BCStyle.INSTANCE; 3516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 3616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro private boolean isHashCodeCalculated; 3716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro private int hashCodeValue; 3816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 3916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro private X500NameStyle style; 4016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro private RDN[] rdns; 4116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 42bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro /** 43bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * @deprecated use the getInstance() method that takes a style. 44bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro */ 4516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public X500Name(X500NameStyle style, X500Name name) 4616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 4716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.rdns = name.rdns; 4816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.style = style; 4916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 5016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 5116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 5216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * Return a X500Name based on the passed in tagged object. 5316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * 5416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * @param obj tag object holding name. 5516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * @param explicit true if explicitly tagged false otherwise. 5616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * @return the X500Name 5716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 5816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public static X500Name getInstance( 5916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro ASN1TaggedObject obj, 6016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro boolean explicit) 6116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 6216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro // must be true as choice item 6316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return getInstance(ASN1Sequence.getInstance(obj, true)); 6416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 6516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 6616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public static X500Name getInstance( 6716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro Object obj) 6816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 6916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (obj instanceof X500Name) 7016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 7116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return (X500Name)obj; 7216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 7316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro else if (obj != null) 7416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 7516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return new X500Name(ASN1Sequence.getInstance(obj)); 7616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 7716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 7816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return null; 7916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 8016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 8116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public static X500Name getInstance( 8216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro X500NameStyle style, 8316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro Object obj) 8416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 8516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (obj instanceof X500Name) 8616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 87bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro return new X500Name(style, (X500Name)obj); 8816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 8916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro else if (obj != null) 9016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 9116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return new X500Name(style, ASN1Sequence.getInstance(obj)); 9216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 9316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 9416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return null; 9516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 9616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 9716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 9816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * Constructor from ASN1Sequence 9916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * 10016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * the principal will be a list of constructed sets, each containing an (OID, String) pair. 10116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 10216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro private X500Name( 10316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro ASN1Sequence seq) 10416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 10516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this(defaultStyle, seq); 10616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 10716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 10816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro private X500Name( 10916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro X500NameStyle style, 11016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro ASN1Sequence seq) 11116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 11216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.style = style; 11316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.rdns = new RDN[seq.size()]; 11416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 11516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro int index = 0; 11616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 11716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro for (Enumeration e = seq.getObjects(); e.hasMoreElements();) 11816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 11916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro rdns[index++] = RDN.getInstance(e.nextElement()); 12016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 12116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 12216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 12316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public X500Name( 12416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro RDN[] rDNs) 12516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 12616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this(defaultStyle, rDNs); 12716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 12816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 12916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public X500Name( 13016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro X500NameStyle style, 13116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro RDN[] rDNs) 13216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 13316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.rdns = rDNs; 13416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.style = style; 13516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 13616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 13716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public X500Name( 13816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro String dirName) 13916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 14016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this(defaultStyle, dirName); 14116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 14216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 14316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public X500Name( 14416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro X500NameStyle style, 14516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro String dirName) 14616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 14716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this(style.fromString(dirName)); 14816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 14916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.style = style; 15016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 15116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 15216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 15316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * return an array of RDNs in structure order. 15416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * 15516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * @return an array of RDN objects. 15616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 15716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public RDN[] getRDNs() 15816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 15916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro RDN[] tmp = new RDN[this.rdns.length]; 16016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 16116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro System.arraycopy(rdns, 0, tmp, 0, tmp.length); 16216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 16316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return tmp; 16416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 16516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 16616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 16716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * return an array of OIDs contained in the attribute type of each RDN in structure order. 16816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * 16916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * @return an array, possibly zero length, of ASN1ObjectIdentifiers objects. 17016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 17116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public ASN1ObjectIdentifier[] getAttributeTypes() 17216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 17316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro int count = 0; 17416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 17516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro for (int i = 0; i != rdns.length; i++) 17616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 17716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro RDN rdn = rdns[i]; 17816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 17916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro count += rdn.size(); 18016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 18116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 18216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro ASN1ObjectIdentifier[] res = new ASN1ObjectIdentifier[count]; 18316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 18416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro count = 0; 18516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 18616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro for (int i = 0; i != rdns.length; i++) 18716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 18816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro RDN rdn = rdns[i]; 18916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 19016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (rdn.isMultiValued()) 19116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 19216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro AttributeTypeAndValue[] attr = rdn.getTypesAndValues(); 19316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro for (int j = 0; j != attr.length; j++) 19416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 19516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro res[count++] = attr[j].getType(); 19616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 19716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 19816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro else if (rdn.size() != 0) 19916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 20016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro res[count++] = rdn.getFirst().getType(); 20116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 20216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 20316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 20416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return res; 20516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 20616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 20716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 20816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * return an array of RDNs containing the attribute type given by OID in structure order. 20916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * 21016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * @param attributeType the type OID we are looking for. 21116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * @return an array, possibly zero length, of RDN objects. 21216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 21316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public RDN[] getRDNs(ASN1ObjectIdentifier attributeType) 21416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 21516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro RDN[] res = new RDN[rdns.length]; 21616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro int count = 0; 21716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 21816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro for (int i = 0; i != rdns.length; i++) 21916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 22016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro RDN rdn = rdns[i]; 22116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 22216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (rdn.isMultiValued()) 22316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 22416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro AttributeTypeAndValue[] attr = rdn.getTypesAndValues(); 22516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro for (int j = 0; j != attr.length; j++) 22616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 22716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (attr[j].getType().equals(attributeType)) 22816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 22916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro res[count++] = rdn; 23016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro break; 23116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 23216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 23316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 23416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro else 23516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 23616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (rdn.getFirst().getType().equals(attributeType)) 23716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 23816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro res[count++] = rdn; 23916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 24016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 24116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 24216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 24316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro RDN[] tmp = new RDN[count]; 24416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 24516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro System.arraycopy(res, 0, tmp, 0, tmp.length); 24616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 24716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return tmp; 24816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 24916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 25016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public ASN1Primitive toASN1Primitive() 25116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 25216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return new DERSequence(rdns); 25316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 25416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 25516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public int hashCode() 25616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 25716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (isHashCodeCalculated) 25816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 25916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return hashCodeValue; 26016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 26116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 26216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro isHashCodeCalculated = true; 26316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 26416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro hashCodeValue = style.calculateHashCode(this); 26516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 26616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return hashCodeValue; 26716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 26816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 26916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 27016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * test for equality - note: case is ignored. 27116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 27216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public boolean equals(Object obj) 27316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 27416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (obj == this) 27516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 27616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return true; 27716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 27816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 27916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (!(obj instanceof X500Name || obj instanceof ASN1Sequence)) 28016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 28116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return false; 28216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 28316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 28416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro ASN1Primitive derO = ((ASN1Encodable)obj).toASN1Primitive(); 28516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 28616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (this.toASN1Primitive().equals(derO)) 28716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 28816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return true; 28916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 29016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 29116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro try 29216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 29316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return style.areEqual(this, new X500Name(ASN1Sequence.getInstance(((ASN1Encodable)obj).toASN1Primitive()))); 29416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 29516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro catch (Exception e) 29616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 29716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return false; 29816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 29916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 30016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 30116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public String toString() 30216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 30316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return style.toString(this); 30416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 30516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 30616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 30716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * Set the default style for X500Name construction. 30816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * 30916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * @param style an X500NameStyle 31016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 31116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public static void setDefaultStyle(X500NameStyle style) 31216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 31316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (style == null) 31416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 31516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro throw new NullPointerException("cannot set style to null"); 31616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 31716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 31816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro defaultStyle = style; 31916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 32016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 32116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 32216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * Return the current default style. 32316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * 32416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * @return default style for X500Name construction. 32516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 32616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public static X500NameStyle getDefaultStyle() 32716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 32816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return defaultStyle; 32916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 33016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro} 331