116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropackage org.bouncycastle.asn1.x500.style; 216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport java.util.Hashtable; 416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Encodable; 616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1ObjectIdentifier; 716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.DERIA5String; 816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.DERPrintableString; 916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.x500.RDN; 1016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.x500.X500Name; 1116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.x500.X500NameStyle; 1216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 1316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropublic class RFC4519Style 1453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro extends AbstractX500NameStyle 1516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro{ 16bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier businessCategory = new ASN1ObjectIdentifier("2.5.4.15").intern(); 17bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier c = new ASN1ObjectIdentifier("2.5.4.6").intern(); 18bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier cn = new ASN1ObjectIdentifier("2.5.4.3").intern(); 19bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier dc = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.25").intern(); 20bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier description = new ASN1ObjectIdentifier("2.5.4.13").intern(); 21bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier destinationIndicator = new ASN1ObjectIdentifier("2.5.4.27").intern(); 22bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier distinguishedName = new ASN1ObjectIdentifier("2.5.4.49").intern(); 23bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier dnQualifier = new ASN1ObjectIdentifier("2.5.4.46").intern(); 24bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier enhancedSearchGuide = new ASN1ObjectIdentifier("2.5.4.47").intern(); 25bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier facsimileTelephoneNumber = new ASN1ObjectIdentifier("2.5.4.23").intern(); 26bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier generationQualifier = new ASN1ObjectIdentifier("2.5.4.44").intern(); 27bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier givenName = new ASN1ObjectIdentifier("2.5.4.42").intern(); 28bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier houseIdentifier = new ASN1ObjectIdentifier("2.5.4.51").intern(); 29bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier initials = new ASN1ObjectIdentifier("2.5.4.43").intern(); 30bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier internationalISDNNumber = new ASN1ObjectIdentifier("2.5.4.25").intern(); 31bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier l = new ASN1ObjectIdentifier("2.5.4.7").intern(); 32bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier member = new ASN1ObjectIdentifier("2.5.4.31").intern(); 33bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier name = new ASN1ObjectIdentifier("2.5.4.41").intern(); 34bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier o = new ASN1ObjectIdentifier("2.5.4.10").intern(); 35bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier ou = new ASN1ObjectIdentifier("2.5.4.11").intern(); 36bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier owner = new ASN1ObjectIdentifier("2.5.4.32").intern(); 37bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier physicalDeliveryOfficeName = new ASN1ObjectIdentifier("2.5.4.19").intern(); 38bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier postalAddress = new ASN1ObjectIdentifier("2.5.4.16").intern(); 39bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier postalCode = new ASN1ObjectIdentifier("2.5.4.17").intern(); 40bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier postOfficeBox = new ASN1ObjectIdentifier("2.5.4.18").intern(); 41bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier preferredDeliveryMethod = new ASN1ObjectIdentifier("2.5.4.28").intern(); 42bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier registeredAddress = new ASN1ObjectIdentifier("2.5.4.26").intern(); 43bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier roleOccupant = new ASN1ObjectIdentifier("2.5.4.33").intern(); 44bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier searchGuide = new ASN1ObjectIdentifier("2.5.4.14").intern(); 45bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier seeAlso = new ASN1ObjectIdentifier("2.5.4.34").intern(); 46bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier serialNumber = new ASN1ObjectIdentifier("2.5.4.5").intern(); 47bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier sn = new ASN1ObjectIdentifier("2.5.4.4").intern(); 48bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier st = new ASN1ObjectIdentifier("2.5.4.8").intern(); 49bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier street = new ASN1ObjectIdentifier("2.5.4.9").intern(); 50bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier telephoneNumber = new ASN1ObjectIdentifier("2.5.4.20").intern(); 51bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier teletexTerminalIdentifier = new ASN1ObjectIdentifier("2.5.4.22").intern(); 52bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier telexNumber = new ASN1ObjectIdentifier("2.5.4.21").intern(); 53bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier title = new ASN1ObjectIdentifier("2.5.4.12").intern(); 54bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier uid = new ASN1ObjectIdentifier("0.9.2342.19200300.100.1.1").intern(); 55bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier uniqueMember = new ASN1ObjectIdentifier("2.5.4.50").intern(); 56bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier userPassword = new ASN1ObjectIdentifier("2.5.4.35").intern(); 57bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier x121Address = new ASN1ObjectIdentifier("2.5.4.24").intern(); 58bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro public static final ASN1ObjectIdentifier x500UniqueIdentifier = new ASN1ObjectIdentifier("2.5.4.45").intern(); 5916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 6016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 6116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * default look up table translating OID values into their common symbols following 6216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * the convention in RFC 2253 with a few extras 6316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 6416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro private static final Hashtable DefaultSymbols = new Hashtable(); 6516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 6616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 6716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro * look up table translating common symbols into their OIDS. 6816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 6916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro private static final Hashtable DefaultLookUp = new Hashtable(); 7016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 7116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro static 7216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 7316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(businessCategory, "businessCategory"); 7416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(c, "c"); 7516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(cn, "cn"); 7616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(dc, "dc"); 7716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(description, "description"); 7816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(destinationIndicator, "destinationIndicator"); 7916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(distinguishedName, "distinguishedName"); 8016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(dnQualifier, "dnQualifier"); 8116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(enhancedSearchGuide, "enhancedSearchGuide"); 8216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(facsimileTelephoneNumber, "facsimileTelephoneNumber"); 8316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(generationQualifier, "generationQualifier"); 8416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(givenName, "givenName"); 8516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(houseIdentifier, "houseIdentifier"); 8616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(initials, "initials"); 8716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(internationalISDNNumber, "internationalISDNNumber"); 8816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(l, "l"); 8916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(member, "member"); 9016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(name, "name"); 9116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(o, "o"); 9216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(ou, "ou"); 9316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(owner, "owner"); 9416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(physicalDeliveryOfficeName, "physicalDeliveryOfficeName"); 9516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(postalAddress, "postalAddress"); 9616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(postalCode, "postalCode"); 9716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(postOfficeBox, "postOfficeBox"); 9816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(preferredDeliveryMethod, "preferredDeliveryMethod"); 9916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(registeredAddress, "registeredAddress"); 10016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(roleOccupant, "roleOccupant"); 10116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(searchGuide, "searchGuide"); 10216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(seeAlso, "seeAlso"); 10316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(serialNumber, "serialNumber"); 10416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(sn, "sn"); 10516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(st, "st"); 10616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(street, "street"); 10716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(telephoneNumber, "telephoneNumber"); 10816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(teletexTerminalIdentifier, "teletexTerminalIdentifier"); 10916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(telexNumber, "telexNumber"); 11016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(title, "title"); 11116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(uid, "uid"); 11216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(uniqueMember, "uniqueMember"); 11316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(userPassword, "userPassword"); 11416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(x121Address, "x121Address"); 11516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultSymbols.put(x500UniqueIdentifier, "x500UniqueIdentifier"); 11616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 11716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("businesscategory", businessCategory); 11816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("c", c); 11916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("cn", cn); 12016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("dc", dc); 12116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("description", description); 12216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("destinationindicator", destinationIndicator); 12316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("distinguishedname", distinguishedName); 12416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("dnqualifier", dnQualifier); 12516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("enhancedsearchguide", enhancedSearchGuide); 12616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("facsimiletelephonenumber", facsimileTelephoneNumber); 12716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("generationqualifier", generationQualifier); 12816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("givenname", givenName); 12916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("houseidentifier", houseIdentifier); 13016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("initials", initials); 13116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("internationalisdnnumber", internationalISDNNumber); 13216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("l", l); 13316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("member", member); 13416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("name", name); 13516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("o", o); 13616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("ou", ou); 13716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("owner", owner); 13816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("physicaldeliveryofficename", physicalDeliveryOfficeName); 13916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("postaladdress", postalAddress); 14016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("postalcode", postalCode); 14116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("postofficebox", postOfficeBox); 14216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("preferreddeliverymethod", preferredDeliveryMethod); 14316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("registeredaddress", registeredAddress); 14416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("roleoccupant", roleOccupant); 14516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("searchguide", searchGuide); 14616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("seealso", seeAlso); 14716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("serialnumber", serialNumber); 14816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("sn", sn); 14916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("st", st); 15016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("street", street); 15116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("telephonenumber", telephoneNumber); 15216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("teletexterminalidentifier", teletexTerminalIdentifier); 15316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("telexnumber", telexNumber); 15416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("title", title); 15516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("uid", uid); 15616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("uniquemember", uniqueMember); 15716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("userpassword", userPassword); 15816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("x121address", x121Address); 15916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro DefaultLookUp.put("x500uniqueidentifier", x500UniqueIdentifier); 16016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 16116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro // TODO: need to add correct matching for equality comparisons. 16216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 16316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 16480261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro /** 16580261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro * Singleton instance. 16680261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro */ 16780261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro public static final X500NameStyle INSTANCE = new RFC4519Style(); 16880261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 16980261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro protected final Hashtable defaultLookUp; 17080261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro protected final Hashtable defaultSymbols; 17180261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 17216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro protected RFC4519Style() 17316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 17480261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro defaultSymbols = copyHashTable(DefaultSymbols); 17580261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro defaultLookUp = copyHashTable(DefaultLookUp); 17616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 17716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 17853b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro protected ASN1Encodable encodeStringValue(ASN1ObjectIdentifier oid, 17953b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro String value) { 18053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro if (oid.equals(dc)) 18116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 18253b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro return new DERIA5String(value); 18316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 18453b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro else if (oid.equals(c) || oid.equals(serialNumber) || oid.equals(dnQualifier) 18553b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro || oid.equals(telephoneNumber)) 18616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 18753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro return new DERPrintableString(value); 18816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 18916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 19053b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro return super.encodeStringValue(oid, value); 19116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 19216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 19316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public String oidToDisplayName(ASN1ObjectIdentifier oid) 19416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 19516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return (String)DefaultSymbols.get(oid); 19616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 19716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 19816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public String[] oidToAttrNames(ASN1ObjectIdentifier oid) 19916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 20080261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro return IETFUtils.findAttrNamesForOID(oid, defaultLookUp); 20116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 20216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 20316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public ASN1ObjectIdentifier attrNameToOID(String attrName) 20416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 20580261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro return IETFUtils.decodeAttrName(attrName, defaultLookUp); 20616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 20716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 20816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro // parse backwards 20916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public RDN[] fromString(String dirName) 21016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 21116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro RDN[] tmp = IETFUtils.rDNsFromString(dirName, this); 21216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro RDN[] res = new RDN[tmp.length]; 21316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 21416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro for (int i = 0; i != tmp.length; i++) 21516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 21616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro res[res.length - i - 1] = tmp[i]; 21716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 21816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 21916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return res; 22016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 22116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 22216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro // convert in reverse 22316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public String toString(X500Name name) 22416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 22516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro StringBuffer buf = new StringBuffer(); 22616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro boolean first = true; 22716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 22816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro RDN[] rdns = name.getRDNs(); 22916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 23016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro for (int i = rdns.length - 1; i >= 0; i--) 23116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 23216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro if (first) 23316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 23416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro first = false; 23516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 23616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro else 23716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 23816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro buf.append(','); 23916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 24016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 24180261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro IETFUtils.appendRDN(buf, rdns[i], defaultSymbols); 24216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 24316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 24416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return buf.toString(); 24516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 24680261dd2d1824bb3862e90e77a5412d56ad88b1fSergio Giro 24753b61f9fe9d58034fcc7021137e92460f91b70ceSergio Giro 24816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro} 249