1 /*
2  * Copyright (c) 2003, 2007, 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 javax.crypto.spec;
27 
28 import java.math.BigInteger;
29 import java.security.spec.AlgorithmParameterSpec;
30 import java.security.spec.MGF1ParameterSpec;
31 
32 /**
33  * This class specifies the set of parameters used with OAEP Padding,
34  * as defined in the
35  * <a href="http://www.ietf.org/rfc/rfc3447.txt">PKCS #1</a>
36  * standard.
37  *
38  * Its ASN.1 definition in PKCS#1 standard is described below:
39  * <pre>
40  * RSAES-OAEP-params ::= SEQUENCE {
41  *   hashAlgorithm      [0] OAEP-PSSDigestAlgorithms     DEFAULT sha1,
42  *   maskGenAlgorithm   [1] PKCS1MGFAlgorithms  DEFAULT mgf1SHA1,
43  *   pSourceAlgorithm   [2] PKCS1PSourceAlgorithms  DEFAULT pSpecifiedEmpty
44  * }
45  * </pre>
46  * where
47  * <pre>
48  * OAEP-PSSDigestAlgorithms    ALGORITHM-IDENTIFIER ::= {
49  *   { OID id-sha1 PARAMETERS NULL   }|
50  *   { OID id-sha256 PARAMETERS NULL }|
51  *   { OID id-sha384 PARAMETERS NULL }|
52  *   { OID id-sha512 PARAMETERS NULL },
53  *   ...  -- Allows for future expansion --
54  * }
55  * PKCS1MGFAlgorithms    ALGORITHM-IDENTIFIER ::= {
56  *   { OID id-mgf1 PARAMETERS OAEP-PSSDigestAlgorithms },
57  *   ...  -- Allows for future expansion --
58  * }
59  * PKCS1PSourceAlgorithms    ALGORITHM-IDENTIFIER ::= {
60  *   { OID id-pSpecified PARAMETERS OCTET STRING },
61  *   ...  -- Allows for future expansion --
62  * }
63  * </pre>
64  * <p>Note: the OAEPParameterSpec.DEFAULT uses the following:
65  *     message digest  -- "SHA-1"
66  *     mask generation function (mgf) -- "MGF1"
67  *     parameters for mgf -- MGF1ParameterSpec.SHA1
68  *     source of encoding input -- PSource.PSpecified.DEFAULT
69  *
70  * @see java.security.spec.MGF1ParameterSpec
71  * @see PSource
72  *
73  * @author Valerie Peng
74  *
75  * @since 1.5
76  */
77 public class OAEPParameterSpec implements AlgorithmParameterSpec {
78 
79     private String mdName = "SHA-1";
80     private String mgfName = "MGF1";
81     private AlgorithmParameterSpec mgfSpec = MGF1ParameterSpec.SHA1;
82     private PSource pSrc = PSource.PSpecified.DEFAULT;
83 
84     /**
85      * The OAEP parameter set with all default values.
86      */
87     public static final OAEPParameterSpec DEFAULT = new OAEPParameterSpec();
88 
89     /**
90      * Constructs a parameter set for OAEP padding as defined in
91      * the PKCS #1 standard using the default values.
92      */
OAEPParameterSpec()93     private OAEPParameterSpec() {
94     }
95 
96     /**
97      * Constructs a parameter set for OAEP padding as defined in
98      * the PKCS #1 standard using the specified message digest
99      * algorithm <code>mdName</code>, mask generation function
100      * algorithm <code>mgfName</code>, parameters for the mask
101      * generation function <code>mgfSpec</code>, and source of
102      * the encoding input P <code>pSrc</code>.
103      *
104      * @param mdName the algorithm name for the message digest.
105      * @param mgfName the algorithm name for the mask generation
106      * function.
107      * @param mgfSpec the parameters for the mask generation function.
108      * If null is specified, null will be returned by getMGFParameters().
109      * @param pSrc the source of the encoding input P.
110      * @exception NullPointerException if <code>mdName</code>,
111      * <code>mgfName</code>, or <code>pSrc</code> is null.
112      */
OAEPParameterSpec(String mdName, String mgfName, AlgorithmParameterSpec mgfSpec, PSource pSrc)113     public OAEPParameterSpec(String mdName, String mgfName,
114                              AlgorithmParameterSpec mgfSpec,
115                              PSource pSrc) {
116         if (mdName == null) {
117             throw new NullPointerException("digest algorithm is null");
118         }
119         if (mgfName == null) {
120             throw new NullPointerException("mask generation function " +
121                                            "algorithm is null");
122         }
123         if (pSrc == null) {
124             throw new NullPointerException("source of the encoding input " +
125                                            "is null");
126         }
127         this.mdName =  mdName;
128         this.mgfName =  mgfName;
129         this.mgfSpec =  mgfSpec;
130         this.pSrc =  pSrc;
131     }
132 
133     /**
134      * Returns the message digest algorithm name.
135      *
136      * @return the message digest algorithm name.
137      */
getDigestAlgorithm()138     public String getDigestAlgorithm() {
139         return mdName;
140     }
141 
142     /**
143      * Returns the mask generation function algorithm name.
144      *
145      * @return the mask generation function algorithm name.
146      */
getMGFAlgorithm()147     public String getMGFAlgorithm() {
148         return mgfName;
149     }
150 
151     /**
152      * Returns the parameters for the mask generation function.
153      *
154      * @return the parameters for the mask generation function.
155      */
getMGFParameters()156     public AlgorithmParameterSpec getMGFParameters() {
157         return mgfSpec;
158     }
159 
160     /**
161      * Returns the source of encoding input P.
162      *
163      * @return the source of encoding input P.
164      */
getPSource()165     public PSource getPSource() {
166         return pSrc;
167     }
168 }
169