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
26package java.security.spec;
27
28import 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
53public 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