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

  1. package sun.security.util;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.IOException;
  5. import java.io.Serializable;
  6.  
  7. public final class ObjectIdentifier implements Serializable {
  8.    private int[] components;
  9.    private int componentLen;
  10.    private static final int allocationQuantum = 5;
  11.  
  12.    public ObjectIdentifier(int[] var1) {
  13.       try {
  14.          this.components = (int[])var1.clone();
  15.          this.componentLen = var1.length;
  16.       } catch (Throwable var2) {
  17.          System.out.println("X509.ObjectIdentifier(), no cloning!");
  18.       }
  19.    }
  20.  
  21.    ObjectIdentifier(DerInputStream var1) throws IOException {
  22.       byte var2 = (byte)var1.getByte();
  23.       if (var2 != 6) {
  24.          throw new IOException("X509.ObjectIdentifier() -- data isn't an object ID (tag = " + var2 + ")");
  25.       } else {
  26.          int var3 = var1.available() - var1.getLength() - 1;
  27.          if (var3 < 0) {
  28.             throw new IOException("X509.ObjectIdentifier() -- not enough data");
  29.          } else {
  30.             this.initFromEncoding(var1, var3);
  31.          }
  32.       }
  33.    }
  34.  
  35.    ObjectIdentifier(DerInputBuffer var1) throws IOException {
  36.       this.initFromEncoding(new DerInputStream(var1), 0);
  37.    }
  38.  
  39.    private void initFromEncoding(DerInputStream var1, int var2) throws IOException {
  40.       boolean var4 = true;
  41.       this.components = new int[5];
  42.       this.componentLen = 0;
  43.  
  44.       while(var1.available() > var2) {
  45.          int var3 = getComponent(var1);
  46.          if (var4) {
  47.             byte var5;
  48.             if (var3 < 40) {
  49.                var5 = 0;
  50.             } else if (var3 < 80) {
  51.                var5 = 1;
  52.             } else {
  53.                var5 = 2;
  54.             }
  55.  
  56.             int var6 = var3 - var5 * 40;
  57.             this.components[0] = var5;
  58.             this.components[1] = var6;
  59.             this.componentLen = 2;
  60.             var4 = false;
  61.          } else {
  62.             if (this.componentLen >= this.components.length) {
  63.                int[] var7 = new int[this.components.length + 5];
  64.                System.arraycopy(this.components, 0, var7, 0, this.components.length);
  65.                this.components = var7;
  66.             }
  67.  
  68.             this.components[this.componentLen++] = var3;
  69.          }
  70.       }
  71.  
  72.       if (var1.available() != var2) {
  73.          throw new IOException("X509.ObjectIdentifier() -- malformed input data");
  74.       }
  75.    }
  76.  
  77.    void emit(DerOutputStream var1) throws IOException {
  78.       DerOutputStream var2 = new DerOutputStream();
  79.       ((ByteArrayOutputStream)var2).write(this.components[0] * 40 + this.components[1]);
  80.  
  81.       for(int var3 = 2; var3 < this.componentLen; ++var3) {
  82.          putComponent(var2, this.components[var3]);
  83.       }
  84.  
  85.       var1.write((byte)6, var2);
  86.    }
  87.  
  88.    private static int getComponent(DerInputStream var0) throws IOException {
  89.       int var2 = 0;
  90.  
  91.       for(int var1 = 0; var2 < 4; ++var2) {
  92.          var1 <<= 7;
  93.          int var3 = var0.getByte();
  94.          var1 |= var3 & 127;
  95.          if ((var3 & 128) == 0) {
  96.             return var1;
  97.          }
  98.       }
  99.  
  100.       throw new IOException("X509.OID, component value too big");
  101.    }
  102.  
  103.    private static void putComponent(DerOutputStream var0, int var1) throws IOException {
  104.       byte[] var3 = new byte[4];
  105.  
  106.       int var2;
  107.       for(var2 = 0; var2 < 4; ++var2) {
  108.          var3[var2] = (byte)(var1 & 127);
  109.          var1 >>>= 7;
  110.          if (var1 == 0) {
  111.             break;
  112.          }
  113.       }
  114.  
  115.       while(var2 > 0) {
  116.          ((ByteArrayOutputStream)var0).write(var3[var2] | 128);
  117.          --var2;
  118.       }
  119.  
  120.       ((ByteArrayOutputStream)var0).write(var3[0]);
  121.    }
  122.  
  123.    public boolean precedes(ObjectIdentifier var1) {
  124.       if (var1 != this && this.componentLen >= var1.componentLen) {
  125.          if (var1.componentLen < this.componentLen) {
  126.             return true;
  127.          } else {
  128.             for(int var2 = 0; var2 < this.componentLen; ++var2) {
  129.                if (var1.components[var2] < this.components[var2]) {
  130.                   return true;
  131.                }
  132.             }
  133.  
  134.             return false;
  135.          }
  136.       } else {
  137.          return false;
  138.       }
  139.    }
  140.  
  141.    public boolean equals(Object var1) {
  142.       return var1 instanceof ObjectIdentifier ? this.equals((ObjectIdentifier)var1) : false;
  143.    }
  144.  
  145.    public boolean equals(ObjectIdentifier var1) {
  146.       if (var1 == this) {
  147.          return true;
  148.       } else if (this.componentLen != var1.componentLen) {
  149.          return false;
  150.       } else {
  151.          for(int var2 = 0; var2 < this.componentLen; ++var2) {
  152.             if (this.components[var2] != var1.components[var2]) {
  153.                return false;
  154.             }
  155.          }
  156.  
  157.          return true;
  158.       }
  159.    }
  160.  
  161.    public int hashCode() {
  162.       return this.toString().hashCode();
  163.    }
  164.  
  165.    public String toString() {
  166.       int var2 = 0;
  167.  
  168.       String var1;
  169.       for(var1 = ""; var2 < this.componentLen; ++var2) {
  170.          if (var2 != 0) {
  171.             var1 = var1 + ".";
  172.          }
  173.  
  174.          var1 = var1 + this.components[var2];
  175.       }
  176.  
  177.       return var1;
  178.    }
  179. }
  180.