1 /*
2  * Copyright (c) 1998, 2013, 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.math.BigInteger;
29 
30 /**
31  * This class specifies an RSA private key, as defined in the PKCS#1
32  * standard, using the Chinese Remainder Theorem (CRT) information values for
33  * efficiency.
34  *
35  * @author Jan Luehe
36  *
37  *
38  * @see java.security.Key
39  * @see java.security.KeyFactory
40  * @see KeySpec
41  * @see PKCS8EncodedKeySpec
42  * @see RSAPrivateKeySpec
43  * @see RSAPublicKeySpec
44  */
45 
46 public class RSAPrivateCrtKeySpec extends RSAPrivateKeySpec {
47 
48     private final BigInteger publicExponent;
49     private final BigInteger primeP;
50     private final BigInteger primeQ;
51     private final BigInteger primeExponentP;
52     private final BigInteger primeExponentQ;
53     private final BigInteger crtCoefficient;
54 
55 
56 
57    /**
58     * Creates a new {@code RSAPrivateCrtKeySpec}
59     * given the modulus, publicExponent, privateExponent,
60     * primeP, primeQ, primeExponentP, primeExponentQ, and
61     * crtCoefficient as defined in PKCS#1.
62     *
63     * @param modulus the modulus n
64     * @param publicExponent the public exponent e
65     * @param privateExponent the private exponent d
66     * @param primeP the prime factor p of n
67     * @param primeQ the prime factor q of n
68     * @param primeExponentP this is d mod (p-1)
69     * @param primeExponentQ this is d mod (q-1)
70     * @param crtCoefficient the Chinese Remainder Theorem
71     * coefficient q-1 mod p
72     */
RSAPrivateCrtKeySpec(BigInteger modulus, BigInteger publicExponent, BigInteger privateExponent, BigInteger primeP, BigInteger primeQ, BigInteger primeExponentP, BigInteger primeExponentQ, BigInteger crtCoefficient)73     public RSAPrivateCrtKeySpec(BigInteger modulus,
74                                 BigInteger publicExponent,
75                                 BigInteger privateExponent,
76                                 BigInteger primeP,
77                                 BigInteger primeQ,
78                                 BigInteger primeExponentP,
79                                 BigInteger primeExponentQ,
80                                 BigInteger crtCoefficient) {
81         super(modulus, privateExponent);
82         this.publicExponent = publicExponent;
83         this.primeP = primeP;
84         this.primeQ = primeQ;
85         this.primeExponentP = primeExponentP;
86         this.primeExponentQ = primeExponentQ;
87         this.crtCoefficient = crtCoefficient;
88     }
89 
90     /**
91      * Returns the public exponent.
92      *
93      * @return the public exponent
94      */
getPublicExponent()95     public BigInteger getPublicExponent() {
96         return this.publicExponent;
97     }
98 
99     /**
100      * Returns the primeP.
101 
102      * @return the primeP
103      */
getPrimeP()104     public BigInteger getPrimeP() {
105         return this.primeP;
106     }
107 
108     /**
109      * Returns the primeQ.
110      *
111      * @return the primeQ
112      */
getPrimeQ()113     public BigInteger getPrimeQ() {
114         return this.primeQ;
115     }
116 
117     /**
118      * Returns the primeExponentP.
119      *
120      * @return the primeExponentP
121      */
getPrimeExponentP()122     public BigInteger getPrimeExponentP() {
123         return this.primeExponentP;
124     }
125 
126     /**
127      * Returns the primeExponentQ.
128      *
129      * @return the primeExponentQ
130      */
getPrimeExponentQ()131     public BigInteger getPrimeExponentQ() {
132         return this.primeExponentQ;
133     }
134 
135     /**
136      * Returns the crtCoefficient.
137      *
138      * @return the crtCoefficient
139      */
getCrtCoefficient()140     public BigInteger getCrtCoefficient() {
141         return this.crtCoefficient;
142     }
143 }
144