< prev index next >

src/java.base/share/classes/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 24,38 **** */ 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. * * @author Valerie Peng * * * @see java.security.Key --- 24,40 ---- */ package java.security.spec; import java.math.BigInteger; + import java.util.Objects; /** * This class specifies an RSA multi-prime private key, as defined in the ! * <a href="https://tools.ietf.org/rfc/rfc8017.txt">PKCS#1 v2.2</a> standard ! * using the Chinese Remainder Theorem (CRT) information values ! * for efficiency. * * @author Valerie Peng * * * @see java.security.Key
*** 55,135 **** private final BigInteger primeExponentQ; private final BigInteger crtCoefficient; private final RSAOtherPrimeInfo[] otherPrimeInfo; /** ! * Creates a new {@code RSAMultiPrimePrivateCrtKeySpec} ! * given the modulus, publicExponent, privateExponent, ! * primeP, primeQ, primeExponentP, primeExponentQ, ! * crtCoefficient, and otherPrimeInfo as defined in PKCS#1 v2.1. * * <p>Note that the contents of {@code otherPrimeInfo} * are copied to protect against subsequent modification 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). ! * @exception NullPointerException if any of the parameters, i.e. ! * {@code modulus}, ! * {@code publicExponent}, {@code privateExponent}, ! * {@code primeP}, {@code primeQ}, ! * {@code primeExponentP}, {@code primeExponentQ}, ! * {@code crtCoefficient}, is null. * @exception IllegalArgumentException if an empty, i.e. 0-length, ! * {@code 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 (modulus == null) { ! throw new NullPointerException("the modulus parameter must be " + ! "non-null"); ! } ! if (publicExponent == null) { ! throw new NullPointerException("the publicExponent parameter " + ! "must be non-null"); ! } ! if (privateExponent == null) { ! throw new NullPointerException("the privateExponent parameter " + ! "must be non-null"); ! } ! if (primeP == null) { ! throw new NullPointerException("the primeP parameter " + ! "must be non-null"); ! } ! if (primeQ == null) { ! throw new NullPointerException("the primeQ parameter " + ! "must be non-null"); ! } ! if (primeExponentP == null) { ! throw new NullPointerException("the primeExponentP parameter " + ! "must be non-null"); ! } ! if (primeExponentQ == null) { ! throw new NullPointerException("the primeExponentQ parameter " + ! "must be non-null"); ! } ! if (crtCoefficient == null) { ! throw new NullPointerException("the crtCoefficient parameter " + ! "must be non-null"); } this.publicExponent = publicExponent; this.primeP = primeP; this.primeQ = primeQ; this.primeExponentP = primeExponentP; this.primeExponentQ = primeExponentQ; --- 57,157 ---- private final BigInteger primeExponentQ; private final BigInteger crtCoefficient; private final RSAOtherPrimeInfo[] otherPrimeInfo; /** ! * Creates a new {@code RSAMultiPrimePrivateCrtKeySpec}. * * <p>Note that the contents of {@code otherPrimeInfo} * are copied to protect against subsequent modification 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 q ! * @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) ! * @exception NullPointerException if any of the specified parameters ! * with the exception of {@code otherPrimeInfo} is null * @exception IllegalArgumentException if an empty, i.e. 0-length, ! * {@code otherPrimeInfo} is specified */ public RSAMultiPrimePrivateCrtKeySpec(BigInteger modulus, BigInteger publicExponent, BigInteger privateExponent, BigInteger primeP, BigInteger primeQ, BigInteger primeExponentP, BigInteger primeExponentQ, BigInteger crtCoefficient, RSAOtherPrimeInfo[] otherPrimeInfo) { ! this(modulus, publicExponent, privateExponent, primeP, primeQ, ! primeExponentP, primeExponentQ, crtCoefficient, otherPrimeInfo, ! null); } + + /** + * Creates a new {@code RSAMultiPrimePrivateCrtKeySpec} with additional + * key parameters. + * + * <p>Note that the contents of {@code otherPrimeInfo} + * are copied to protect against subsequent modification 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) + * @param keyParams the parameters associated with key + * @exception NullPointerException if any of the specified parameters + * with the exception of {@code otherPrimeInfo} and {@code keyParams} + * is null + * @exception IllegalArgumentException if an empty, i.e. 0-length, + * {@code otherPrimeInfo} is specified + * @since 11 + */ + public RSAMultiPrimePrivateCrtKeySpec(BigInteger modulus, + BigInteger publicExponent, + BigInteger privateExponent, + BigInteger primeP, + BigInteger primeQ, + BigInteger primeExponentP, + BigInteger primeExponentQ, + BigInteger crtCoefficient, + RSAOtherPrimeInfo[] otherPrimeInfo, + AlgorithmParameterSpec keyParams) { + super(modulus, privateExponent, keyParams); + Objects.requireNonNull(modulus, + "the modulus parameter must be non-null"); + Objects.requireNonNull(publicExponent, + "the publicExponent parameter must be non-null"); + Objects.requireNonNull(privateExponent, + "the privateExponent parameter must be non-null"); + Objects.requireNonNull(primeP, "the primeP parameter must be non-null"); + Objects.requireNonNull(primeQ, "the primeQ parameter must be non-null"); + Objects.requireNonNull(primeExponentP, + "the primeExponentP parameter must be non-null"); + Objects.requireNonNull(primeExponentQ, + "the primeExponentQ parameter must be non-null"); + Objects.requireNonNull(crtCoefficient, + "the crtCoefficient parameter must be non-null"); + this.publicExponent = publicExponent; this.primeP = primeP; this.primeQ = primeQ; this.primeExponentP = primeExponentP; this.primeExponentQ = primeExponentQ;
*** 200,211 **** /** * Returns a copy of the otherPrimeInfo or null if there are * only two prime factors (p and q). * ! * @return the otherPrimeInfo. Returns a new array each ! * time this method is called. */ public RSAOtherPrimeInfo[] getOtherPrimeInfo() { if (otherPrimeInfo == null) return null; return otherPrimeInfo.clone(); } --- 222,233 ---- /** * Returns a copy of the otherPrimeInfo or null if there are * only two prime factors (p and q). * ! * @return the otherPrimeInfo. Returns a new array each time this method ! * is called. */ public RSAOtherPrimeInfo[] getOtherPrimeInfo() { if (otherPrimeInfo == null) return null; return otherPrimeInfo.clone(); }
< prev index next >