< prev index next >
src/java.base/share/classes/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -24,15 +24,17 @@
*/
package java.security.spec;
import java.math.BigInteger;
+import java.util.Objects;
/**
* This class specifies an RSA multi-prime private key, as defined in the
- * PKCS#1 v2.1, using the Chinese Remainder Theorem (CRT) information
- * values for efficiency.
+ * <a href="https://tools.ietf.org/rfc/rfc8017.txt">PKCS#1 v2.2</a> standard
+ * using the Chinese Remainder Theorem (CRT) information values
+ * for efficiency.
*
* @author Valerie Peng
*
*
* @see java.security.Key
@@ -55,81 +57,101 @@
private final BigInteger primeExponentQ;
private final BigInteger crtCoefficient;
private final RSAOtherPrimeInfo[] otherPrimeInfo;
/**
- * Creates a new {@code RSAMultiPrimePrivateCrtKeySpec}
- * given the modulus, publicExponent, privateExponent,
- * primeP, primeQ, primeExponentP, primeExponentQ,
- * crtCoefficient, and otherPrimeInfo as defined in PKCS#1 v2.1.
+ * Creates a new {@code RSAMultiPrimePrivateCrtKeySpec}.
*
* <p>Note that the contents of {@code otherPrimeInfo}
* are copied to protect against subsequent modification when
* constructing this object.
*
- * @param modulus the modulus n.
- * @param publicExponent the public exponent e.
- * @param privateExponent the private exponent d.
- * @param primeP the prime factor p of n.
- * @param primeQ the prime factor q of n.
- * @param primeExponentP this is d mod (p-1).
- * @param primeExponentQ this is d mod (q-1).
+ * @param modulus the modulus n
+ * @param publicExponent the public exponent e
+ * @param privateExponent the private exponent d
+ * @param primeP the prime factor p of n
+ * @param primeQ the prime factor q of q
+ * @param primeExponentP this is d mod (p-1)
+ * @param primeExponentQ this is d mod (q-1)
* @param crtCoefficient the Chinese Remainder Theorem
- * coefficient q-1 mod p.
+ * coefficient q-1 mod p
* @param otherPrimeInfo triplets of the rest of primes, null can be
- * specified if there are only two prime factors (p and q).
- * @exception NullPointerException if any of the parameters, i.e.
- * {@code modulus},
- * {@code publicExponent}, {@code privateExponent},
- * {@code primeP}, {@code primeQ},
- * {@code primeExponentP}, {@code primeExponentQ},
- * {@code crtCoefficient}, is null.
+ * specified if there are only two prime factors
+ * (p and q)
+ * @exception NullPointerException if any of the specified parameters
+ * with the exception of {@code otherPrimeInfo} is null
* @exception IllegalArgumentException if an empty, i.e. 0-length,
- * {@code otherPrimeInfo} is specified.
+ * {@code otherPrimeInfo} is specified
*/
public RSAMultiPrimePrivateCrtKeySpec(BigInteger modulus,
BigInteger publicExponent,
BigInteger privateExponent,
BigInteger primeP,
BigInteger primeQ,
BigInteger primeExponentP,
BigInteger primeExponentQ,
BigInteger crtCoefficient,
RSAOtherPrimeInfo[] otherPrimeInfo) {
- super(modulus, privateExponent);
- if (modulus == null) {
- throw new NullPointerException("the modulus parameter must be " +
- "non-null");
- }
- if (publicExponent == null) {
- throw new NullPointerException("the publicExponent parameter " +
- "must be non-null");
- }
- if (privateExponent == null) {
- throw new NullPointerException("the privateExponent parameter " +
- "must be non-null");
- }
- if (primeP == null) {
- throw new NullPointerException("the primeP parameter " +
- "must be non-null");
- }
- if (primeQ == null) {
- throw new NullPointerException("the primeQ parameter " +
- "must be non-null");
- }
- if (primeExponentP == null) {
- throw new NullPointerException("the primeExponentP parameter " +
- "must be non-null");
- }
- if (primeExponentQ == null) {
- throw new NullPointerException("the primeExponentQ parameter " +
- "must be non-null");
- }
- if (crtCoefficient == null) {
- throw new NullPointerException("the crtCoefficient parameter " +
- "must be non-null");
+ this(modulus, publicExponent, privateExponent, primeP, primeQ,
+ primeExponentP, primeExponentQ, crtCoefficient, otherPrimeInfo,
+ null);
}
+
+ /**
+ * Creates a new {@code RSAMultiPrimePrivateCrtKeySpec} with additional
+ * key parameters.
+ *
+ * <p>Note that the contents of {@code otherPrimeInfo}
+ * are copied to protect against subsequent modification when
+ * constructing this object.
+ *
+ * @param modulus the modulus n
+ * @param publicExponent the public exponent e
+ * @param privateExponent the private exponent d
+ * @param primeP the prime factor p of n
+ * @param primeQ the prime factor q of n
+ * @param primeExponentP this is d mod (p-1)
+ * @param primeExponentQ this is d mod (q-1)
+ * @param crtCoefficient the Chinese Remainder Theorem coefficient
+ * q-1 mod p
+ * @param otherPrimeInfo triplets of the rest of primes, null can be
+ * specified if there are only two prime factors
+ * (p and q)
+ * @param keyParams the parameters associated with key
+ * @exception NullPointerException if any of the specified parameters
+ * with the exception of {@code otherPrimeInfo} and {@code keyParams}
+ * is null
+ * @exception IllegalArgumentException if an empty, i.e. 0-length,
+ * {@code otherPrimeInfo} is specified
+ * @since 11
+ */
+ public RSAMultiPrimePrivateCrtKeySpec(BigInteger modulus,
+ BigInteger publicExponent,
+ BigInteger privateExponent,
+ BigInteger primeP,
+ BigInteger primeQ,
+ BigInteger primeExponentP,
+ BigInteger primeExponentQ,
+ BigInteger crtCoefficient,
+ RSAOtherPrimeInfo[] otherPrimeInfo,
+ AlgorithmParameterSpec keyParams) {
+ super(modulus, privateExponent, keyParams);
+ Objects.requireNonNull(modulus,
+ "the modulus parameter must be non-null");
+ Objects.requireNonNull(publicExponent,
+ "the publicExponent parameter must be non-null");
+ Objects.requireNonNull(privateExponent,
+ "the privateExponent parameter must be non-null");
+ Objects.requireNonNull(primeP, "the primeP parameter must be non-null");
+ Objects.requireNonNull(primeQ, "the primeQ parameter must be non-null");
+ Objects.requireNonNull(primeExponentP,
+ "the primeExponentP parameter must be non-null");
+ Objects.requireNonNull(primeExponentQ,
+ "the primeExponentQ parameter must be non-null");
+ Objects.requireNonNull(crtCoefficient,
+ "the crtCoefficient parameter must be non-null");
+
this.publicExponent = publicExponent;
this.primeP = primeP;
this.primeQ = primeQ;
this.primeExponentP = primeExponentP;
this.primeExponentQ = primeExponentQ;
@@ -200,12 +222,12 @@
/**
* Returns a copy of the otherPrimeInfo or null if there are
* only two prime factors (p and q).
*
- * @return the otherPrimeInfo. Returns a new array each
- * time this method is called.
+ * @return the otherPrimeInfo. Returns a new array each time this method
+ * is called.
*/
public RSAOtherPrimeInfo[] getOtherPrimeInfo() {
if (otherPrimeInfo == null) return null;
return otherPrimeInfo.clone();
}
< prev index next >