All Downloads are FREE. Search and download functionalities are using the official Maven repository.

common.crypto.SystemProvider Maven / Gradle / Ivy

package com.unbound.common.crypto;

import java.security.*;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentHashMap;

public final class SystemProvider
{
  private SystemProvider()
  {
  }

  private static ArrayList providers = new ArrayList<>();

  private static void addProvider(String name)
  {
    providers.add(Security.getProvider(name));
  }

  static
  {
    addProvider("SUN");
    addProvider("SunEC");
    addProvider("SunJCE");
    addProvider("SunRsaSign");
    addProvider("SunJSSE");
    addProvider("IBMJCE");
    addProvider("IBMJSSE2");
  }

  static public abstract class Base
  {
    private ConcurrentHashMap map = new ConcurrentHashMap<>();

    protected abstract T getInstance(String alg, Provider provider) throws Exception;

    public T getInstance(String alg)
    {
      Provider provider = map.get(alg);
      if (provider == null)
      {
        for (Provider p : providers)
        {
          try
          {
            T result = getInstance(alg, p);
            if (result != null)
            {
              map.put(alg, p);
              return result;
            }
          }
          catch (Exception ignored)
          {
          }
        }
      }
      try
      {
        T result = getInstance(alg, provider);
        if (result != null) return result;
      }
      catch (Exception ignored)
      {
      }
      throw new ProviderException("Provider not found for " + alg);
    }
  }

  public static final Base Cipher = new Base()
  {
    protected javax.crypto.Cipher getInstance(String alg, Provider provider) throws Exception
    {
      return javax.crypto.Cipher.getInstance(alg, provider);
    }
  };

  public static final Base Signature = new Base()
  {
    protected java.security.Signature getInstance(String alg, Provider provider) throws Exception
    {
      return java.security.Signature.getInstance(alg, provider);
    }
  };


  public static final Base MessageDigest = new Base()
  {
    protected java.security.MessageDigest getInstance(String alg, Provider provider) throws Exception
    {
      return java.security.MessageDigest.getInstance(alg, provider);
    }
  };

  public static final Base Mac = new Base()
  {
    protected javax.crypto.Mac getInstance(String alg, Provider provider) throws Exception
    {
      return javax.crypto.Mac.getInstance(alg, provider);
    }
  };

  public static final Base KeyFactory = new Base()
  {
    protected java.security.KeyFactory getInstance(String alg, Provider provider) throws Exception
    {
      return java.security.KeyFactory.getInstance(alg, provider);
    }
  };

  public static final Base KeyAgreement = new Base()
  {
    protected javax.crypto.KeyAgreement getInstance(String alg, Provider provider) throws Exception
    {
      return javax.crypto.KeyAgreement.getInstance(alg, provider);
    }
  };

  public static final Base KeyPairGenerator = new Base()
  {
    protected java.security.KeyPairGenerator getInstance(String alg, Provider provider) throws Exception
    {
      return java.security.KeyPairGenerator.getInstance(alg, provider);
    }
  };

  public static final Base KeyStore = new Base()
  {
    protected java.security.KeyStore getInstance(String alg, Provider provider) throws Exception
    {
      return java.security.KeyStore.getInstance(alg, provider);
    }
  };
/*
  public static final Base AlgorithmParameters = new Base()
  {
    protected java.security.AlgorithmParameters getInstance(String alg, Provider provider) throws Exception
    { return java.security.AlgorithmParameters.getInstance(alg, provider); }
  };
*/

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy