📄 x500principal.java
字号:
return (String) ((Map) components.get (rdn)).get (oid); } private void encodeDer() { ArrayList name = new ArrayList(components.size()); for (Iterator it = components.iterator(); it.hasNext(); ) { Map m = (Map) it.next(); if (m.isEmpty()) continue; Set rdn = new HashSet(); for (Iterator it2 = m.entrySet().iterator(); it2.hasNext(); ) { Map.Entry e = (Map.Entry) it2.next(); ArrayList atav = new ArrayList(2); atav.add(new DERValue(DER.OBJECT_IDENTIFIER, e.getKey())); atav.add(new DERValue(DER.UTF8_STRING, e.getValue())); rdn.add(new DERValue(DER.SEQUENCE|DER.CONSTRUCTED, atav)); } name.add(new DERValue(DER.SET|DER.CONSTRUCTED, rdn)); } DERValue val = new DERValue(DER.SEQUENCE|DER.CONSTRUCTED, name); encoded = val.getEncoded(); } private int sep; private void parseString(String str) throws IOException { Reader in = new StringReader(str); while (true) { String key = readAttributeType(in); if (key == null) break; String value = readAttributeValue(in); putComponent(key, value); if (sep == ',') newRelativeDistinguishedName(); if (sep == -1) break; } } private String readAttributeType(Reader in) throws IOException { StringBuffer buf = new StringBuffer(); int ch; while ((ch = in.read()) != '=') { if (ch == -1) { if (buf.length() > 0) throw new EOFException("partial name read: " + buf); return null; } if (ch > 127) throw new IOException("Invalid char: " + (char) ch); if (Character.isLetterOrDigit((char) ch) || ch == '-' || ch == '.') buf.append((char) ch); else throw new IOException("Invalid char: " + (char) ch); } return buf.toString(); } private String readAttributeValue(Reader in) throws IOException { StringBuffer buf = new StringBuffer(); int ch = in.read(); if (ch == '#') { while (true) { ch = in.read(); if (('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F') || Character.isDigit((char) ch)) buf.append((char) ch); else if (ch == '+' || ch == ',') { sep = ch; String hex = buf.toString(); return new String(toByteArray(hex)); } else throw new IOException("illegal character: " + (char) ch); } } else if (ch == '"') { while (true) { ch = in.read(); if (ch == '"') break; else if (ch == '\\') { ch = in.read(); if (ch == -1) throw new EOFException(); if (('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F') || Character.isDigit((char) ch)) { int i = Character.digit((char) ch, 16) << 4; ch = in.read(); if (!(('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F') || Character.isDigit((char) ch))) throw new IOException("illegal hex char"); i |= Character.digit((char) ch, 16); buf.append((char) i); } else buf.append((char) ch); } else buf.append((char) ch); } sep = in.read(); if (sep != '+' || sep != ',') throw new IOException("illegal character: " + (char) ch); return buf.toString(); } else { while (true) { switch (ch) { case '+': case ',': sep = ch; return buf.toString(); case '\\': ch = in.read(); if (ch == -1) throw new EOFException(); if (('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F') || Character.isDigit((char) ch)) { int i = Character.digit((char) ch, 16) << 4; ch = in.read(); if (!(('a' <= ch && ch <= 'f') || ('A' <= ch && ch <= 'F') || Character.isDigit((char) ch))) throw new IOException("illegal hex char"); i |= Character.digit((char) ch, 16); buf.append((char) i); } else buf.append((char) ch); break; case '=': case '<': case '>': case '#': case ';': throw new IOException("illegal character: " + (char) ch); case -1: sep = -1; return buf.toString (); default: buf.append((char) ch); } ch = in.read (); } } } private void parseDer (InputStream encoded) throws IOException { DERReader der = new DERReader (encoded); DERValue name = der.read(); if (!name.isConstructed()) throw new IOException ("malformed Name"); this.encoded = name.getEncoded(); int len = 0; while (len < name.getLength()) { DERValue rdn = der.read(); if (!rdn.isConstructed()) throw new IOException ("badly formed RDNSequence"); int len2 = 0; while (len2 < rdn.getLength()) { DERValue atav = der.read(); if (!atav.isConstructed()) throw new IOException ("badly formed AttributeTypeAndValue"); DERValue val = der.read(); if (val.getTag() != DER.OBJECT_IDENTIFIER) throw new IOException ("badly formed AttributeTypeAndValue"); OID oid = (OID) val.getValue(); val = der.read(); if (!(val.getValue() instanceof String)) throw new IOException ("badly formed AttributeTypeAndValue"); String value = (String) val.getValue(); putComponent(oid, value); len2 += atav.getEncodedLength(); } len += rdn.getEncodedLength(); if (len < name.getLength()) newRelativeDistinguishedName(); } } private void newRelativeDistinguishedName() { currentRdn = new LinkedHashMap(); components.add(currentRdn); } private void putComponent(OID oid, String value) { currentRdn.put(oid, value); } private void putComponent(String name, String value) { name = name.trim().toLowerCase(); if (name.equals("cn")) putComponent(CN, value); else if (name.equals("c")) putComponent(C, value); else if (name.equals("l")) putComponent(L, value); else if (name.equals("street")) putComponent(STREET, value); else if (name.equals("st")) putComponent(ST, value); else if (name.equals ("o")) putComponent (O, value); else if (name.equals ("ou")) putComponent (OU, value); else if (name.equals("dc")) putComponent(DC, value); else if (name.equals("uid")) putComponent(UID, value); else putComponent(new OID(name), value); } private static String compressWS(String str) { StringBuffer buf = new StringBuffer(); char lastChar = 0; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (Character.isWhitespace(c)) { if (!Character.isWhitespace(lastChar)) buf.append(' '); } else buf.append(c); lastChar = c; } return buf.toString().trim(); } private static byte[] toByteArray (String str) { int limit = str.length(); byte[] result = new byte[((limit + 1) / 2)]; int i = 0, j = 0; if ((limit % 2) == 1) { result[j++] = (byte) Character.digit (str.charAt(i++), 16); } while (i < limit) { result[j ] = (byte) (Character.digit (str.charAt(i++), 16) << 4); result[j++] |= (byte) Character.digit (str.charAt(i++), 16); } return result; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -