summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2012-10-11 23:43:53 -0700
committerGerrit Code Review <noreply-gerritcodereview@google.com>2012-10-11 23:43:53 -0700
commit5db429c3eb447595975a7466801318288eef7eda (patch)
tree6beb58f733d967578e92fe7a4462d0af5c27e3b0
parentf3f6a9ca17b59f4305bf5a99f49b8ece7bf343e6 (diff)
parent9f494d8327a386bd2f2aa8b8abfeda6a621434ac (diff)
downloadbouncycastle-tools_r21.tar.gz
Merge "Fix non-BC EC private key usage DO NOT MERGE"tools_r21
-rw-r--r--patches/android.patch67
-rw-r--r--src/main/java/org/bouncycastle/jce/provider/asymmetric/ec/ECUtil.java10
-rw-r--r--src/main/java/org/bouncycastle/jce/provider/asymmetric/ec/Signature.java21
3 files changed, 91 insertions, 7 deletions
diff --git a/patches/android.patch b/patches/android.patch
index 40a24f8a..7272cc4b 100644
--- a/patches/android.patch
+++ b/patches/android.patch
@@ -9420,7 +9420,24 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/ECU
import org.bouncycastle.asn1.x9.X962NamedCurves;
import org.bouncycastle.asn1.x9.X9ECParameters;
import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
-@@ -167,14 +171,16 @@
+@@ -151,6 +155,16 @@
+ 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.");
+ }
+@@ -167,14 +181,16 @@
{
oid = NISTNamedCurves.getOID(name);
}
@@ -9445,7 +9462,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/ECU
}
return oid;
-@@ -192,10 +198,12 @@
+@@ -192,10 +208,12 @@
{
params = NISTNamedCurves.getByOID(oid);
}
@@ -9462,7 +9479,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/ECU
}
return params;
-@@ -213,14 +221,16 @@
+@@ -213,14 +231,16 @@
{
name = NISTNamedCurves.getName(oid);
}
@@ -10017,7 +10034,17 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/Key
diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/Signature.java bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/ec/Signature.java
--- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/Signature.java 2011-02-23 20:08:56.000000000 +0000
+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/ec/Signature.java 2012-07-27 18:48:00.031478939 +0000
-@@ -18,15 +18,21 @@
+@@ -6,6 +6,9 @@
+ import java.security.PrivateKey;
+ import java.security.PublicKey;
+ import java.security.SecureRandom;
++// BEGIN android-added
++import java.security.interfaces.ECPrivateKey;
++// END android-added
+ import java.security.interfaces.ECPublicKey;
+
+ import org.bouncycastle.asn1.ASN1Encodable;
+@@ -18,15 +21,21 @@
import org.bouncycastle.crypto.DSA;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.digests.NullDigest;
@@ -10042,7 +10069,33 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/Sig
import org.bouncycastle.jce.interfaces.ECKey;
import org.bouncycastle.jce.provider.DSABase;
import org.bouncycastle.jce.provider.DSAEncoder;
-@@ -122,14 +128,16 @@
+@@ -89,7 +98,25 @@
+ }
+ 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();
+@@ -122,14 +149,16 @@
}
}
@@ -10067,7 +10120,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/Sig
static public class ecDSA256
extends Signature
-@@ -158,86 +166,88 @@
+@@ -158,86 +187,88 @@
}
}
@@ -10236,7 +10289,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/Sig
private static class StdDSAEncoder
implements DSAEncoder
-@@ -331,4 +341,4 @@
+@@ -331,4 +362,4 @@
return sig;
}
}
diff --git a/src/main/java/org/bouncycastle/jce/provider/asymmetric/ec/ECUtil.java b/src/main/java/org/bouncycastle/jce/provider/asymmetric/ec/ECUtil.java
index 088dfad3..6f2f28a2 100644
--- a/src/main/java/org/bouncycastle/jce/provider/asymmetric/ec/ECUtil.java
+++ b/src/main/java/org/bouncycastle/jce/provider/asymmetric/ec/ECUtil.java
@@ -155,6 +155,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/src/main/java/org/bouncycastle/jce/provider/asymmetric/ec/Signature.java b/src/main/java/org/bouncycastle/jce/provider/asymmetric/ec/Signature.java
index 0bb21f80..c5812c43 100644
--- a/src/main/java/org/bouncycastle/jce/provider/asymmetric/ec/Signature.java
+++ b/src/main/java/org/bouncycastle/jce/provider/asymmetric/ec/Signature.java
@@ -6,6 +6,9 @@ import java.security.InvalidKeyException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
+// BEGIN android-added
+import java.security.interfaces.ECPrivateKey;
+// END android-added
import java.security.interfaces.ECPublicKey;
import org.bouncycastle.asn1.ASN1Encodable;
@@ -95,7 +98,25 @@ public class Signature
}
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();