am ff9f947b: Merge changes I8c8f1572,Idc2bbd24

* commit 'ff9f947b1f1db149cf394e8184d6db4d66d1e319':
  Track changes to JSSE
  Allow CipherTest to run on RI
diff --git a/Android.mk b/Android.mk
index de82f05..56c4b4f 100644
--- a/Android.mk
+++ b/Android.mk
@@ -15,12 +15,15 @@
 #
 LOCAL_PATH := $(call my-dir)
 
+# used for bouncycastle-hostdex where we want everything for testing
 all_bcprov_src_files := $(call all-java-files-under,bcprov/src/main/java)
 
+# used for bouncycastle for target where we want to be sure to use OpenSSLDigest
 android_bcprov_src_files := $(filter-out \
  bcprov/src/main/java/org/bouncycastle/crypto/digests/AndroidDigestFactoryBouncyCastle.java, \
  $(all_bcprov_src_files))
 
+# used for bouncycastle-host where we can't use OpenSSLDigest
 ri_bcprov_src_files := $(filter-out \
  bcprov/src/main/java/org/bouncycastle/crypto/digests/AndroidDigestFactoryOpenSSL.java \
  bcprov/src/main/java/org/bouncycastle/crypto/digests/OpenSSLDigest.java, \
@@ -92,7 +95,7 @@
     include $(CLEAR_VARS)
     LOCAL_MODULE := bouncycastle-hostdex
     LOCAL_MODULE_TAGS := optional
-    LOCAL_SRC_FILES := $(android_bcprov_src_files)
+    LOCAL_SRC_FILES := $(all_bcprov_src_files)
     LOCAL_JAVACFLAGS := -encoding UTF-8
     LOCAL_BUILD_HOST_DEX := true
     LOCAL_MODULE_TAGS := optional
diff --git a/bcprov/src/main/java/org/bouncycastle/crypto/digests/AndroidDigestFactory.java b/bcprov/src/main/java/org/bouncycastle/crypto/digests/AndroidDigestFactory.java
index 1a82a46..b7bac28 100644
--- a/bcprov/src/main/java/org/bouncycastle/crypto/digests/AndroidDigestFactory.java
+++ b/bcprov/src/main/java/org/bouncycastle/crypto/digests/AndroidDigestFactory.java
@@ -33,14 +33,19 @@
         Class factoryImplementationClass;
         try {
             factoryImplementationClass = Class.forName(OpenSSLFactoryClassName);
+            // Double check for NativeCrypto in case we are running on RI for testing
+            Class.forName("com.android.org.conscrypt.NativeCrypto");
         } catch (ClassNotFoundException e1) {
             try {
                 factoryImplementationClass = Class.forName(BouncyCastleFactoryClassName);
             } catch (ClassNotFoundException e2) {
-                throw new AssertionError("Failed to find AndroidDigestFactoryInterface "
+                AssertionError e = new AssertionError("Failed to load "
+                                         + "AndroidDigestFactoryInterface "
                                          + "implementation. Looked for "
                                          + OpenSSLFactoryClassName + " and "
                                          + BouncyCastleFactoryClassName);
+                e.initCause(e1);
+                throw e;
             }
         }
         if (!AndroidDigestFactoryInterface.class.isAssignableFrom(factoryImplementationClass)) {
diff --git a/patches/bcprov.patch b/patches/bcprov.patch
index 744a5a4..e6e7f40 100644
--- a/patches/bcprov.patch
+++ b/patches/bcprov.patch
@@ -313,8 +313,8 @@
              }
 diff -Naur bcprov-jdk15on-149.orig/org/bouncycastle/crypto/digests/AndroidDigestFactory.java bcprov-jdk15on-149/org/bouncycastle/crypto/digests/AndroidDigestFactory.java
 --- bcprov-jdk15on-149.orig/org/bouncycastle/crypto/digests/AndroidDigestFactory.java	1970-01-01 00:00:00.000000000 +0000
-+++ bcprov-jdk15on-149/org/bouncycastle/crypto/digests/AndroidDigestFactory.java	2012-09-17 23:04:47.000000000 +0000
-@@ -0,0 +1,78 @@
++++ bcprov-jdk15on-149/org/bouncycastle/crypto/digests/AndroidDigestFactory.java	2013-05-01 01:48:41.000000000 +0000
+@@ -0,0 +1,83 @@
 +/*
 + * Copyright (C) 2012 The Android Open Source Project
 + *
@@ -350,14 +350,19 @@
 +        Class factoryImplementationClass;
 +        try {
 +            factoryImplementationClass = Class.forName(OpenSSLFactoryClassName);
++            // Double check for NativeCrypto in case we are running on RI for testing
++            Class.forName("com.android.org.conscrypt.NativeCrypto");
 +        } catch (ClassNotFoundException e1) {
 +            try {
 +                factoryImplementationClass = Class.forName(BouncyCastleFactoryClassName);
 +            } catch (ClassNotFoundException e2) {
-+                throw new AssertionError("Failed to find AndroidDigestFactoryInterface "
++                AssertionError e = new AssertionError("Failed to load "
++                                         + "AndroidDigestFactoryInterface "
 +                                         + "implementation. Looked for "
 +                                         + OpenSSLFactoryClassName + " and "
 +                                         + BouncyCastleFactoryClassName);
++                e.initCause(e1);
++                throw e;
 +            }
 +        }
 +        if (!AndroidDigestFactoryInterface.class.isAssignableFrom(factoryImplementationClass)) {