summaryrefslogtreecommitdiffstats
path: root/bcprov/src/main/java
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2012-10-12 00:52:09 -0700
committerKenny Root <kroot@google.com>2012-10-12 00:56:37 -0700
commit9912a9c85825650db59395651b30bc1b0279a3fd (patch)
tree0949f4b9eb77be6c8039e12ff84e51696b4b1448 /bcprov/src/main/java
parentad5d6d329e9f3fbf571a7e770d29d5fc63d148c5 (diff)
downloadandroid_external_bouncycastle-9912a9c85825650db59395651b30bc1b0279a3fd.tar.gz
android_external_bouncycastle-9912a9c85825650db59395651b30bc1b0279a3fd.tar.bz2
android_external_bouncycastle-9912a9c85825650db59395651b30bc1b0279a3fd.zip
Fix non-BC EC private key usage
This is a port of the previous patch to BC 1.47 Change-Id: I67d95635e05379fdbd09560c5be622de08f6018f
Diffstat (limited to 'bcprov/src/main/java')
-rw-r--r--bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/ECUtil.java10
-rw-r--r--bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java21
2 files changed, 31 insertions, 0 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/ECUtil.java b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/ECUtil.java
index 80ff2af..2c44d2a 100644
--- a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/ECUtil.java
+++ b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/ECUtil.java
@@ -154,6 +154,16 @@ public class ECUtil
k.getD(),
new ECDomainParameters(s.getCurve(), s.getG(), s.getN(), s.getH(), s.getSeed()));
}
+// BEGIN android-added
+ else if (key instanceof java.security.interfaces.ECPrivateKey)
+ {
+ java.security.interfaces.ECPrivateKey privKey = (java.security.interfaces.ECPrivateKey)key;
+ ECParameterSpec s = EC5Util.convertSpec(privKey.getParams(), false);
+ return new ECPrivateKeyParameters(
+ privKey.getS(),
+ new ECDomainParameters(s.getCurve(), s.getG(), s.getN(), s.getH(), s.getSeed()));
+ }
+// END android-added
throw new InvalidKeyException("can't identify EC private key.");
}
diff --git a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java
index a92b7da..f5fbc3b 100644
--- a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java
+++ b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java
@@ -5,6 +5,9 @@ import java.math.BigInteger;
import java.security.InvalidKeyException;
import java.security.PrivateKey;
import java.security.PublicKey;
+// BEGIN android-added
+import java.security.interfaces.ECPrivateKey;
+// END android-added
import java.security.interfaces.ECPublicKey;
import org.bouncycastle.asn1.ASN1EncodableVector;
@@ -95,7 +98,25 @@ public class SignatureSpi
}
else
{
+// BEGIN android-added
+ try
+ {
+ if (privateKey instanceof ECPrivateKey)
+ {
+ param = ECUtil.generatePrivateKeyParameter(privateKey);
+ }
+ else
+ {
+ throw new InvalidKeyException("can't recognise key type in ECDSA based signer");
+ }
+ }
+ catch (Exception e)
+ {
+// END android-added
throw new InvalidKeyException("can't recognise key type in ECDSA based signer");
+// BEGIN android-added
+ }
+// END android-added
}
digest.reset();