116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropackage org.bouncycastle.asn1.x500; 216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Encodable; 416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1EncodableVector; 516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Object; 616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1ObjectIdentifier; 716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Primitive; 816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Set; 916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.DERSequence; 1016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.DERSet; 1116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 12bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro/** 13bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * Holding class for a single Relative Distinguished Name (RDN). 14bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro */ 1516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropublic class RDN 1616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro extends ASN1Object 1716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro{ 1816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro private ASN1Set values; 1916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 2016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro private RDN(ASN1Set values) 2116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 2216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.values = values; 2316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 2416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 2516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public static RDN getInstance(Object obj) 2616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 2716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (obj instanceof RDN) 2816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 2916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return (RDN)obj; 3016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 3116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro else if (obj != null) 3216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 3316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return new RDN(ASN1Set.getInstance(obj)); 3416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 3516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 3616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return null; 3716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 3816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 3916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 4016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * Create a single valued RDN. 4116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * 4216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * @param oid RDN type. 4316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * @param value RDN value. 4416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 4516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public RDN(ASN1ObjectIdentifier oid, ASN1Encodable value) 4616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 4716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro ASN1EncodableVector v = new ASN1EncodableVector(); 4816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 4916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro v.add(oid); 5016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro v.add(value); 5116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 5216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.values = new DERSet(new DERSequence(v)); 5316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 5416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 5516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public RDN(AttributeTypeAndValue attrTAndV) 5616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 5716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.values = new DERSet(attrTAndV); 5816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 5916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 6016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 6116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * Create a multi-valued RDN. 6216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * 6316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * @param aAndVs attribute type/value pairs making up the RDN 6416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 6516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public RDN(AttributeTypeAndValue[] aAndVs) 6616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 6716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this.values = new DERSet(aAndVs); 6816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 6916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 7016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public boolean isMultiValued() 7116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 7216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return this.values.size() > 1; 7316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 7416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 7516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 7616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * Return the number of AttributeTypeAndValue objects in this RDN, 7716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * 7816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * @return size of RDN, greater than 1 if multi-valued. 7916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 8016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public int size() 8116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 8216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return this.values.size(); 8316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 8416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 8516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public AttributeTypeAndValue getFirst() 8616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 8716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (this.values.size() == 0) 8816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 8916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return null; 9016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 9116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 9216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return AttributeTypeAndValue.getInstance(this.values.getObjectAt(0)); 9316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 9416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 9516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public AttributeTypeAndValue[] getTypesAndValues() 9616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 9716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro AttributeTypeAndValue[] tmp = new AttributeTypeAndValue[values.size()]; 9816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 9916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro for (int i = 0; i != tmp.length; i++) 10016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 10116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro tmp[i] = AttributeTypeAndValue.getInstance(values.getObjectAt(i)); 10216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 10316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 10416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return tmp; 10516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 10616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 10716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 10816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * <pre> 10916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * RelativeDistinguishedName ::= 11016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * SET OF AttributeTypeAndValue 111bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * 11216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * AttributeTypeAndValue ::= SEQUENCE { 11316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * type AttributeType, 11416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * value AttributeValue } 11516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * </pre> 116bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * @return this object as its ASN1Primitive type 11716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 11816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public ASN1Primitive toASN1Primitive() 11916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 12016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return values; 12116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 12216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro} 123