16e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrompackage org.bouncycastle.asn1.x500; 26e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 36e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1Encodable; 46e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1EncodableVector; 54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Object; 66e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier; 74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1Primitive; 86e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1Set; 96e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.DERSequence; 106e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.DERSet; 116e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 126e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrompublic class RDN 134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom extends ASN1Object 146e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom{ 156e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom private ASN1Set values; 166e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 176e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom private RDN(ASN1Set values) 186e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom this.values = values; 206e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 216e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 226e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public static RDN getInstance(Object obj) 236e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 246e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (obj instanceof RDN) 256e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 266e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return (RDN)obj; 276e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 286e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom else if (obj != null) 296e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 306e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return new RDN(ASN1Set.getInstance(obj)); 316e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 326e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 336e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return null; 346e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 356e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 366e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom /** 376e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * Create a single valued RDN. 386e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * 394c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * @param oid RDN type. 404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * @param value RDN value. 416e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom */ 426e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public RDN(ASN1ObjectIdentifier oid, ASN1Encodable value) 436e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 446e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom ASN1EncodableVector v = new ASN1EncodableVector(); 456e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 466e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom v.add(oid); 476e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom v.add(value); 486e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 496e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom this.values = new DERSet(new DERSequence(v)); 506e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 516e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 526e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public RDN(AttributeTypeAndValue attrTAndV) 536e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 546e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom this.values = new DERSet(attrTAndV); 556e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 566e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 576e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom /** 586e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * Create a multi-valued RDN. 594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * 604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * @param aAndVs attribute type/value pairs making up the RDN 616e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom */ 626e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public RDN(AttributeTypeAndValue[] aAndVs) 636e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 646e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom this.values = new DERSet(aAndVs); 656e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 666e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 676e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public boolean isMultiValued() 686e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 696e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return this.values.size() > 1; 706e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 716e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom /** 734c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * Return the number of AttributeTypeAndValue objects in this RDN, 744c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * 754c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * @return size of RDN, greater than 1 if multi-valued. 764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom */ 774c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public int size() 784c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 794c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return this.values.size(); 804c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 814c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 826e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public AttributeTypeAndValue getFirst() 836e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 846e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (this.values.size() == 0) 856e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 866e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return null; 876e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 886e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 896e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return AttributeTypeAndValue.getInstance(this.values.getObjectAt(0)); 906e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 916e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 926e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom public AttributeTypeAndValue[] getTypesAndValues() 936e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 946e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom AttributeTypeAndValue[] tmp = new AttributeTypeAndValue[values.size()]; 956e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 966e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom for (int i = 0; i != tmp.length; i++) 976e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 986e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom tmp[i] = AttributeTypeAndValue.getInstance(values.getObjectAt(i)); 996e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1006e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1016e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return tmp; 1026e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1036e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1046e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom /** 1056e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * <pre> 1066e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * RelativeDistinguishedName ::= 1076e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * SET OF AttributeTypeAndValue 1086e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1096e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * AttributeTypeAndValue ::= SEQUENCE { 1106e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * type AttributeType, 1116e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * value AttributeValue } 1126e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom * </pre> 1134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * @return this object as an ASN1Primitive type 1146e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom */ 1154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public ASN1Primitive toASN1Primitive() 1166e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 1176e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return values; 1186e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 1196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom} 120