All Downloads are FREE. Search and download functionalities are using the official Maven repository.

java.security.spec.RSAMultiPrimePrivateCrtKeySpec Maven / Gradle / Ivy

There is a newer version: 1.2.9
Show newest version
/*
 *  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 multi-prime private key with the Chinese
 * Remainder Theorem (CRT) information values used.
 * 

* Defined in the PKCS #1 v2.1 * standard. */ public class RSAMultiPrimePrivateCrtKeySpec 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; // Other Prime Info private final RSAOtherPrimeInfo[] otherPrimeInfo; /** * 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}. * @param otherPrimeInfo * the information for the additional primes or {@code null} if * there are only the two primes ({@code p, q}). * @throws IllegalArgumentException * if {@code otherPrimeInfo} is not null but empty. */ public RSAMultiPrimePrivateCrtKeySpec( BigInteger modulus, BigInteger publicExponent, BigInteger privateExponent, BigInteger primeP, BigInteger primeQ, BigInteger primeExponentP, BigInteger primeExponentQ, BigInteger crtCoefficient, RSAOtherPrimeInfo[] otherPrimeInfo) { super(modulus, privateExponent); // Perform checks specified if (modulus == null) { throw new NullPointerException("modulus == null"); } if (privateExponent == null) { throw new NullPointerException("privateExponent == null"); } if (publicExponent == null) { throw new NullPointerException("publicExponent == null"); } if (primeP == null) { throw new NullPointerException("primeP == null"); } if (primeQ == null) { throw new NullPointerException("primeQ == null"); } if (primeExponentP == null) { throw new NullPointerException("primeExponentP == null"); } if (primeExponentQ == null) { throw new NullPointerException("primeExponentQ == null"); } if (crtCoefficient == null) { throw new NullPointerException("crtCoefficient == null"); } if (otherPrimeInfo != null) { if (otherPrimeInfo.length == 0) { throw new IllegalArgumentException("otherPrimeInfo.length == 0"); } // Clone array to prevent subsequent modification this.otherPrimeInfo = new RSAOtherPrimeInfo[otherPrimeInfo.length]; System.arraycopy(otherPrimeInfo, 0, this.otherPrimeInfo, 0, this.otherPrimeInfo.length); } else { this.otherPrimeInfo = null; } 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 information for the additional primes. * * @return the information for the additional primes, or {@code null} if * there are only the two primes ({@code p, q}). */ public RSAOtherPrimeInfo[] getOtherPrimeInfo() { // Clone array (if not null) to prevent subsequent modification if (otherPrimeInfo == null) { return null; } else { RSAOtherPrimeInfo[] ret = new RSAOtherPrimeInfo[otherPrimeInfo.length]; System.arraycopy(otherPrimeInfo, 0, ret, 0, ret.length); return ret; } } /** * 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; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy