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

📄 x509name.java

📁 kmlnjlkj nlkjlkjkljl okopokipoipo oipipipo i
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
                v.add(converter.getConvertedValue(oid, str));                 if (lstOid == null                     || ((Boolean)this.added.elementAt(i)).booleanValue())                {                    sVec.add(new DERSequence(v));                }                else                {                    vec.add(new DERSet(sVec));                    sVec = new ASN1EncodableVector();                                        sVec.add(new DERSequence(v));                }                                lstOid = oid;            }                        vec.add(new DERSet(sVec));                        seq = new DERSequence(vec);        }        return seq;    }    /**     * @param inOrder if true the order of both X509 names must be the same,     * as well as the values associated with each element.     */    public boolean equals(Object obj, boolean inOrder)    {        if (!inOrder)        {            return this.equals(obj);        }        if (obj == this)        {            return true;        }        if (!(obj instanceof X509Name || obj instanceof ASN1Sequence))        {            return false;        }        DERObject derO = ((DEREncodable)obj).getDERObject();        if (this.getDERObject().equals(derO))        {            return true;        }        X509Name other;        try        {            other = X509Name.getInstance(obj);        }        catch (IllegalArgumentException e)        {            return false;        }        int      orderingSize = ordering.size();        if (orderingSize != other.ordering.size())        {            return false;        }        for (int i = 0; i < orderingSize; i++)        {            DERObjectIdentifier  oid = (DERObjectIdentifier)ordering.elementAt(i);            DERObjectIdentifier  oOid = (DERObjectIdentifier)other.ordering.elementAt(i);            if (oid.equals(oOid))            {                String value = (String)values.elementAt(i);                String oValue = (String)other.values.elementAt(i);                if (!equivalentStrings(value, oValue))                {                    return false;                }            }            else            {                return false;            }        }        return true;    }    /**     * test for equality - note: case is ignored.     */    public boolean equals(Object obj)    {        if (obj == this)        {            return true;        }        if (!(obj instanceof X509Name || obj instanceof ASN1Sequence))        {            return false;        }                DERObject derO = ((DEREncodable)obj).getDERObject();                if (this.getDERObject().equals(derO))        {            return true;        }        X509Name other;        try        {            other = X509Name.getInstance(obj);        }        catch (IllegalArgumentException e)        {             return false;        }        int      orderingSize = ordering.size();        if (orderingSize != other.ordering.size())        {            return false;        }                boolean[] indexes = new boolean[orderingSize];        int       start, end, delta;        if (ordering.elementAt(0).equals(other.ordering.elementAt(0)))   // guess forward        {            start = 0;            end = orderingSize;            delta = 1;        }        else  // guess reversed - most common problem        {            start = orderingSize - 1;            end = -1;            delta = -1;        }        for (int i = start; i != end; i += delta)        {            boolean              found = false;            DERObjectIdentifier  oid = (DERObjectIdentifier)ordering.elementAt(i);            String               value = (String)values.elementAt(i);            for (int j = 0; j < orderingSize; j++)            {                if (indexes[j])                {                    continue;                }                                DERObjectIdentifier oOid = (DERObjectIdentifier)other.ordering.elementAt(j);                if (oid.equals(oOid))                {                    String oValue = (String)other.values.elementAt(j);                    if (equivalentStrings(value, oValue))                    {                        indexes[j] = true;                        found      = true;                        break;                    }                }            }            if (!found)            {                return false;            }        }                return true;    }    private boolean equivalentStrings(String s1, String s2)    {        String value = canonicalize(s1);        String oValue = canonicalize(s2);                if (!value.equals(oValue))        {            value = stripInternalSpaces(value);            oValue = stripInternalSpaces(oValue);            if (!value.equals(oValue))            {                return false;            }        }        return true;    }    private String canonicalize(String s)    {        String value = Strings.toLowerCase(s.trim());                if (value.length() > 0 && value.charAt(0) == '#')        {            DERObject obj = decodeObject(value);            if (obj instanceof DERString)            {                value = Strings.toLowerCase(((DERString)obj).getString().trim());            }        }        return value;    }    private ASN1Object decodeObject(String oValue)    {        try        {            return ASN1Object.fromByteArray(Hex.decode(oValue.substring(1)));        }        catch (IOException e)        {            throw new IllegalStateException("unknown encoding in name: " + e);        }    }    private String stripInternalSpaces(        String str)    {        StringBuffer res = new StringBuffer();        if (str.length() != 0)        {            char    c1 = str.charAt(0);            res.append(c1);            for (int k = 1; k < str.length(); k++)            {                char    c2 = str.charAt(k);                if (!(c1 == ' ' && c2 == ' '))                {                    res.append(c2);                }                c1 = c2;            }        }        return res.toString();    }    private void appendValue(        StringBuffer        buf,        Hashtable           oidSymbols,        DERObjectIdentifier oid,        String              value)    {        String  sym = (String)oidSymbols.get(oid);        if (sym != null)        {            buf.append(sym);        }        else        {            buf.append(oid.getId());        }        buf.append('=');        int     index = buf.length();                buf.append(value);        int     end = buf.length();        if (value.length() >= 2 && value.charAt(0) == '\\' && value.charAt(1) == '#')        {            index += 2;           }        while (index != end)        {            if ((buf.charAt(index) == ',')               || (buf.charAt(index) == '"')               || (buf.charAt(index) == '\\')               || (buf.charAt(index) == '+')               || (buf.charAt(index) == '=')               || (buf.charAt(index) == '<')               || (buf.charAt(index) == '>')               || (buf.charAt(index) == ';'))            {                buf.insert(index, "\\");                index++;                end++;            }            index++;        }    }    /**     * convert the structure to a string - if reverse is true the     * oids and values are listed out starting with the last element     * in the sequence (ala RFC 2253), otherwise the string will begin     * with the first element of the structure. If no string definition     * for the oid is found in oidSymbols the string value of the oid is     * added. Two standard symbol tables are provided DefaultSymbols, and     * RFC2253Symbols as part of this class.     *     * @param reverse if true start at the end of the sequence and work back.     * @param oidSymbols look up table strings for oids.     */    public String toString(        boolean     reverse,        Hashtable   oidSymbols)    {        StringBuffer            buf = new StringBuffer();        Vector                  components = new Vector();        boolean                 first = true;        StringBuffer ava = null;        for (int i = 0; i < ordering.size(); i++)        {            if (((Boolean)added.elementAt(i)).booleanValue())            {                ava.append('+');                appendValue(ava, oidSymbols,                    (DERObjectIdentifier)ordering.elementAt(i),                    (String)values.elementAt(i));            }            else            {                ava = new StringBuffer();                appendValue(ava, oidSymbols,                    (DERObjectIdentifier)ordering.elementAt(i),                    (String)values.elementAt(i));                components.addElement(ava);            }        }        if (reverse)        {            for (int i = components.size() - 1; i >= 0; i--)            {                if (first)                {                    first = false;                }                else                {                    buf.append(',');                }                buf.append(components.elementAt(i).toString());            }        }        else        {            for (int i = 0; i < components.size(); i++)            {                if (first)                {                    first = false;                }                else                {                    buf.append(',');                }                buf.append(components.elementAt(i).toString());            }        }        return buf.toString();    }    private String bytesToString(        byte[] data)    {        char[]  cs = new char[data.length];        for (int i = 0; i != cs.length; i++)        {            cs[i] = (char)(data[i] & 0xff);        }        return new String(cs);    }        public String toString()    {        return toString(DefaultReverse, DefaultSymbols);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -