1 /*
   2  * Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package java.security.spec;
  27 
  28 import java.math.BigInteger;
  29 
  30 /**
  31  * This class represents the triplet (prime, exponent, and coefficient)
  32  * inside RSA's OtherPrimeInfo structure, as defined in the PKCS#1 v2.1.
  33  * The ASN.1 syntax of RSA's OtherPrimeInfo is as follows:
  34  *
  35  * <pre>
  36  * OtherPrimeInfo ::= SEQUENCE {
  37  *   prime INTEGER,
  38  *   exponent INTEGER,
  39  *   coefficient INTEGER
  40  *   }
  41  *
  42  * </pre>
  43  *
  44  * @author Valerie Peng
  45  *
  46  *
  47  * @see RSAPrivateCrtKeySpec
  48  * @see java.security.interfaces.RSAMultiPrimePrivateCrtKey
  49  *
  50  * @since 1.4
  51  */
  52 
  53 public class RSAOtherPrimeInfo {
  54 
  55     private BigInteger prime;
  56     private BigInteger primeExponent;
  57     private BigInteger crtCoefficient;
  58 
  59 
  60    /**
  61     * Creates a new {@code RSAOtherPrimeInfo}
  62     * given the prime, primeExponent, and
  63     * crtCoefficient as defined in PKCS#1.
  64     *
  65     * @param prime the prime factor of n.
  66     * @param primeExponent the exponent.
  67     * @param crtCoefficient the Chinese Remainder Theorem
  68     * coefficient.
  69     * @exception NullPointerException if any of the parameters, i.e.
  70     * {@code prime}, {@code primeExponent},
  71     * {@code crtCoefficient}, is null.
  72     *
  73     */
  74     public RSAOtherPrimeInfo(BigInteger prime,
  75                           BigInteger primeExponent,
  76                           BigInteger crtCoefficient) {
  77         if (prime == null) {
  78             throw new NullPointerException("the prime parameter must be " +
  79                                             "non-null");
  80         }
  81         if (primeExponent == null) {
  82             throw new NullPointerException("the primeExponent parameter " +
  83                                             "must be non-null");
  84         }
  85         if (crtCoefficient == null) {
  86             throw new NullPointerException("the crtCoefficient parameter " +
  87                                             "must be non-null");
  88         }
  89         this.prime = prime;
  90         this.primeExponent = primeExponent;
  91         this.crtCoefficient = crtCoefficient;
  92     }
  93 
  94     /**
  95      * Returns the prime.
  96      *
  97      * @return the prime.
  98      */
  99     public final BigInteger getPrime() {
 100         return this.prime;
 101     }
 102 
 103     /**
 104      * Returns the prime's exponent.
 105      *
 106      * @return the primeExponent.
 107      */
 108     public final BigInteger getExponent() {
 109         return this.primeExponent;
 110     }
 111 
 112     /**
 113      * Returns the prime's crtCoefficient.
 114      *
 115      * @return the crtCoefficient.
 116      */
 117     public final BigInteger getCrtCoefficient() {
 118         return this.crtCoefficient;
 119     }
 120 }