1 /*
   2  * Copyright (c) 2001, 2018, 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
  33  * <a href="https://tools.ietf.org/rfc/rfc8017.txt">PKCS#1 v2.2</a> standard.
  34  * The ASN.1 syntax of RSA's OtherPrimeInfo is as follows:
  35  *
  36  * <pre>
  37  * OtherPrimeInfo ::= SEQUENCE {
  38  *   prime        INTEGER,
  39  *   exponent     INTEGER,
  40  *   coefficient  INTEGER
  41  * }
  42  *
  43  * </pre>
  44  *
  45  * @author Valerie Peng
  46  *
  47  *
  48  * @see RSAPrivateCrtKeySpec
  49  * @see java.security.interfaces.RSAMultiPrimePrivateCrtKey
  50  *
  51  * @since 1.4
  52  */
  53 
  54 public class RSAOtherPrimeInfo {
  55 
  56     private BigInteger prime;
  57     private BigInteger primeExponent;
  58     private BigInteger crtCoefficient;
  59 
  60 
  61    /**
  62     * Creates a new {@code RSAOtherPrimeInfo}
  63     * given the prime, primeExponent, and
  64     * crtCoefficient as defined in PKCS#1.
  65     *
  66     * @param prime the prime factor of n.
  67     * @param primeExponent the exponent.
  68     * @param crtCoefficient the Chinese Remainder Theorem
  69     * coefficient.
  70     * @exception NullPointerException if any of the parameters, i.e.
  71     * {@code prime}, {@code primeExponent},
  72     * {@code crtCoefficient}, is null.
  73     *
  74     */
  75     public RSAOtherPrimeInfo(BigInteger prime,
  76                           BigInteger primeExponent,
  77                           BigInteger crtCoefficient) {
  78         if (prime == null) {
  79             throw new NullPointerException("the prime parameter must be " +
  80                                             "non-null");
  81         }
  82         if (primeExponent == null) {
  83             throw new NullPointerException("the primeExponent parameter " +
  84                                             "must be non-null");
  85         }
  86         if (crtCoefficient == null) {
  87             throw new NullPointerException("the crtCoefficient parameter " +
  88                                             "must be non-null");
  89         }
  90         this.prime = prime;
  91         this.primeExponent = primeExponent;
  92         this.crtCoefficient = crtCoefficient;
  93     }
  94 
  95     /**
  96      * Returns the prime.
  97      *
  98      * @return the prime.
  99      */
 100     public final BigInteger getPrime() {
 101         return this.prime;
 102     }
 103 
 104     /**
 105      * Returns the prime's exponent.
 106      *
 107      * @return the primeExponent.
 108      */
 109     public final BigInteger getExponent() {
 110         return this.primeExponent;
 111     }
 112 
 113     /**
 114      * Returns the prime's crtCoefficient.
 115      *
 116      * @return the crtCoefficient.
 117      */
 118     public final BigInteger getCrtCoefficient() {
 119         return this.crtCoefficient;
 120     }
 121 }