/* GnuCrypto.java --
   Copyright (C) 2004, 2006 Free Software Foundation, Inc.

This file is a part of GNU Classpath.

GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at
your option) any later version.

GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Classpath; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
USA

Linking this library statically or dynamically with other modules is
making a combined work based on this library.  Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.

As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module.  An independent module is a module which is not derived from
or based on this library.  If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so.  If you do not wish to do so, delete this
exception statement from your version.  */


package gnu.javax.crypto.jce;

import gnu.java.security.Registry;
import gnu.javax.crypto.cipher.CipherFactory;
import gnu.javax.crypto.mac.MacFactory;

import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.Provider;
import java.util.HashSet;
import java.util.Set;

/**
 * The additional GNU algorithm implementation as a Java Cryptographic Extension
 * (JCE) Provider.
 *
 * @see java.security.Provider
 */
public final class GnuCrypto
    extends Provider
{
  public GnuCrypto()
  {
    super(Registry.GNU_CRYPTO, 2.1, "GNU Crypto JCE Provider");

    AccessController.doPrivileged(new PrivilegedAction()
    {
      public Object run()
      {
        // Cipher
        put("Cipher.ANUBIS",
            gnu.javax.crypto.jce.cipher.AnubisSpi.class.getName());
        put("Cipher.ANUBIS ImplementedIn", "Software");
        put("Cipher.ARCFOUR",
            gnu.javax.crypto.jce.cipher.ARCFourSpi.class.getName());
        put("Cipher.ARCFOUR ImplementedIn", "Software");
        put("Cipher.BLOWFISH",
            gnu.javax.crypto.jce.cipher.BlowfishSpi.class.getName());
        put("Cipher.BLOWFISH ImplementedIn", "Software");
        put("Cipher.DES", gnu.javax.crypto.jce.cipher.DESSpi.class.getName());
        put("Cipher.DES ImplementedIn", "Software");
        put("Cipher.KHAZAD",
            gnu.javax.crypto.jce.cipher.KhazadSpi.class.getName());
        put("Cipher.KHAZAD ImplementedIn", "Software");
        put("Cipher.NULL",
            gnu.javax.crypto.jce.cipher.NullCipherSpi.class.getName());
        put("Cipher.NULL ImplementedIn", "Software");
        put("Cipher.AES",
            gnu.javax.crypto.jce.cipher.RijndaelSpi.class.getName());
        put("Cipher.AES ImplementedIn", "Software");
        put("Cipher.RIJNDAEL",
            gnu.javax.crypto.jce.cipher.RijndaelSpi.class.getName());
        put("Cipher.RIJNDAEL ImplementedIn", "Software");
        put("Cipher.SERPENT",
            gnu.javax.crypto.jce.cipher.SerpentSpi.class.getName());
        put("Cipher.SERPENT ImplementedIn", "Software");
        put("Cipher.SQUARE",
            gnu.javax.crypto.jce.cipher.SquareSpi.class.getName());
        put("Cipher.SQUARE ImplementedIn", "Software");
        put("Cipher.TRIPLEDES",
            gnu.javax.crypto.jce.cipher.TripleDESSpi.class.getName());
        put("Cipher.TRIPLEDES ImplementedIn", "Software");
        put("Cipher.TWOFISH",
            gnu.javax.crypto.jce.cipher.TwofishSpi.class.getName());
        put("Cipher.TWOFISH ImplementedIn", "Software");
        put("Cipher.CAST5",
            gnu.javax.crypto.jce.cipher.Cast5Spi.class.getName());
        put("Cipher.CAST5 ImplementedIn", "Software");

        // PBES2 ciphers.
        put("Cipher.PBEWithHMacHavalAndAES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.AES.class.getName());
        put("Cipher.PBEWithHMacHavalAndAnubis",
            gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.Anubis.class.getName());
        put("Cipher.PBEWithHMacHavalAndBlowfish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.Blowfish.class.getName());
        put("Cipher.PBEWithHMacHavalAndCast5",
            gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.Cast5.class.getName());
        put("Cipher.PBEWithHMacHavalAndDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.DES.class.getName());
        put("Cipher.PBEWithHMacHavalAndKhazad",
            gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.Khazad.class.getName());
        put("Cipher.PBEWithHMacHavalAndSerpent",
            gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.Serpent.class.getName());
        put("Cipher.PBEWithHMacHavalAndSquare",
            gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.Square.class.getName());
        put("Cipher.PBEWithHMacHavalAndTripleDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.TripleDES.class.getName());
        put("Cipher.PBEWithHMacHavalAndTwofish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacHaval.Twofish.class.getName());

        put("Cipher.PBEWithHMacMD2AndAES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.AES.class.getName());
        put("Cipher.PBEWithHMacMD2AndAnubis",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.Anubis.class.getName());
        put("Cipher.PBEWithHMacMD2AndBlowfish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.Blowfish.class.getName());
        put("Cipher.PBEWithHMacMD2AndCast5",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.Cast5.class.getName());
        put("Cipher.PBEWithHMacMD2AndDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.DES.class.getName());
        put("Cipher.PBEWithHMacMD2AndKhazad",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.Khazad.class.getName());
        put("Cipher.PBEWithHMacMD2AndSerpent",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.Serpent.class.getName());
        put("Cipher.PBEWithHMacMD2AndSquare",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.Square.class.getName());
        put("Cipher.PBEWithHMacMD2AndTripleDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.TripleDES.class.getName());
        put("Cipher.PBEWithHMacMD2AndTwofish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD2.Twofish.class.getName());

        put("Cipher.PBEWithHMacMD4AndAES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.AES.class.getName());
        put("Cipher.PBEWithHMacMD4AndAnubis",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.Anubis.class.getName());
        put("Cipher.PBEWithHMacMD4AndBlowfish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.Blowfish.class.getName());
        put("Cipher.PBEWithHMacMD4AndCast5",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.Cast5.class.getName());
        put("Cipher.PBEWithHMacMD4AndDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.DES.class.getName());
        put("Cipher.PBEWithHMacMD4AndKhazad",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.Khazad.class.getName());
        put("Cipher.PBEWithHMacMD4AndSerpent",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.Serpent.class.getName());
        put("Cipher.PBEWithHMacMD4AndSquare",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.Square.class.getName());
        put("Cipher.PBEWithHMacMD4AndTripleDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.TripleDES.class.getName());
        put("Cipher.PBEWithHMacMD4AndTwofish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD4.Twofish.class.getName());

        put("Cipher.PBEWithHMacMD5AndAES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.AES.class.getName());
        put("Cipher.PBEWithHMacMD5AndAnubis",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.Anubis.class.getName());
        put("Cipher.PBEWithHMacMD5AndBlowfish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.Blowfish.class.getName());
        put("Cipher.PBEWithHMacMD5AndCast5",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.Cast5.class.getName());
        put("Cipher.PBEWithHMacMD5AndDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.DES.class.getName());
        put("Cipher.PBEWithHMacMD5AndKhazad",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.Khazad.class.getName());
        put("Cipher.PBEWithHMacMD5AndSerpent",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.Serpent.class.getName());
        put("Cipher.PBEWithHMacMD5AndSquare",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.Square.class.getName());
        put("Cipher.PBEWithHMacMD5AndTripleDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.TripleDES.class.getName());
        put("Cipher.PBEWithHMacMD5AndTwofish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacMD5.Twofish.class.getName());

        put("Cipher.PBEWithHMacSHA1AndAES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.AES.class.getName());
        put("Cipher.PBEWithHMacSHA1AndAnubis",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.Anubis.class.getName());
        put("Cipher.PBEWithHMacSHA1AndBlowfish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.Blowfish.class.getName());
        put("Cipher.PBEWithHMacSHA1AndCast5",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.Cast5.class.getName());
        put("Cipher.PBEWithHMacSHA1AndDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.DES.class.getName());
        put("Cipher.PBEWithHMacSHA1AndKhazad",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.Khazad.class.getName());
        put("Cipher.PBEWithHMacSHA1AndSerpent",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.Serpent.class.getName());
        put("Cipher.PBEWithHMacSHA1AndSquare",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.Square.class.getName());
        put(
            "Cipher.PBEWithHMacSHA1AndTripleDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.TripleDES.class.getName());
        put("Cipher.PBEWithHMacSHA1AndTwofish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA1.Twofish.class.getName());

        put("Cipher.PBEWithHMacSHA256AndAES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.AES.class.getName());
        put("Cipher.PBEWithHMacSHA256AndAnubis",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.Anubis.class.getName());
        put("Cipher.PBEWithHMacSHA256AndBlowfish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.Blowfish.class.getName());
        put("Cipher.PBEWithHMacSHA256AndCast5",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.Cast5.class.getName());
        put("Cipher.PBEWithHMacSHA256AndDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.DES.class.getName());
        put("Cipher.PBEWithHMacSHA256AndKhazad",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.Khazad.class.getName());
        put("Cipher.PBEWithHMacSHA256AndSerpent",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.Serpent.class.getName());
        put("Cipher.PBEWithHMacSHA256AndSquare",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.Square.class.getName());
        put("Cipher.PBEWithHMacSHA256AndTripleDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.TripleDES.class.getName());
        put("Cipher.PBEWithHMacSHA256AndTwofish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA256.Twofish.class.getName());

        put("Cipher.PBEWithHMacSHA384AndAES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.AES.class.getName());
        put("Cipher.PBEWithHMacSHA384AndAnubis",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.Anubis.class.getName());
        put("Cipher.PBEWithHMacSHA384AndBlowfish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.Blowfish.class.getName());
        put("Cipher.PBEWithHMacSHA384AndCast5",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.Cast5.class.getName());
        put("Cipher.PBEWithHMacSHA384AndDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.DES.class.getName());
        put("Cipher.PBEWithHMacSHA384AndKhazad",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.Khazad.class.getName());
        put("Cipher.PBEWithHMacSHA384AndSerpent",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.Serpent.class.getName());
        put("Cipher.PBEWithHMacSHA384AndSquare",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.Square.class.getName());
        put("Cipher.PBEWithHMacSHA384AndTripleDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.TripleDES.class.getName());
        put("Cipher.PBEWithHMacSHA384AndTwofish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA384.Twofish.class.getName());

        put("Cipher.PBEWithHMacSHA512AndAES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.AES.class.getName());
        put("Cipher.PBEWithHMacSHA512AndAnubis",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.Anubis.class.getName());
        put("Cipher.PBEWithHMacSHA512AndBlowfish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.Blowfish.class.getName());
        put("Cipher.PBEWithHMacSHA512AndCast5",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.Cast5.class.getName());
        put("Cipher.PBEWithHMacSHA512AndDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.DES.class.getName());
        put("Cipher.PBEWithHMacSHA512AndKhazad",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.Khazad.class.getName());
        put("Cipher.PBEWithHMacSHA512AndSerpent",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.Serpent.class.getName());
        put("Cipher.PBEWithHMacSHA512AndSquare",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.Square.class.getName());
        put("Cipher.PBEWithHMacSHA512AndTripleDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.TripleDES.class.getName());
        put("Cipher.PBEWithHMacSHA512AndTwofish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacSHA512.Twofish.class.getName());

        put("Cipher.PBEWithHMacTigerAndAES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.AES.class.getName());
        put("Cipher.PBEWithHMacTigerAndAnubis",
            gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.Anubis.class.getName());
        put("Cipher.PBEWithHMacTigerAndBlowfish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.Blowfish.class.getName());
        put("Cipher.PBEWithHMacTigerAndCast5",
            gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.Cast5.class.getName());
        put("Cipher.PBEWithHMacTigerAndDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.DES.class.getName());
        put("Cipher.PBEWithHMacTigerAndKhazad",
            gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.Khazad.class.getName());
        put("Cipher.PBEWithHMacTigerAndSerpent",
            gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.Serpent.class.getName());
        put("Cipher.PBEWithHMacTigerAndSquare",
            gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.Square.class.getName());
        put("Cipher.PBEWithHMacTigerAndTripleDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.TripleDES.class.getName());
        put("Cipher.PBEWithHMacTigerAndTwofish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacTiger.Twofish.class.getName());

        put("Cipher.PBEWithHMacWhirlpoolAndAES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.AES.class.getName());
        put("Cipher.PBEWithHMacWhirlpoolAndAnubis",
            gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.Anubis.class.getName());
        put("Cipher.PBEWithHMacWhirlpoolAndBlowfish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.Blowfish.class.getName());
        put("Cipher.PBEWithHMacWhirlpoolAndCast5",
            gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.Cast5.class.getName());
        put("Cipher.PBEWithHMacWhirlpoolAndDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.DES.class.getName());
        put("Cipher.PBEWithHMacWhirlpoolAndKhazad",
            gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.Khazad.class.getName());
        put("Cipher.PBEWithHMacWhirlpoolAndSerpent",
            gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.Serpent.class.getName());
        put("Cipher.PBEWithHMacWhirlpoolAndSquare",
            gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.Square.class.getName());
        put("Cipher.PBEWithHMacWhirlpoolAndTripleDES",
            gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.TripleDES.class.getName());
        put("Cipher.PBEWithHMacWhirlpoolAndTwofish",
            gnu.javax.crypto.jce.cipher.PBES2.HMacWhirlpool.Twofish.class.getName());

        // Key Wrapping Algorithm cipher
        put("Cipher." + Registry.AES128_KWA,
            gnu.javax.crypto.jce.cipher.AES128KeyWrapSpi.class.getName());
        put("Cipher." + Registry.AES192_KWA,
            gnu.javax.crypto.jce.cipher.AES192KeyWrapSpi.class.getName());
        put("Cipher." + Registry.AES256_KWA,
            gnu.javax.crypto.jce.cipher.AES256KeyWrapSpi.class.getName());
        put("Cipher." + Registry.TRIPLEDES_KWA,
            gnu.javax.crypto.jce.cipher.TripleDESKeyWrapSpi.class.getName());

        // SecretKeyFactory interface to PBKDF2.
        put("SecretKeyFactory.PBKDF2WithHMacHaval",
            gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacHaval.class.getName());
        put("SecretKeyFactory.PBKDF2WithHMacMD2",
            gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacMD2.class.getName());
        put("SecretKeyFactory.PBKDF2WithHMacMD4",
            gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacMD4.class.getName());
        put("SecretKeyFactory.PBKDF2WithHMacMD5",
            gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacMD5.class.getName());
        put("SecretKeyFactory.PBKDF2WithHMacSHA1",
            gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacSHA1.class.getName());
        put("SecretKeyFactory.PBKDF2WithHMacSHA256",
            gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacSHA256.class.getName());
        put("SecretKeyFactory.PBKDF2WithHMacSHA384",
            gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacSHA384.class.getName());
        put("SecretKeyFactory.PBKDF2WithHMacSHA512",
            gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacSHA512.class.getName());
        put("SecretKeyFactory.PBKDF2WithHMacTiger",
            gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacTiger.class.getName());
        put("SecretKeyFactory.PBKDF2WithHMacWhirlpool",
            gnu.javax.crypto.jce.PBKDF2SecretKeyFactory.HMacWhirlpool.class.getName());

        // Simple SecretKeyFactory implementations.
        put("SecretKeyFactory.Anubis",
            gnu.javax.crypto.jce.key.AnubisSecretKeyFactoryImpl.class.getName());
        put("SecretKeyFactory.Blowfish",
            gnu.javax.crypto.jce.key.BlowfishSecretKeyFactoryImpl.class.getName());
        put("SecretKeyFactory.Cast5",
            gnu.javax.crypto.jce.key.Cast5SecretKeyFactoryImpl.class.getName());
        put("SecretKeyFactory.DES",
            gnu.javax.crypto.jce.key.DESSecretKeyFactoryImpl.class.getName());
        put("SecretKeyFactory.Khazad",
            gnu.javax.crypto.jce.key.KhazadSecretKeyFactoryImpl.class.getName());
        put("SecretKeyFactory.Rijndael",
            gnu.javax.crypto.jce.key.RijndaelSecretKeyFactoryImpl.class.getName());
        put("SecretKeyFactory.Serpent",
            gnu.javax.crypto.jce.key.SerpentSecretKeyFactoryImpl.class.getName());
        put("SecretKeyFactory.Square",
            gnu.javax.crypto.jce.key.SquareSecretKeyFactoryImpl.class.getName());
        put("SecretKeyFactory.TripleDES",
            gnu.javax.crypto.jce.key.DESedeSecretKeyFactoryImpl.class.getName());
        put("Alg.Alias.SecretKeyFactory.AES", "Rijndael");
        put("Alg.Alias.SecretKeyFactory.DESede", "TripleDES");
        put("Alg.Alias.SecretKeyFactory.3-DES", "TripleDES");
        put("Alg.Alias.SecretKeyFactory.3DES", "TripleDES");

        put("AlgorithmParameters.BlockCipherParameters",
            gnu.javax.crypto.jce.params.BlockCipherParameters.class.getName());
        put("Alg.Alias.AlgorithmParameters.Anubis", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.Blowfish", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.Cast5", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.DES", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.Khazad", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.Rijndael", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.AES", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.Serpent", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.Square", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.TripleDES", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.DESede", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.3-DES", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.3DES", "BlockCipherParameters");

        // KeyGenerator Adapter implementations
        put("KeyGenerator.Anubis",
            gnu.javax.crypto.jce.key.AnubisKeyGeneratorImpl.class.getName());
        put("KeyGenerator.Blowfish",
            gnu.javax.crypto.jce.key.BlowfishKeyGeneratorImpl.class.getName());
        put("KeyGenerator.Cast5",
            gnu.javax.crypto.jce.key.Cast5KeyGeneratorImpl.class.getName());
        put("KeyGenerator.DES",
            gnu.javax.crypto.jce.key.DESKeyGeneratorImpl.class.getName());
        put("KeyGenerator.Khazad",
            gnu.javax.crypto.jce.key.KhazadKeyGeneratorImpl.class.getName());
        put("KeyGenerator.Rijndael",
            gnu.javax.crypto.jce.key.RijndaelKeyGeneratorImpl.class.getName());
        put("KeyGenerator.Serpent",
            gnu.javax.crypto.jce.key.SerpentKeyGeneratorImpl.class.getName());
        put("KeyGenerator.Square",
            gnu.javax.crypto.jce.key.SquareKeyGeneratorImpl.class.getName());
        put("KeyGenerator.TripleDES",
            gnu.javax.crypto.jce.key.TripleDESKeyGeneratorImpl.class.getName());
        put("Alg.Alias.KeyGenerator.AES", "Rijndael");
        put("Alg.Alias.KeyGenerator.DESede", "TripleDES");
        put("Alg.Alias.KeyGenerator.3-DES", "TripleDES");
        put("Alg.Alias.KeyGenerator.3DES", "TripleDES");

        // MAC
        put("Mac.HMAC-MD2", gnu.javax.crypto.jce.mac.HMacMD2Spi.class.getName());
        put("Mac.HMAC-MD4", gnu.javax.crypto.jce.mac.HMacMD4Spi.class.getName());
        put("Mac.HMAC-MD5", gnu.javax.crypto.jce.mac.HMacMD5Spi.class.getName());
        put("Mac.HMAC-RIPEMD128",
            gnu.javax.crypto.jce.mac.HMacRipeMD128Spi.class.getName());
        put("Mac.HMAC-RIPEMD160",
            gnu.javax.crypto.jce.mac.HMacRipeMD160Spi.class.getName());
        put("Mac.HMAC-SHA160",
            gnu.javax.crypto.jce.mac.HMacSHA160Spi.class.getName());
        put("Mac.HMAC-SHA256",
            gnu.javax.crypto.jce.mac.HMacSHA256Spi.class.getName());
        put("Mac.HMAC-SHA384",
            gnu.javax.crypto.jce.mac.HMacSHA384Spi.class.getName());
        put("Mac.HMAC-SHA512",
            gnu.javax.crypto.jce.mac.HMacSHA512Spi.class.getName());
        put("Mac.HMAC-TIGER",
            gnu.javax.crypto.jce.mac.HMacTigerSpi.class.getName());
        put("Mac.HMAC-HAVAL",
            gnu.javax.crypto.jce.mac.HMacHavalSpi.class.getName());
        put("Mac.HMAC-WHIRLPOOL",
            gnu.javax.crypto.jce.mac.HMacWhirlpoolSpi.class.getName());
        put("Mac.TMMH16", gnu.javax.crypto.jce.mac.TMMH16Spi.class.getName());
        put("Mac.UHASH32", gnu.javax.crypto.jce.mac.UHash32Spi.class.getName());
        put("Mac.UMAC32", gnu.javax.crypto.jce.mac.UMac32Spi.class.getName());

        put("Mac.OMAC-ANUBIS",
            gnu.javax.crypto.jce.mac.OMacAnubisImpl.class.getName());
        put("Mac.OMAC-BLOWFISH",
            gnu.javax.crypto.jce.mac.OMacBlowfishImpl.class.getName());
        put("Mac.OMAC-CAST5",
            gnu.javax.crypto.jce.mac.OMacCast5Impl.class.getName());
        put("Mac.OMAC-DES",
            gnu.javax.crypto.jce.mac.OMacDESImpl.class.getName());
        put("Mac.OMAC-KHAZAD",
            gnu.javax.crypto.jce.mac.OMacKhazadImpl.class.getName());
        put("Mac.OMAC-RIJNDAEL",
            gnu.javax.crypto.jce.mac.OMacRijndaelImpl.class.getName());
        put("Mac.OMAC-SERPENT",
            gnu.javax.crypto.jce.mac.OMacSerpentImpl.class.getName());
        put("Mac.OMAC-SQUARE",
            gnu.javax.crypto.jce.mac.OMacSquareImpl.class.getName());
        put("Mac.OMAC-TRIPLEDES",
            gnu.javax.crypto.jce.mac.OMacTripleDESImpl.class.getName());
        put("Mac.OMAC-TWOFISH",
            gnu.javax.crypto.jce.mac.OMacTwofishImpl.class.getName());

        // Aliases
        put("Alg.Alias.AlgorithmParameters.AES", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.BLOWFISH", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.ANUBIS", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.KHAZAD", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.NULL", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.RIJNDAEL", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.SERPENT", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.SQUARE", "BlockCipherParameters");
        put("Alg.Alias.AlgorithmParameters.TWOFISH", "BlockCipherParameters");
        put("Alg.Alias.Cipher.RC4", "ARCFOUR");
        put("Alg.Alias.Cipher.3-DES", "TRIPLEDES");
        put("Alg.Alias.Cipher.3DES", "TRIPLEDES");
        put("Alg.Alias.Cipher.DES-EDE", "TRIPLEDES");
        put("Alg.Alias.Cipher.DESede", "TRIPLEDES");
        put("Alg.Alias.Cipher.CAST128", "CAST5");
        put("Alg.Alias.Cipher.CAST-128", "CAST5");
        put("Alg.Alias.Mac.HMAC-SHS", "HMAC-SHA160");
        put("Alg.Alias.Mac.HMAC-SHA", "HMAC-SHA160");
        put("Alg.Alias.Mac.HMAC-SHA1", "HMAC-SHA160");
        put("Alg.Alias.Mac.HMAC-SHA-160", "HMAC-SHA160");
        put("Alg.Alias.Mac.HMAC-SHA-256", "HMAC-SHA256");
        put("Alg.Alias.Mac.HMAC-SHA-384", "HMAC-SHA384");
        put("Alg.Alias.Mac.HMAC-SHA-512", "HMAC-SHA512");
        put("Alg.Alias.Mac.HMAC-RIPEMD-160", "HMAC-RIPEMD160");
        put("Alg.Alias.Mac.HMAC-RIPEMD-128", "HMAC-RIPEMD128");
        put("Alg.Alias.Mac.OMAC-AES", "OMAC-RIJNDAEL");
        put("Alg.Alias.Mac.OMAC-3DES", "OMAC-3DES");
        put("Alg.Alias.Mac.HmacMD4", "HMAC-MD4");
        put("Alg.Alias.Mac.HmacMD5", "HMAC-MD5");
        put("Alg.Alias.Mac.HmacSHA-1", "HMAC-SHA-1");
        put("Alg.Alias.Mac.HmacSHA1", "HMAC-SHA1");
        put("Alg.Alias.Mac.HmacSHA-160", "HMAC-SHA-160");
        put("Alg.Alias.Mac.HmacSHA160", "HMAC-SHA-160");
        put("Alg.Alias.Mac.HmacSHA-256", "HMAC-SHA-256");
        put("Alg.Alias.Mac.HmacSHA256", "HMAC-SHA-256");
        put("Alg.Alias.Mac.HmacSHA-384", "HMAC-SHA-384");
        put("Alg.Alias.Mac.HmacSHA384", "HMAC-SHA-384");
        put("Alg.Alias.Mac.HmacSHA-512", "HMAC-SHA-512");
        put("Alg.Alias.Mac.HmacSHA512", "HMAC-SHA-512");
        put("Alg.Alias.Mac.HmacRIPEMD128", "HMAC-RIPEMD128");
        put("Alg.Alias.Mac.HmacRIPEMD-128", "HMAC-RIPEMD128");
        put("Alg.Alias.Mac.HmacRIPEMD160", "HMAC-RIPEMD160");
        put("Alg.Alias.Mac.HmacRIPEMD-160", "HMAC-RIPEMD160");
        put("Alg.Alias.Mac.HmacTiger", "HMAC-TIGER");
        put("Alg.Alias.Mac.HmacHaval", "HMAC-HAVAL");
        put("Alg.Alias.Mac.HmacWhirlpool", "HMAC-WHIRLPOOL");

        // KeyAgreement
        put("KeyAgreement.DH",
            gnu.javax.crypto.jce.DiffieHellmanImpl.class.getName());
        put("Alg.Alias.KeyAgreement.DiffieHellman", "DH");

        // Cipher
        put("Cipher.RSAES-PKCS1-v1_5",
            gnu.javax.crypto.RSACipherImpl.class.getName());
        put("Alg.Alias.Cipher.RSA", "RSAES-PKCS1-v1_5");

        // SecureRandom
        put("SecureRandom.ARCFOUR",
            gnu.javax.crypto.jce.prng.ARCFourRandomSpi.class.getName());
        put("SecureRandom.ARCFOUR ImplementedIn", "Software");
        put("SecureRandom.CSPRNG",
            gnu.javax.crypto.jce.prng.CSPRNGSpi.class.getName());
        put("SecureRandom.CSPRNG ImplementedIn", "Software");
        put("SecureRandom.ICM",
            gnu.javax.crypto.jce.prng.ICMRandomSpi.class.getName());
        put("SecureRandom.ICM ImplementedIn", "Software");
        put("SecureRandom.UMAC-KDF",
            gnu.javax.crypto.jce.prng.UMacRandomSpi.class.getName());
        put("SecureRandom.UMAC-KDF ImplementedIn", "Software");
        put("SecureRandom.Fortuna",
            gnu.javax.crypto.jce.prng.FortunaImpl.class.getName());
        put("SecureRandom.Fortuna ImplementedIn", "Software");

        // KeyStore
        put("KeyStore.GKR",
            gnu.javax.crypto.jce.keyring.GnuKeyring.class.getName());
        put("Alg.Alias.KeyStore.GnuKeyring", "GKR");

        // KeyPairGenerator ---------------------------------------------------
        put("KeyPairGenerator.DH",
            gnu.javax.crypto.jce.sig.DHKeyPairGeneratorSpi.class.getName());
        put("KeyPairGenerator.DH KeySize", "512");
        put("KeyPairGenerator.DH ImplementedIn", "Software");

        put("Alg.Alias.KeyPairGenerator.DiffieHellman", "DH");

        // KeyFactory ---------------------------------------------------------
        put("KeyFactory.DH",
            gnu.javax.crypto.jce.sig.DHKeyFactory.class.getName());

        put("Alg.Alias,KeyFactory.DiffieHellman", "DH");

        // Algorithm Parameters -----------------------------------------------
        put("AlgorithmParameters.DH",
            gnu.javax.crypto.jce.sig.DHParameters.class.getName());

        put("Alg.Alias.AlgorithmParameters.DiffieHellman", "DH");

        // Algorithm Parameters Generator -------------------------------------
        put("AlgorithmParameterGenerator.DH",
            gnu.javax.crypto.jce.sig.DHParametersGenerator.class.getName());

        put("Alg.Alias.AlgorithmParameterGenerator.DiffieHellman", "DH");

        return null;
      }
    });
  }

  /**
   * Returns a {@link Set} of names of symmetric key block cipher algorithms
   * available from this {@link Provider}.
   *
   * @return a {@link Set} of cipher names (Strings).
   */
  public static final Set getCipherNames()
  {
    HashSet s = new HashSet();
    s.addAll(CipherFactory.getNames());
    s.add(Registry.ARCFOUR_PRNG);
    return s;
  }

  /**
   * Returns a {@link Set} of names of MAC algorithms available from this
   * {@link Provider}.
   *
   * @return a {@link Set} of MAC names (Strings).
   */
  public static final Set getMacNames()
  {
    return MacFactory.getNames();
  }
}
