1 /*
2  * Copyright (c) 2003, 2018, 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     private String mdName;
112
113     /**
114      * Constructs a parameter set for mask generation function MGF1
115      * as defined in the PKCS #1 standard.
116      *
117      * @param mdName the algorithm name for the message digest
118      * used in this mask generation function MGF1.
119      * @exception NullPointerException if {@code mdName} is null.
120      */

121     public MGF1ParameterSpec(String mdName) {
122         if (mdName == null) {
123             throw new NullPointerException("digest algorithm is null");
124         }
125         this.mdName = mdName;
126     }
127
128     /**
129      * Returns the algorithm name of the message digest used by the mask
130      * generation function.
131      *
132      * @return the algorithm name of the message digest.
133      */

134     public String getDigestAlgorithm() {
135         return mdName;
136     }
137 }
138