001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018package org.apache.commons.codec.digest;
019
020import java.security.MessageDigest;
021
022/**
023 * Standard {@link MessageDigest} algorithm names from the <cite>Java Cryptography Architecture Standard Algorithm Name
024 * Documentation</cite>.
025 * <p>
026 * This class is immutable and thread-safe.
027 * </p>
028 * <p>
029 * Java 8 and up: SHA-224.
030 * </p>
031 * <p>
032 * Java 9 and up: SHA3-224, SHA3-256, SHA3-384, SHA3-512.
033 * </p>
034 *
035 * @see <a href="http://docs.oracle.com/javase/6/docs/technotes/guides/security/StandardNames.html#MessageDigest">
036 *      Java 6 Cryptography Architecture Standard Algorithm Name Documentation</a>
037 * @see <a href="http://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#MessageDigest">
038 *      Java 7 Cryptography Architecture Standard Algorithm Name Documentation</a>
039 * @see <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#MessageDigest">
040 *      Java 8 Cryptography Architecture Standard Algorithm Name Documentation</a>
041 * @see <a href="http://download.java.net/java/jdk9/docs/technotes/guides/security/StandardNames.html#MessageDigest">
042 *      Java 9 Cryptography Architecture Standard Algorithm Name Documentation</a>
043 *
044 * @see <a href="http://dx.doi.org/10.6028/NIST.FIPS.180-4">FIPS PUB 180-4</a>
045 * @see <a href="http://dx.doi.org/10.6028/NIST.FIPS.202">FIPS PUB 202</a>
046 * @since 1.7
047 * @version $Id: MessageDigestAlgorithms.java 1744728 2016-05-20 12:55:58Z sebb $
048 */
049public class MessageDigestAlgorithms {
050
051    /**
052     * The MD2 message digest algorithm defined in RFC 1319.
053     */
054    public static final String MD2 = "MD2";
055
056    /**
057     * The MD5 message digest algorithm defined in RFC 1321.
058     */
059    public static final String MD5 = "MD5";
060
061    /**
062     * The SHA-1 hash algorithm defined in the FIPS PUB 180-2.
063     */
064    public static final String SHA_1 = "SHA-1";
065
066    /**
067     * The SHA-224 hash algorithm defined in the FIPS PUB 180-3.
068     * <p>
069     * Present in Oracle Java 8.
070     * </p>
071     *
072     * @since 1.11
073     */
074    public static final String SHA_224 = "SHA-224";
075
076    /**
077     * The SHA-256 hash algorithm defined in the FIPS PUB 180-2.
078     */
079    public static final String SHA_256 = "SHA-256";
080
081    /**
082     * The SHA-384 hash algorithm defined in the FIPS PUB 180-2.
083     */
084    public static final String SHA_384 = "SHA-384";
085
086    /**
087     * The SHA-512 hash algorithm defined in the FIPS PUB 180-2.
088     */
089    public static final String SHA_512 = "SHA-512";
090
091    /**
092     * The SHA3-224 hash algorithm defined in the FIPS PUB 202.
093     * <p>
094     * Likely to be included in Oracle Java 9 GA.
095     * </p>
096     *
097     * @since 1.11
098     */
099    public static final String SHA3_224 = "SHA3-224";
100
101    /**
102     * The SHA3-256 hash algorithm defined in the FIPS PUB 202.
103     * <p>
104     * Likely to be included in Oracle Java 9 GA.
105     * </p>
106     *
107     * @since 1.11
108     */
109    public static final String SHA3_256 = "SHA3-256";
110
111    /**
112     * The SHA3-384 hash algorithm defined in the FIPS PUB 202.
113     * <p>
114     * Likely to be included in Oracle Java 9 GA.
115     * </p>
116     *
117     * @since 1.11
118     */
119    public static final String SHA3_384 = "SHA3-384";
120
121    /**
122     * The SHA3-512 hash algorithm defined in the FIPS PUB 202.
123     * <p>
124     * Likely to be included in Oracle Java 9 GA.
125     * </p>
126     *
127     * @since 1.11
128     */
129    public static final String SHA3_512 = "SHA3-512";
130
131    /**
132     * Gets all constant values defined in this class.
133     *
134     * @return all constant values defined in this class.
135     * @since 1.11
136     */
137    public static String[] values() {
138        // N.B. do not use a constant array here as that can be changed externally by accident or design
139        return new String[] {
140            MD2, MD5, SHA_1, SHA_224, SHA_256, SHA_384, SHA_512, SHA3_224, SHA3_256, SHA3_384, SHA3_512
141        };
142    }
143
144    private MessageDigestAlgorithms() {
145        // cannot be instantiated.
146    }
147
148}