From 16fbd3bddeabacaa6b64a84b547708a84a6ddf98 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Wed, 7 May 2014 17:26:23 -0700 Subject: Add OID for Diffie-Hellman keys Without this, decoding X.509 certificates doesn't get a valid DH public key since this OID is not registered by any other provider. Change-Id: I82a5e4cfc3b63c3928299523725d24b838ca939c --- .../jcajce/provider/asymmetric/DH.java | 11 ++++++++ patches/bcprov.patch | 30 ++++++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/DH.java b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/DH.java index 28a1a6a..bfedc81 100644 --- a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/DH.java +++ b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/DH.java @@ -1,7 +1,14 @@ package org.bouncycastle.jcajce.provider.asymmetric; +// BEGIN android-added +import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; +import org.bouncycastle.jcajce.provider.asymmetric.dh.KeyFactorySpi; +// END android-added import org.bouncycastle.jcajce.provider.config.ConfigurableProvider; import org.bouncycastle.jcajce.provider.util.AsymmetricAlgorithmProvider; +// BEGIN android-added +import org.bouncycastle.jcajce.provider.util.AsymmetricKeyInfoConverter; +// END android-added public class DH { @@ -24,6 +31,10 @@ public class DH provider.addAlgorithm("KeyFactory.DH", PREFIX + "KeyFactorySpi"); provider.addAlgorithm("Alg.Alias.KeyFactory.DIFFIEHELLMAN", "DH"); + // BEGIN android-added + AsymmetricKeyInfoConverter keyFact = new KeyFactorySpi(); + registerOid(provider, PKCSObjectIdentifiers.dhKeyAgreement, "DH", keyFact); + // END android-added provider.addAlgorithm("AlgorithmParameters.DH", PREFIX + "AlgorithmParametersSpi"); provider.addAlgorithm("Alg.Alias.AlgorithmParameters.DIFFIEHELLMAN", "DH"); diff --git a/patches/bcprov.patch b/patches/bcprov.patch index 4640d50..0880f97 100644 --- a/patches/bcprov.patch +++ b/patches/bcprov.patch @@ -1083,8 +1083,34 @@ diff -Naur bcprov-jdk15on-150.orig/org/bouncycastle/crypto/util/PublicKeyFactory { diff -Naur bcprov-jdk15on-150.orig/org/bouncycastle/jcajce/provider/asymmetric/DH.java bcprov-jdk15on-150/org/bouncycastle/jcajce/provider/asymmetric/DH.java --- bcprov-jdk15on-150.orig/org/bouncycastle/jcajce/provider/asymmetric/DH.java 2013-12-03 20:18:20.000000000 +0000 -+++ bcprov-jdk15on-150/org/bouncycastle/jcajce/provider/asymmetric/DH.java 2013-05-25 02:14:15.000000000 +0000 -@@ -32,10 +32,12 @@ ++++ bcprov-jdk15on-150/org/bouncycastle/jcajce/provider/asymmetric/DH.java 2014-05-08 00:26:23.000000000 +0000 +@@ -1,7 +1,14 @@ + package org.bouncycastle.jcajce.provider.asymmetric; + ++// BEGIN android-added ++import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; ++import org.bouncycastle.jcajce.provider.asymmetric.dh.KeyFactorySpi; ++// END android-added + import org.bouncycastle.jcajce.provider.config.ConfigurableProvider; + import org.bouncycastle.jcajce.provider.util.AsymmetricAlgorithmProvider; ++// BEGIN android-added ++import org.bouncycastle.jcajce.provider.util.AsymmetricKeyInfoConverter; ++// END android-added + + public class DH + { +@@ -24,6 +31,10 @@ + + provider.addAlgorithm("KeyFactory.DH", PREFIX + "KeyFactorySpi"); + provider.addAlgorithm("Alg.Alias.KeyFactory.DIFFIEHELLMAN", "DH"); ++ // BEGIN android-added ++ AsymmetricKeyInfoConverter keyFact = new KeyFactorySpi(); ++ registerOid(provider, PKCSObjectIdentifiers.dhKeyAgreement, "DH", keyFact); ++ // END android-added + + provider.addAlgorithm("AlgorithmParameters.DH", PREFIX + "AlgorithmParametersSpi"); + provider.addAlgorithm("Alg.Alias.AlgorithmParameters.DIFFIEHELLMAN", "DH"); +@@ -32,10 +43,12 @@ provider.addAlgorithm("AlgorithmParameterGenerator.DH", PREFIX + "AlgorithmParameterGeneratorSpi"); -- cgit v1.2.3