// --- BEGIN COPYRIGHT BLOCK ---
// This program 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; version 2 of the License.
//
// This program 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 this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
//
// (C) 2007 Red Hat, Inc.
// All rights reserved.
// --- END COPYRIGHT BLOCK ---
package netscape.security.provider;

import java.security.Provider;

/**
 * The SUN Security Provider.
 *
 * @author Benjamin Renaud
 *
 * @version 1.24, 97/12/10
 */

/**
 * Defines the SUN provider.
 *
 * Algorithm supported, and their names:
 *
 * - SHA-1 is the message digest scheme decribed FIPS 180-1.
 * Aliases for SHA-1 are SHA.
 *
 * - DSA is the signature scheme described in FIPS 186. (SHA used in
 * DSA is SHA-1: FIPS 186 with Change No 1.) Aliases for DSA are
 * SHA/DSA, SHA-1/DSA, SHA1/DSA, DSS and the object identifier
 * strings "OID.1.3.14.3.2.13", "OID.1.3.14.3.2.27" and
 * "OID.1.2.840.10040.4.3".
 *
 * - DSA is the key generation scheme as described in FIPS 186.
 * Aliases for DSA include the OID strings "OID.1.3.14.3.2.12"
 * and "OID.1.2.840.10040.4.1".
 *
 * - MD5 is the message digest scheme described in RFC 1321.
 * There are no aliases for MD5.
 *
 * Notes: The name of algorithm described in FIPS-180 is SHA-0, and is
 * not supported by the SUN provider.)
 */
public final class Sun extends Provider {

    /**
     *
     */
    private static final long serialVersionUID = 9134942296334703727L;
    private static String info = "SUN Security Provider v1.0, " +
            "DSA signing and key generation, SHA-1 and MD5 message digests.";

    public Sun() {
        /* We are the SUN provider */
        super("SUN", 1.0, info);

        try {

            //	    AccessController.beginPrivileged();

            /*
             * Signature engines
             */
            put("Signature.DSA", "netscape.security.provider.DSA");

            put("Alg.Alias.Signature.SHA/DSA", "DSA");
            put("Alg.Alias.Signature.SHA1/DSA", "DSA");
            put("Alg.Alias.Signature.SHA-1/DSA", "DSA");
            put("Alg.Alias.Signature.DSS", "DSA");
            put("Alg.Alias.Signature.OID.1.3.14.3.2.13", "DSA");
            put("Alg.Alias.Signature.OID.1.3.14.3.2.27", "DSA");
            put("Alg.Alias.Signature.OID.1.2.840.10040.4.3", "DSA");
            // the following are not according to our formal spec but
            // are still supported
            put("Alg.Alias.Signature.1.3.14.3.2.13", "DSA");
            put("Alg.Alias.Signature.1.3.14.3.2.27", "DSA");
            put("Alg.Alias.Signature.1.2.840.10040.4.3", "DSA");
            put("Alg.Alias.Signature.SHAwithDSA", "DSA");
            put("Alg.Alias.Signature.SHA1withDSA", "DSA");

            /*
             *  Key Pair Generator engines
             */
            put("KeyPairGenerator.DSA",
                    "netscape.security.provider.DSAKeyPairGenerator");

            put("Alg.Alias.KeyPairGenerator.OID.1.3.14.3.2.12", "DSA");
            put("Alg.Alias.KeyPairGenerator.OID.1.2.840.10040.4.1", "DSA");
            // the following are not according to our formal spec but
            // are still supported
            put("Alg.Alias.KeyPairGenerator.1.3.14.3.2.12", "DSA");
            put("Alg.Alias.KeyPairGenerator.1.2.840.10040.4.1", "DSA");

            /*
             * Digest engines
             */
            put("MessageDigest.MD5", "netscape.security.provider.MD5");
            put("MessageDigest.SHA-1", "netscape.security.provider.SHA");

            put("Alg.Alias.MessageDigest.SHA", "SHA-1");
            put("Alg.Alias.MessageDigest.SHA1", "SHA-1");

            /*
             * Algorithm Parameter Generator engines
             */
            put("AlgorithmParameterGenerator.DSA",
                    "netscape.security.provider.DSAParameterGenerator");

            /*
             * Algorithm Parameter engines
             */
            put("AlgorithmParameters.DSA",
                    "netscape.security.provider.DSAParameters");
            put("Alg.Alias.AlgorithmParameters.1.3.14.3.2.12", "DSA");
            put("Alg.Alias.AlgorithmParameters.1.2.840.10040.4.1", "DSA");
            /*
             * Key factories
             */
            put("KeyFactory.DSA", "netscape.security.provider.DSAKeyFactory");

        } finally {
            //	    AccessController.endPrivileged();
        }
    }
}
