📄 x500distinguishedname.java
字号:
public String getOrganization() { return organization; } public String getStreet() { return street; } public String getState() { return state; } public String getTitle() { return title; } public String getDNQualifier() { return dnQualifier; } public String getSurname() { return surname; } public String getGivenName() { return givenName; } public String getInitials() { return initials; } public String getGeneration() { return generation; } public String getEmail() { return email; } public String getDomain() { return domainComponent; } public String getUserID() { return userid; } // Own methods. // ------------------------------------------------------------------------ private static String unquote(String str) { if (str.startsWith("\"") && str.endsWith("\"")) str = str.substring(1, str.length()-1); // XXX needs regex //return str.replaceAll("\\([,+\"\\<>;])", "\1"); return str; } private void parseDN(String name, boolean rfc2253) { if (name.length() == 0) throw new IllegalArgumentException("zero-length distinguished name"); StreamTokenizer parse = new StreamTokenizer(new StringReader(name)); parse.resetSyntax(); parse.wordChars('\000', '~'); parse.ordinaryChar('#'); parse.ordinaryChar(','); parse.ordinaryChar('='); parse.ordinaryChar('<'); parse.ordinaryChar('>'); parse.ordinaryChar(';'); parse.ordinaryChar('\\'); parse.quoteChar('"'); String attrib = null; String value = null; int token, lastToken = ','; while (true) { try { token = parse.nextToken(); } catch (IOException ioe) { throw new IllegalArgumentException(); } switch (token) { case StreamTokenizer.TT_WORD: if (lastToken == ',' || lastToken == '+' || (!rfc2253 && lastToken == ';')) attrib = parse.sval.trim(); else if (lastToken == '=') value = unquote(parse.sval.trim()); else throw new IllegalArgumentException(); break; case '"': if (lastToken == '=') value = parse.sval; else throw new IllegalArgumentException(); break; case ';': if (rfc2253) throw new IllegalArgumentException(); case ',': case '+': if (attrib == null || value == null) throw new IllegalArgumentException("extraneous separator"); try { setAttribute(new OID(attrib), value); } catch (Exception x) { setAttribute(attrib, value); } attrib = null; value = null; break; case '=': break; case StreamTokenizer.TT_EOF: return; default: throw new IllegalArgumentException("unknown token " + (char)token + " (" + token + ")"); } lastToken = token; } } private void parseDER(InputStream in) throws IOException { DERReader der = new DERReader(in); DERValue name = der.read(); if (!name.isConstructed()) throw new ASN1ParsingException("badly formed Name"); int len = 0; while (len < name.getLength()) { DERValue rdn = der.read(); if (rdn.getValue() != DER.CONSTRUCTED_VALUE) throw new ASN1ParsingException("badly formed RDNSequence"); int len2 = 0; while (len2 < rdn.getLength()) { DERValue atav = der.read(); if (atav.getValue() != DER.CONSTRUCTED_VALUE) throw new ASN1ParsingException( "badly formed AttributeTypeAndValue"); OID atype = (OID) der.read().getValue(); String aval = (String) der.read().getValue(); setAttribute(atype, aval); len2 += 1 + atav.getLength() + DERWriter.definiteEncodingSize(atav.getLength()); } len += len2 + 1 + DERWriter.definiteEncodingSize(name.getLength()); } } private byte[] encodeDER() { try { LinkedList name = new LinkedList(); if (commonName != null) { HashSet rdn = new HashSet(); LinkedList atav = new LinkedList(); atav.add(new DERValue(DER.OBJECT_IDENTIFIER, CN)); atav.add(new DERValue(DER.PRINTABLE_STRING, commonName)); rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav)); name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn)); } if (country != null) { HashSet rdn = new HashSet(); LinkedList atav = new LinkedList(); atav.add(new DERValue(DER.OBJECT_IDENTIFIER, C)); atav.add(new DERValue(DER.PRINTABLE_STRING, country)); rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav)); name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn)); } if (locality != null) { HashSet rdn = new HashSet(); LinkedList atav = new LinkedList(); atav.add(new DERValue(DER.OBJECT_IDENTIFIER, L)); atav.add(new DERValue(DER.PRINTABLE_STRING, locality)); rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav)); name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn)); } if (orgUnit != null) { HashSet rdn = new HashSet(); LinkedList atav = new LinkedList(); atav.add(new DERValue(DER.OBJECT_IDENTIFIER, OU)); atav.add(new DERValue(DER.PRINTABLE_STRING, orgUnit)); rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav)); name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn)); } if (organization != null) { HashSet rdn = new HashSet(); LinkedList atav = new LinkedList(); atav.add(new DERValue(DER.OBJECT_IDENTIFIER, O)); atav.add(new DERValue(DER.PRINTABLE_STRING, organization)); rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav)); name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn)); } if (street != null) { HashSet rdn = new HashSet(); LinkedList atav = new LinkedList(); atav.add(new DERValue(DER.OBJECT_IDENTIFIER, STREET)); atav.add(new DERValue(DER.PRINTABLE_STRING, street)); rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav)); name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn)); } if (state != null) { HashSet rdn = new HashSet(); LinkedList atav = new LinkedList(); atav.add(new DERValue(DER.OBJECT_IDENTIFIER, ST)); atav.add(new DERValue(DER.PRINTABLE_STRING, state)); rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav)); name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn)); } if (title != null) { HashSet rdn = new HashSet(); LinkedList atav = new LinkedList(); atav.add(new DERValue(DER.OBJECT_IDENTIFIER, T)); atav.add(new DERValue(DER.PRINTABLE_STRING, title)); rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav)); name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn)); } if (dnQualifier != null) { HashSet rdn = new HashSet(); LinkedList atav = new LinkedList(); atav.add(new DERValue(DER.OBJECT_IDENTIFIER, DNQ)); atav.add(new DERValue(DER.PRINTABLE_STRING, dnQualifier)); rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav)); name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn)); } if (surname != null) { HashSet rdn = new HashSet(); LinkedList atav = new LinkedList(); atav.add(new DERValue(DER.OBJECT_IDENTIFIER, NAME)); atav.add(new DERValue(DER.PRINTABLE_STRING, surname)); rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav)); name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn)); } if (givenName != null) { HashSet rdn = new HashSet(); LinkedList atav = new LinkedList(); atav.add(new DERValue(DER.OBJECT_IDENTIFIER, GIVENNAME)); atav.add(new DERValue(DER.PRINTABLE_STRING, givenName)); rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav)); name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn)); } if (initials != null) { HashSet rdn = new HashSet(); LinkedList atav = new LinkedList(); atav.add(new DERValue(DER.OBJECT_IDENTIFIER, INITIALS)); atav.add(new DERValue(DER.PRINTABLE_STRING, initials)); rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav)); name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn)); } if (generation != null) { HashSet rdn = new HashSet(); LinkedList atav = new LinkedList(); atav.add(new DERValue(DER.OBJECT_IDENTIFIER, GENERATION)); atav.add(new DERValue(DER.PRINTABLE_STRING, generation)); rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav)); name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn)); } if (email != null) { HashSet rdn = new HashSet(); LinkedList atav = new LinkedList(); atav.add(new DERValue(DER.OBJECT_IDENTIFIER, EMAIL)); atav.add(new DERValue(DER.PRINTABLE_STRING, email)); rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav)); name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn)); } if (domainComponent != null) { HashSet rdn = new HashSet(); LinkedList atav = new LinkedList(); atav.add(new DERValue(DER.OBJECT_IDENTIFIER, DC)); atav.add(new DERValue(DER.PRINTABLE_STRING, domainComponent)); rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav)); name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn)); } if (userid != null) { HashSet rdn = new HashSet(); LinkedList atav = new LinkedList(); atav.add(new DERValue(DER.OBJECT_IDENTIFIER, UID)); atav.add(new DERValue(DER.PRINTABLE_STRING, userid)); rdn.add(new DERValue(DER.CONSTRUCTED | DER.SEQUENCE, atav)); name.add(new DERValue(DER.CONSTRUCTED | DER.SET, rdn)); } ByteArrayOutputStream out = new ByteArrayOutputStream(); DERWriter.write(out, new DERValue(DER.CONSTRUCTED|DER.SEQUENCE, name)); return out.toByteArray(); } catch (IOException ioe) { throw new Error(ioe); } } private void setAttribute(String atype, String aval) { if (atype.equals("CN")) commonName = aval; else if (atype.equals("C")) country = aval; else if (atype.equals("L")) locality = aval; else if (atype.equals("ST")) state = aval; else if (atype.equals("STREET")) street = aval; else if (atype.equals("O")) organization = aval; else if (atype.equals("OU")) orgUnit = aval; else if (atype.equals("T")) title = aval; else if (atype.equals("DNQ") || atype.equals("DNQUALIFIER")) dnQualifier = aval; else if (atype.equals("SURNAME")) surname = aval; else if (atype.equals("GIVENNAME")) givenName = aval; else if (atype.equals("INITIALS")) initials = aval; else if (atype.equals("GENERATION")) generation = aval; else if (atype.equals("EMAILADDRESS")) email = aval; else if (atype.equals("DC")) domainComponent = aval; else if (atype.equals("UID")) userid = aval; else throw new IllegalArgumentException("unknown attribute " + atype); } private void setAttribute(OID atype, String aval) { if (atype.equals(CN)) commonName = aval; else if (atype.equals(C)) country = aval; else if (atype.equals(L)) locality = aval; else if (atype.equals(ST)) state = aval; else if (atype.equals(STREET)) street = aval; else if (atype.equals(O)) organization = aval; else if (atype.equals(OU)) orgUnit = aval; else if (atype.equals(T)) title = aval; else if (atype.equals(DNQ)) dnQualifier = aval; else if (atype.equals(NAME)) surname = aval; else if (atype.equals(GIVENNAME)) givenName = aval; else if (atype.equals(INITIALS)) initials = aval; else if (atype.equals(GENERATION)) generation = aval; else if (atype.equals(EMAIL)) email = aval; else if (atype.equals(DC)) domainComponent = aval; else if (atype.equals(UID)) userid = aval; else throw new IllegalArgumentException("unknown attribute " + atype); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -