CryptoMessage v1.3.2版本的 MD5 值为:66c611ce56a11450659dc23697562928

以下内容为反编译后的 X509Name.java 源代码,内容仅作参考


package kz.gamma.asn1.x509;

import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
import kz.gamma.asn1.ASN1Encodable;
import kz.gamma.asn1.ASN1EncodableVector;
import kz.gamma.asn1.ASN1Sequence;
import kz.gamma.asn1.ASN1Set;
import kz.gamma.asn1.DEREncodable;
import kz.gamma.asn1.DERObject;
import kz.gamma.asn1.DERObjectIdentifier;
import kz.gamma.asn1.DERSequence;
import kz.gamma.asn1.DERSet;
import kz.gamma.asn1.DERString;
import kz.gamma.asn1.pkcs.PKCSObjectIdentifiers;
import kz.gamma.util.Strings;
import kz.gamma.util.encoders.Hex;

public class X509Name extends ASN1Encodable {
    public static final DERObjectIdentifier BUSINESS_CATEGORY;
    public static final DERObjectIdentifier C;
    public static final DERObjectIdentifier CN;
    public static final DERObjectIdentifier COUNTRY_OF_CITIZENSHIP;
    public static final DERObjectIdentifier COUNTRY_OF_RESIDENCE;
    public static final DERObjectIdentifier DATE_OF_BIRTH;
    public static final DERObjectIdentifier DC;
    public static final DERObjectIdentifier DN_QUALIFIER;
    public static Hashtable DefaultLookUp;
    public static boolean DefaultReverse;
    public static Hashtable DefaultSymbols;
    public static final DERObjectIdentifier E;
    public static final DERObjectIdentifier EmailAddress;
    private static final Boolean FALSE;
    public static final DERObjectIdentifier GENDER;
    public static final DERObjectIdentifier GENERATION;
    public static final DERObjectIdentifier GIVENNAME;
    public static final DERObjectIdentifier INITIALS;
    public static final DERObjectIdentifier L;
    public static final DERObjectIdentifier NAME_AT_BIRTH;
    public static final DERObjectIdentifier O;
    public static Hashtable OIDLookUp;
    public static final DERObjectIdentifier OU;
    public static final DERObjectIdentifier PLACE_OF_BIRTH;
    public static final DERObjectIdentifier POSTAL_ADDRESS;
    public static final DERObjectIdentifier POSTAL_CODE;
    public static final DERObjectIdentifier PSEUDONYM;
    public static Hashtable RFC1779Symbols;
    public static Hashtable RFC2253Symbols;
    public static final DERObjectIdentifier SERIALNUMBER;
    public static final DERObjectIdentifier SN;
    public static final DERObjectIdentifier ST;
    public static final DERObjectIdentifier STREET;
    public static final DERObjectIdentifier SURNAME;
    public static Hashtable SymbolLookUp;
    public static final DERObjectIdentifier T;
    private static final Boolean TRUE;
    public static final DERObjectIdentifier UID;
    public static final DERObjectIdentifier UNIQUE_IDENTIFIER;
    public static final DERObjectIdentifier UnstructuredAddress;
    public static final DERObjectIdentifier UnstructuredName;
    private ASN1Sequence seq;
    private Vector ordering = new Vector();
    private Vector values = new Vector();
    private Vector added = new Vector();

    static {
        DERObjectIdentifier dERObjectIdentifier = new DERObjectIdentifier("2.5.4.6");
        C = dERObjectIdentifier;
        DERObjectIdentifier dERObjectIdentifier2 = new DERObjectIdentifier("2.5.4.10");
        O = dERObjectIdentifier2;
        DERObjectIdentifier dERObjectIdentifier3 = new DERObjectIdentifier("2.5.4.11");
        OU = dERObjectIdentifier3;
        DERObjectIdentifier dERObjectIdentifier4 = new DERObjectIdentifier("2.5.4.12");
        T = dERObjectIdentifier4;
        DERObjectIdentifier dERObjectIdentifier5 = new DERObjectIdentifier("2.5.4.3");
        CN = dERObjectIdentifier5;
        DERObjectIdentifier dERObjectIdentifier6 = new DERObjectIdentifier("2.5.4.5");
        SN = dERObjectIdentifier6;
        DERObjectIdentifier dERObjectIdentifier7 = new DERObjectIdentifier("2.5.4.9");
        STREET = dERObjectIdentifier7;
        SERIALNUMBER = dERObjectIdentifier6;
        DERObjectIdentifier dERObjectIdentifier8 = new DERObjectIdentifier("2.5.4.7");
        L = dERObjectIdentifier8;
        DERObjectIdentifier dERObjectIdentifier9 = new DERObjectIdentifier("2.5.4.8");
        ST = dERObjectIdentifier9;
        DERObjectIdentifier dERObjectIdentifier10 = new DERObjectIdentifier("2.5.4.4");
        SURNAME = dERObjectIdentifier10;
        DERObjectIdentifier dERObjectIdentifier11 = new DERObjectIdentifier("2.5.4.42");
        GIVENNAME = dERObjectIdentifier11;
        DERObjectIdentifier dERObjectIdentifier12 = new DERObjectIdentifier("2.5.4.43");
        INITIALS = dERObjectIdentifier12;
        DERObjectIdentifier dERObjectIdentifier13 = new DERObjectIdentifier("2.5.4.44");
        GENERATION = dERObjectIdentifier13;
        DERObjectIdentifier dERObjectIdentifier14 = new DERObjectIdentifier("2.5.4.45");
        UNIQUE_IDENTIFIER = dERObjectIdentifier14;
        DERObjectIdentifier dERObjectIdentifier15 = new DERObjectIdentifier("2.5.4.15");
        BUSINESS_CATEGORY = dERObjectIdentifier15;
        DERObjectIdentifier dERObjectIdentifier16 = new DERObjectIdentifier("2.5.4.17");
        POSTAL_CODE = dERObjectIdentifier16;
        DERObjectIdentifier dERObjectIdentifier17 = new DERObjectIdentifier("2.5.4.46");
        DN_QUALIFIER = dERObjectIdentifier17;
        DERObjectIdentifier dERObjectIdentifier18 = new DERObjectIdentifier("2.5.4.65");
        PSEUDONYM = dERObjectIdentifier18;
        DERObjectIdentifier dERObjectIdentifier19 = new DERObjectIdentifier("1.3.6.1.5.5.7.9.1");
        DATE_OF_BIRTH = dERObjectIdentifier19;
        DERObjectIdentifier dERObjectIdentifier20 = new DERObjectIdentifier("1.3.6.1.5.5.7.9.2");
        PLACE_OF_BIRTH = dERObjectIdentifier20;
        DERObjectIdentifier dERObjectIdentifier21 = new DERObjectIdentifier("1.3.6.1.5.5.7.9.3");
        GENDER = dERObjectIdentifier21;
        DERObjectIdentifier dERObjectIdentifier22 = new DERObjectIdentifier("1.3.6.1.5.5.7.9.4");
        COUNTRY_OF_CITIZENSHIP = dERObjectIdentifier22;
        DERObjectIdentifier dERObjectIdentifier23 = new DERObjectIdentifier("1.3.6.1.5.5.7.9.5");
        COUNTRY_OF_RESIDENCE = dERObjectIdentifier23;
        DERObjectIdentifier dERObjectIdentifier24 = new DERObjectIdentifier("1.3.36.8.3.14");
        NAME_AT_BIRTH = dERObjectIdentifier24;
        DERObjectIdentifier dERObjectIdentifier25 = new DERObjectIdentifier("2.5.4.16");
        POSTAL_ADDRESS = dERObjectIdentifier25;
        DERObjectIdentifier dERObjectIdentifier26 = PKCSObjectIdentifiers.pkcs_9_at_emailAddress;
        EmailAddress = dERObjectIdentifier26;
        DERObjectIdentifier dERObjectIdentifier27 = PKCSObjectIdentifiers.pkcs_9_at_unstructuredName;
        UnstructuredName = dERObjectIdentifier27;
        DERObjectIdentifier dERObjectIdentifier28 = PKCSObjectIdentifiers.pkcs_9_at_unstructuredAddress;
        UnstructuredAddress = dERObjectIdentifier28;
        E = dERObjectIdentifier26;
        DERObjectIdentifier dERObjectIdentifier29 = new DERObjectIdentifier("0.9.2342.19200300.100.1.25");
        DC = dERObjectIdentifier29;
        DERObjectIdentifier dERObjectIdentifier30 = new DERObjectIdentifier("0.9.2342.19200300.100.1.1");
        UID = dERObjectIdentifier30;
        Hashtable hashtable = new Hashtable();
        OIDLookUp = hashtable;
        DefaultReverse = false;
        DefaultSymbols = hashtable;
        RFC2253Symbols = new Hashtable();
        RFC1779Symbols = new Hashtable();
        Hashtable hashtable2 = new Hashtable();
        SymbolLookUp = hashtable2;
        DefaultLookUp = hashtable2;
        TRUE = new Boolean(true);
        FALSE = new Boolean(false);
        DefaultSymbols.put(dERObjectIdentifier, "C");
        DefaultSymbols.put(dERObjectIdentifier2, "O");
        DefaultSymbols.put(dERObjectIdentifier4, "T");
        DefaultSymbols.put(dERObjectIdentifier3, "OU");
        DefaultSymbols.put(dERObjectIdentifier5, "CN");
        DefaultSymbols.put(dERObjectIdentifier8, "L");
        DefaultSymbols.put(dERObjectIdentifier9, "ST");
        DefaultSymbols.put(dERObjectIdentifier6, "SERIALNUMBER");
        DefaultSymbols.put(dERObjectIdentifier26, "E");
        DefaultSymbols.put(dERObjectIdentifier29, "DC");
        DefaultSymbols.put(dERObjectIdentifier30, "UID");
        DefaultSymbols.put(dERObjectIdentifier7, "STREET");
        DefaultSymbols.put(dERObjectIdentifier10, "SURNAME");
        DefaultSymbols.put(dERObjectIdentifier11, "GIVENNAME");
        DefaultSymbols.put(dERObjectIdentifier12, "INITIALS");
        DefaultSymbols.put(dERObjectIdentifier13, "GENERATION");
        DefaultSymbols.put(dERObjectIdentifier28, "unstructuredAddress");
        DefaultSymbols.put(dERObjectIdentifier27, "unstructuredName");
        DefaultSymbols.put(dERObjectIdentifier14, "UniqueIdentifier");
        DefaultSymbols.put(dERObjectIdentifier17, "DN");
        DefaultSymbols.put(dERObjectIdentifier18, "Pseudonym");
        DefaultSymbols.put(dERObjectIdentifier25, "PostalAddress");
        DefaultSymbols.put(dERObjectIdentifier24, "NameAtBirth");
        DefaultSymbols.put(dERObjectIdentifier22, "CountryOfCitizenship");
        DefaultSymbols.put(dERObjectIdentifier23, "CountryOfResidence");
        DefaultSymbols.put(dERObjectIdentifier21, "Gender");
        DefaultSymbols.put(dERObjectIdentifier20, "PlaceOfBirth");
        DefaultSymbols.put(dERObjectIdentifier19, "DateOfBirth");
        DefaultSymbols.put(dERObjectIdentifier16, "PostalCode");
        DefaultSymbols.put(dERObjectIdentifier15, "BusinessCategory");
        RFC2253Symbols.put(dERObjectIdentifier, "C");
        RFC2253Symbols.put(dERObjectIdentifier2, "O");
        RFC2253Symbols.put(dERObjectIdentifier3, "OU");
        RFC2253Symbols.put(dERObjectIdentifier5, "CN");
        RFC2253Symbols.put(dERObjectIdentifier8, "L");
        RFC2253Symbols.put(dERObjectIdentifier9, "ST");
        RFC2253Symbols.put(dERObjectIdentifier7, "STREET");
        RFC2253Symbols.put(dERObjectIdentifier29, "DC");
        RFC2253Symbols.put(dERObjectIdentifier30, "UID");
        RFC1779Symbols.put(dERObjectIdentifier, "C");
        RFC1779Symbols.put(dERObjectIdentifier2, "O");
        RFC1779Symbols.put(dERObjectIdentifier3, "OU");
        RFC1779Symbols.put(dERObjectIdentifier5, "CN");
        RFC1779Symbols.put(dERObjectIdentifier8, "L");
        RFC1779Symbols.put(dERObjectIdentifier9, "ST");
        RFC1779Symbols.put(dERObjectIdentifier7, "STREET");
        DefaultLookUp.put("c", dERObjectIdentifier);
        DefaultLookUp.put("o", dERObjectIdentifier2);
        DefaultLookUp.put("t", dERObjectIdentifier4);
        DefaultLookUp.put("ou", dERObjectIdentifier3);
        DefaultLookUp.put("cn", dERObjectIdentifier5);
        DefaultLookUp.put("l", dERObjectIdentifier8);
        DefaultLookUp.put("st", dERObjectIdentifier9);
        DefaultLookUp.put("sn", dERObjectIdentifier6);
        DefaultLookUp.put("serialnumber", dERObjectIdentifier6);
        DefaultLookUp.put("street", dERObjectIdentifier7);
        DefaultLookUp.put("emailaddress", dERObjectIdentifier26);
        DefaultLookUp.put("dc", dERObjectIdentifier29);
        DefaultLookUp.put("e", dERObjectIdentifier26);
        DefaultLookUp.put("uid", dERObjectIdentifier30);
        DefaultLookUp.put("surname", dERObjectIdentifier10);
        DefaultLookUp.put("givenname", dERObjectIdentifier11);
        DefaultLookUp.put("initials", dERObjectIdentifier12);
        DefaultLookUp.put("generation", dERObjectIdentifier13);
        DefaultLookUp.put("unstructuredaddress", dERObjectIdentifier28);
        DefaultLookUp.put("unstructuredname", dERObjectIdentifier27);
        DefaultLookUp.put("uniqueidentifier", dERObjectIdentifier14);
        DefaultLookUp.put("dn", dERObjectIdentifier17);
        DefaultLookUp.put("pseudonym", dERObjectIdentifier18);
        DefaultLookUp.put("postaladdress", dERObjectIdentifier25);
        DefaultLookUp.put("nameofbirth", dERObjectIdentifier24);
        DefaultLookUp.put("countryofcitizenship", dERObjectIdentifier22);
        DefaultLookUp.put("countryofresidence", dERObjectIdentifier23);
        DefaultLookUp.put("gender", dERObjectIdentifier21);
        DefaultLookUp.put("placeofbirth", dERObjectIdentifier20);
        DefaultLookUp.put("dateofbirth", dERObjectIdentifier19);
        DefaultLookUp.put("postalcode", dERObjectIdentifier16);
        DefaultLookUp.put("businesscategory", dERObjectIdentifier15);
    }

    public static X509Name getInstance(Object obj) {
        if (obj == null || (obj instanceof X509Name)) {
            return (X509Name) obj;
        }
        if (obj instanceof ASN1Sequence) {
            return new X509Name((ASN1Sequence) obj);
        }
        throw new IllegalArgumentException("unknown object in factory \"" + obj.getClass().getName() + "\"");
    }

    public X509Name(ASN1Sequence aSN1Sequence) {
        this.seq = aSN1Sequence;
        Enumeration objects = aSN1Sequence.getObjects();
        while (objects.hasMoreElements()) {
            ASN1Set aSN1Set = ASN1Set.getInstance(objects.nextElement());
            int i = 0;
            while (i < aSN1Set.size()) {
                ASN1Sequence aSN1Sequence2 = ASN1Sequence.getInstance(aSN1Set.getObjectAt(i));
                if (aSN1Sequence2.size() != 2) {
                    throw new IllegalArgumentException("badly sized pair");
                }
                this.ordering.addElement(DERObjectIdentifier.getInstance(aSN1Sequence2.getObjectAt(0)));
                DEREncodable objectAt = aSN1Sequence2.getObjectAt(1);
                if (objectAt instanceof DERString) {
                    this.values.addElement(((DERString) objectAt).getString());
                } else {
                    this.values.addElement("#" + bytesToString(Hex.encode(objectAt.getDERObject().getDEREncoded())));
                }
                this.added.addElement(i != 0 ? TRUE : FALSE);
                i++;
            }
        }
    }

    @Override
    public DERObject toASN1Object() {
        if (this.seq == null) {
            ASN1EncodableVector aSN1EncodableVector = new ASN1EncodableVector();
            ASN1EncodableVector aSN1EncodableVector2 = new ASN1EncodableVector();
            if (this.ordering.size() != 0) {
                new ASN1EncodableVector().add((DERObjectIdentifier) this.ordering.elementAt(0));
                throw null;
            }
            aSN1EncodableVector.add(new DERSet(aSN1EncodableVector2));
            this.seq = new DERSequence(aSN1EncodableVector);
        }
        return this.seq;
    }

    @Override
    public boolean equals(Object obj) {
        int i;
        int i2;
        boolean z;
        if (obj == this) {
            return true;
        }
        if (!(obj instanceof X509Name) && !(obj instanceof ASN1Sequence)) {
            return false;
        }
        if (getDERObject().equals(((DEREncodable) obj).getDERObject())) {
            return true;
        }
        try {
            X509Name x509Name = getInstance(obj);
            int size = this.ordering.size();
            if (size != x509Name.ordering.size()) {
                return false;
            }
            boolean[] zArr = new boolean[size];
            int i3 = -1;
            if (this.ordering.elementAt(0).equals(x509Name.ordering.elementAt(0))) {
                i2 = 1;
                i3 = size;
                i = 0;
            } else {
                i = size - 1;
                i2 = -1;
            }
            while (i != i3) {
                DERObjectIdentifier dERObjectIdentifier = (DERObjectIdentifier) this.ordering.elementAt(i);
                String str = (String) this.values.elementAt(i);
                int i4 = 0;
                while (true) {
                    if (i4 >= size) {
                        z = false;
                        break;
                    }
                    if (!zArr[i4] && dERObjectIdentifier.equals((DERObjectIdentifier) x509Name.ordering.elementAt(i4)) && equivalentStrings(str, (String) x509Name.values.elementAt(i4))) {
                        zArr[i4] = true;
                        z = true;
                        break;
                    }
                    i4++;
                }
                if (!z) {
                    return false;
                }
                i += i2;
            }
            return true;
        } catch (IllegalArgumentException unused) {
            return false;
        }
    }

    private boolean equivalentStrings(String str, String str2) {
        String lowerCase = Strings.toLowerCase(str.trim());
        String lowerCase2 = Strings.toLowerCase(str2.trim());
        return lowerCase.equals(lowerCase2) || stripInternalSpaces(lowerCase).equals(stripInternalSpaces(lowerCase2));
    }

    private String stripInternalSpaces(String str) {
        StringBuffer stringBuffer = new StringBuffer();
        if (str.length() != 0) {
            char charAt = str.charAt(0);
            stringBuffer.append(charAt);
            int i = 1;
            while (i < str.length()) {
                char charAt2 = str.charAt(i);
                if (charAt != ' ' || charAt2 != ' ') {
                    stringBuffer.append(charAt2);
                }
                i++;
                charAt = charAt2;
            }
        }
        return stringBuffer.toString();
    }

    @Override
    public int hashCode() {
        Enumeration objects = ((ASN1Sequence) getDERObject()).getObjects();
        int i = 0;
        while (objects.hasMoreElements()) {
            i ^= objects.nextElement().hashCode();
        }
        return i;
    }

    private void appendValue(StringBuffer stringBuffer, Hashtable hashtable, DERObjectIdentifier dERObjectIdentifier, String str) {
        String str2 = (String) hashtable.get(dERObjectIdentifier);
        if (str2 != null) {
            stringBuffer.append(str2);
        } else {
            stringBuffer.append(dERObjectIdentifier.getId());
        }
        stringBuffer.append('=');
        int length = stringBuffer.length();
        stringBuffer.append(str);
        int length2 = stringBuffer.length();
        while (length != length2) {
            if (stringBuffer.charAt(length) == ',' || stringBuffer.charAt(length) == '\"' || stringBuffer.charAt(length) == '\\' || stringBuffer.charAt(length) == '+' || stringBuffer.charAt(length) == '<' || stringBuffer.charAt(length) == '>' || stringBuffer.charAt(length) == ';') {
                stringBuffer.insert(length, "\\");
                length++;
                length2++;
            }
            length++;
        }
    }

    public String toString(boolean z, Hashtable hashtable) {
        StringBuffer stringBuffer = new StringBuffer();
        Vector vector = new Vector();
        StringBuffer stringBuffer2 = null;
        for (int i = 0; i < this.ordering.size(); i++) {
            if (((Boolean) this.added.elementAt(i)).booleanValue()) {
                stringBuffer2.append('+');
                appendValue(stringBuffer2, hashtable, (DERObjectIdentifier) this.ordering.elementAt(i), (String) this.values.elementAt(i));
            } else {
                stringBuffer2 = new StringBuffer();
                appendValue(stringBuffer2, hashtable, (DERObjectIdentifier) this.ordering.elementAt(i), (String) this.values.elementAt(i));
                vector.addElement(stringBuffer2);
            }
        }
        boolean z2 = true;
        if (z) {
            for (int size = vector.size() - 1; size >= 0; size--) {
                if (z2) {
                    z2 = false;
                } else {
                    stringBuffer.append(',');
                }
                stringBuffer.append(vector.elementAt(size).toString());
            }
        } else {
            for (int i2 = 0; i2 < vector.size(); i2++) {
                if (z2) {
                    z2 = false;
                } else {
                    stringBuffer.append(',');
                }
                stringBuffer.append(vector.elementAt(i2).toString());
            }
        }
        return stringBuffer.toString();
    }

    private String bytesToString(byte[] bArr) {
        int length = bArr.length;
        char[] cArr = new char[length];
        for (int i = 0; i != length; i++) {
            cArr[i] = (char) (bArr[i] & 255);
        }
        return new String(cArr);
    }

    public String toString() {
        return toString(DefaultReverse, DefaultSymbols);
    }
}