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 * <ul> 029 * <li>Java 8 and up: SHA-224.</li> 030 * <li>Java 9 and up: SHA3-224, SHA3-256, SHA3-384, SHA3-512.</li> 031 * </ul> 032 * 033 * @see <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#MessageDigest"> 034 * Java 8 Cryptography Architecture Standard Algorithm Name Documentation</a> 035 * @see <a href="https://docs.oracle.com/en/java/javase/11/docs/specs/security/standard-names.html#messagedigest-algorithms"> 036 * Java 11 Cryptography Architecture Standard Algorithm Name Documentation</a> 037 * @see <a href="https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html#messagedigest-algorithms"> 038 * Java 17 Cryptography Architecture Standard Algorithm Name Documentation</a> 039 * @see <a href="https://docs.oracle.com/en/java/javase/21/docs/specs/security/standard-names.html#messagedigest-algorithms"> 040 * Java 21 Cryptography Architecture Standard Algorithm Name Documentation</a> 041 * 042 * @see <a href="https://dx.doi.org/10.6028/NIST.FIPS.180-4">FIPS PUB 180-4</a> 043 * @see <a href="https://dx.doi.org/10.6028/NIST.FIPS.202">FIPS PUB 202</a> 044 * @since 1.7 045 */ 046public class MessageDigestAlgorithms { 047 048 /** 049 * The MD2 message digest algorithm defined in RFC 1319. 050 */ 051 public static final String MD2 = "MD2"; 052 053 /** 054 * The MD5 message digest algorithm defined in RFC 1321. 055 */ 056 public static final String MD5 = "MD5"; 057 058 /** 059 * The SHA-1 hash algorithm defined in the FIPS PUB 180-2. 060 */ 061 public static final String SHA_1 = "SHA-1"; 062 063 /** 064 * The SHA-224 hash algorithm defined in the FIPS PUB 180-3. 065 * <p> 066 * Present in Oracle Java 8. 067 * </p> 068 * 069 * @since 1.11 070 */ 071 public static final String SHA_224 = "SHA-224"; 072 073 /** 074 * The SHA-256 hash algorithm defined in the FIPS PUB 180-2. 075 */ 076 public static final String SHA_256 = "SHA-256"; 077 078 /** 079 * The SHA-384 hash algorithm defined in the FIPS PUB 180-2. 080 */ 081 public static final String SHA_384 = "SHA-384"; 082 083 /** 084 * The SHA-512 hash algorithm defined in the FIPS PUB 180-2. 085 */ 086 public static final String SHA_512 = "SHA-512"; 087 088 /** 089 * The SHA-512 hash algorithm defined in the FIPS PUB 180-4. 090 * <p> 091 * Included starting in Oracle Java 9. 092 * </p> 093 * 094 * @since 1.14 095 */ 096 public static final String SHA_512_224 = "SHA-512/224"; 097 098 /** 099 * The SHA-512 hash algorithm defined in the FIPS PUB 180-4. 100 * <p> 101 * Included starting in Oracle Java 9. 102 * </p> 103 * 104 * @since 1.14 105 */ 106 public static final String SHA_512_256 = "SHA-512/256"; 107 108 /** 109 * The SHA3-224 hash algorithm defined in the FIPS PUB 202. 110 * <p> 111 * Included starting in Oracle Java 9. 112 * </p> 113 * 114 * @since 1.11 115 */ 116 public static final String SHA3_224 = "SHA3-224"; 117 118 /** 119 * The SHA3-256 hash algorithm defined in the FIPS PUB 202. 120 * <p> 121 * Included starting in Oracle Java 9. 122 * </p> 123 * 124 * @since 1.11 125 */ 126 public static final String SHA3_256 = "SHA3-256"; 127 128 /** 129 * The SHA3-384 hash algorithm defined in the FIPS PUB 202. 130 * <p> 131 * Included starting in Oracle Java 9. 132 * </p> 133 * 134 * @since 1.11 135 */ 136 public static final String SHA3_384 = "SHA3-384"; 137 138 /** 139 * The SHA3-512 hash algorithm defined in the FIPS PUB 202. 140 * <p> 141 * Included starting in Oracle Java 9. 142 * </p> 143 * 144 * @since 1.11 145 */ 146 public static final String SHA3_512 = "SHA3-512"; 147 148 /** 149 * Gets all constant values defined in this class. 150 * 151 * @return all constant values defined in this class. 152 * @since 1.11 153 */ 154 public static String[] values() { 155 // Do not use a constant array here as that can be changed externally by accident or design 156 return new String[] { 157 MD2, MD5, SHA_1, SHA_224, SHA_256, SHA_384, 158 SHA_512, SHA_512_224, SHA_512_256, SHA3_224, SHA3_256, SHA3_384, SHA3_512 159 }; 160 } 161 162 private MessageDigestAlgorithms() { 163 // cannot be instantiated. 164 } 165 166}