1package org.bouncycastle.asn1.x500; 2 3import java.util.Vector; 4 5import org.bouncycastle.asn1.ASN1Encodable; 6import org.bouncycastle.asn1.ASN1ObjectIdentifier; 7import org.bouncycastle.asn1.x500.style.BCStyle; 8 9public class X500NameBuilder 10{ 11 private X500NameStyle template; 12 private Vector rdns = new Vector(); 13 14 public X500NameBuilder() 15 { 16 this(BCStyle.INSTANCE); 17 } 18 19 public X500NameBuilder(X500NameStyle template) 20 { 21 this.template = template; 22 } 23 24 public X500NameBuilder addRDN(ASN1ObjectIdentifier oid, String value) 25 { 26 this.addRDN(oid, template.stringToValue(oid, value)); 27 28 return this; 29 } 30 31 public X500NameBuilder addRDN(ASN1ObjectIdentifier oid, ASN1Encodable value) 32 { 33 rdns.addElement(new RDN(oid, value)); 34 35 return this; 36 } 37 38 public X500NameBuilder addRDN(AttributeTypeAndValue attrTAndV) 39 { 40 rdns.addElement(new RDN(attrTAndV)); 41 42 return this; 43 } 44 45 public X500NameBuilder addMultiValuedRDN(ASN1ObjectIdentifier[] oids, String[] values) 46 { 47 ASN1Encodable[] vals = new ASN1Encodable[values.length]; 48 49 for (int i = 0; i != vals.length; i++) 50 { 51 vals[i] = template.stringToValue(oids[i], values[i]); 52 } 53 54 return addMultiValuedRDN(oids, vals); 55 } 56 57 public X500NameBuilder addMultiValuedRDN(ASN1ObjectIdentifier[] oids, ASN1Encodable[] values) 58 { 59 AttributeTypeAndValue[] avs = new AttributeTypeAndValue[oids.length]; 60 61 for (int i = 0; i != oids.length; i++) 62 { 63 avs[i] = new AttributeTypeAndValue(oids[i], values[i]); 64 } 65 66 return addMultiValuedRDN(avs); 67 } 68 69 public X500NameBuilder addMultiValuedRDN(AttributeTypeAndValue[] attrTAndVs) 70 { 71 rdns.addElement(new RDN(attrTAndVs)); 72 73 return this; 74 } 75 76 public X500Name build() 77 { 78 RDN[] vals = new RDN[rdns.size()]; 79 80 for (int i = 0; i != vals.length; i++) 81 { 82 vals[i] = (RDN)rdns.elementAt(i); 83 } 84 85 return new X500Name(template, vals); 86 } 87} 88