/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package java.security.spec; import java.math.BigInteger; /** * The key specification of a RSA private key using Chinese Remainder Theorem * (CRT) values. * <p> * Defined in the <a * href="http://www.rsa.com/rsalabs/pubs/PKCS/html/pkcs-1.html">PKCS #1 v2.1</a> * standard. */ public class RSAPrivateCrtKeySpec extends RSAPrivateKeySpec { // Public Exponent private final BigInteger publicExponent; // Prime P private final BigInteger primeP; // Prime Q private final BigInteger primeQ; // Prime Exponent P private final BigInteger primeExponentP; // Prime Exponent Q private final BigInteger primeExponentQ; // CRT Coefficient private final BigInteger crtCoefficient; /** * Creates a new {@code RSAMultiPrimePrivateCrtKeySpec} with the specified * modulus, public exponent, private exponent, prime factors, prime * exponents, crt coefficient, and additional primes. * * @param modulus * the modulus {@code n}. * @param publicExponent * the public exponent {@code e}. * @param privateExponent * the private exponent {@code d}. * @param primeP * the prime factor {@code p} of {@code n}. * @param primeQ * the prime factor {@code q} of {@code n}. * @param primeExponentP * the exponent of the prime {@code p}. * @param primeExponentQ * the exponent of the prime {@code q}. * @param crtCoefficient * the CRT coefficient {@code q^-1 mod p}. */ public RSAPrivateCrtKeySpec(BigInteger modulus, BigInteger publicExponent, BigInteger privateExponent, BigInteger primeP, BigInteger primeQ, BigInteger primeExponentP, BigInteger primeExponentQ, BigInteger crtCoefficient) { super(modulus, privateExponent); this.publicExponent = publicExponent; this.primeP = primeP; this.primeQ = primeQ; this.primeExponentP = primeExponentP; this.primeExponentQ = primeExponentQ; this.crtCoefficient = crtCoefficient; } /** * Returns the CRT coefficient, {@code q^-1 mod p}. * * @return the CRT coefficient, {@code q^-1 mod p}. */ public BigInteger getCrtCoefficient() { return crtCoefficient; } /** * Returns the exponent of the prime {@code p}. * * @return the exponent of the prime {@code p}. */ public BigInteger getPrimeExponentP() { return primeExponentP; } /** * Returns the exponent of the prime {@code q}. * * @return the exponent of the prime {@code q}. */ public BigInteger getPrimeExponentQ() { return primeExponentQ; } /** * Returns the prime factor {@code p}. * * @return the prime factor {@code p}. */ public BigInteger getPrimeP() { return primeP; } /** * Returns the prime factor {@code q}. * * @return the prime factor {@code q}. */ public BigInteger getPrimeQ() { return primeQ; } /** * Returns the public exponent {@code e}. * * @return the public exponent {@code e}. */ public BigInteger getPublicExponent() { return publicExponent; } }