home *** CD-ROM | disk | FTP | other *** search
- package java.security;
-
- import java.io.BufferedInputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.AbstractCollection;
- import java.util.Enumeration;
- import java.util.HashSet;
- import java.util.Hashtable;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Properties;
- import java.util.Set;
- import java.util.Vector;
- import sun.misc.Launcher;
-
- public final class Security {
- private static boolean reloadProviders = false;
- static final boolean debug = false;
- static final boolean error = true;
- private static Properties props;
- private static Vector providers;
- private static Hashtable providerPropertiesCache;
- private static Hashtable engineCache;
- private static Hashtable searchResultsCache;
- // $FF: synthetic field
- static Class class$java$security$Security;
-
- private static void initialize() {
- props = new Properties();
- providers = new Vector();
- providerPropertiesCache = new Hashtable();
- engineCache = new Hashtable();
- searchResultsCache = new Hashtable(5);
- File var0 = securityPropFile("java.security");
- if (!var0.exists()) {
- System.err.println("security properties not found. using defaults.");
- initializeStatic();
- } else {
- try {
- FileInputStream var1 = new FileInputStream(var0);
- BufferedInputStream var2 = new BufferedInputStream(var1);
- props.load(var2);
- ((InputStream)var2).close();
- } catch (IOException var3) {
- error("could not load security properties file from " + var0 + ". using defaults.");
- initializeStatic();
- }
- }
-
- loadProviders();
- }
-
- private static void initializeStatic() {
- props.put("security.provider.1", "sun.security.provider.Sun");
- }
-
- private Security() {
- }
-
- private static synchronized void loadProviders() {
- int var0 = 1;
- Launcher var1 = Launcher.getLauncher();
-
- while(true) {
- String var2 = props.getProperty("security.provider." + var0++);
- if (var2 == null) {
- return;
- }
-
- Provider var3 = Provider.loadProvider(var2.trim());
- if (var3 != null) {
- providers.addElement(var3);
- } else if (var1 == null) {
- reloadProviders = true;
- }
- }
- }
-
- private static synchronized void reloadProviders() {
- if (reloadProviders) {
- Launcher var0 = Launcher.getLauncher();
- if (var0 != null) {
- reloadProviders = false;
- providers.removeAllElements();
- int var1 = 1;
-
- while(true) {
- String var2 = props.getProperty("security.provider." + var1++);
- if (var2 == null) {
- providerPropertiesCache.clear();
- engineCache.clear();
- searchResultsCache.clear();
- break;
- }
-
- Provider var3 = (Provider)AccessController.doPrivileged(new 2(var2));
- if (var3 != null) {
- providers.addElement(var3);
- }
- }
- }
- }
-
- }
-
- private static File securityPropFile(String var0) {
- String var1 = File.separator;
- return new File(System.getProperty("java.home") + var1 + "lib" + var1 + "security" + var1 + var0);
- }
-
- private static ProviderProperty getProviderProperty(String var0) {
- ProviderProperty var1 = (ProviderProperty)providerPropertiesCache.get(var0);
- if (var1 != null) {
- return var1;
- } else {
- for(int var2 = 0; var2 < providers.size(); ++var2) {
- String var3 = null;
- Provider var4 = (Provider)providers.elementAt(var2);
- String var5 = ((Properties)var4).getProperty(var0);
- if (var5 == null) {
- Enumeration var6 = ((Hashtable)var4).keys();
-
- while(var6.hasMoreElements() && var5 == null) {
- var3 = (String)var6.nextElement();
- if (var0.equalsIgnoreCase(var3)) {
- var5 = ((Properties)var4).getProperty(var3);
- break;
- }
- }
- }
-
- if (var5 != null) {
- ProviderProperty var7 = new ProviderProperty((1)null);
- var7.className = var5;
- var7.provider = var4;
- providerPropertiesCache.put(var0, var7);
- if (var3 != null) {
- providerPropertiesCache.put(var3, var7);
- }
-
- return var7;
- }
- }
-
- return var1;
- }
- }
-
- private static String getProviderProperty(String var0, Provider var1) {
- String var2 = ((Properties)var1).getProperty(var0);
- if (var2 == null) {
- Enumeration var3 = ((Hashtable)var1).keys();
-
- while(var3.hasMoreElements() && var2 == null) {
- String var4 = (String)var3.nextElement();
- if (var0.equalsIgnoreCase(var4)) {
- var2 = ((Properties)var1).getProperty(var4);
- break;
- }
- }
- }
-
- return var2;
- }
-
- private static String getStandardName(String var0, String var1, Provider var2) {
- return getProviderProperty("Alg.Alias." + var1 + "." + var0, var2);
- }
-
- public static String getAlgorithmProperty(String var0, String var1) {
- reloadProviders();
- ProviderProperty var2 = getProviderProperty("Alg." + var1 + "." + var0);
- return var2 != null ? var2.className : null;
- }
-
- private static ProviderProperty getEngineClassName(String var0, String var1) throws NoSuchAlgorithmException {
- String var3 = var1;
- if (var0 != null) {
- var3 = var1 + "." + var0;
- }
-
- ProviderProperty var2 = (ProviderProperty)engineCache.get(var3);
- if (var2 != null) {
- return var2;
- } else {
- Class var4 = class$java$security$Security == null ? (class$java$security$Security = class$("java.security.Security")) : class$java$security$Security;
- synchronized(var4) {
- int var5 = 0;
-
- while(var5 < providers.size()) {
- Provider var6 = (Provider)providers.elementAt(var5);
-
- label34: {
- try {
- var2 = getEngineClassName(var0, var6.getName(), var1);
- break label34;
- } catch (NoSuchAlgorithmException var10) {
- } catch (NoSuchProviderException var11) {
- }
-
- ++var5;
- continue;
- }
-
- engineCache.put(var3, var2);
- return var2;
- }
- }
-
- throw new NoSuchAlgorithmException(var0.toUpperCase() + " " + var1 + " not available");
- }
- }
-
- private static ProviderProperty getEngineClassName(String var0, String var1, String var2) throws NoSuchAlgorithmException, NoSuchProviderException {
- if (var1 == null) {
- return getEngineClassName(var0, var2);
- } else {
- Provider var3 = getProvider(var1);
- if (var3 == null) {
- throw new NoSuchProviderException("no such provider: " + var1);
- } else {
- String var4;
- if (var2.equalsIgnoreCase("SecureRandom") && var0 == null) {
- var4 = var2;
- } else {
- var4 = var2 + "." + var0;
- }
-
- String var5 = getProviderProperty(var4, var3);
- if (var5 == null) {
- if (var2.equalsIgnoreCase("SecureRandom") && var0 == null) {
- throw new NoSuchAlgorithmException("SecureRandom not available for provider " + var1);
- }
-
- String var6 = getStandardName(var0, var2, var3);
- if (var6 != null) {
- var4 = var2 + "." + var6;
- }
-
- if (var6 == null || (var5 = getProviderProperty(var4, var3)) == null) {
- throw new NoSuchAlgorithmException("no such algorithm: " + var0 + " for provider " + var1);
- }
- }
-
- ProviderProperty var7 = new ProviderProperty((1)null);
- var7.className = var5;
- var7.provider = var3;
- return var7;
- }
- }
- }
-
- public static synchronized int insertProviderAt(Provider var0, int var1) {
- reloadProviders();
- check("insertProvider." + var0.getName());
- Provider var2 = getProvider(var0.getName());
- if (var2 != null) {
- return -1;
- } else {
- int var3 = providers.size();
- if (var1 > var3 || var1 <= 0) {
- var1 = var3 + 1;
- }
-
- providers.insertElementAt(var0, var1 - 1);
- providerPropertiesCache.clear();
- engineCache.clear();
- searchResultsCache.clear();
- return var1;
- }
- }
-
- public static int addProvider(Provider var0) {
- return insertProviderAt(var0, providers.size() + 1);
- }
-
- public static synchronized void removeProvider(String var0) {
- reloadProviders();
- check("removeProvider." + var0);
- Provider var1 = getProvider(var0);
- if (var1 != null) {
- Iterator var2 = providers.iterator();
-
- while(var2.hasNext()) {
- if (var2.next() == var1) {
- var2.remove();
- }
- }
-
- providerPropertiesCache.clear();
- engineCache.clear();
- searchResultsCache.clear();
- }
-
- }
-
- public static synchronized Provider[] getProviders() {
- reloadProviders();
- Provider[] var0 = new Provider[providers.size()];
- providers.copyInto(var0);
- return var0;
- }
-
- public static synchronized Provider getProvider(String var0) {
- reloadProviders();
- Enumeration var1 = providers.elements();
-
- while(var1.hasMoreElements()) {
- Provider var2 = (Provider)var1.nextElement();
- if (var2.getName().equals(var0)) {
- return var2;
- }
- }
-
- return null;
- }
-
- public static Provider[] getProviders(String var0) {
- Object var1 = null;
- Object var2 = null;
- int var3 = var0.indexOf(58);
- String var5;
- String var6;
- if (var3 == -1) {
- var5 = new String(var0);
- var6 = "";
- } else {
- var5 = var0.substring(0, var3);
- var6 = var0.substring(var3 + 1);
- }
-
- Hashtable var4 = new Hashtable(1);
- var4.put(var5, var6);
- return getProviders((Map)var4);
- }
-
- public static Provider[] getProviders(Map var0) {
- Provider[] var1 = getProviders();
- Set var2 = var0.keySet();
- HashSet var3 = new HashSet(5);
- if (var2 != null && var1 != null) {
- boolean var4 = true;
-
- for(String var6 : var2) {
- String var7 = (String)var0.get(var6);
- HashSet var8 = getAllQualifyingCandidates(var6, var7, var1);
- if (var4) {
- var3 = var8;
- var4 = false;
- }
-
- if (var8 == null || var8.isEmpty()) {
- var3 = null;
- break;
- }
-
- Iterator var9 = var3.iterator();
-
- while(var9.hasNext()) {
- Provider var10 = (Provider)var9.next();
- if (!var8.contains(var10)) {
- var9.remove();
- }
- }
- }
-
- if (var3 != null && !var3.isEmpty()) {
- Object[] var11 = ((AbstractCollection)var3).toArray();
- Provider[] var12 = new Provider[var11.length];
-
- for(int var13 = 0; var13 < var12.length; ++var13) {
- var12[var13] = (Provider)var11[var13];
- }
-
- return var12;
- } else {
- return null;
- }
- } else {
- return var1;
- }
- }
-
- private static boolean checkSuperclass(Class var0, Class var1) {
- while(!var0.equals(var1)) {
- var0 = var0.getSuperclass();
- if (var0 == null) {
- return false;
- }
- }
-
- return true;
- }
-
- static Object[] getImpl(String var0, String var1, String var2) throws NoSuchAlgorithmException, NoSuchProviderException {
- reloadProviders();
- ProviderProperty var3 = getEngineClassName(var0, var2, var1);
- String var4 = var3.className;
-
- try {
- Class var5;
- if (var1.equals("CertificateFactory")) {
- var5 = Class.forName("java.security.cert." + var1 + "Spi");
- } else {
- var5 = Class.forName("java.security." + var1 + "Spi");
- }
-
- ClassLoader var6 = var3.provider.getClass().getClassLoader();
- Class var7;
- if (var6 != null) {
- var7 = var6.loadClass(var4);
- } else {
- var7 = Class.forName(var4);
- }
-
- if (checkSuperclass(var7, var5)) {
- Object var8 = var7.newInstance();
- return new Object[]{var8, var3.provider};
- } else {
- throw new NoSuchAlgorithmException("class configured for " + var1 + ": " + var4 + " not a " + var1);
- }
- } catch (ClassNotFoundException var9) {
- throw new NoSuchAlgorithmException("class configured for " + var1 + "(provider: " + var2 + ")" + "cannot be found.\n" + ((Throwable)var9).getMessage());
- } catch (InstantiationException var10) {
- throw new NoSuchAlgorithmException("class " + var4 + " configured for " + var1 + "(provider: " + var2 + ") cannot be instantiated.\n" + ((Throwable)var10).getMessage());
- } catch (IllegalAccessException var11) {
- throw new NoSuchAlgorithmException("class " + var4 + " configured for " + var1 + "(provider: " + var2 + ") cannot be accessed.\n" + ((Throwable)var11).getMessage());
- } catch (SecurityException var12) {
- throw new NoSuchAlgorithmException("class " + var4 + " configured for " + var1 + "(provider: " + var2 + ") cannot be accessed.\n" + ((Throwable)var12).getMessage());
- }
- }
-
- public static String getProperty(String var0) {
- SecurityManager var1 = System.getSecurityManager();
- if (var1 != null) {
- var1.checkPermission(new SecurityPermission("getProperty." + var0));
- }
-
- String var2 = props.getProperty(var0);
- if (var2 != null) {
- var2 = var2.trim();
- }
-
- return var2;
- }
-
- public static void setProperty(String var0, String var1) {
- check("setProperty." + var0);
- props.put(var0, var1);
- invalidateSMCache(var0);
- }
-
- private static void invalidateSMCache(String var0) {
- boolean var1 = var0.equals("package.access");
- boolean var2 = var0.equals("package.definition");
- if (var1 || var2) {
- AccessController.doPrivileged(new 3(var1));
- }
-
- }
-
- private static void check(String var0) {
- SecurityManager var1 = System.getSecurityManager();
- if (var1 != null) {
- var1.checkSecurityAccess(var0);
- }
-
- }
-
- static void error(String var0) {
- }
-
- static void error(String var0, Throwable var1) {
- error(var0);
- }
-
- static void debug(String var0) {
- }
-
- static void debug(String var0, Throwable var1) {
- }
-
- private static HashSet getAllQualifyingCandidates(String var0, String var1, Provider[] var2) {
- String[] var3 = getFilterComponents(var0, var1);
- String var4 = var3[0];
- String var5 = var3[1];
- String var6 = var3[2];
- String var7 = var4 + '.' + var5;
- HashSet var8 = (HashSet)searchResultsCache.get(var7);
- HashSet var9 = getProvidersNotUsingCache(var4, var5, (String)null, (String)null, (HashSet)null, var2);
- if (var9 != null && !var9.isEmpty()) {
- searchResultsCache.put(var7, var9);
- return var6 == null ? var9 : getProvidersNotUsingCache(var4, var5, var6, var1, var8, var2);
- } else {
- return null;
- }
- }
-
- private static HashSet getProvidersNotUsingCache(String var0, String var1, String var2, String var3, HashSet var4, Provider[] var5) {
- if (var2 != null && var4 != null && !var4.isEmpty()) {
- Iterator var6 = var4.iterator();
-
- while(var6.hasNext()) {
- Provider var7 = (Provider)var6.next();
- if (!isCriterionSatisfied(var7, var0, var1, var2, var3)) {
- var6.remove();
- }
- }
- }
-
- if (var4 == null || var4.isEmpty()) {
- if (var4 == null) {
- var4 = new HashSet(5);
- }
-
- for(int var8 = 0; var8 < var5.length; ++var8) {
- if (isCriterionSatisfied(var5[var8], var0, var1, var2, var3)) {
- var4.add(var5[var8]);
- }
- }
- }
-
- return var4;
- }
-
- private static boolean isCriterionSatisfied(Provider var0, String var1, String var2, String var3, String var4) {
- String var5 = var1 + '.' + var2;
- if (var3 != null) {
- var5 = var5 + ' ' + var3;
- }
-
- String var6 = getProviderProperty(var5, var0);
- if (var6 == null) {
- String var7 = getProviderProperty("Alg.Alias." + var1 + "." + var2, var0);
- if (var7 != null) {
- var5 = var1 + "." + var7;
- if (var3 != null) {
- var5 = var5 + ' ' + var3;
- }
-
- var6 = getProviderProperty(var5, var0);
- }
-
- if (var6 == null) {
- return false;
- }
- }
-
- if (var3 == null) {
- return true;
- } else {
- return isStandardAttr(var3) ? isConstraintSatisfied(var3, var4, var6) : var4.equalsIgnoreCase(var6);
- }
- }
-
- private static boolean isStandardAttr(String var0) {
- if (var0.equalsIgnoreCase("KeySize")) {
- return true;
- } else {
- return var0.equalsIgnoreCase("ImplementedIn");
- }
- }
-
- private static boolean isConstraintSatisfied(String var0, String var1, String var2) {
- if (var0.equalsIgnoreCase("KeySize")) {
- int var3 = new Integer(var1);
- int var4 = new Integer(var2);
- return var3 <= var4;
- } else {
- return var0.equalsIgnoreCase("ImplementedIn") ? var1.equalsIgnoreCase(var2) : false;
- }
- }
-
- static String[] getFilterComponents(String var0, String var1) {
- int var2 = var0.indexOf(46);
- if (var2 < 0) {
- throw new InvalidParameterException("Invalid filter");
- } else {
- String var3 = var0.substring(0, var2);
- Object var4 = null;
- String var5 = null;
- String var7;
- if (var1.length() == 0) {
- var7 = var0.substring(var2 + 1).trim();
- if (var7.length() == 0) {
- throw new InvalidParameterException("Invalid filter");
- }
- } else {
- int var6 = var0.indexOf(32);
- if (var6 == -1) {
- throw new InvalidParameterException("Invalid filter");
- }
-
- var5 = var0.substring(var6 + 1).trim();
- if (var5.length() == 0) {
- throw new InvalidParameterException("Invalid filter");
- }
-
- if (var6 < var2 || var2 == var6 - 1) {
- throw new InvalidParameterException("Invalid filter");
- }
-
- var7 = var0.substring(var2 + 1, var6);
- }
-
- String[] var8 = new String[]{var3, var7, var5};
- return var8;
- }
- }
-
- // $FF: synthetic method
- static void access$000() {
- initialize();
- }
-
- // $FF: synthetic method
- static Class class$(String var0) {
- try {
- return Class.forName(var0);
- } catch (ClassNotFoundException var2) {
- throw new NoClassDefFoundError(((Throwable)var2).getMessage());
- }
- }
-
- static {
- AccessController.doPrivileged(new 1());
- }
- }
-