View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      https://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.commons.codec.digest;
19  
20  /**
21   * Enumerates the standard {@link HmacUtils} algorithm names from the <cite>Java Cryptography Architecture Standard Algorithm Name Documentation</cite>.
22   * <p>
23   * <strong>Note: Not all JCE implementations support all the algorithms in this enum.</strong>
24   * </p>
25   *
26   * @see <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html#SunJCEProvider"> Java 8 Cryptography Architecture Sun
27   *      Providers Documentation</a>
28   * @see <a href= "https://docs.oracle.com/en/java/javase/11/security/oracle-providers.html#GUID-A47B1249-593C-4C38-A0D0-68FA7681E0A7"> Java 11 Cryptography
29   *      Architecture Sun Providers Documentation</a>
30   * @see <a href= "https://docs.oracle.com/en/java/javase/17/security/oracle-providers.html#GUID-A47B1249-593C-4C38-A0D0-68FA7681E0A7"> Java 17 Cryptography
31   *      Architecture Sun Providers Documentation</a>
32   * @since 1.10
33   */
34  public enum HmacAlgorithms {
35  
36      /**
37       * The HmacMD5 Message Authentication Code (MAC) algorithm specified in RFC 2104 and RFC 1321.
38       * <p>
39       * Every implementation of the Java platform is required to support this standard MAC algorithm.
40       * </p>
41       */
42      HMAC_MD5("HmacMD5"),
43  
44      /**
45       * The HmacSHA1 Message Authentication Code (MAC) algorithm specified in RFC 2104 and FIPS PUB 180-2.
46       * <p>
47       * Every implementation of the Java platform is required to support this standard MAC algorithm.
48       * </p>
49       */
50      HMAC_SHA_1("HmacSHA1"),
51  
52      /**
53       * The HmacSHA224 Message Authentication Code (MAC) algorithm specified in RFC 2104 and FIPS PUB 180-2.
54       * <p>
55       * Every implementation of the Java 8+ platform is required to support this standard MAC algorithm.
56       * </p>
57       *
58       * @since 1.11
59       */
60      HMAC_SHA_224("HmacSHA224"),
61  
62      /**
63       * The HmacSHA256 Message Authentication Code (MAC) algorithm specified in RFC 2104 and FIPS PUB 180-2.
64       * <p>
65       * Every implementation of the Java platform is required to support this standard MAC algorithm.
66       * </p>
67       */
68      HMAC_SHA_256("HmacSHA256"),
69  
70      /**
71       * The HmacSHA384 Message Authentication Code (MAC) algorithm specified in RFC 2104 and FIPS PUB 180-2.
72       * <p>
73       * This MAC algorithm is <em>optional</em>; not all implementations support it.
74       * </p>
75       */
76      HMAC_SHA_384("HmacSHA384"),
77  
78      /**
79       * The HmacSHA512 Message Authentication Code (MAC) algorithm specified in RFC 2104 and FIPS PUB 180-2.
80       * <p>
81       * This MAC algorithm is <em>optional</em>; not all implementations support it.
82       * </p>
83       */
84      HMAC_SHA_512("HmacSHA512");
85  
86      private final String name;
87  
88      HmacAlgorithms(final String algorithm) {
89          this.name = algorithm;
90      }
91  
92      /**
93       * Gets the algorithm name.
94       *
95       * @return the algorithm name.
96       * @since 1.11
97       */
98      public String getName() {
99          return name;
100     }
101 
102     /**
103      * The algorithm name.
104      *
105      * @see <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html#SunJCEProvider">
106      *      Java 8 Cryptography Architecture Sun Providers Documentation</a>
107      * @see <a href=
108      *      "https://docs.oracle.com/javase/9/security/oracleproviders.htm#JSSEC-GUID-A47B1249-593C-4C38-A0D0-68FA7681E0A7">
109      *      Java 9 Cryptography Architecture Sun Providers Documentation</a>
110      * @return The algorithm name ("HmacSHA512" for example).
111      */
112     @Override
113     public String toString() {
114         return name;
115     }
116 
117 }