home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 November / PCO1197.ISO / FilesBBS / WIN95 / NET_COM / N32E403.EXE / nav40l.z / java40.jar / netscape / security / Principal.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-09-04  |  7.4 KB  |  479 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 String itsNickname;
  33.    private String itsAsciiFingerPrint;
  34.    private String itsExpDate;
  35.    private String itsSerialNo;
  36.    private String itsCertAuth;
  37.    private String itsCompanyName;
  38.  
  39.    public Principal() {
  40.    }
  41.  
  42.    public Principal(URL var1) {
  43.       this.itsStringRep = var1.toString();
  44.       this.itsType = 10;
  45.       this.computeHashCode();
  46.       this.itsZig = 0;
  47.    }
  48.  
  49.    public Principal(int var1, String var2) {
  50.       switch (var1) {
  51.          case 10:
  52.          case 11:
  53.             this.itsStringRep = var2;
  54.             break;
  55.          case 12:
  56.          case 13:
  57.             StringTokenizer var3 = new StringTokenizer(var2, ":;, \t");
  58.             this.itsBinaryRep = new byte[var3.countTokens()];
  59.  
  60.             for(int var4 = 0; var3.hasMoreElements(); ++var4) {
  61.                this.itsBinaryRep[var4] = (byte)Integer.parseInt(var3.nextToken(), 16);
  62.             }
  63.  
  64.             if (var1 == 12) {
  65.                this.certToFingerprint();
  66.             } else {
  67.                this.itsFingerprint = this.itsBinaryRep;
  68.             }
  69.             break;
  70.          default:
  71.             throw new IllegalArgumentException("unknown principal type");
  72.       }
  73.  
  74.       this.itsType = var1;
  75.       this.computeHashCode();
  76.       this.itsZig = 0;
  77.    }
  78.  
  79.    public Principal(int var1, byte[] var2) {
  80.       switch (var1) {
  81.          case 10:
  82.          case 11:
  83.             this.itsStringRep = new String(var2, 0);
  84.             break;
  85.          case 12:
  86.          case 13:
  87.          case 14:
  88.             try {
  89.                this.itsBinaryRep = (byte[])var2.clone();
  90.             } catch (CloneNotSupportedException var3) {
  91.                throw new IllegalArgumentException("bogus value");
  92.             }
  93.  
  94.             if (var1 == 12) {
  95.                this.certToFingerprint();
  96.             } else if (var1 == 14) {
  97.                this.itsCertKey = this.itsBinaryRep;
  98.             } else {
  99.                this.itsFingerprint = this.itsBinaryRep;
  100.             }
  101.             break;
  102.          default:
  103.             throw new IllegalArgumentException("unknown principal type");
  104.       }
  105.  
  106.       this.itsType = var1;
  107.       this.computeHashCode();
  108.       this.itsZig = 0;
  109.    }
  110.  
  111.    public Principal(int var1, byte[] var2, Class var3) {
  112.       this(var1, var2);
  113.       this.itsZig = getZigPtr(var3);
  114.    }
  115.  
  116.    private boolean compareByteArrays(byte[] var1, byte[] var2) {
  117.       if (var1.length != var2.length) {
  118.          return false;
  119.       } else {
  120.          for(int var3 = 0; var3 < var2.length; ++var3) {
  121.             if (var1[var3] != var2[var3]) {
  122.                return false;
  123.             }
  124.          }
  125.  
  126.          return true;
  127.       }
  128.    }
  129.  
  130.    public boolean equals(Object var1) {
  131.       if (var1 == this) {
  132.          return true;
  133.       } else if (!(var1 instanceof Principal)) {
  134.          return false;
  135.       } else {
  136.          Principal var2 = (Principal)var1;
  137.          switch (this.itsType) {
  138.             case 10:
  139.             case 11:
  140.                switch (var2.itsType) {
  141.                   case 10:
  142.                   case 11:
  143.                      return this.itsStringRep.equals(var2.itsStringRep);
  144.                   default:
  145.                      return false;
  146.                }
  147.             case 12:
  148.             case 13:
  149.                switch (var2.itsType) {
  150.                   case 12:
  151.                   case 13:
  152.                      return this.compareByteArrays(this.itsFingerprint, var2.itsFingerprint);
  153.                   default:
  154.                      return false;
  155.                }
  156.             case 14:
  157.                switch (var2.itsType) {
  158.                   case 14:
  159.                      return this.compareByteArrays(this.itsCertKey, var2.itsCertKey);
  160.                   default:
  161.                      return false;
  162.                }
  163.             default:
  164.                return false;
  165.          }
  166.       }
  167.    }
  168.  
  169.    public int hashCode() {
  170.       return this.itsHashCode;
  171.    }
  172.  
  173.    private int computeHashCode(byte[] var1) {
  174.       int var2 = 0;
  175.  
  176.       for(int var3 = 0; var3 < var1.length; ++var3) {
  177.          var2 = var2 * 37 + var1[var3];
  178.       }
  179.  
  180.       return var2;
  181.    }
  182.  
  183.    private void computeHashCode() {
  184.       switch (this.itsType) {
  185.          case 10:
  186.          case 11:
  187.             this.itsHashCode = this.itsStringRep.hashCode();
  188.             return;
  189.          case 12:
  190.          case 13:
  191.             this.itsHashCode = this.computeHashCode(this.itsFingerprint);
  192.             return;
  193.          case 14:
  194.             this.itsHashCode = this.computeHashCode(this.itsCertKey);
  195.             return;
  196.          default:
  197.       }
  198.    }
  199.  
  200.    public boolean isCodebase() {
  201.       return this.itsType == 10 || this.itsType == 11;
  202.    }
  203.  
  204.    public boolean isCodebaseExact() {
  205.       return this.itsType == 10;
  206.    }
  207.  
  208.    public boolean isCodebaseRegexp() {
  209.       return this.itsType == 11;
  210.    }
  211.  
  212.    boolean isSecurePrincipal() {
  213.       if (this == PrivilegeManager.getUnknownPrincipal()) {
  214.          System.out.println("Principal: Internal Error: Unknown principal");
  215.          return false;
  216.       } else if (!this.isCodebase()) {
  217.          return true;
  218.       } else {
  219.          URL var1;
  220.          try {
  221.             var1 = new URL(this.itsStringRep);
  222.          } catch (MalformedURLException var4) {
  223.             return false;
  224.          }
  225.  
  226.          String var2 = var1.getProtocol();
  227.          if (!var2.equals("https") && !var2.equals("file")) {
  228.             PrivilegeManager var3 = PrivilegeManager.getPrivilegeManager();
  229.             return var2.equals("http") && !var3.getJavaSecurityEnabled();
  230.          } else {
  231.             return true;
  232.          }
  233.       }
  234.    }
  235.  
  236.    public boolean isCert() {
  237.       return this.itsType == 12;
  238.    }
  239.  
  240.    public boolean isCertFingerprint() {
  241.       return this.itsType == 13 || this.itsType == 14;
  242.    }
  243.  
  244.    public String toString() {
  245.       switch (this.itsType) {
  246.          case 10:
  247.          case 11:
  248.             return this.itsStringRep;
  249.          case 12:
  250.          case 13:
  251.             StringBuffer var1 = new StringBuffer();
  252.  
  253.             for(int var2 = 0; var2 < this.itsBinaryRep.length; ++var2) {
  254.                if (var2 > 0) {
  255.                   var1.append(":");
  256.                }
  257.  
  258.                var1.append(Integer.toHexString(255 & this.itsBinaryRep[var2]));
  259.             }
  260.  
  261.             return var1.toString();
  262.          case 14:
  263.             return this.getNickname();
  264.          default:
  265.             return this.itsStringRep;
  266.       }
  267.    }
  268.  
  269.    public String toVerboseString() {
  270.       String var1 = this.toString();
  271.       switch (this.itsType) {
  272.          case 10:
  273.             return "CODEBASE_EXACT: " + var1;
  274.          case 11:
  275.             return "CODEBASE_REGEXP: " + var1;
  276.          case 12:
  277.             return "CERT: " + var1;
  278.          case 13:
  279.             return "CERT_FINGERPRINT: " + var1;
  280.          case 14:
  281.             return "CERT_FINGERPRINT: " + var1 + " " + this.getFingerPrint();
  282.          default:
  283.             return "Bogus type (" + this.itsType + "): " + var1;
  284.       }
  285.    }
  286.  
  287.    private void certToFingerprint() {
  288.       int var1 = 0;
  289.  
  290.       for(int var2 = 0; var2 < this.itsBinaryRep.length; ++var2) {
  291.          var1 = var1 * 37 + this.itsBinaryRep[var2];
  292.       }
  293.  
  294.       String var3 = Integer.toString(var1);
  295.       byte[] var4 = new byte[var3.length()];
  296.       var3.getBytes(0, var3.length() - 1, var4, 0);
  297.       this.itsFingerprint = var4;
  298.    }
  299.  
  300.    public String getVendor() {
  301.       switch (this.itsType) {
  302.          case 10:
  303.          case 11:
  304.          default:
  305.             return this.itsStringRep;
  306.          case 12:
  307.          case 13:
  308.          case 14:
  309.             return this.getNickname();
  310.       }
  311.    }
  312.  
  313.    public void describeClassInfo(ClassInfo var1) {
  314.       var1.addClass("Principal", 1);
  315.       var1.addField("Type", (byte)8);
  316.       var1.addField("HashCode", (byte)8);
  317.       var1.addField("StringRep", (byte)16);
  318.       var1.addField("BinaryRep", (byte)5);
  319.       var1.addField("Fingerprint", (byte)5);
  320.       var1.addField("CertKey", (byte)5);
  321.    }
  322.  
  323.    public void encode(Encoder var1) throws CodingException {
  324.       var1.encodeInt("Type", this.itsType);
  325.       var1.encodeInt("HashCode", this.itsHashCode);
  326.       var1.encodeString("StringRep", this.itsStringRep);
  327.       if (this.itsType == 12 || this.itsType == 13 || this.itsType == 14) {
  328.          var1.encodeByteArray("BinaryRep", this.itsBinaryRep, 0, this.itsBinaryRep.length);
  329.          var1.encodeByteArray("Fingerprint", this.itsFingerprint, 0, this.itsFingerprint == null ? 0 : this.itsFingerprint.length);
  330.          var1.encodeByteArray("CertKey", this.itsCertKey, 0, this.itsCertKey == null ? 0 : this.itsCertKey.length);
  331.       }
  332.  
  333.    }
  334.  
  335.    public void decode(Decoder var1) throws CodingException {
  336.       PrivilegeManager var2 = PrivilegeManager.getPrivilegeManager();
  337.       if (var2 == null || !var2.isSecurityInited()) {
  338.          this.itsType = var1.decodeInt("Type");
  339.          this.itsHashCode = var1.decodeInt("HashCode");
  340.          this.itsStringRep = var1.decodeString("StringRep");
  341.          if (this.itsType == 12 || this.itsType == 13 || this.itsType == 14) {
  342.             this.itsBinaryRep = var1.decodeByteArray("BinaryRep");
  343.             this.itsFingerprint = var1.decodeByteArray("Fingerprint");
  344.             this.itsCertKey = var1.decodeByteArray("CertKey");
  345.          }
  346.  
  347.       }
  348.    }
  349.  
  350.    public void finishDecoding() throws CodingException {
  351.    }
  352.  
  353.    String getCompanyName() {
  354.       if (this.itsCompanyName == null) {
  355.          this.itsCompanyName = this.getCertAttribute(this.itsZig, 1, this.itsCertKey);
  356.       }
  357.  
  358.       return this.itsCompanyName;
  359.    }
  360.  
  361.    String getSecAuth() {
  362.       if (this.itsCertAuth == null) {
  363.          this.itsCertAuth = this.getCertAttribute(this.itsZig, 2, this.itsCertKey);
  364.       }
  365.  
  366.       return this.itsCertAuth;
  367.    }
  368.  
  369.    String getSerialNo() {
  370.       if (this.itsSerialNo == null) {
  371.          this.itsSerialNo = this.getCertAttribute(this.itsZig, 3, this.itsCertKey);
  372.       }
  373.  
  374.       return this.itsSerialNo;
  375.    }
  376.  
  377.    String getExpDate() {
  378.       if (this.itsExpDate == null) {
  379.          this.itsExpDate = this.getCertAttribute(this.itsZig, 4, this.itsCertKey);
  380.       }
  381.  
  382.       return this.itsExpDate;
  383.    }
  384.  
  385.    public String getFingerPrint() {
  386.       switch (this.itsType) {
  387.          case 10:
  388.          case 11:
  389.          case 12:
  390.          case 13:
  391.             return this.toString();
  392.          default:
  393.             if (this.itsAsciiFingerPrint == null) {
  394.                this.itsAsciiFingerPrint = this.getCertAttribute(this.itsZig, 6, this.itsCertKey);
  395.             }
  396.  
  397.             return this.itsAsciiFingerPrint;
  398.       }
  399.    }
  400.  
  401.    public String getNickname() {
  402.       if (this.itsType == 12 && this == PrivilegeManager.getUnsignedPrincipal()) {
  403.          return UserDialogHelper.getUnsignedPrincipal();
  404.       } else {
  405.          if (this.itsNickname == null) {
  406.             this.itsNickname = this.getCertAttribute(this.itsZig, 5, this.itsCertKey);
  407.          }
  408.  
  409.          return this.itsNickname;
  410.       }
  411.    }
  412.  
  413.    boolean savePrincipalPermanently() {
  414.       return !this.isCodebase() && this.itsZig != 0 ? this.saveCert(this.itsZig, this.itsCertKey) : true;
  415.    }
  416.  
  417.    static Principal createPrincipal(String var0) {
  418.       byte[] var1 = getPrincipalCertKey(var0);
  419.       if (var1 != null) {
  420.          return new Principal(14, var1);
  421.       } else {
  422.          throw new IllegalArgumentException("Unknown principal " + var0);
  423.       }
  424.    }
  425.  
  426.    static Principal createSystemPrincipal() {
  427.       Object[] var0 = getSystemPrincipalCertKey();
  428.       if (var0 != null && var0.length > 0) {
  429.          return new Principal(14, (byte[])var0[0]);
  430.       } else {
  431.          throw new IllegalArgumentException("Unknown system principal ");
  432.       }
  433.    }
  434.  
  435.    static boolean isSystemPrincipal(byte[] var0) {
  436.       Principal var1 = PrivilegeManager.getSystemPrincipal();
  437.       return var1.itsCertKey == null ? false : var1.compareByteArrays(var0, var1.itsCertKey);
  438.    }
  439.  
  440.    public boolean isSystemPrincipal() {
  441.       return this.equals(PrivilegeManager.getSystemPrincipal());
  442.    }
  443.  
  444.    private static Principal[] getPrincipalAry(Class var0, String var1, Object[] var2) {
  445.       Principal var3 = null;
  446.       int var4 = 0;
  447.       if (var2 != null) {
  448.          var4 += var2.length;
  449.       }
  450.  
  451.       if (var4 == 0) {
  452.          return PrivilegeManager.getUnknownPrincipalArray();
  453.       } else {
  454.          var3 = new Principal[var4];
  455.          int var5 = var4;
  456.  
  457.          while(var5-- > 0) {
  458.             if (isSystemPrincipal((byte[])var2[var5])) {
  459.                ((Object[])var3)[var5] = PrivilegeManager.getSystemPrincipal();
  460.             } else {
  461.                ((Object[])var3)[var5] = new Principal(14, (byte[])var2[var5], var0);
  462.             }
  463.          }
  464.  
  465.          return var3;
  466.       }
  467.    }
  468.  
  469.    private static native int getZigPtr(Class var0);
  470.  
  471.    native String getCertAttribute(int var1, int var2, byte[] var3);
  472.  
  473.    static native byte[] getPrincipalCertKey(String var0);
  474.  
  475.    static native Object[] getSystemPrincipalCertKey();
  476.  
  477.    private native boolean saveCert(int var1, byte[] var2);
  478. }
  479.