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 import java.security.spec.AlgorithmParameterSpec;
 29 
 30 /**
 31  * This class specifies the set of parameters used with mask generation
 32  * function MGF1 in OAEP Padding and RSASSA-PSS signature scheme, as
 33  * defined in the
 34  * <a href="https://tools.ietf.org/rfc/rfc8017.txt">PKCS#1 v2.2</a> standard.
 35  *
 36  * <p>Its ASN.1 definition in PKCS#1 standard is described below:
 37  * <pre>
 38  * PKCS1MGFAlgorithms    ALGORITHM-IDENTIFIER ::= {
 39  *   { OID id-mgf1 PARAMETERS HashAlgorithm },
 40  *   ...  -- Allows for future expansion --
 41  * }
 42  * </pre>
 43  * where
 44  * <pre>
 45  * HashAlgorithm ::= AlgorithmIdentifier {
 46  *   {OAEP-PSSDigestAlgorithms}
 47  * }
 48  *
 49  * OAEP-PSSDigestAlgorithms    ALGORITHM-IDENTIFIER ::= {
 50  *   { OID id-sha1       PARAMETERS NULL }|
 51  *   { OID id-sha224     PARAMETERS NULL }|
 52  *   { OID id-sha256     PARAMETERS NULL }|
 53  *   { OID id-sha384     PARAMETERS NULL }|
 54  *   { OID id-sha512     PARAMETERS NULL }|
 55  *   { OID id-sha512-224 PARAMETERS NULL }|
 56  *   { OID id-sha512-256 PARAMETERS NULL },
 57  *   ...  -- Allows for future expansion --
 58  * }
 59  * </pre>
 60  * @see PSSParameterSpec
 61  * @see javax.crypto.spec.OAEPParameterSpec
 62  *
 63  * @author Valerie Peng
 64  *
 65  * @since 1.5
 66  */
 67 public class MGF1ParameterSpec implements AlgorithmParameterSpec {
 68 
 69     /**
 70      * The MGF1ParameterSpec which uses "SHA-1" message digest
 71      */
 72     public static final MGF1ParameterSpec SHA1 =
 73         new MGF1ParameterSpec("SHA-1");
 74 
 75     /**
 76      * The MGF1ParameterSpec which uses "SHA-224" message digest
 77      */
 78     public static final MGF1ParameterSpec SHA224 =
 79         new MGF1ParameterSpec("SHA-224");
 80 
 81     /**
 82      * The MGF1ParameterSpec which uses "SHA-256" message digest
 83      */
 84     public static final MGF1ParameterSpec SHA256 =
 85         new MGF1ParameterSpec("SHA-256");
 86 
 87     /**
 88      * The MGF1ParameterSpec which uses "SHA-384" message digest
 89      */
 90     public static final MGF1ParameterSpec SHA384 =
 91         new MGF1ParameterSpec("SHA-384");
 92 
 93     /**
 94      * The MGF1ParameterSpec which uses SHA-512 message digest
 95      */
 96     public static final MGF1ParameterSpec SHA512 =
 97         new MGF1ParameterSpec("SHA-512");
 98 
 99     /**
100      * The MGF1ParameterSpec which uses SHA-512/224 message digest
101      */
102     public static final MGF1ParameterSpec SHA512_224 =
103         new MGF1ParameterSpec("SHA-512/224");
104 
105     /**
106      * The MGF1ParameterSpec which uses SHA-512/256 message digest
107      */
108     public static final MGF1ParameterSpec SHA512_256 =
109         new MGF1ParameterSpec("SHA-512/256");
110 
111     /**
112      * The MGF1ParameterSpec which uses SHA3-224 message digest
113      */
114     public static final MGF1ParameterSpec SHA3_224 =
115         new MGF1ParameterSpec("SHA3-224");
116 
117     /**
118      * The MGF1ParameterSpec which uses SHA3-256 message digest
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      */
126     public static final MGF1ParameterSpec SHA3_384 =
127         new MGF1ParameterSpec("SHA3-384");
128 
129     /**
130      * The MGF1ParameterSpec which uses SHA3-512 message digest
131      */
132     public static final MGF1ParameterSpec SHA3_512 =
133         new MGF1ParameterSpec("SHA3-512");
134 
135     private String mdName;
136 
137     /**
138      * Constructs a parameter set for mask generation function MGF1
139      * as defined in the PKCS #1 standard.
140      *
141      * @param mdName the algorithm name for the message digest
142      * used in this mask generation function MGF1.
143      * @throws    NullPointerException if {@code mdName} is null.
144      */
145     public MGF1ParameterSpec(String mdName) {
146         if (mdName == null) {
147             throw new NullPointerException("digest algorithm is null");
148         }
149         this.mdName = mdName;
150     }
151 
152     /**
153      * Returns the algorithm name of the message digest used by the mask
154      * generation function.
155      *
156      * @return the algorithm name of the message digest.
157      */
158     public String getDigestAlgorithm() {
159         return mdName;
160     }
161 }