16e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrompackage org.bouncycastle.asn1.x500.style;
26e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
36e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport java.util.Hashtable;
46e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
56e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1Encodable;
66e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier;
76e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.DERIA5String;
86e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.DERPrintableString;
96e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.x500.RDN;
106e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.x500.X500Name;
116e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromimport org.bouncycastle.asn1.x500.X500NameStyle;
126e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
136e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrompublic class RFC4519Style
14d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root	extends AbstractX500NameStyle
156e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom{
166e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier businessCategory = new ASN1ObjectIdentifier("2.5.4.15");
176e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier c = new ASN1ObjectIdentifier("2.5.4.6");
186e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier cn = new ASN1ObjectIdentifier("2.5.4.3");
196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier dc = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.25");
206e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier description = new ASN1ObjectIdentifier("2.5.4.13");
216e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier destinationIndicator = new ASN1ObjectIdentifier("2.5.4.27");
226e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier distinguishedName = new ASN1ObjectIdentifier("2.5.4.49");
236e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier dnQualifier = new ASN1ObjectIdentifier("2.5.4.46");
246e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier enhancedSearchGuide = new ASN1ObjectIdentifier("2.5.4.47");
256e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier facsimileTelephoneNumber = new ASN1ObjectIdentifier("2.5.4.23");
266e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier generationQualifier = new ASN1ObjectIdentifier("2.5.4.44");
276e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier givenName = new ASN1ObjectIdentifier("2.5.4.42");
286e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier houseIdentifier = new ASN1ObjectIdentifier("2.5.4.51");
296e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier initials = new ASN1ObjectIdentifier("2.5.4.43");
306e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier internationalISDNNumber = new ASN1ObjectIdentifier("2.5.4.25");
316e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier l = new ASN1ObjectIdentifier("2.5.4.7");
326e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier member = new ASN1ObjectIdentifier("2.5.4.31");
336e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier name = new ASN1ObjectIdentifier("2.5.4.41");
346e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier o = new ASN1ObjectIdentifier("2.5.4.10");
356e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier ou = new ASN1ObjectIdentifier("2.5.4.11");
366e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier owner = new ASN1ObjectIdentifier("2.5.4.32");
376e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier physicalDeliveryOfficeName = new ASN1ObjectIdentifier("2.5.4.19");
386e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier postalAddress = new ASN1ObjectIdentifier("2.5.4.16");
396e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier postalCode = new ASN1ObjectIdentifier("2.5.4.17");
406e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier postOfficeBox = new ASN1ObjectIdentifier("2.5.4.18");
416e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier preferredDeliveryMethod = new ASN1ObjectIdentifier("2.5.4.28");
426e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier registeredAddress = new ASN1ObjectIdentifier("2.5.4.26");
436e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier roleOccupant = new ASN1ObjectIdentifier("2.5.4.33");
446e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier searchGuide = new ASN1ObjectIdentifier("2.5.4.14");
456e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier seeAlso = new ASN1ObjectIdentifier("2.5.4.34");
466e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier serialNumber = new ASN1ObjectIdentifier("2.5.4.5");
476e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier sn = new ASN1ObjectIdentifier("2.5.4.4");
486e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier st = new ASN1ObjectIdentifier("2.5.4.8");
496e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier street = new ASN1ObjectIdentifier("2.5.4.9");
506e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier telephoneNumber = new ASN1ObjectIdentifier("2.5.4.20");
516e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier teletexTerminalIdentifier = new ASN1ObjectIdentifier("2.5.4.22");
526e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier telexNumber = new ASN1ObjectIdentifier("2.5.4.21");
536e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier title = new ASN1ObjectIdentifier("2.5.4.12");
546e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier uid = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.1");
556e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier uniqueMember = new ASN1ObjectIdentifier("2.5.4.50");
566e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier userPassword = new ASN1ObjectIdentifier("2.5.4.35");
576e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier x121Address = new ASN1ObjectIdentifier("2.5.4.24");
586e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public static final ASN1ObjectIdentifier x500UniqueIdentifier = new ASN1ObjectIdentifier("2.5.4.45");
596e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
606e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    /**
616e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * default look up table translating OID values into their common symbols following
626e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * the convention in RFC 2253 with a few extras
636e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     */
646e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    private static final Hashtable DefaultSymbols = new Hashtable();
656e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
666e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    /**
676e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     * look up table translating common symbols into their OIDS.
686e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom     */
696e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    private static final Hashtable DefaultLookUp = new Hashtable();
706e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
716e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    static
726e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
736e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(businessCategory, "businessCategory");
746e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(c, "c");
756e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(cn, "cn");
766e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(dc, "dc");
776e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(description, "description");
786e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(destinationIndicator, "destinationIndicator");
796e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(distinguishedName, "distinguishedName");
806e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(dnQualifier, "dnQualifier");
816e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(enhancedSearchGuide, "enhancedSearchGuide");
826e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(facsimileTelephoneNumber, "facsimileTelephoneNumber");
836e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(generationQualifier, "generationQualifier");
846e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(givenName, "givenName");
856e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(houseIdentifier, "houseIdentifier");
866e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(initials, "initials");
876e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(internationalISDNNumber, "internationalISDNNumber");
886e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(l, "l");
896e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(member, "member");
906e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(name, "name");
916e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(o, "o");
926e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(ou, "ou");
936e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(owner, "owner");
946e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(physicalDeliveryOfficeName, "physicalDeliveryOfficeName");
956e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(postalAddress, "postalAddress");
966e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(postalCode, "postalCode");
976e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(postOfficeBox, "postOfficeBox");
986e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(preferredDeliveryMethod, "preferredDeliveryMethod");
996e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(registeredAddress, "registeredAddress");
1006e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(roleOccupant, "roleOccupant");
1016e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(searchGuide, "searchGuide");
1026e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(seeAlso, "seeAlso");
1036e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(serialNumber, "serialNumber");
1046e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(sn, "sn");
1056e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(st, "st");
1066e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(street, "street");
1076e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(telephoneNumber, "telephoneNumber");
1086e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(teletexTerminalIdentifier, "teletexTerminalIdentifier");
1096e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(telexNumber, "telexNumber");
1106e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(title, "title");
1116e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(uid, "uid");
1126e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(uniqueMember, "uniqueMember");
1136e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(userPassword, "userPassword");
1146e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(x121Address, "x121Address");
1156e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultSymbols.put(x500UniqueIdentifier, "x500UniqueIdentifier");
1166e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
1176e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("businesscategory", businessCategory);
1186e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("c", c);
1196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("cn", cn);
1206e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("dc", dc);
1216e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("description", description);
1226e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("destinationindicator", destinationIndicator);
1236e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("distinguishedname", distinguishedName);
1246e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("dnqualifier", dnQualifier);
1256e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("enhancedsearchguide", enhancedSearchGuide);
1266e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("facsimiletelephonenumber", facsimileTelephoneNumber);
1276e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("generationqualifier", generationQualifier);
1286e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("givenname", givenName);
1296e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("houseidentifier", houseIdentifier);
1306e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("initials", initials);
1316e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("internationalisdnnumber", internationalISDNNumber);
1326e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("l", l);
1336e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("member", member);
1346e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("name", name);
1356e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("o", o);
1366e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("ou", ou);
1376e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("owner", owner);
1386e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("physicaldeliveryofficename", physicalDeliveryOfficeName);
1396e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("postaladdress", postalAddress);
1406e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("postalcode", postalCode);
1416e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("postofficebox", postOfficeBox);
1426e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("preferreddeliverymethod", preferredDeliveryMethod);
1436e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("registeredaddress", registeredAddress);
1446e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("roleoccupant", roleOccupant);
1456e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("searchguide", searchGuide);
1466e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("seealso", seeAlso);
1476e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("serialnumber", serialNumber);
1486e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("sn", sn);
1496e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("st", st);
1506e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("street", street);
1516e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("telephonenumber", telephoneNumber);
1526e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("teletexterminalidentifier", teletexTerminalIdentifier);
1536e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("telexnumber", telexNumber);
1546e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("title", title);
1556e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("uid", uid);
1566e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("uniquemember", uniqueMember);
1576e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("userpassword", userPassword);
1586e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("x121address", x121Address);
1596e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        DefaultLookUp.put("x500uniqueidentifier", x500UniqueIdentifier);
1606e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
1616e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        // TODO: need to add correct matching for equality comparisons.
1626e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
1636e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
1645db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    /**
1655db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root     * Singleton instance.
1665db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root     */
1675db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    public static final X500NameStyle INSTANCE = new RFC4519Style();
1685db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
1695db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    protected final Hashtable defaultLookUp;
1705db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root    protected final Hashtable defaultSymbols;
1715db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
1726e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    protected RFC4519Style()
1736e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
1745db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        defaultSymbols = copyHashTable(DefaultSymbols);
1755db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        defaultLookUp = copyHashTable(DefaultLookUp);
1766e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
1776e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
178d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root    protected ASN1Encodable encodeStringValue(ASN1ObjectIdentifier oid,
179d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root    		String value) {
180d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root    	if (oid.equals(dc))
1816e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
182d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root            return new DERIA5String(value);
1836e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
184d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root        else if (oid.equals(c) || oid.equals(serialNumber) || oid.equals(dnQualifier)
185d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root            || oid.equals(telephoneNumber))
1866e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
187d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root            return new DERPrintableString(value);
1886e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
1896e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
190d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root    	return super.encodeStringValue(oid, value);
1916e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
1926e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
193a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    public String oidToDisplayName(ASN1ObjectIdentifier oid)
194a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
195a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom        return (String)DefaultSymbols.get(oid);
196a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
197a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
198a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    public String[] oidToAttrNames(ASN1ObjectIdentifier oid)
199a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    {
2005db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        return IETFUtils.findAttrNamesForOID(oid, defaultLookUp);
201a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom    }
202a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom
2036e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public ASN1ObjectIdentifier attrNameToOID(String attrName)
2046e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
2055db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root        return IETFUtils.decodeAttrName(attrName, defaultLookUp);
2066e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
2076e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
2086e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    // parse backwards
2096e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public RDN[] fromString(String dirName)
2106e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
2116e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        RDN[] tmp = IETFUtils.rDNsFromString(dirName, this);
2126e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        RDN[] res = new RDN[tmp.length];
2136e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
2146e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        for (int i = 0; i != tmp.length; i++)
2156e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
2166e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            res[res.length - i - 1] = tmp[i];
2176e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
2186e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
2196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return res;
2206e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
2216e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
2226e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    // convert in reverse
2236e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    public String toString(X500Name name)
2246e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
2256e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        StringBuffer buf = new StringBuffer();
2266e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        boolean first = true;
2276e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
2286e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        RDN[] rdns = name.getRDNs();
2296e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
2306e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        for (int i = rdns.length - 1; i >= 0; i--)
2316e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
2326e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            if (first)
2336e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            {
2346e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom                first = false;
2356e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            }
2366e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            else
2376e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            {
2386e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom                buf.append(',');
2396e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            }
2406e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
2415db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root            IETFUtils.appendRDN(buf, rdns[i], defaultSymbols);
2426e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
2436e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
2446e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        return buf.toString();
2456e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
2465db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root
247d001700a15b8bd733ae344c1fc315b97c43c6590Kenny Root
2486e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom}
249