< 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 >