summaryrefslogtreecommitdiff
path: root/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey.java
diff options
context:
space:
mode:
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.java62
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();