16e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrompackage org.bouncycastle.asn1.x500; 26e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 36e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport java.util.Enumeration; 46e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 56e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1Choice; 66e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1Encodable; 74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object; 86e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier; 94c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive; 106e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1Sequence; 116e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1TaggedObject; 126e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.DERSequence; 136e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.x500.style.BCStyle; 146e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 156e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom/** 166e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * <pre> 176e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * Name ::= CHOICE { 186e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * RDNSequence } 196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * 206e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * RDNSequence ::= SEQUENCE OF RelativeDistinguishedName 216e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * 226e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue 236e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * 246e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * AttributeTypeAndValue ::= SEQUENCE { 256e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * type OBJECT IDENTIFIER, 266e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * value ANY } 276e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * </pre> 286e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom */ 296e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrompublic class X500Name 304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom extends ASN1Object 316e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom implements ASN1Choice 326e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom{ 336e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom private static X500NameStyle defaultStyle = BCStyle.INSTANCE; 346e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 356e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom private boolean isHashCodeCalculated; 366e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom private int hashCodeValue; 376e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 386e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom private X500NameStyle style; 396e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom private RDN[] rdns; 406e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 416e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public X500Name(X500NameStyle style, X500Name name) 426e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 436e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom this.rdns = name.rdns; 446e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom this.style = style; 456e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 466e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 476e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom /** 484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * Return a X500Name based on the passed in tagged object. 496e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * 506e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * @param obj tag object holding name. 516e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * @param explicit true if explicitly tagged false otherwise. 524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * @return the X500Name 536e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom */ 546e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public static X500Name getInstance( 556e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom ASN1TaggedObject obj, 566e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom boolean explicit) 576e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 586e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom // must be true as choice item 596e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return getInstance(ASN1Sequence.getInstance(obj, true)); 606e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 616e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 626e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public static X500Name getInstance( 636e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom Object obj) 646e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 656e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (obj instanceof X500Name) 666e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 676e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return (X500Name)obj; 686e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 694c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom else if (obj != null) 704c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 714c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return new X500Name(ASN1Sequence.getInstance(obj)); 724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 734c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 744c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return null; 754c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 774c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public static X500Name getInstance( 784c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom X500NameStyle style, 794c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom Object obj) 804c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 814c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (obj instanceof X500Name) 826e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 834c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return getInstance(style, ((X500Name)obj).toASN1Primitive()); 846e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 856e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom else if (obj != null) 866e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 874c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return new X500Name(style, ASN1Sequence.getInstance(obj)); 886e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 896e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 906e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return null; 916e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 926e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 936e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom /** 946e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * Constructor from ASN1Sequence 956e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * 966e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * the principal will be a list of constructed sets, each containing an (OID, String) pair. 976e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom */ 986e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom private X500Name( 996e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom ASN1Sequence seq) 1006e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 1016e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom this(defaultStyle, seq); 1026e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1036e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1046e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom private X500Name( 1056e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom X500NameStyle style, 1066e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom ASN1Sequence seq) 1076e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 1086e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom this.style = style; 1096e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom this.rdns = new RDN[seq.size()]; 1106e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1116e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom int index = 0; 1126e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1136e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom for (Enumeration e = seq.getObjects(); e.hasMoreElements();) 1146e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 1156e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom rdns[index++] = RDN.getInstance(e.nextElement()); 1166e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1176e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1186e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public X500Name( 1206e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom RDN[] rDNs) 1216e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 1226e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom this(defaultStyle, rDNs); 1236e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1246e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1256e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public X500Name( 1266e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom X500NameStyle style, 1276e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom RDN[] rDNs) 1286e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 1296e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom this.rdns = rDNs; 1306e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom this.style = style; 1316e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1326e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1336e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public X500Name( 1346e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom String dirName) 1356e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 1366e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom this(defaultStyle, dirName); 1376e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1386e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1396e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public X500Name( 1406e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom X500NameStyle style, 1416e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom String dirName) 1426e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 1436e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom this(style.fromString(dirName)); 1446e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1456e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom this.style = style; 1466e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1476e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1486e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom /** 1496e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * return an array of RDNs in structure order. 1506e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * 1516e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * @return an array of RDN objects. 1526e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom */ 1536e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public RDN[] getRDNs() 1546e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 1556e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom RDN[] tmp = new RDN[this.rdns.length]; 1566e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1576e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom System.arraycopy(rdns, 0, tmp, 0, tmp.length); 1586e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1596e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return tmp; 1606e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1616e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1626e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom /** 1634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * return an array of OIDs contained in the attribute type of each RDN in structure order. 1644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * 1654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * @return an array, possibly zero length, of ASN1ObjectIdentifiers objects. 1664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom */ 1674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public ASN1ObjectIdentifier[] getAttributeTypes() 1684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 1694c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom int count = 0; 1704c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1714c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom for (int i = 0; i != rdns.length; i++) 1724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 1734c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom RDN rdn = rdns[i]; 1744c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1754c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom count += rdn.size(); 1764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 1774c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1784c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom ASN1ObjectIdentifier[] res = new ASN1ObjectIdentifier[count]; 1794c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1804c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom count = 0; 1814c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1824c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom for (int i = 0; i != rdns.length; i++) 1834c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 1844c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom RDN rdn = rdns[i]; 1854c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1864c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (rdn.isMultiValued()) 1874c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 1884c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom AttributeTypeAndValue[] attr = rdn.getTypesAndValues(); 1894c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom for (int j = 0; j != attr.length; j++) 1904c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 1914c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom res[count++] = attr[j].getType(); 1924c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 1934c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 1944c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom else if (rdn.size() != 0) 1954c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 1964c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom res[count++] = rdn.getFirst().getType(); 1974c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 1984c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 1994c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 2004c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return res; 2014c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 2024c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 2034c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom /** 2046e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * return an array of RDNs containing the attribute type given by OID in structure order. 2056e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * 2064c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * @param attributeType the type OID we are looking for. 2076e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * @return an array, possibly zero length, of RDN objects. 2086e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom */ 2094c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public RDN[] getRDNs(ASN1ObjectIdentifier attributeType) 2106e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 2116e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom RDN[] res = new RDN[rdns.length]; 2126e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom int count = 0; 2136e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 2146e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom for (int i = 0; i != rdns.length; i++) 2156e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 2166e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom RDN rdn = rdns[i]; 2176e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 2186e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (rdn.isMultiValued()) 2196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 2206e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom AttributeTypeAndValue[] attr = rdn.getTypesAndValues(); 2216e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom for (int j = 0; j != attr.length; j++) 2226e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 2234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (attr[j].getType().equals(attributeType)) 2246e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 2256e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom res[count++] = rdn; 2266e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom break; 2276e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 2286e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 2296e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 2306e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom else 2316e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 2324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (rdn.getFirst().getType().equals(attributeType)) 2336e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 2346e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom res[count++] = rdn; 2356e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 2366e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 2376e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 2386e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 2396e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom RDN[] tmp = new RDN[count]; 2406e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 2416e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom System.arraycopy(res, 0, tmp, 0, tmp.length); 2426e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 2436e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return tmp; 2446e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 2456e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 2464c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public ASN1Primitive toASN1Primitive() 2476e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 2486e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return new DERSequence(rdns); 2496e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 2506e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 2516e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public int hashCode() 2526e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 2536e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (isHashCodeCalculated) 2546e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 2556e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return hashCodeValue; 2566e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 2576e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 2586e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom isHashCodeCalculated = true; 2596e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 2606e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom hashCodeValue = style.calculateHashCode(this); 2616e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 2626e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return hashCodeValue; 2636e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 2646e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 2656e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom /** 2666e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * test for equality - note: case is ignored. 2676e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom */ 2686e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public boolean equals(Object obj) 2696e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 2706e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (obj == this) 2716e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 2726e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return true; 2736e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 2746e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 2756e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (!(obj instanceof X500Name || obj instanceof ASN1Sequence)) 2766e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 2776e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return false; 2786e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 2796e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 2804c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom ASN1Primitive derO = ((ASN1Encodable)obj).toASN1Primitive(); 2816e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 2824c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (this.toASN1Primitive().equals(derO)) 2836e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 2846e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return true; 2856e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 2866e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 2876e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom try 2886e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 2894c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return style.areEqual(this, new X500Name(ASN1Sequence.getInstance(((ASN1Encodable)obj).toASN1Primitive()))); 2906e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 2916e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom catch (Exception e) 2926e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 2936e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return false; 2946e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 2956e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 2966e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 2976e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public String toString() 2986e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 2996e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return style.toString(this); 3006e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 3016e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 3026e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom /** 3036e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * Set the default style for X500Name construction. 3046e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * 3056e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * @param style an X500NameStyle 3066e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom */ 3076e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public static void setDefaultStyle(X500NameStyle style) 3086e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 3096e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (style == null) 3106e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 3116e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom throw new NullPointerException("cannot set style to null"); 3126e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 3136e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 3146e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom defaultStyle = style; 3156e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 3166e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 3176e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom /** 3186e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * Return the current default style. 3196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * 3206e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * @return default style for X500Name construction. 3216e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom */ 3226e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public static X500NameStyle getDefaultStyle() 3236e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 3246e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return defaultStyle; 3256e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 3266e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom} 327