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);
}
}