Home » openjdk-7 » javax » crypto » [javadoc | source]

    1   /* $Id: Support.java,v 1.5 2000/02/12 15:41:33 gelderen Exp $
    2    *
    3    * Copyright (C) 1995-1999 The Cryptix Foundation Limited.
    4    * All rights reserved.
    5    *
    6    * Use, modification, copying and distribution of this software is subject
    7    * the terms and conditions of the Cryptix General Licence. You should have
    8    * received a copy of the Cryptix General Licence along with this library;
    9    * if not, you can download a copy from http://www.cryptix.org/ .
   10    */
   11   package javax.crypto;
   12   
   13   
   14   import java.security.NoSuchAlgorithmException;
   15   import java.security.NoSuchProviderException;
   16   import java.security.Provider;
   17   import java.security.Security;
   18   
   19   
   20   /*package*/ final class Support
   21   {
   22       /*package*/ static Object[]
   23       getImplementation(String type, String algorithm)
   24       throws NoSuchAlgorithmException
   25       {
   26           Provider[] providers = Security.getProviders();
   27           if( (providers==null) || (providers.length==0) )
   28               throw new NoSuchAlgorithmException("No providers installed");
   29   
   30           for(int i=0; i<providers.length; i++)
   31           {
   32               Object[] res = getImplementation(type, algorithm, providers[i]);
   33               if(res != null)
   34                   return res;
   35           }
   36   
   37           throw new NoSuchAlgorithmException(
   38               "Algorithm not found. [" + type + "." + algorithm + "]");
   39       }
   40   
   41   
   42       /*package*/ static Object[]
   43       getImplementation(String type, String algorithm, String provider)
   44       throws NoSuchAlgorithmException, NoSuchProviderException
   45       {
   46           Provider p = Security.getProvider(provider);
   47           if(p==null)
   48               throw new NoSuchProviderException(
   49                   "Provider not found. [" + provider + "]");
   50   
   51           Object[] res = getImplementation(type, algorithm, p);
   52           if(res != null)
   53               return res;
   54   
   55           throw new NoSuchAlgorithmException(
   56               "Algorithm not found. [" + type + "." + algorithm + "]");
   57       }
   58   
   59   
   60       /*package*/ static Object[]
   61       getImplementation(String algType, String algName, Provider p)
   62       {
   63           try
   64           {
   65               String class_name =
   66                   p.getProperty("Alg.Alias." + algType + "." + algName);
   67   
   68               if(class_name==null)
   69                   class_name = p.getProperty(algType + "." + algName);
   70               else
   71                   class_name = p.getProperty(algType + "." + class_name);
   72   
   73               if(class_name == null)
   74                   return null;
   75   
   76               Object[] res = new Object[2];
   77               res[0] = Class.forName(class_name).newInstance();
   78               res[1] = p;
   79               return res;
   80           }
   81           catch(LinkageError e)
   82           {
   83               e.printStackTrace();
   84               // FIXME: Throw a RuntimeException with a sensible message????
   85           }
   86           catch(ClassNotFoundException e)
   87           {
   88               e.printStackTrace();
   89               // FIXME: Throw a RuntimeException with a sensible message????
   90           }
   91           catch(InstantiationException e)
   92           {
   93               e.printStackTrace();
   94               // FIXME: Throw a RuntimeException with a sensible message????
   95           }
   96           catch(IllegalAccessException e)
   97           {
   98               e.printStackTrace();
   99               // FIXME: Throw a RuntimeException with a sensible message????
  100           }
  101   
  102           return null;
  103       }
  104   
  105   
  106       /*package*/ static String
  107       getClassName(String algType, String algName, Provider p)
  108       {
  109               String class_name =
  110                   p.getProperty("Alg.Alias." + algType + "." + algName);
  111   
  112               if(class_name==null)
  113                   class_name = p.getProperty(algType + "." + algName);
  114               else
  115                   class_name = p.getProperty(algType + "." + class_name);
  116   
  117               return class_name;
  118       }
  119   }

Home » openjdk-7 » javax » crypto » [javadoc | source]