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