⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 x500principal.java

📁 gcc的组建
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    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 + -