home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / rt.jar / sun / security / x509 / AVA.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-04-23  |  4.5 KB  |  202 lines

  1. package sun.security.x509;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import sun.security.util.DerInputStream;
  6. import sun.security.util.DerOutputStream;
  7. import sun.security.util.DerValue;
  8. import sun.security.util.ObjectIdentifier;
  9.  
  10. final class AVA {
  11.    ObjectIdentifier oid;
  12.    DerValue value;
  13.    private static final String specialChars = ",+=\n<>#;";
  14.    private static final String digits = "0123456789ABCDEF";
  15.  
  16.    AVA(ObjectIdentifier var1, DerValue var2) {
  17.       this.oid = var1;
  18.       this.value = var2;
  19.    }
  20.  
  21.    AVA(InputStream var1) throws IOException {
  22.       StringBuffer var2 = new StringBuffer();
  23.  
  24.       while(true) {
  25.          char var3 = (char)var1.read();
  26.          if (var3 == '=') {
  27.             String var4 = var2.toString().toUpperCase().trim();
  28.             if (var4.equals("CN")) {
  29.                this.oid = X500Name.commonName_oid;
  30.             } else if (var4.equals("C")) {
  31.                this.oid = X500Name.countryName_oid;
  32.             } else if (var4.equals("L")) {
  33.                this.oid = X500Name.localityName_oid;
  34.             } else if (var4.equals("S")) {
  35.                this.oid = X500Name.stateName_oid;
  36.             } else if (var4.equals("O")) {
  37.                this.oid = X500Name.orgName_oid;
  38.             } else if (var4.equals("OU")) {
  39.                this.oid = X500Name.orgUnitName_oid;
  40.             } else if (var4.equals("T")) {
  41.                this.oid = X500Name.title_oid;
  42.             } else if (var4.equals("IP")) {
  43.                this.oid = X500Name.ipAddress_oid;
  44.             } else {
  45.                if (!var4.equals("STREET")) {
  46.                   throw new IOException("unsupported keyword " + var4);
  47.                }
  48.  
  49.                this.oid = X500Name.streetAddress_oid;
  50.             }
  51.  
  52.             var2 = new StringBuffer();
  53.  
  54.             for(var3 = (char)var1.read(); var3 == ' ' || var3 == '\n'; var3 = (char)var1.read()) {
  55.             }
  56.  
  57.             if (var3 == '#') {
  58.                throw new IOException("AVA parse, hex values NYI");
  59.             } else if (var3 == '"') {
  60.                throw new IOException("AVA parse, quoted strings NYI");
  61.             } else {
  62.                do {
  63.                   if (var3 == '\\') {
  64.                      var3 = (char)var1.read();
  65.                   }
  66.  
  67.                   var2.append(var3);
  68.                   var3 = (char)var1.read();
  69.                } while(var3 != '+' && var3 != ',' && var3 != ';' && var3 != '>');
  70.  
  71.                this.value = new DerValue(var2.toString().trim());
  72.                return;
  73.             }
  74.          }
  75.  
  76.          var2.append(var3);
  77.       }
  78.    }
  79.  
  80.    AVA(DerInputStream var1) throws IOException {
  81.       DerValue var2 = var1.getDerValue();
  82.       if (var2.tag != 48) {
  83.          throw new CertParseError("X500 AVA, not a sequence");
  84.       } else {
  85.          this.oid = X500Name.intern(var2.data.getOID());
  86.          this.value = var2.data.getDerValue();
  87.          if (var2.data.available() != 0) {
  88.             throw new CertParseError("AVA, extra bytes = " + var2.data.available());
  89.          }
  90.       }
  91.    }
  92.  
  93.    boolean equals(AVA var1) {
  94.       return this.oid.equals(var1.oid) && this.value.equals(var1.value);
  95.    }
  96.  
  97.    public boolean equals(Object var1) {
  98.       return var1 instanceof AVA ? this.equals((AVA)var1) : false;
  99.    }
  100.  
  101.    void emit(DerOutputStream var1) throws IOException {
  102.       DerOutputStream var2 = new DerOutputStream();
  103.       var2.putOID(this.oid);
  104.       this.value.emit(var2);
  105.       var1.write((byte)48, var2);
  106.    }
  107.  
  108.    public String toString() {
  109.       String var1;
  110.       if (this.oid.equals(X500Name.commonName_oid)) {
  111.          var1 = "CN";
  112.       } else if (this.oid.equals(X500Name.countryName_oid)) {
  113.          var1 = "C";
  114.       } else if (this.oid.equals(X500Name.localityName_oid)) {
  115.          var1 = "L";
  116.       } else if (this.oid.equals(X500Name.stateName_oid)) {
  117.          var1 = "S";
  118.       } else if (this.oid.equals(X500Name.orgName_oid)) {
  119.          var1 = "O";
  120.       } else if (this.oid.equals(X500Name.orgUnitName_oid)) {
  121.          var1 = "OU";
  122.       } else if (this.oid.equals(X500Name.title_oid)) {
  123.          var1 = "T";
  124.       } else if (this.oid.equals(X500Name.ipAddress_oid)) {
  125.          var1 = "IP";
  126.       } else if (this.oid.equals(X500Name.streetAddress_oid)) {
  127.          var1 = "STREET";
  128.       } else {
  129.          var1 = "OID." + this.oid.toString();
  130.       }
  131.  
  132.       StringBuffer var2 = new StringBuffer(30);
  133.       var2.append(var1);
  134.       var2.append("=");
  135.  
  136.       try {
  137.          String var4 = this.value.getAsString();
  138.          if (var4 == null) {
  139.             byte[] var5 = this.value.toByteArray();
  140.             var2.append('#');
  141.  
  142.             for(int var3 = 0; var3 < var5.length; ++var3) {
  143.                var2.append("0123456789ABCDEF".charAt(var5[var3] >> 4 & 15));
  144.                var2.append("0123456789ABCDEF".charAt(var5[var3] & 15));
  145.             }
  146.          } else {
  147.             boolean var6 = false;
  148.             int var12 = var4.length();
  149.  
  150.             for(int var9 = 0; var9 < ",+=\n<>#;".length(); ++var9) {
  151.                if (var4.indexOf(",+=\n<>#;".charAt(var9)) != -1) {
  152.                   var6 = true;
  153.                   break;
  154.                }
  155.             }
  156.  
  157.             if (var12 > 0 && !var6 && (var4.charAt(0) == ' ' || var4.charAt(0) == '\n' || var4.charAt(var12 - 1) == ' ' || var4.charAt(var12 - 1) == '\n')) {
  158.                var6 = true;
  159.             }
  160.  
  161.             if (var12 > 0 && !var6) {
  162.                boolean var7 = false;
  163.  
  164.                for(int var10 = 1; var10 < var12 - 2; ++var10) {
  165.                   if (var4.charAt(var10) != ' ' && var4.charAt(var10) != '\n') {
  166.                      var7 = false;
  167.                   } else {
  168.                      if (var7) {
  169.                         var6 = true;
  170.                         break;
  171.                      }
  172.  
  173.                      var7 = true;
  174.                   }
  175.                }
  176.             }
  177.  
  178.             if (var6) {
  179.                var2.append('"');
  180.             }
  181.  
  182.             for(int var11 = 0; var11 < var12; ++var11) {
  183.                char var13 = var4.charAt(var11);
  184.                if (var13 == '"' || var13 == '\\') {
  185.                   var2.append('\\');
  186.                }
  187.  
  188.                var2.append(var13);
  189.             }
  190.  
  191.             if (var6) {
  192.                var2.append('"');
  193.             }
  194.          }
  195.       } catch (IOException var8) {
  196.          throw new IllegalArgumentException("DER Value conversion");
  197.       }
  198.  
  199.       return var2.toString();
  200.    }
  201. }
  202.