1 /* 2 * Copyright (c) 2001, 2019, 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 * @throws NullPointerException if any of the parameters, i.e. 71 * {@code prime}, {@code primeExponent}, 72 * {@code crtCoefficient}, is null. 73 * 74 */ RSAOtherPrimeInfo(BigInteger prime, BigInteger primeExponent, BigInteger crtCoefficient)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 */ getPrime()100 public final BigInteger getPrime() { 101 return this.prime; 102 } 103 104 /** 105 * Returns the prime's exponent. 106 * 107 * @return the primeExponent. 108 */ getExponent()109 public final BigInteger getExponent() { 110 return this.primeExponent; 111 } 112 113 /** 114 * Returns the prime's crtCoefficient. 115 * 116 * @return the crtCoefficient. 117 */ getCrtCoefficient()118 public final BigInteger getCrtCoefficient() { 119 return this.crtCoefficient; 120 } 121 } 122