home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / security / Provider.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  11.7 KB  |  564 lines

  1. package java.security;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.ObjectInputStream;
  6. import java.util.Collection;
  7. import java.util.Collections;
  8. import java.util.Enumeration;
  9. import java.util.HashMap;
  10. import java.util.Iterator;
  11. import java.util.LinkedHashMap;
  12. import java.util.LinkedHashSet;
  13. import java.util.Locale;
  14. import java.util.Map;
  15. import java.util.Properties;
  16. import java.util.Set;
  17. import sun.security.util.Debug;
  18.  
  19. public abstract class Provider extends Properties {
  20.    static final long serialVersionUID = -4298000515446427739L;
  21.    private static final Debug debug = Debug.getInstance("provider", "Provider");
  22.    private String name;
  23.    private String info;
  24.    private double version;
  25.    private transient Set entrySet = null;
  26.    private transient int entrySetCallCount = 0;
  27.    private transient boolean initialized;
  28.    private transient boolean legacyChanged;
  29.    private transient boolean servicesChanged;
  30.    private transient Map<String, String> legacyStrings;
  31.    private transient Map<ServiceKey, Service> serviceMap;
  32.    private transient Map<ServiceKey, Service> legacyMap;
  33.    private transient Set<Service> serviceSet;
  34.    private static final String ALIAS_PREFIX = "Alg.Alias.";
  35.    private static final String ALIAS_PREFIX_LOWER = "alg.alias.";
  36.    private static final int ALIAS_LENGTH = "Alg.Alias.".length();
  37.    private static volatile ServiceKey previousKey = new ServiceKey("", "", false, (1)null);
  38.    private static final Map<String, EngineDescription> knownEngines = new HashMap();
  39.  
  40.    protected Provider(String var1, double var2, String var4) {
  41.       this.name = var1;
  42.       this.version = var2;
  43.       this.info = var4;
  44.       this.putId();
  45.       this.initialized = true;
  46.    }
  47.  
  48.    public String getName() {
  49.       return this.name;
  50.    }
  51.  
  52.    public double getVersion() {
  53.       return this.version;
  54.    }
  55.  
  56.    public String getInfo() {
  57.       return this.info;
  58.    }
  59.  
  60.    public String toString() {
  61.       return this.name + " version " + this.version;
  62.    }
  63.  
  64.    public synchronized void clear() {
  65.       this.check("clearProviderProperties." + this.name);
  66.       if (debug != null) {
  67.          debug.println("Remove " + this.name + " provider properties");
  68.       }
  69.  
  70.       this.implClear();
  71.    }
  72.  
  73.    public synchronized void load(InputStream var1) throws IOException {
  74.       this.check("putProviderProperty." + this.name);
  75.       if (debug != null) {
  76.          debug.println("Load " + this.name + " provider properties");
  77.       }
  78.  
  79.       Properties var2 = new Properties();
  80.       var2.load(var1);
  81.       this.implPutAll(var2);
  82.    }
  83.  
  84.    public synchronized void putAll(Map<?, ?> var1) {
  85.       this.check("putProviderProperty." + this.name);
  86.       if (debug != null) {
  87.          debug.println("Put all " + this.name + " provider properties");
  88.       }
  89.  
  90.       this.implPutAll(var1);
  91.    }
  92.  
  93.    public synchronized Set<Map.Entry<Object, Object>> entrySet() {
  94.       this.checkInitialized();
  95.       if (this.entrySet == null) {
  96.          if (this.entrySetCallCount++ != 0) {
  97.             return super.entrySet();
  98.          }
  99.  
  100.          this.entrySet = Collections.unmodifiableMap(this).entrySet();
  101.       }
  102.  
  103.       if (this.entrySetCallCount != 2) {
  104.          throw new RuntimeException("Internal error.");
  105.       } else {
  106.          return this.entrySet;
  107.       }
  108.    }
  109.  
  110.    public Set<Object> keySet() {
  111.       this.checkInitialized();
  112.       return Collections.unmodifiableSet(super.keySet());
  113.    }
  114.  
  115.    public Collection<Object> values() {
  116.       this.checkInitialized();
  117.       return Collections.unmodifiableCollection(super.values());
  118.    }
  119.  
  120.    public synchronized Object put(Object var1, Object var2) {
  121.       this.check("putProviderProperty." + this.name);
  122.       if (debug != null) {
  123.          debug.println("Set " + this.name + " provider property [" + var1 + "/" + var2 + "]");
  124.       }
  125.  
  126.       return this.implPut(var1, var2);
  127.    }
  128.  
  129.    public synchronized Object remove(Object var1) {
  130.       this.check("removeProviderProperty." + this.name);
  131.       if (debug != null) {
  132.          debug.println("Remove " + this.name + " provider property " + var1);
  133.       }
  134.  
  135.       return this.implRemove(var1);
  136.    }
  137.  
  138.    public Object get(Object var1) {
  139.       this.checkInitialized();
  140.       return super.get(var1);
  141.    }
  142.  
  143.    public Enumeration<Object> keys() {
  144.       this.checkInitialized();
  145.       return super.keys();
  146.    }
  147.  
  148.    public Enumeration<Object> elements() {
  149.       this.checkInitialized();
  150.       return super.elements();
  151.    }
  152.  
  153.    public String getProperty(String var1) {
  154.       this.checkInitialized();
  155.       return super.getProperty(var1);
  156.    }
  157.  
  158.    private void checkInitialized() {
  159.       if (!this.initialized) {
  160.          throw new IllegalStateException();
  161.       }
  162.    }
  163.  
  164.    private void check(String var1) {
  165.       this.checkInitialized();
  166.       SecurityManager var2 = System.getSecurityManager();
  167.       if (var2 != null) {
  168.          var2.checkSecurityAccess(var1);
  169.       }
  170.  
  171.    }
  172.  
  173.    private void putId() {
  174.       super.put("Provider.id name", String.valueOf(this.name));
  175.       super.put("Provider.id version", String.valueOf(this.version));
  176.       super.put("Provider.id info", String.valueOf(this.info));
  177.       super.put("Provider.id className", this.getClass().getName());
  178.    }
  179.  
  180.    private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  181.       HashMap var2 = new HashMap();
  182.  
  183.       for(Map.Entry var4 : super.entrySet()) {
  184.          var2.put(var4.getKey(), var4.getValue());
  185.       }
  186.  
  187.       this.defaults = null;
  188.       var1.defaultReadObject();
  189.       this.implClear();
  190.       this.initialized = true;
  191.       this.putAll(var2);
  192.    }
  193.  
  194.    private void implPutAll(Map var1) {
  195.       for(Map.Entry var3 : var1.entrySet()) {
  196.          this.implPut(var3.getKey(), var3.getValue());
  197.       }
  198.  
  199.    }
  200.  
  201.    private Object implRemove(Object var1) {
  202.       if (var1 instanceof String) {
  203.          String var2 = (String)var1;
  204.          if (var2.startsWith("Provider.")) {
  205.             return null;
  206.          }
  207.  
  208.          this.legacyChanged = true;
  209.          if (this.legacyStrings == null) {
  210.             this.legacyStrings = new LinkedHashMap();
  211.          }
  212.  
  213.          this.legacyStrings.remove(var2);
  214.       }
  215.  
  216.       return super.remove(var1);
  217.    }
  218.  
  219.    private Object implPut(Object var1, Object var2) {
  220.       if (var1 instanceof String && var2 instanceof String) {
  221.          String var3 = (String)var1;
  222.          if (var3.startsWith("Provider.")) {
  223.             return null;
  224.          }
  225.  
  226.          this.legacyChanged = true;
  227.          if (this.legacyStrings == null) {
  228.             this.legacyStrings = new LinkedHashMap();
  229.          }
  230.  
  231.          this.legacyStrings.put(var3, (String)var2);
  232.       }
  233.  
  234.       return super.put(var1, var2);
  235.    }
  236.  
  237.    private void implClear() {
  238.       if (this.legacyStrings != null) {
  239.          this.legacyStrings.clear();
  240.       }
  241.  
  242.       if (this.legacyMap != null) {
  243.          this.legacyMap.clear();
  244.       }
  245.  
  246.       if (this.serviceMap != null) {
  247.          this.serviceMap.clear();
  248.       }
  249.  
  250.       this.legacyChanged = false;
  251.       this.servicesChanged = false;
  252.       this.serviceSet = null;
  253.       super.clear();
  254.       this.putId();
  255.    }
  256.  
  257.    private void ensureLegacyParsed() {
  258.       if (this.legacyChanged && this.legacyStrings != null) {
  259.          this.serviceSet = null;
  260.          if (this.legacyMap == null) {
  261.             this.legacyMap = new LinkedHashMap();
  262.          } else {
  263.             this.legacyMap.clear();
  264.          }
  265.  
  266.          for(Map.Entry var2 : this.legacyStrings.entrySet()) {
  267.             this.parseLegacyPut((String)var2.getKey(), (String)var2.getValue());
  268.          }
  269.  
  270.          this.removeInvalidServices(this.legacyMap);
  271.          this.legacyChanged = false;
  272.       }
  273.    }
  274.  
  275.    private void removeInvalidServices(Map<ServiceKey, Service> var1) {
  276.       Iterator var2 = var1.entrySet().iterator();
  277.  
  278.       while(var2.hasNext()) {
  279.          Map.Entry var3 = (Map.Entry)var2.next();
  280.          Service var4 = (Service)var3.getValue();
  281.          if (!java.security.Provider.Service.access$000(var4)) {
  282.             var2.remove();
  283.          }
  284.       }
  285.  
  286.    }
  287.  
  288.    private String[] getTypeAndAlgorithm(String var1) {
  289.       int var2 = var1.indexOf(".");
  290.       if (var2 < 1) {
  291.          if (debug != null) {
  292.             debug.println("Ignoring invalid entry in provider " + this.name + ":" + var1);
  293.          }
  294.  
  295.          return null;
  296.       } else {
  297.          String var3 = var1.substring(0, var2);
  298.          String var4 = var1.substring(var2 + 1);
  299.          return new String[]{var3, var4};
  300.       }
  301.    }
  302.  
  303.    private void parseLegacyPut(String var1, String var2) {
  304.       if (var1.toLowerCase(Locale.ENGLISH).startsWith("alg.alias.")) {
  305.          String var4 = var1.substring(ALIAS_LENGTH);
  306.          String[] var5 = this.getTypeAndAlgorithm(var4);
  307.          if (var5 == null) {
  308.             return;
  309.          }
  310.  
  311.          String var6 = getEngineName(var5[0]);
  312.          String var7 = var5[1].intern();
  313.          ServiceKey var8 = new ServiceKey(var6, var2, true, (1)null);
  314.          Service var9 = (Service)this.legacyMap.get(var8);
  315.          if (var9 == null) {
  316.             var9 = new Service(this, (1)null);
  317.             java.security.Provider.Service.access$302(var9, var6);
  318.             java.security.Provider.Service.access$402(var9, var2);
  319.             this.legacyMap.put(var8, var9);
  320.          }
  321.  
  322.          this.legacyMap.put(new ServiceKey(var6, var7, true, (1)null), var9);
  323.          java.security.Provider.Service.access$500(var9, var7);
  324.       } else {
  325.          String[] var3 = this.getTypeAndAlgorithm(var1);
  326.          if (var3 == null) {
  327.             return;
  328.          }
  329.  
  330.          int var12 = var3[1].indexOf(32);
  331.          if (var12 == -1) {
  332.             String var13 = getEngineName(var3[0]);
  333.             String var14 = var3[1].intern();
  334.             ServiceKey var17 = new ServiceKey(var13, var14, true, (1)null);
  335.             Service var19 = (Service)this.legacyMap.get(var17);
  336.             if (var19 == null) {
  337.                var19 = new Service(this, (1)null);
  338.                java.security.Provider.Service.access$302(var19, var13);
  339.                java.security.Provider.Service.access$402(var19, var14);
  340.                this.legacyMap.put(var17, var19);
  341.             }
  342.  
  343.             java.security.Provider.Service.access$602(var19, var2);
  344.          } else {
  345.             String var15 = getEngineName(var3[0]);
  346.             String var16 = var3[1];
  347.             String var18 = var16.substring(0, var12).intern();
  348.  
  349.             String var20;
  350.             for(var20 = var16.substring(var12 + 1); var20.startsWith(" "); var20 = var20.substring(1)) {
  351.             }
  352.  
  353.             var20 = var20.intern();
  354.             ServiceKey var10 = new ServiceKey(var15, var18, true, (1)null);
  355.             Service var11 = (Service)this.legacyMap.get(var10);
  356.             if (var11 == null) {
  357.                var11 = new Service(this, (1)null);
  358.                java.security.Provider.Service.access$302(var11, var15);
  359.                java.security.Provider.Service.access$402(var11, var18);
  360.                this.legacyMap.put(var10, var11);
  361.             }
  362.  
  363.             var11.addAttribute(var20, var2);
  364.          }
  365.       }
  366.  
  367.    }
  368.  
  369.    public synchronized Service getService(String var1, String var2) {
  370.       this.checkInitialized();
  371.       ServiceKey var3 = previousKey;
  372.       if (!var3.matches(var1, var2)) {
  373.          var3 = new ServiceKey(var1, var2, false, (1)null);
  374.          previousKey = var3;
  375.       }
  376.  
  377.       if (this.serviceMap != null) {
  378.          Service var4 = (Service)this.serviceMap.get(var3);
  379.          if (var4 != null) {
  380.             return var4;
  381.          }
  382.       }
  383.  
  384.       this.ensureLegacyParsed();
  385.       return this.legacyMap != null ? (Service)this.legacyMap.get(var3) : null;
  386.    }
  387.  
  388.    public synchronized Set<Service> getServices() {
  389.       this.checkInitialized();
  390.       if (this.legacyChanged || this.servicesChanged) {
  391.          this.serviceSet = null;
  392.       }
  393.  
  394.       if (this.serviceSet == null) {
  395.          this.ensureLegacyParsed();
  396.          LinkedHashSet var1 = new LinkedHashSet();
  397.          if (this.serviceMap != null) {
  398.             var1.addAll(this.serviceMap.values());
  399.          }
  400.  
  401.          if (this.legacyMap != null) {
  402.             var1.addAll(this.legacyMap.values());
  403.          }
  404.  
  405.          this.serviceSet = Collections.unmodifiableSet(var1);
  406.          this.servicesChanged = false;
  407.       }
  408.  
  409.       return this.serviceSet;
  410.    }
  411.  
  412.    protected synchronized void putService(Service var1) {
  413.       this.check("putProviderProperty." + this.name);
  414.       if (debug != null) {
  415.          debug.println(this.name + ".putService(): " + var1);
  416.       }
  417.  
  418.       if (var1 == null) {
  419.          throw new NullPointerException();
  420.       } else if (var1.getProvider() != this) {
  421.          throw new IllegalArgumentException("service.getProvider() must match this Provider object");
  422.       } else {
  423.          if (this.serviceMap == null) {
  424.             this.serviceMap = new LinkedHashMap();
  425.          }
  426.  
  427.          this.servicesChanged = true;
  428.          String var2 = var1.getType();
  429.          String var3 = var1.getAlgorithm();
  430.          ServiceKey var4 = new ServiceKey(var2, var3, true, (1)null);
  431.          this.implRemoveService((Service)this.serviceMap.get(var4));
  432.          this.serviceMap.put(var4, var1);
  433.  
  434.          for(String var6 : java.security.Provider.Service.access$700(var1)) {
  435.             this.serviceMap.put(new ServiceKey(var2, var6, true, (1)null), var1);
  436.          }
  437.  
  438.          this.putPropertyStrings(var1);
  439.       }
  440.    }
  441.  
  442.    private void putPropertyStrings(Service var1) {
  443.       String var2 = var1.getType();
  444.       String var3 = var1.getAlgorithm();
  445.       super.put(var2 + "." + var3, var1.getClassName());
  446.  
  447.       for(String var5 : java.security.Provider.Service.access$700(var1)) {
  448.          super.put("Alg.Alias." + var2 + "." + var5, var3);
  449.       }
  450.  
  451.       for(Map.Entry var8 : java.security.Provider.Service.access$800(var1).entrySet()) {
  452.          String var6 = var2 + "." + var3 + " " + var8.getKey();
  453.          super.put(var6, var8.getValue());
  454.       }
  455.  
  456.    }
  457.  
  458.    private void removePropertyStrings(Service var1) {
  459.       String var2 = var1.getType();
  460.       String var3 = var1.getAlgorithm();
  461.       super.remove(var2 + "." + var3);
  462.  
  463.       for(String var5 : java.security.Provider.Service.access$700(var1)) {
  464.          super.remove("Alg.Alias." + var2 + "." + var5);
  465.       }
  466.  
  467.       for(Map.Entry var8 : java.security.Provider.Service.access$800(var1).entrySet()) {
  468.          String var6 = var2 + "." + var3 + " " + var8.getKey();
  469.          super.remove(var6);
  470.       }
  471.  
  472.    }
  473.  
  474.    protected synchronized void removeService(Service var1) {
  475.       this.check("removeProviderProperty." + this.name);
  476.       if (debug != null) {
  477.          debug.println(this.name + ".removeService(): " + var1);
  478.       }
  479.  
  480.       if (var1 == null) {
  481.          throw new NullPointerException();
  482.       } else {
  483.          this.implRemoveService(var1);
  484.       }
  485.    }
  486.  
  487.    private void implRemoveService(Service var1) {
  488.       if (var1 != null && this.serviceMap != null) {
  489.          String var2 = var1.getType();
  490.          String var3 = var1.getAlgorithm();
  491.          ServiceKey var4 = new ServiceKey(var2, var3, false, (1)null);
  492.          Service var5 = (Service)this.serviceMap.get(var4);
  493.          if (var1 == var5) {
  494.             this.servicesChanged = true;
  495.             this.serviceMap.remove(var4);
  496.  
  497.             for(String var7 : java.security.Provider.Service.access$700(var1)) {
  498.                this.serviceMap.remove(new ServiceKey(var2, var7, false, (1)null));
  499.             }
  500.  
  501.             this.removePropertyStrings(var1);
  502.          }
  503.       }
  504.    }
  505.  
  506.    private static void addEngine(String var0, boolean var1, String var2) {
  507.       EngineDescription var3 = new EngineDescription(var0, var1, var2);
  508.       knownEngines.put(var0.toLowerCase(Locale.ENGLISH), var3);
  509.       knownEngines.put(var0, var3);
  510.    }
  511.  
  512.    private static String getEngineName(String var0) {
  513.       EngineDescription var1 = (EngineDescription)knownEngines.get(var0);
  514.       if (var1 == null) {
  515.          var1 = (EngineDescription)knownEngines.get(var0.toLowerCase(Locale.ENGLISH));
  516.       }
  517.  
  518.       return var1 == null ? var0 : var1.name;
  519.    }
  520.  
  521.    // $FF: synthetic method
  522.    static String access$900(String var0) {
  523.       return getEngineName(var0);
  524.    }
  525.  
  526.    // $FF: synthetic method
  527.    static Map access$1000() {
  528.       return knownEngines;
  529.    }
  530.  
  531.    static {
  532.       addEngine("AlgorithmParameterGenerator", false, (String)null);
  533.       addEngine("AlgorithmParameters", false, (String)null);
  534.       addEngine("KeyFactory", false, (String)null);
  535.       addEngine("KeyPairGenerator", false, (String)null);
  536.       addEngine("KeyStore", false, (String)null);
  537.       addEngine("MessageDigest", false, (String)null);
  538.       addEngine("SecureRandom", false, (String)null);
  539.       addEngine("Signature", true, (String)null);
  540.       addEngine("CertificateFactory", false, (String)null);
  541.       addEngine("CertPathBuilder", false, (String)null);
  542.       addEngine("CertPathValidator", false, (String)null);
  543.       addEngine("CertStore", false, "java.security.cert.CertStoreParameters");
  544.       addEngine("Cipher", true, (String)null);
  545.       addEngine("ExemptionMechanism", false, (String)null);
  546.       addEngine("Mac", true, (String)null);
  547.       addEngine("KeyAgreement", true, (String)null);
  548.       addEngine("KeyGenerator", false, (String)null);
  549.       addEngine("SecretKeyFactory", false, (String)null);
  550.       addEngine("KeyManagerFactory", false, (String)null);
  551.       addEngine("SSLContext", false, (String)null);
  552.       addEngine("TrustManagerFactory", false, (String)null);
  553.       addEngine("GssApiMechanism", false, (String)null);
  554.       addEngine("SaslClientFactory", false, (String)null);
  555.       addEngine("SaslServerFactory", false, (String)null);
  556.       addEngine("Policy", false, "java.security.Policy$Parameters");
  557.       addEngine("Configuration", false, "javax.security.auth.login.Configuration$Parameters");
  558.       addEngine("XMLSignatureFactory", false, (String)null);
  559.       addEngine("KeyInfoFactory", false, (String)null);
  560.       addEngine("TransformService", false, (String)null);
  561.       addEngine("TerminalFactory", false, "java.lang.Object");
  562.    }
  563. }
  564.