diff options
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey.java')
-rw-r--r-- | bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey.java | 62 |
1 files changed, 58 insertions, 4 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey.java b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey.java index 0ac494fb..477c3f35 100644 --- a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey.java +++ b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey.java @@ -1,17 +1,18 @@ package org.bouncycastle.jcajce.provider.asymmetric.rsa; import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; import java.math.BigInteger; import java.security.interfaces.RSAPrivateCrtKey; import java.security.spec.RSAPrivateCrtKeySpec; -import org.bouncycastle.asn1.DERNull; -import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; import org.bouncycastle.asn1.pkcs.RSAPrivateKey; import org.bouncycastle.asn1.x509.AlgorithmIdentifier; import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters; import org.bouncycastle.jcajce.provider.asymmetric.util.KeyUtil; +import org.bouncycastle.jcajce.provider.asymmetric.util.PKCS12BagAttributeCarrierImpl; import org.bouncycastle.util.Strings; /** @@ -48,6 +49,20 @@ public class BCRSAPrivateCrtKey this.crtCoefficient = key.getQInv(); } + BCRSAPrivateCrtKey( + AlgorithmIdentifier algorithmIdentifier, + RSAPrivateCrtKeyParameters key) + { + super(algorithmIdentifier, key); + + this.publicExponent = key.getPublicExponent(); + this.primeP = key.getP(); + this.primeQ = key.getQ(); + this.primeExponentP = key.getDP(); + this.primeExponentQ = key.getDQ(); + this.crtCoefficient = key.getQInv(); + } + /** * construct a private key from an RSAPrivateCrtKeySpec * @@ -56,6 +71,10 @@ public class BCRSAPrivateCrtKey BCRSAPrivateCrtKey( RSAPrivateCrtKeySpec spec) { + super(new RSAPrivateCrtKeyParameters(spec.getModulus(), + spec.getPublicExponent(), spec.getPrivateExponent(), + spec.getPrimeP(), spec.getPrimeQ(), spec.getPrimeExponentP(), spec.getPrimeExponentQ(), spec.getCrtCoefficient())); + this.modulus = spec.getModulus(); this.publicExponent = spec.getPublicExponent(); this.privateExponent = spec.getPrivateExponent(); @@ -74,6 +93,10 @@ public class BCRSAPrivateCrtKey BCRSAPrivateCrtKey( RSAPrivateCrtKey key) { + super(new RSAPrivateCrtKeyParameters(key.getModulus(), + key.getPublicExponent(), key.getPrivateExponent(), + key.getPrimeP(), key.getPrimeQ(), key.getPrimeExponentP(), key.getPrimeExponentQ(), key.getCrtCoefficient())); + this.modulus = key.getModulus(); this.publicExponent = key.getPublicExponent(); this.privateExponent = key.getPrivateExponent(); @@ -91,7 +114,7 @@ public class BCRSAPrivateCrtKey PrivateKeyInfo info) throws IOException { - this(RSAPrivateKey.getInstance(info.parsePrivateKey())); + this(info.getPrivateKeyAlgorithm(), RSAPrivateKey.getInstance(info.parsePrivateKey())); } /** @@ -100,6 +123,17 @@ public class BCRSAPrivateCrtKey BCRSAPrivateCrtKey( RSAPrivateKey key) { + this(BCRSAPublicKey.DEFAULT_ALGORITHM_IDENTIFIER, key); + } + + BCRSAPrivateCrtKey( + AlgorithmIdentifier algorithmIdentifier, + RSAPrivateKey key) + { + super(algorithmIdentifier, new RSAPrivateCrtKeyParameters(key.getModulus(), + key.getPublicExponent(), key.getPrivateExponent(), + key.getPrime1(), key.getPrime2(), key.getExponent1(), key.getExponent2(), key.getCoefficient())); + this.modulus = key.getModulus(); this.publicExponent = key.getPublicExponent(); this.privateExponent = key.getPrivateExponent(); @@ -128,7 +162,7 @@ public class BCRSAPrivateCrtKey */ public byte[] getEncoded() { - return KeyUtil.getEncodedPrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new RSAPrivateKey(getModulus(), getPublicExponent(), getPrivateExponent(), getPrimeP(), getPrimeQ(), getPrimeExponentP(), getPrimeExponentQ(), getCrtCoefficient())); + return KeyUtil.getEncodedPrivateKeyInfo(algorithmIdentifier, new RSAPrivateKey(getModulus(), getPublicExponent(), getPrivateExponent(), getPrimeP(), getPrimeQ(), getPrimeExponentP(), getPrimeExponentQ(), getCrtCoefficient())); } /** @@ -222,6 +256,26 @@ public class BCRSAPrivateCrtKey && this.getCrtCoefficient().equals(key.getCrtCoefficient()); } + private void readObject( + ObjectInputStream in) + throws IOException, ClassNotFoundException + { + in.defaultReadObject(); + + this.attrCarrier = new PKCS12BagAttributeCarrierImpl(); + this.rsaPrivateKey = new RSAPrivateCrtKeyParameters(this.getModulus(), + this.getPublicExponent(), this.getPrivateExponent(), + this.getPrimeP(), this.getPrimeQ(), + this.getPrimeExponentP(), this.getPrimeExponentQ(), this.getCrtCoefficient()); + } + + private void writeObject( + ObjectOutputStream out) + throws IOException + { + out.defaultWriteObject(); + } + public String toString() { StringBuffer buf = new StringBuffer(); |