< prev index next >
src/java.base/share/classes/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2001, 2013, 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
--- 1,7 ----
/*
! * 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,38 ****
*/
package java.security.spec;
import java.math.BigInteger;
/**
* 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.
*
* @author Valerie Peng
*
*
* @see java.security.Key
--- 24,40 ----
*/
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
! * <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,135 ****
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.
*
* <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).
! * @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.
* @exception IllegalArgumentException if an empty, i.e. 0-length,
! * {@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.publicExponent = publicExponent;
this.primeP = primeP;
this.primeQ = primeQ;
this.primeExponentP = primeExponentP;
this.primeExponentQ = primeExponentQ;
--- 57,157 ----
private final BigInteger primeExponentQ;
private final BigInteger crtCoefficient;
private final RSAOtherPrimeInfo[] otherPrimeInfo;
/**
! * 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 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
* @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 specified parameters
! * with the exception of {@code otherPrimeInfo} is null
* @exception IllegalArgumentException if an empty, i.e. 0-length,
! * {@code otherPrimeInfo} is specified
*/
public RSAMultiPrimePrivateCrtKeySpec(BigInteger modulus,
BigInteger publicExponent,
BigInteger privateExponent,
BigInteger primeP,
BigInteger primeQ,
BigInteger primeExponentP,
BigInteger primeExponentQ,
BigInteger crtCoefficient,
RSAOtherPrimeInfo[] otherPrimeInfo) {
! 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,211 ****
/**
* 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.
*/
public RSAOtherPrimeInfo[] getOtherPrimeInfo() {
if (otherPrimeInfo == null) return null;
return otherPrimeInfo.clone();
}
--- 222,233 ----
/**
* 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.
*/
public RSAOtherPrimeInfo[] getOtherPrimeInfo() {
if (otherPrimeInfo == null) return null;
return otherPrimeInfo.clone();
}
< prev index next >