aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/spongycastle/core/src/main/jdk1.2/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java
blob: 1339b4f6d15f951ed1c6b5fafd72b8b7be42c1a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
package java.security.spec;

import java.math.BigInteger;

/**
 * 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. 
 *
 * @since 1.4 
 * @see Key, KeyFactory, KeySpec, PKCS8EncodedKeySpec, RSAPrivateKeySpec,
 *    RSAPublicKeySpec, RSAOtherPrimeInfo
 */
public class RSAMultiPrimePrivateCrtKeySpec
	extends RSAPrivateKeySpec
{
	private BigInteger publicExponent;
	private BigInteger privateExponent;
	private BigInteger primeP;
	private BigInteger primeQ;
	private BigInteger primeExponentP;
	private BigInteger primeExponentQ;
	private BigInteger crtCoefficient;
	private RSAOtherPrimeInfo[] otherPrimeInfo;

	/**
	 * Creates a new RSAMultiPrimePrivateCrtKeySpec given the modulus,
	 * publicExponent, privateExponent, primeP, primeQ, primeExponentP,
	 * primeExponentQ, crtCoefficient, and otherPrimeInfo as defined in
	 * PKCS#1 v2.1. 
	 * 
	 * Note that otherPrimeInfo is cloned 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). 
	 * @throws NullPointerException - if any of the parameters, i.e. modulus,
	 *    publicExponent, privateExponent, primeP, primeQ, primeExponentP,
	 *    primeExponentQ, crtCoefficient, is null. 
	 * @throws IllegalArgumentException - if an empty, i.e. 0-length,
	 *    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 ( publicExponent == null || primeP == null || primeQ == null
				|| primeExponentP == null || primeExponentQ == null
				|| crtCoefficient == null )
		{
			throw new NullPointerException("Invalid null argument");
		}

		if ( otherPrimeInfo != null )
		{
			if ( otherPrimeInfo.length == 0 )
			{
				throw new IllegalArgumentException("Invalid length for otherPrimeInfo");
			}

			this.otherPrimeInfo = (RSAOtherPrimeInfo[])otherPrimeInfo.clone();
		}
	}

	/**
	 * Returns the public exponent. 
	 * 
	 * @returns the public exponent.
	 */
	public BigInteger getPublicExponent()
	{
		return publicExponent;
	}

	/**
	 * Returns the primeP.
	 * 
	 * @returns the primeP.
	 */
	public BigInteger getPrimeP()
	{
		return primeP;
	}

	/**
	 * Returns the primeQ.
	 * 
	 * @returns the primeQ.
	 */
	public BigInteger getPrimeQ()
	{
		return primeQ;
	}

	/**
	 * Returns the primeExponentP.
	 * 
	 * @returns the primeExponentP.
	 */
	public BigInteger getPrimeExponentP()
	{
		return primeExponentP;
	}

	/**
	 * Returns the primeExponentQ.
	 * 
	 * @returns the primeExponentQ.
	 */
	public BigInteger getPrimeExponentQ()
	{
		return primeExponentQ;
	}

	/**
	 * Returns the crtCofficient.
	 * 
	 * @returns the crtCofficient.
	 */
	public BigInteger getCrtCoefficient()
	{
		return crtCoefficient;
	}

	/**
	 * Returns a copy of the otherPrimeInfo or null if there are only
	 * two prime factors (p and q). 
	 *
	 * @returns the otherPrimeInfo.
	 */
	public RSAOtherPrimeInfo[] getOtherPrimeInfo()
	{
		if ( otherPrimeInfo != null )
		{
			return (RSAOtherPrimeInfo[])otherPrimeInfo.clone();
		}

		return null;
	}
}