home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / security / Security.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  11.4 KB  |  632 lines

  1. package java.security;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.util.AbstractCollection;
  9. import java.util.Enumeration;
  10. import java.util.HashSet;
  11. import java.util.Hashtable;
  12. import java.util.Iterator;
  13. import java.util.Map;
  14. import java.util.Properties;
  15. import java.util.Set;
  16. import java.util.Vector;
  17. import sun.misc.Launcher;
  18.  
  19. public final class Security {
  20.    private static boolean reloadProviders = false;
  21.    static final boolean debug = false;
  22.    static final boolean error = true;
  23.    private static Properties props;
  24.    private static Vector providers;
  25.    private static Hashtable providerPropertiesCache;
  26.    private static Hashtable engineCache;
  27.    private static Hashtable searchResultsCache;
  28.    // $FF: synthetic field
  29.    static Class class$java$security$Security;
  30.  
  31.    private static void initialize() {
  32.       props = new Properties();
  33.       providers = new Vector();
  34.       providerPropertiesCache = new Hashtable();
  35.       engineCache = new Hashtable();
  36.       searchResultsCache = new Hashtable(5);
  37.       File var0 = securityPropFile("java.security");
  38.       if (!var0.exists()) {
  39.          System.err.println("security properties not found. using defaults.");
  40.          initializeStatic();
  41.       } else {
  42.          try {
  43.             FileInputStream var1 = new FileInputStream(var0);
  44.             BufferedInputStream var2 = new BufferedInputStream(var1);
  45.             props.load(var2);
  46.             ((InputStream)var2).close();
  47.          } catch (IOException var3) {
  48.             error("could not load security properties file from " + var0 + ". using defaults.");
  49.             initializeStatic();
  50.          }
  51.       }
  52.  
  53.       loadProviders();
  54.    }
  55.  
  56.    private static void initializeStatic() {
  57.       props.put("security.provider.1", "sun.security.provider.Sun");
  58.    }
  59.  
  60.    private Security() {
  61.    }
  62.  
  63.    private static synchronized void loadProviders() {
  64.       int var0 = 1;
  65.       Launcher var1 = Launcher.getLauncher();
  66.  
  67.       while(true) {
  68.          String var2 = props.getProperty("security.provider." + var0++);
  69.          if (var2 == null) {
  70.             return;
  71.          }
  72.  
  73.          Provider var3 = Provider.loadProvider(var2.trim());
  74.          if (var3 != null) {
  75.             providers.addElement(var3);
  76.          } else if (var1 == null) {
  77.             reloadProviders = true;
  78.          }
  79.       }
  80.    }
  81.  
  82.    private static synchronized void reloadProviders() {
  83.       if (reloadProviders) {
  84.          Launcher var0 = Launcher.getLauncher();
  85.          if (var0 != null) {
  86.             reloadProviders = false;
  87.             providers.removeAllElements();
  88.             int var1 = 1;
  89.  
  90.             while(true) {
  91.                String var2 = props.getProperty("security.provider." + var1++);
  92.                if (var2 == null) {
  93.                   providerPropertiesCache.clear();
  94.                   engineCache.clear();
  95.                   searchResultsCache.clear();
  96.                   break;
  97.                }
  98.  
  99.                Provider var3 = (Provider)AccessController.doPrivileged(new 2(var2));
  100.                if (var3 != null) {
  101.                   providers.addElement(var3);
  102.                }
  103.             }
  104.          }
  105.       }
  106.  
  107.    }
  108.  
  109.    private static File securityPropFile(String var0) {
  110.       String var1 = File.separator;
  111.       return new File(System.getProperty("java.home") + var1 + "lib" + var1 + "security" + var1 + var0);
  112.    }
  113.  
  114.    private static ProviderProperty getProviderProperty(String var0) {
  115.       ProviderProperty var1 = (ProviderProperty)providerPropertiesCache.get(var0);
  116.       if (var1 != null) {
  117.          return var1;
  118.       } else {
  119.          for(int var2 = 0; var2 < providers.size(); ++var2) {
  120.             String var3 = null;
  121.             Provider var4 = (Provider)providers.elementAt(var2);
  122.             String var5 = ((Properties)var4).getProperty(var0);
  123.             if (var5 == null) {
  124.                Enumeration var6 = ((Hashtable)var4).keys();
  125.  
  126.                while(var6.hasMoreElements() && var5 == null) {
  127.                   var3 = (String)var6.nextElement();
  128.                   if (var0.equalsIgnoreCase(var3)) {
  129.                      var5 = ((Properties)var4).getProperty(var3);
  130.                      break;
  131.                   }
  132.                }
  133.             }
  134.  
  135.             if (var5 != null) {
  136.                ProviderProperty var7 = new ProviderProperty((1)null);
  137.                var7.className = var5;
  138.                var7.provider = var4;
  139.                providerPropertiesCache.put(var0, var7);
  140.                if (var3 != null) {
  141.                   providerPropertiesCache.put(var3, var7);
  142.                }
  143.  
  144.                return var7;
  145.             }
  146.          }
  147.  
  148.          return var1;
  149.       }
  150.    }
  151.  
  152.    private static String getProviderProperty(String var0, Provider var1) {
  153.       String var2 = ((Properties)var1).getProperty(var0);
  154.       if (var2 == null) {
  155.          Enumeration var3 = ((Hashtable)var1).keys();
  156.  
  157.          while(var3.hasMoreElements() && var2 == null) {
  158.             String var4 = (String)var3.nextElement();
  159.             if (var0.equalsIgnoreCase(var4)) {
  160.                var2 = ((Properties)var1).getProperty(var4);
  161.                break;
  162.             }
  163.          }
  164.       }
  165.  
  166.       return var2;
  167.    }
  168.  
  169.    private static String getStandardName(String var0, String var1, Provider var2) {
  170.       return getProviderProperty("Alg.Alias." + var1 + "." + var0, var2);
  171.    }
  172.  
  173.    public static String getAlgorithmProperty(String var0, String var1) {
  174.       reloadProviders();
  175.       ProviderProperty var2 = getProviderProperty("Alg." + var1 + "." + var0);
  176.       return var2 != null ? var2.className : null;
  177.    }
  178.  
  179.    private static ProviderProperty getEngineClassName(String var0, String var1) throws NoSuchAlgorithmException {
  180.       String var3 = var1;
  181.       if (var0 != null) {
  182.          var3 = var1 + "." + var0;
  183.       }
  184.  
  185.       ProviderProperty var2 = (ProviderProperty)engineCache.get(var3);
  186.       if (var2 != null) {
  187.          return var2;
  188.       } else {
  189.          Class var4 = class$java$security$Security == null ? (class$java$security$Security = class$("java.security.Security")) : class$java$security$Security;
  190.          synchronized(var4) {
  191.             int var5 = 0;
  192.  
  193.             while(var5 < providers.size()) {
  194.                Provider var6 = (Provider)providers.elementAt(var5);
  195.  
  196.                label34: {
  197.                   try {
  198.                      var2 = getEngineClassName(var0, var6.getName(), var1);
  199.                      break label34;
  200.                   } catch (NoSuchAlgorithmException var10) {
  201.                   } catch (NoSuchProviderException var11) {
  202.                   }
  203.  
  204.                   ++var5;
  205.                   continue;
  206.                }
  207.  
  208.                engineCache.put(var3, var2);
  209.                return var2;
  210.             }
  211.          }
  212.  
  213.          throw new NoSuchAlgorithmException(var0.toUpperCase() + " " + var1 + " not available");
  214.       }
  215.    }
  216.  
  217.    private static ProviderProperty getEngineClassName(String var0, String var1, String var2) throws NoSuchAlgorithmException, NoSuchProviderException {
  218.       if (var1 == null) {
  219.          return getEngineClassName(var0, var2);
  220.       } else {
  221.          Provider var3 = getProvider(var1);
  222.          if (var3 == null) {
  223.             throw new NoSuchProviderException("no such provider: " + var1);
  224.          } else {
  225.             String var4;
  226.             if (var2.equalsIgnoreCase("SecureRandom") && var0 == null) {
  227.                var4 = var2;
  228.             } else {
  229.                var4 = var2 + "." + var0;
  230.             }
  231.  
  232.             String var5 = getProviderProperty(var4, var3);
  233.             if (var5 == null) {
  234.                if (var2.equalsIgnoreCase("SecureRandom") && var0 == null) {
  235.                   throw new NoSuchAlgorithmException("SecureRandom not available for provider " + var1);
  236.                }
  237.  
  238.                String var6 = getStandardName(var0, var2, var3);
  239.                if (var6 != null) {
  240.                   var4 = var2 + "." + var6;
  241.                }
  242.  
  243.                if (var6 == null || (var5 = getProviderProperty(var4, var3)) == null) {
  244.                   throw new NoSuchAlgorithmException("no such algorithm: " + var0 + " for provider " + var1);
  245.                }
  246.             }
  247.  
  248.             ProviderProperty var7 = new ProviderProperty((1)null);
  249.             var7.className = var5;
  250.             var7.provider = var3;
  251.             return var7;
  252.          }
  253.       }
  254.    }
  255.  
  256.    public static synchronized int insertProviderAt(Provider var0, int var1) {
  257.       reloadProviders();
  258.       check("insertProvider." + var0.getName());
  259.       Provider var2 = getProvider(var0.getName());
  260.       if (var2 != null) {
  261.          return -1;
  262.       } else {
  263.          int var3 = providers.size();
  264.          if (var1 > var3 || var1 <= 0) {
  265.             var1 = var3 + 1;
  266.          }
  267.  
  268.          providers.insertElementAt(var0, var1 - 1);
  269.          providerPropertiesCache.clear();
  270.          engineCache.clear();
  271.          searchResultsCache.clear();
  272.          return var1;
  273.       }
  274.    }
  275.  
  276.    public static int addProvider(Provider var0) {
  277.       return insertProviderAt(var0, providers.size() + 1);
  278.    }
  279.  
  280.    public static synchronized void removeProvider(String var0) {
  281.       reloadProviders();
  282.       check("removeProvider." + var0);
  283.       Provider var1 = getProvider(var0);
  284.       if (var1 != null) {
  285.          Iterator var2 = providers.iterator();
  286.  
  287.          while(var2.hasNext()) {
  288.             if (var2.next() == var1) {
  289.                var2.remove();
  290.             }
  291.          }
  292.  
  293.          providerPropertiesCache.clear();
  294.          engineCache.clear();
  295.          searchResultsCache.clear();
  296.       }
  297.  
  298.    }
  299.  
  300.    public static synchronized Provider[] getProviders() {
  301.       reloadProviders();
  302.       Provider[] var0 = new Provider[providers.size()];
  303.       providers.copyInto(var0);
  304.       return var0;
  305.    }
  306.  
  307.    public static synchronized Provider getProvider(String var0) {
  308.       reloadProviders();
  309.       Enumeration var1 = providers.elements();
  310.  
  311.       while(var1.hasMoreElements()) {
  312.          Provider var2 = (Provider)var1.nextElement();
  313.          if (var2.getName().equals(var0)) {
  314.             return var2;
  315.          }
  316.       }
  317.  
  318.       return null;
  319.    }
  320.  
  321.    public static Provider[] getProviders(String var0) {
  322.       Object var1 = null;
  323.       Object var2 = null;
  324.       int var3 = var0.indexOf(58);
  325.       String var5;
  326.       String var6;
  327.       if (var3 == -1) {
  328.          var5 = new String(var0);
  329.          var6 = "";
  330.       } else {
  331.          var5 = var0.substring(0, var3);
  332.          var6 = var0.substring(var3 + 1);
  333.       }
  334.  
  335.       Hashtable var4 = new Hashtable(1);
  336.       var4.put(var5, var6);
  337.       return getProviders((Map)var4);
  338.    }
  339.  
  340.    public static Provider[] getProviders(Map var0) {
  341.       Provider[] var1 = getProviders();
  342.       Set var2 = var0.keySet();
  343.       HashSet var3 = new HashSet(5);
  344.       if (var2 != null && var1 != null) {
  345.          boolean var4 = true;
  346.  
  347.          for(String var6 : var2) {
  348.             String var7 = (String)var0.get(var6);
  349.             HashSet var8 = getAllQualifyingCandidates(var6, var7, var1);
  350.             if (var4) {
  351.                var3 = var8;
  352.                var4 = false;
  353.             }
  354.  
  355.             if (var8 == null || var8.isEmpty()) {
  356.                var3 = null;
  357.                break;
  358.             }
  359.  
  360.             Iterator var9 = var3.iterator();
  361.  
  362.             while(var9.hasNext()) {
  363.                Provider var10 = (Provider)var9.next();
  364.                if (!var8.contains(var10)) {
  365.                   var9.remove();
  366.                }
  367.             }
  368.          }
  369.  
  370.          if (var3 != null && !var3.isEmpty()) {
  371.             Object[] var11 = ((AbstractCollection)var3).toArray();
  372.             Provider[] var12 = new Provider[var11.length];
  373.  
  374.             for(int var13 = 0; var13 < var12.length; ++var13) {
  375.                var12[var13] = (Provider)var11[var13];
  376.             }
  377.  
  378.             return var12;
  379.          } else {
  380.             return null;
  381.          }
  382.       } else {
  383.          return var1;
  384.       }
  385.    }
  386.  
  387.    private static boolean checkSuperclass(Class var0, Class var1) {
  388.       while(!var0.equals(var1)) {
  389.          var0 = var0.getSuperclass();
  390.          if (var0 == null) {
  391.             return false;
  392.          }
  393.       }
  394.  
  395.       return true;
  396.    }
  397.  
  398.    static Object[] getImpl(String var0, String var1, String var2) throws NoSuchAlgorithmException, NoSuchProviderException {
  399.       reloadProviders();
  400.       ProviderProperty var3 = getEngineClassName(var0, var2, var1);
  401.       String var4 = var3.className;
  402.  
  403.       try {
  404.          Class var5;
  405.          if (var1.equals("CertificateFactory")) {
  406.             var5 = Class.forName("java.security.cert." + var1 + "Spi");
  407.          } else {
  408.             var5 = Class.forName("java.security." + var1 + "Spi");
  409.          }
  410.  
  411.          ClassLoader var6 = var3.provider.getClass().getClassLoader();
  412.          Class var7;
  413.          if (var6 != null) {
  414.             var7 = var6.loadClass(var4);
  415.          } else {
  416.             var7 = Class.forName(var4);
  417.          }
  418.  
  419.          if (checkSuperclass(var7, var5)) {
  420.             Object var8 = var7.newInstance();
  421.             return new Object[]{var8, var3.provider};
  422.          } else {
  423.             throw new NoSuchAlgorithmException("class configured for " + var1 + ": " + var4 + " not a " + var1);
  424.          }
  425.       } catch (ClassNotFoundException var9) {
  426.          throw new NoSuchAlgorithmException("class configured for " + var1 + "(provider: " + var2 + ")" + "cannot be found.\n" + ((Throwable)var9).getMessage());
  427.       } catch (InstantiationException var10) {
  428.          throw new NoSuchAlgorithmException("class " + var4 + " configured for " + var1 + "(provider: " + var2 + ") cannot be instantiated.\n" + ((Throwable)var10).getMessage());
  429.       } catch (IllegalAccessException var11) {
  430.          throw new NoSuchAlgorithmException("class " + var4 + " configured for " + var1 + "(provider: " + var2 + ") cannot be accessed.\n" + ((Throwable)var11).getMessage());
  431.       } catch (SecurityException var12) {
  432.          throw new NoSuchAlgorithmException("class " + var4 + " configured for " + var1 + "(provider: " + var2 + ") cannot be accessed.\n" + ((Throwable)var12).getMessage());
  433.       }
  434.    }
  435.  
  436.    public static String getProperty(String var0) {
  437.       SecurityManager var1 = System.getSecurityManager();
  438.       if (var1 != null) {
  439.          var1.checkPermission(new SecurityPermission("getProperty." + var0));
  440.       }
  441.  
  442.       String var2 = props.getProperty(var0);
  443.       if (var2 != null) {
  444.          var2 = var2.trim();
  445.       }
  446.  
  447.       return var2;
  448.    }
  449.  
  450.    public static void setProperty(String var0, String var1) {
  451.       check("setProperty." + var0);
  452.       props.put(var0, var1);
  453.       invalidateSMCache(var0);
  454.    }
  455.  
  456.    private static void invalidateSMCache(String var0) {
  457.       boolean var1 = var0.equals("package.access");
  458.       boolean var2 = var0.equals("package.definition");
  459.       if (var1 || var2) {
  460.          AccessController.doPrivileged(new 3(var1));
  461.       }
  462.  
  463.    }
  464.  
  465.    private static void check(String var0) {
  466.       SecurityManager var1 = System.getSecurityManager();
  467.       if (var1 != null) {
  468.          var1.checkSecurityAccess(var0);
  469.       }
  470.  
  471.    }
  472.  
  473.    static void error(String var0) {
  474.    }
  475.  
  476.    static void error(String var0, Throwable var1) {
  477.       error(var0);
  478.    }
  479.  
  480.    static void debug(String var0) {
  481.    }
  482.  
  483.    static void debug(String var0, Throwable var1) {
  484.    }
  485.  
  486.    private static HashSet getAllQualifyingCandidates(String var0, String var1, Provider[] var2) {
  487.       String[] var3 = getFilterComponents(var0, var1);
  488.       String var4 = var3[0];
  489.       String var5 = var3[1];
  490.       String var6 = var3[2];
  491.       String var7 = var4 + '.' + var5;
  492.       HashSet var8 = (HashSet)searchResultsCache.get(var7);
  493.       HashSet var9 = getProvidersNotUsingCache(var4, var5, (String)null, (String)null, (HashSet)null, var2);
  494.       if (var9 != null && !var9.isEmpty()) {
  495.          searchResultsCache.put(var7, var9);
  496.          return var6 == null ? var9 : getProvidersNotUsingCache(var4, var5, var6, var1, var8, var2);
  497.       } else {
  498.          return null;
  499.       }
  500.    }
  501.  
  502.    private static HashSet getProvidersNotUsingCache(String var0, String var1, String var2, String var3, HashSet var4, Provider[] var5) {
  503.       if (var2 != null && var4 != null && !var4.isEmpty()) {
  504.          Iterator var6 = var4.iterator();
  505.  
  506.          while(var6.hasNext()) {
  507.             Provider var7 = (Provider)var6.next();
  508.             if (!isCriterionSatisfied(var7, var0, var1, var2, var3)) {
  509.                var6.remove();
  510.             }
  511.          }
  512.       }
  513.  
  514.       if (var4 == null || var4.isEmpty()) {
  515.          if (var4 == null) {
  516.             var4 = new HashSet(5);
  517.          }
  518.  
  519.          for(int var8 = 0; var8 < var5.length; ++var8) {
  520.             if (isCriterionSatisfied(var5[var8], var0, var1, var2, var3)) {
  521.                var4.add(var5[var8]);
  522.             }
  523.          }
  524.       }
  525.  
  526.       return var4;
  527.    }
  528.  
  529.    private static boolean isCriterionSatisfied(Provider var0, String var1, String var2, String var3, String var4) {
  530.       String var5 = var1 + '.' + var2;
  531.       if (var3 != null) {
  532.          var5 = var5 + ' ' + var3;
  533.       }
  534.  
  535.       String var6 = getProviderProperty(var5, var0);
  536.       if (var6 == null) {
  537.          String var7 = getProviderProperty("Alg.Alias." + var1 + "." + var2, var0);
  538.          if (var7 != null) {
  539.             var5 = var1 + "." + var7;
  540.             if (var3 != null) {
  541.                var5 = var5 + ' ' + var3;
  542.             }
  543.  
  544.             var6 = getProviderProperty(var5, var0);
  545.          }
  546.  
  547.          if (var6 == null) {
  548.             return false;
  549.          }
  550.       }
  551.  
  552.       if (var3 == null) {
  553.          return true;
  554.       } else {
  555.          return isStandardAttr(var3) ? isConstraintSatisfied(var3, var4, var6) : var4.equalsIgnoreCase(var6);
  556.       }
  557.    }
  558.  
  559.    private static boolean isStandardAttr(String var0) {
  560.       if (var0.equalsIgnoreCase("KeySize")) {
  561.          return true;
  562.       } else {
  563.          return var0.equalsIgnoreCase("ImplementedIn");
  564.       }
  565.    }
  566.  
  567.    private static boolean isConstraintSatisfied(String var0, String var1, String var2) {
  568.       if (var0.equalsIgnoreCase("KeySize")) {
  569.          int var3 = new Integer(var1);
  570.          int var4 = new Integer(var2);
  571.          return var3 <= var4;
  572.       } else {
  573.          return var0.equalsIgnoreCase("ImplementedIn") ? var1.equalsIgnoreCase(var2) : false;
  574.       }
  575.    }
  576.  
  577.    static String[] getFilterComponents(String var0, String var1) {
  578.       int var2 = var0.indexOf(46);
  579.       if (var2 < 0) {
  580.          throw new InvalidParameterException("Invalid filter");
  581.       } else {
  582.          String var3 = var0.substring(0, var2);
  583.          Object var4 = null;
  584.          String var5 = null;
  585.          String var7;
  586.          if (var1.length() == 0) {
  587.             var7 = var0.substring(var2 + 1).trim();
  588.             if (var7.length() == 0) {
  589.                throw new InvalidParameterException("Invalid filter");
  590.             }
  591.          } else {
  592.             int var6 = var0.indexOf(32);
  593.             if (var6 == -1) {
  594.                throw new InvalidParameterException("Invalid filter");
  595.             }
  596.  
  597.             var5 = var0.substring(var6 + 1).trim();
  598.             if (var5.length() == 0) {
  599.                throw new InvalidParameterException("Invalid filter");
  600.             }
  601.  
  602.             if (var6 < var2 || var2 == var6 - 1) {
  603.                throw new InvalidParameterException("Invalid filter");
  604.             }
  605.  
  606.             var7 = var0.substring(var2 + 1, var6);
  607.          }
  608.  
  609.          String[] var8 = new String[]{var3, var7, var5};
  610.          return var8;
  611.       }
  612.    }
  613.  
  614.    // $FF: synthetic method
  615.    static void access$000() {
  616.       initialize();
  617.    }
  618.  
  619.    // $FF: synthetic method
  620.    static Class class$(String var0) {
  621.       try {
  622.          return Class.forName(var0);
  623.       } catch (ClassNotFoundException var2) {
  624.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  625.       }
  626.    }
  627.  
  628.    static {
  629.       AccessController.doPrivileged(new 1());
  630.    }
  631. }
  632.