home *** CD-ROM | disk | FTP | other *** search
- package sun.security.x509;
-
- import java.io.IOException;
- import java.io.InputStream;
- import sun.security.util.DerInputStream;
- import sun.security.util.DerOutputStream;
- import sun.security.util.DerValue;
- import sun.security.util.ObjectIdentifier;
-
- final class AVA {
- ObjectIdentifier oid;
- DerValue value;
- private static final String specialChars = ",+=\n<>#;";
- private static final String digits = "0123456789ABCDEF";
-
- AVA(ObjectIdentifier var1, DerValue var2) {
- this.oid = var1;
- this.value = var2;
- }
-
- AVA(InputStream var1) throws IOException {
- StringBuffer var2 = new StringBuffer();
-
- while(true) {
- char var3 = (char)var1.read();
- if (var3 == '=') {
- String var4 = var2.toString().toUpperCase().trim();
- if (var4.equals("CN")) {
- this.oid = X500Name.commonName_oid;
- } else if (var4.equals("C")) {
- this.oid = X500Name.countryName_oid;
- } else if (var4.equals("L")) {
- this.oid = X500Name.localityName_oid;
- } else if (var4.equals("S")) {
- this.oid = X500Name.stateName_oid;
- } else if (var4.equals("O")) {
- this.oid = X500Name.orgName_oid;
- } else if (var4.equals("OU")) {
- this.oid = X500Name.orgUnitName_oid;
- } else if (var4.equals("T")) {
- this.oid = X500Name.title_oid;
- } else if (var4.equals("IP")) {
- this.oid = X500Name.ipAddress_oid;
- } else {
- if (!var4.equals("STREET")) {
- throw new IOException("unsupported keyword " + var4);
- }
-
- this.oid = X500Name.streetAddress_oid;
- }
-
- var2 = new StringBuffer();
-
- for(var3 = (char)var1.read(); var3 == ' ' || var3 == '\n'; var3 = (char)var1.read()) {
- }
-
- if (var3 == '#') {
- throw new IOException("AVA parse, hex values NYI");
- } else if (var3 == '"') {
- throw new IOException("AVA parse, quoted strings NYI");
- } else {
- do {
- if (var3 == '\\') {
- var3 = (char)var1.read();
- }
-
- var2.append(var3);
- var3 = (char)var1.read();
- } while(var3 != '+' && var3 != ',' && var3 != ';' && var3 != '>');
-
- this.value = new DerValue(var2.toString().trim());
- return;
- }
- }
-
- var2.append(var3);
- }
- }
-
- AVA(DerInputStream var1) throws IOException {
- DerValue var2 = var1.getDerValue();
- if (var2.tag != 48) {
- throw new CertParseError("X500 AVA, not a sequence");
- } else {
- this.oid = X500Name.intern(var2.data.getOID());
- this.value = var2.data.getDerValue();
- if (var2.data.available() != 0) {
- throw new CertParseError("AVA, extra bytes = " + var2.data.available());
- }
- }
- }
-
- boolean equals(AVA var1) {
- return this.oid.equals(var1.oid) && this.value.equals(var1.value);
- }
-
- public boolean equals(Object var1) {
- return var1 instanceof AVA ? this.equals((AVA)var1) : false;
- }
-
- void emit(DerOutputStream var1) throws IOException {
- DerOutputStream var2 = new DerOutputStream();
- var2.putOID(this.oid);
- this.value.emit(var2);
- var1.write((byte)48, var2);
- }
-
- public String toString() {
- String var1;
- if (this.oid.equals(X500Name.commonName_oid)) {
- var1 = "CN";
- } else if (this.oid.equals(X500Name.countryName_oid)) {
- var1 = "C";
- } else if (this.oid.equals(X500Name.localityName_oid)) {
- var1 = "L";
- } else if (this.oid.equals(X500Name.stateName_oid)) {
- var1 = "S";
- } else if (this.oid.equals(X500Name.orgName_oid)) {
- var1 = "O";
- } else if (this.oid.equals(X500Name.orgUnitName_oid)) {
- var1 = "OU";
- } else if (this.oid.equals(X500Name.title_oid)) {
- var1 = "T";
- } else if (this.oid.equals(X500Name.ipAddress_oid)) {
- var1 = "IP";
- } else if (this.oid.equals(X500Name.streetAddress_oid)) {
- var1 = "STREET";
- } else {
- var1 = "OID." + this.oid.toString();
- }
-
- StringBuffer var2 = new StringBuffer(30);
- var2.append(var1);
- var2.append("=");
-
- try {
- String var4 = this.value.getAsString();
- if (var4 == null) {
- byte[] var5 = this.value.toByteArray();
- var2.append('#');
-
- for(int var3 = 0; var3 < var5.length; ++var3) {
- var2.append("0123456789ABCDEF".charAt(var5[var3] >> 4 & 15));
- var2.append("0123456789ABCDEF".charAt(var5[var3] & 15));
- }
- } else {
- boolean var6 = false;
- int var12 = var4.length();
-
- for(int var9 = 0; var9 < ",+=\n<>#;".length(); ++var9) {
- if (var4.indexOf(",+=\n<>#;".charAt(var9)) != -1) {
- var6 = true;
- break;
- }
- }
-
- if (var12 > 0 && !var6 && (var4.charAt(0) == ' ' || var4.charAt(0) == '\n' || var4.charAt(var12 - 1) == ' ' || var4.charAt(var12 - 1) == '\n')) {
- var6 = true;
- }
-
- if (var12 > 0 && !var6) {
- boolean var7 = false;
-
- for(int var10 = 1; var10 < var12 - 2; ++var10) {
- if (var4.charAt(var10) != ' ' && var4.charAt(var10) != '\n') {
- var7 = false;
- } else {
- if (var7) {
- var6 = true;
- break;
- }
-
- var7 = true;
- }
- }
- }
-
- if (var6) {
- var2.append('"');
- }
-
- for(int var11 = 0; var11 < var12; ++var11) {
- char var13 = var4.charAt(var11);
- if (var13 == '"' || var13 == '\\') {
- var2.append('\\');
- }
-
- var2.append(var13);
- }
-
- if (var6) {
- var2.append('"');
- }
- }
- } catch (IOException var8) {
- throw new IllegalArgumentException("DER Value conversion");
- }
-
- return var2.toString();
- }
- }
-