home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIPHEFT062001.ISO / browser / nc32lyc / comm.z / java40.jar / netscape / security / Principal.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-08-15  |  9.9 KB  |  560 lines

  1. package netscape.security;
  2.  
  3. import java.net.MalformedURLException;
  4. import java.net.URL;
  5. import java.util.StringTokenizer;
  6. import netscape.util.ClassInfo;
  7. import netscape.util.Codable;
  8. import netscape.util.CodingException;
  9. import netscape.util.Decoder;
  10. import netscape.util.Encoder;
  11.  
  12. public final class Principal implements Codable {
  13.    static final int VERSION = 1;
  14.    public static final int CODEBASE_EXACT = 10;
  15.    public static final int CODEBASE_REGEXP = 11;
  16.    public static final int CERT = 12;
  17.    public static final int CERT_FINGERPRINT = 13;
  18.    public static final int CERT_KEY = 14;
  19.    static final int COMPANY_NAME = 1;
  20.    static final int CERT_AUTH = 2;
  21.    static final int SERIAL_NO = 3;
  22.    static final int EXP_DATE = 4;
  23.    static final int NICKNAME = 5;
  24.    static final int FINGERPRINT = 6;
  25.    private int itsType;
  26.    private int itsHashCode;
  27.    private String itsStringRep;
  28.    private byte[] itsBinaryRep;
  29.    private byte[] itsFingerprint;
  30.    private byte[] itsCertKey;
  31.    private int itsZig;
  32.    private boolean itsInited;
  33.    private String itsNickname;
  34.    private String itsAsciiFingerPrint;
  35.    private String itsExpDate;
  36.    private String itsSerialNo;
  37.    private String itsCertAuth;
  38.    private String itsCompanyName;
  39.  
  40.    public Principal() {
  41.       this.itsInited = false;
  42.    }
  43.  
  44.    public Principal(URL var1) {
  45.       this.itsInited = false;
  46.       this.itsStringRep = var1.toString();
  47.       this.itsType = 10;
  48.       this.computeHashCode();
  49.       this.itsZig = 0;
  50.       this.itsInited = true;
  51.    }
  52.  
  53.    public Principal(int var1, String var2) {
  54.       this.itsInited = false;
  55.       switch (var1) {
  56.          case 10:
  57.          case 11:
  58.             this.itsStringRep = var2;
  59.             break;
  60.          case 14:
  61.             PrivilegeManager var3 = PrivilegeManager.getPrivilegeManager();
  62.             PrivilegeManager.checkPrivilegeEnabled("SuperUser");
  63.          case 12:
  64.          case 13:
  65.             StringTokenizer var4 = new StringTokenizer(var2, ":;, \t");
  66.             this.itsBinaryRep = new byte[var4.countTokens()];
  67.  
  68.             for(int var5 = 0; var4.hasMoreElements(); ++var5) {
  69.                this.itsBinaryRep[var5] = (byte)Integer.parseInt(var4.nextToken(), 16);
  70.             }
  71.  
  72.             if (var1 == 12) {
  73.                this.certToFingerprint();
  74.             } else if (var1 == 14) {
  75.                this.itsCertKey = this.itsBinaryRep;
  76.             } else {
  77.                this.itsFingerprint = this.itsBinaryRep;
  78.                this.itsAsciiFingerPrint = var2;
  79.             }
  80.             break;
  81.          default:
  82.             throw new IllegalArgumentException("unknown principal type");
  83.       }
  84.  
  85.       this.itsType = var1;
  86.       this.computeHashCode();
  87.       this.itsZig = 0;
  88.       this.itsInited = true;
  89.    }
  90.  
  91.    public Principal(int var1, byte[] var2) {
  92.       this.itsInited = false;
  93.       switch (var1) {
  94.          case 10:
  95.          case 11:
  96.             this.itsStringRep = new String(var2, 0);
  97.             break;
  98.          case 12:
  99.          case 13:
  100.          case 14:
  101.             try {
  102.                this.itsBinaryRep = (byte[])var2.clone();
  103.             } catch (CloneNotSupportedException var3) {
  104.                throw new IllegalArgumentException("bogus value");
  105.             }
  106.  
  107.             if (var1 == 12) {
  108.                this.certToFingerprint();
  109.             } else if (var1 == 14) {
  110.                this.itsCertKey = this.itsBinaryRep;
  111.             } else {
  112.                this.itsFingerprint = this.itsBinaryRep;
  113.             }
  114.             break;
  115.          default:
  116.             throw new IllegalArgumentException("unknown principal type");
  117.       }
  118.  
  119.       this.itsType = var1;
  120.       this.computeHashCode();
  121.       this.itsZig = 0;
  122.       this.itsInited = true;
  123.    }
  124.  
  125.    public Principal(int var1, byte[] var2, Class var3) {
  126.       this(var1, var2);
  127.       this.itsZig = getZigPtr(var3);
  128.    }
  129.  
  130.    private boolean compareByteArrays(byte[] var1, byte[] var2) {
  131.       if (var1.length != var2.length) {
  132.          return false;
  133.       } else {
  134.          for(int var3 = 0; var3 < var2.length; ++var3) {
  135.             if (var1[var3] != var2[var3]) {
  136.                return false;
  137.             }
  138.          }
  139.  
  140.          return true;
  141.       }
  142.    }
  143.  
  144.    public boolean equals(Object var1) {
  145.       if (var1 == this) {
  146.          return true;
  147.       } else if (!(var1 instanceof Principal)) {
  148.          return false;
  149.       } else {
  150.          Principal var2 = (Principal)var1;
  151.          switch (this.itsType) {
  152.             case 10:
  153.             case 11:
  154.                switch (var2.itsType) {
  155.                   case 10:
  156.                   case 11:
  157.                      return this.itsStringRep.equals(var2.itsStringRep);
  158.                   default:
  159.                      return false;
  160.                }
  161.             case 12:
  162.             case 13:
  163.                switch (var2.itsType) {
  164.                   case 12:
  165.                   case 13:
  166.                      return this.compareByteArrays(this.itsFingerprint, var2.itsFingerprint);
  167.                   default:
  168.                      return false;
  169.                }
  170.             case 14:
  171.                switch (var2.itsType) {
  172.                   case 14:
  173.                      return this.compareByteArrays(this.itsCertKey, var2.itsCertKey);
  174.                   default:
  175.                      return false;
  176.                }
  177.             default:
  178.                return false;
  179.          }
  180.       }
  181.    }
  182.  
  183.    public int hashCode() {
  184.       return this.itsHashCode;
  185.    }
  186.  
  187.    private int computeHashCode(byte[] var1) {
  188.       int var2 = 0;
  189.  
  190.       for(int var3 = 0; var3 < var1.length; ++var3) {
  191.          var2 = var2 * 37 + var1[var3];
  192.       }
  193.  
  194.       return var2;
  195.    }
  196.  
  197.    private void computeHashCode() {
  198.       switch (this.itsType) {
  199.          case 10:
  200.          case 11:
  201.             this.itsHashCode = this.itsStringRep.hashCode();
  202.             return;
  203.          case 12:
  204.          case 13:
  205.             this.itsHashCode = this.computeHashCode(this.itsFingerprint);
  206.             return;
  207.          case 14:
  208.             this.itsHashCode = this.computeHashCode(this.itsCertKey);
  209.             return;
  210.          default:
  211.       }
  212.    }
  213.  
  214.    public boolean isCodebase() {
  215.       return this.itsType == 10 || this.itsType == 11;
  216.    }
  217.  
  218.    public boolean isCodebaseExact() {
  219.       return this.itsType == 10;
  220.    }
  221.  
  222.    public boolean isCodebaseRegexp() {
  223.       return this.itsType == 11;
  224.    }
  225.  
  226.    boolean isSecurePrincipal() {
  227.       if (this == PrivilegeManager.getUnknownPrincipal()) {
  228.          System.out.println("Principal: Internal Error: Unknown principal");
  229.          return false;
  230.       } else if (!this.isCodebase()) {
  231.          return true;
  232.       } else {
  233.          URL var1;
  234.          try {
  235.             var1 = new URL(this.itsStringRep);
  236.          } catch (MalformedURLException var4) {
  237.             return false;
  238.          }
  239.  
  240.          String var2 = var1.getProtocol();
  241.          if (!var2.equals("https") && !var2.equals("file")) {
  242.             PrivilegeManager var3 = PrivilegeManager.getPrivilegeManager();
  243.             return var2.equals("http") && !var3.getJavaSecurityEnabled();
  244.          } else {
  245.             return true;
  246.          }
  247.       }
  248.    }
  249.  
  250.    public boolean isCert() {
  251.       return this.itsType == 12;
  252.    }
  253.  
  254.    public boolean isCertFingerprint() {
  255.       return this.itsType == 13 || this.itsType == 14;
  256.    }
  257.  
  258.    public String toString() {
  259.       switch (this.itsType) {
  260.          case 10:
  261.          case 11:
  262.             return this.itsStringRep;
  263.          case 12:
  264.          case 13:
  265.             StringBuffer var1 = new StringBuffer();
  266.  
  267.             for(int var2 = 0; var2 < this.itsBinaryRep.length; ++var2) {
  268.                if (var2 > 0) {
  269.                   var1.append(":");
  270.                }
  271.  
  272.                var1.append(Integer.toHexString(255 & this.itsBinaryRep[var2]));
  273.             }
  274.  
  275.             return var1.toString();
  276.          case 14:
  277.             return this.getNickname();
  278.          default:
  279.             return this.itsStringRep;
  280.       }
  281.    }
  282.  
  283.    public String toVerboseString() {
  284.       String var1 = this.toString();
  285.       switch (this.itsType) {
  286.          case 10:
  287.             return "CODEBASE_EXACT: " + var1;
  288.          case 11:
  289.             return "CODEBASE_REGEXP: " + var1;
  290.          case 12:
  291.             return "CERT: " + var1;
  292.          case 13:
  293.             return "CERT_FINGERPRINT: " + var1;
  294.          case 14:
  295.             return "CERT_FINGERPRINT: " + var1 + " " + this.getFingerPrint();
  296.          default:
  297.             return "Bogus type (" + this.itsType + "): " + var1;
  298.       }
  299.    }
  300.  
  301.    private void certToFingerprint() {
  302.       int var1 = 0;
  303.  
  304.       for(int var2 = 0; var2 < this.itsBinaryRep.length; ++var2) {
  305.          var1 = var1 * 37 + this.itsBinaryRep[var2];
  306.       }
  307.  
  308.       String var3 = Integer.toString(var1);
  309.       byte[] var4 = new byte[var3.length()];
  310.       var3.getBytes(0, var3.length() - 1, var4, 0);
  311.       this.itsFingerprint = var4;
  312.    }
  313.  
  314.    public String getVendor() {
  315.       switch (this.itsType) {
  316.          case 10:
  317.          case 11:
  318.          default:
  319.             return this.itsStringRep;
  320.          case 12:
  321.          case 13:
  322.          case 14:
  323.             return this.getNickname();
  324.       }
  325.    }
  326.  
  327.    public void describeClassInfo(ClassInfo var1) {
  328.       var1.addClass("Principal", 1);
  329.       var1.addField("Type", (byte)8);
  330.       var1.addField("HashCode", (byte)8);
  331.       var1.addField("StringRep", (byte)16);
  332.       var1.addField("BinaryRep", (byte)5);
  333.       var1.addField("Fingerprint", (byte)5);
  334.       var1.addField("CertKey", (byte)5);
  335.    }
  336.  
  337.    public void encode(Encoder var1) throws CodingException {
  338.       var1.encodeInt("Type", this.itsType);
  339.       var1.encodeInt("HashCode", this.itsHashCode);
  340.       var1.encodeString("StringRep", this.itsStringRep);
  341.       if (this.itsType == 12 || this.itsType == 13 || this.itsType == 14) {
  342.          var1.encodeByteArray("BinaryRep", this.itsBinaryRep, 0, this.itsBinaryRep.length);
  343.          var1.encodeByteArray("Fingerprint", this.itsFingerprint, 0, this.itsFingerprint == null ? 0 : this.itsFingerprint.length);
  344.          var1.encodeByteArray("CertKey", this.itsCertKey, 0, this.itsCertKey == null ? 0 : this.itsCertKey.length);
  345.       }
  346.  
  347.    }
  348.  
  349.    public void decode(Decoder var1) throws CodingException {
  350.       if (!this.itsInited) {
  351.          this.itsInited = true;
  352.          this.itsType = var1.decodeInt("Type");
  353.          this.itsHashCode = var1.decodeInt("HashCode");
  354.          this.itsStringRep = var1.decodeString("StringRep");
  355.          if (this.itsType == 12 || this.itsType == 13 || this.itsType == 14) {
  356.             this.itsBinaryRep = var1.decodeByteArray("BinaryRep");
  357.             this.itsFingerprint = var1.decodeByteArray("Fingerprint");
  358.             this.itsCertKey = var1.decodeByteArray("CertKey");
  359.          }
  360.  
  361.       }
  362.    }
  363.  
  364.    public void finishDecoding() throws CodingException {
  365.    }
  366.  
  367.    String getCompanyName() {
  368.       if (this.itsCompanyName == null) {
  369.          this.itsCompanyName = this.getCertAttribute(this.itsZig, 1, this.itsCertKey);
  370.       }
  371.  
  372.       return this.itsCompanyName;
  373.    }
  374.  
  375.    String getSecAuth() {
  376.       if (this.itsCertAuth == null) {
  377.          this.itsCertAuth = this.getCertAttribute(this.itsZig, 2, this.itsCertKey);
  378.       }
  379.  
  380.       return this.itsCertAuth;
  381.    }
  382.  
  383.    String getSerialNo() {
  384.       if (this.itsSerialNo == null) {
  385.          this.itsSerialNo = this.getCertAttribute(this.itsZig, 3, this.itsCertKey);
  386.       }
  387.  
  388.       return this.itsSerialNo;
  389.    }
  390.  
  391.    String getExpDate() {
  392.       if (this.itsExpDate == null) {
  393.          this.itsExpDate = this.getCertAttribute(this.itsZig, 4, this.itsCertKey);
  394.       }
  395.  
  396.       return this.itsExpDate;
  397.    }
  398.  
  399.    public String getFingerPrint() {
  400.       switch (this.itsType) {
  401.          case 10:
  402.          case 11:
  403.          case 12:
  404.          case 13:
  405.             return this.toString();
  406.          default:
  407.             if (this.itsAsciiFingerPrint == null) {
  408.                this.itsAsciiFingerPrint = this.getCertAttribute(this.itsZig, 6, this.itsCertKey);
  409.             }
  410.  
  411.             return this.itsAsciiFingerPrint;
  412.       }
  413.    }
  414.  
  415.    public String getNickname() {
  416.       if (this.itsType == 12 && this == PrivilegeManager.getUnsignedPrincipal()) {
  417.          return UserDialogHelper.getUnsignedPrincipal();
  418.       } else {
  419.          if (this.itsNickname == null) {
  420.             this.itsNickname = this.getCertAttribute(this.itsZig, 5, this.itsCertKey);
  421.          }
  422.  
  423.          return this.itsNickname;
  424.       }
  425.    }
  426.  
  427.    boolean savePrincipalPermanently() {
  428.       return !this.isCodebase() && this.itsZig != 0 ? this.saveCert(this.itsZig, this.itsCertKey) : true;
  429.    }
  430.  
  431.    static Principal createPrincipal(String var0) {
  432.       byte[] var1 = getPrincipalCertKey(var0);
  433.       if (var1 != null) {
  434.          return new Principal(14, var1);
  435.       } else {
  436.          throw new IllegalArgumentException("Unknown principal " + var0);
  437.       }
  438.    }
  439.  
  440.    static Principal createSystemPrincipal() {
  441.       Object[] var0 = getSystemPrincipalCertKey();
  442.       if (var0 != null && var0.length > 0) {
  443.          return new Principal(14, (byte[])var0[0]);
  444.       } else {
  445.          throw new IllegalArgumentException("Unknown system principal ");
  446.       }
  447.    }
  448.  
  449.    static boolean isSystemPrincipal(byte[] var0) {
  450.       Principal var1 = PrivilegeManager.getSystemPrincipal();
  451.       return var1.itsCertKey == null ? false : var1.compareByteArrays(var0, var1.itsCertKey);
  452.    }
  453.  
  454.    public boolean isSystemPrincipal() {
  455.       return this.equals(PrivilegeManager.getSystemPrincipal());
  456.    }
  457.  
  458.    private static Principal[] getPrincipalAry(Class var0, String var1, Object[] var2) {
  459.       Principal var3 = null;
  460.       int var4 = 0;
  461.       if (var2 != null) {
  462.          var4 += var2.length;
  463.       }
  464.  
  465.       if (var4 == 0) {
  466.          return PrivilegeManager.getUnknownPrincipalArray();
  467.       } else {
  468.          var3 = new Principal[var4];
  469.          int var5 = var4;
  470.  
  471.          while(var5-- > 0) {
  472.             if (isSystemPrincipal((byte[])var2[var5])) {
  473.                ((Object[])var3)[var5] = PrivilegeManager.getSystemPrincipal();
  474.             } else {
  475.                ((Object[])var3)[var5] = new Principal(14, (byte[])var2[var5], var0);
  476.             }
  477.          }
  478.  
  479.          return var3;
  480.       }
  481.    }
  482.  
  483.    protected void dump() {
  484.       PrivilegeManager var2 = PrivilegeManager.getPrivilegeManager();
  485.       PrivilegeManager.checkPrivilegeEnabled("SuperUser");
  486.       System.out.println("Dumping Principal info:");
  487.       System.out.println("-->itsNickname = " + this.itsNickname);
  488.       System.out.println("-->itsExpDate = " + this.itsExpDate);
  489.       System.out.println("-->itsSerialNo = " + this.itsSerialNo);
  490.       System.out.println("-->itsCertAuth = " + this.itsCertAuth);
  491.       System.out.println("-->itsCompanyName = " + this.itsCompanyName);
  492.       System.out.println("-->itsType = " + this.itsType);
  493.       System.out.println("-->itsZig = " + this.itsZig);
  494.       System.out.println("-->itsInited = " + this.itsInited);
  495.       System.out.println("-->itsHashCode = " + this.itsHashCode);
  496.       System.out.println("-->itsStringRep = " + this.itsStringRep);
  497.       System.out.println("-->itsAsciiFingerPrint = " + this.itsAsciiFingerPrint);
  498.       System.out.print("-->itsBinaryRep[] = ");
  499.       if (this.itsBinaryRep == null) {
  500.          System.out.println("null");
  501.       } else {
  502.          StringBuffer var3 = new StringBuffer();
  503.  
  504.          for(int var1 = 0; var1 < this.itsBinaryRep.length; ++var1) {
  505.             if (var1 > 0) {
  506.                var3.append(":");
  507.             }
  508.  
  509.             var3.append(Integer.toHexString(255 & this.itsBinaryRep[var1]));
  510.          }
  511.  
  512.          System.out.println(var3.toString());
  513.       }
  514.  
  515.       System.out.print("-->itsFingerprint[] = ");
  516.       if (this.itsFingerprint == null) {
  517.          System.out.println("null");
  518.       } else {
  519.          StringBuffer var6 = new StringBuffer();
  520.  
  521.          for(int var4 = 0; var4 < this.itsFingerprint.length; ++var4) {
  522.             if (var4 > 0) {
  523.                var6.append(":");
  524.             }
  525.  
  526.             var6.append(Integer.toHexString(255 & this.itsFingerprint[var4]));
  527.          }
  528.  
  529.          System.out.println(var6.toString());
  530.       }
  531.  
  532.       System.out.print("-->itsCertKey[] = ");
  533.       if (this.itsCertKey == null) {
  534.          System.out.println("null");
  535.       } else {
  536.          StringBuffer var7 = new StringBuffer();
  537.  
  538.          for(int var5 = 0; var5 < this.itsCertKey.length; ++var5) {
  539.             if (var5 > 0) {
  540.                var7.append(":");
  541.             }
  542.  
  543.             var7.append(Integer.toHexString(255 & this.itsCertKey[var5]));
  544.          }
  545.  
  546.          System.out.println(var7.toString());
  547.       }
  548.    }
  549.  
  550.    private static native int getZigPtr(Class var0);
  551.  
  552.    native String getCertAttribute(int var1, int var2, byte[] var3);
  553.  
  554.    static native byte[] getPrincipalCertKey(String var0);
  555.  
  556.    static native Object[] getSystemPrincipalCertKey();
  557.  
  558.    private native boolean saveCert(int var1, byte[] var2);
  559. }
  560.