1 /* 2 * Copyright (c) 2003, 2020, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package java.security.spec; 27 28 /** 29 * This class specifies the set of parameters used with mask generation 30 * function MGF1 in OAEP Padding and RSASSA-PSS signature scheme, as 31 * defined in the 32 * <a href="https://tools.ietf.org/rfc/rfc8017.txt">PKCS#1 v2.2</a> standard. 33 * 34 * <p>Its ASN.1 definition in PKCS#1 standard is described below: 35 * <pre> 36 * PKCS1MGFAlgorithms ALGORITHM-IDENTIFIER ::= { 37 * { OID id-mgf1 PARAMETERS HashAlgorithm }, 38 * ... -- Allows for future expansion -- 39 * } 40 * </pre> 41 * where 42 * <pre> 43 * HashAlgorithm ::= AlgorithmIdentifier { 44 * {OAEP-PSSDigestAlgorithms} 45 * } 46 * 47 * OAEP-PSSDigestAlgorithms ALGORITHM-IDENTIFIER ::= { 48 * { OID id-sha1 PARAMETERS NULL }| 49 * { OID id-sha224 PARAMETERS NULL }| 50 * { OID id-sha256 PARAMETERS NULL }| 51 * { OID id-sha384 PARAMETERS NULL }| 52 * { OID id-sha512 PARAMETERS NULL }| 53 * { OID id-sha512-224 PARAMETERS NULL }| 54 * { OID id-sha512-256 PARAMETERS NULL }, 55 * ... -- Allows for future expansion -- 56 * } 57 * </pre> 58 * @see PSSParameterSpec 59 * @see javax.crypto.spec.OAEPParameterSpec 60 * 61 * @author Valerie Peng 62 * 63 * @since 1.5 64 */ 65 public class MGF1ParameterSpec implements AlgorithmParameterSpec { 66 67 /** 68 * The MGF1ParameterSpec which uses "SHA-1" message digest 69 */ 70 public static final MGF1ParameterSpec SHA1 = 71 new MGF1ParameterSpec("SHA-1"); 72 73 /** 74 * The MGF1ParameterSpec which uses "SHA-224" message digest 75 */ 76 public static final MGF1ParameterSpec SHA224 = 77 new MGF1ParameterSpec("SHA-224"); 78 79 /** 80 * The MGF1ParameterSpec which uses "SHA-256" message digest 81 */ 82 public static final MGF1ParameterSpec SHA256 = 83 new MGF1ParameterSpec("SHA-256"); 84 85 /** 86 * The MGF1ParameterSpec which uses "SHA-384" message digest 87 */ 88 public static final MGF1ParameterSpec SHA384 = 89 new MGF1ParameterSpec("SHA-384"); 90 91 /** 92 * The MGF1ParameterSpec which uses SHA-512 message digest 93 */ 94 public static final MGF1ParameterSpec SHA512 = 95 new MGF1ParameterSpec("SHA-512"); 96 97 /** 98 * The MGF1ParameterSpec which uses SHA-512/224 message digest 99 */ 100 public static final MGF1ParameterSpec SHA512_224 = 101 new MGF1ParameterSpec("SHA-512/224"); 102 103 /** 104 * The MGF1ParameterSpec which uses SHA-512/256 message digest 105 */ 106 public static final MGF1ParameterSpec SHA512_256 = 107 new MGF1ParameterSpec("SHA-512/256"); 108 109 /** 110 * The MGF1ParameterSpec which uses SHA3-224 message digest 111 * @since 16 112 */ 113 public static final MGF1ParameterSpec SHA3_224 = 114 new MGF1ParameterSpec("SHA3-224"); 115 116 /** 117 * The MGF1ParameterSpec which uses SHA3-256 message digest 118 * @since 16 119 */ 120 public static final MGF1ParameterSpec SHA3_256 = 121 new MGF1ParameterSpec("SHA3-256"); 122 123 /** 124 * The MGF1ParameterSpec which uses SHA3-384 message digest 125 * @since 16 126 */ 127 public static final MGF1ParameterSpec SHA3_384 = 128 new MGF1ParameterSpec("SHA3-384"); 129 130 /** 131 * The MGF1ParameterSpec which uses SHA3-512 message digest 132 * @since 16 133 */ 134 public static final MGF1ParameterSpec SHA3_512 = 135 new MGF1ParameterSpec("SHA3-512"); 136 137 private String mdName; 138 139 /** 140 * Constructs a parameter set for mask generation function MGF1 141 * as defined in the PKCS #1 standard. 142 * 143 * @param mdName the algorithm name for the message digest 144 * used in this mask generation function MGF1. 145 * @throws NullPointerException if {@code mdName} is null. 146 */ MGF1ParameterSpec(String mdName)147 public MGF1ParameterSpec(String mdName) { 148 if (mdName == null) { 149 throw new NullPointerException("digest algorithm is null"); 150 } 151 this.mdName = mdName; 152 } 153 154 /** 155 * Returns the algorithm name of the message digest used by the mask 156 * generation function. 157 * 158 * @return the algorithm name of the message digest. 159 */ getDigestAlgorithm()160 public String getDigestAlgorithm() { 161 return mdName; 162 } 163 164 @Override toString()165 public String toString() { 166 return "MGF1ParameterSpec[hashAlgorithm=" + mdName + "]"; 167 } 168 } 169