Home | History | Annotate | Download | only in spec
      1 /*
      2  * Copyright (c) 2001, 2013, 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 }
    121