1e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom#
2e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom# Copyright (C) 2010 The Android Open Source Project
3e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom#
4e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom# Licensed under the Apache License, Version 2.0 (the "License");
5e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom# you may not use this file except in compliance with the License.
6e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom# You may obtain a copy of the License at
7e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom#
8e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom#      http://www.apache.org/licenses/LICENSE-2.0
9e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom#
10e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom# Unless required by applicable law or agreed to in writing, software
11e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom# distributed under the License is distributed on an "AS IS" BASIS,
12e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom# See the License for the specific language governing permissions and
14e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom# limitations under the License.
15e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom#
16e143538c27e395546132cbbad0093efd319b190cBrian CarlstromLOCAL_PATH := $(call my-dir)
17e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom
18f847b1bef228a29e674e5f8568b4537f85ec7afbBrian Carlstrom# used for bouncycastle-hostdex where we want everything for testing
19e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromall_bcprov_src_files := $(call all-java-files-under,bcprov/src/main/java)
20e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
21f847b1bef228a29e674e5f8568b4537f85ec7afbBrian Carlstrom# used for bouncycastle for target where we want to be sure to use OpenSSLDigest
22e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromandroid_bcprov_src_files := $(filter-out \
23e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom bcprov/src/main/java/org/bouncycastle/crypto/digests/AndroidDigestFactoryBouncyCastle.java, \
24e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom $(all_bcprov_src_files))
25e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
26f847b1bef228a29e674e5f8568b4537f85ec7afbBrian Carlstrom# used for bouncycastle-host where we can't use OpenSSLDigest
27e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromri_bcprov_src_files := $(filter-out \
28e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom bcprov/src/main/java/org/bouncycastle/crypto/digests/AndroidDigestFactoryOpenSSL.java \
29e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom bcprov/src/main/java/org/bouncycastle/crypto/digests/OpenSSLDigest.java, \
30e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom $(all_bcprov_src_files))
318436e1610cc0f5d2821b0235523be105f4f5e7e3Jesse Wilson
321a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root# These cannot build in the PDK, because the PDK requires all libraries
331a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root# compile against SDK versions. LOCAL_NO_STANDARD_LIBRARIES conflicts with
341a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root# this requirement.
351a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Rootifneq ($(TARGET_BUILD_PDK),true)
361a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root
371a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root    include $(CLEAR_VARS)
381a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root    LOCAL_MODULE := bouncycastle
391a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root    LOCAL_MODULE_TAGS := optional
401a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root    LOCAL_SRC_FILES := $(android_bcprov_src_files)
411a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root    LOCAL_JAVACFLAGS := -encoding UTF-8
42314e0c854c1f2f5b9431dd9a879006b896093705Brian Carlstrom    LOCAL_JAVA_LIBRARIES := core-libart conscrypt
431a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root    LOCAL_NO_STANDARD_LIBRARIES := true
441a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root    LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
451a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root    LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
461a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root    include $(BUILD_JAVA_LIBRARY)
471a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root
481a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root    # non-jarjar version to build okhttp-tests
491a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root    include $(CLEAR_VARS)
501a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root    LOCAL_MODULE := bouncycastle-nojarjar
511a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root    LOCAL_MODULE_TAGS := optional
521a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root    LOCAL_SRC_FILES := $(android_bcprov_src_files)
531a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root    LOCAL_JAVACFLAGS := -encoding UTF-8
54314e0c854c1f2f5b9431dd9a879006b896093705Brian Carlstrom    LOCAL_JAVA_LIBRARIES := core-libart conscrypt
551a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root    LOCAL_NO_STANDARD_LIBRARIES := true
561a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root    LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
571a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root    include $(BUILD_STATIC_JAVA_LIBRARY)
581a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Root
5981870f19b44030096dd613379a152c4406c65cb3Jerome Poichet    # unbundled bouncycastle jar
6081870f19b44030096dd613379a152c4406c65cb3Jerome Poichet    include $(CLEAR_VARS)
6181870f19b44030096dd613379a152c4406c65cb3Jerome Poichet    LOCAL_MODULE := bouncycastle-unbundled
6281870f19b44030096dd613379a152c4406c65cb3Jerome Poichet    LOCAL_MODULE_TAGS := optional
6381870f19b44030096dd613379a152c4406c65cb3Jerome Poichet    LOCAL_SDK_VERSION := 9
6481870f19b44030096dd613379a152c4406c65cb3Jerome Poichet    LOCAL_SRC_FILES := $(ri_bcprov_src_files)
6581870f19b44030096dd613379a152c4406c65cb3Jerome Poichet    LOCAL_JAVACFLAGS := -encoding UTF-8
6681870f19b44030096dd613379a152c4406c65cb3Jerome Poichet    LOCAL_MODULE_TAGS := optional
6781870f19b44030096dd613379a152c4406c65cb3Jerome Poichet    LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
6881870f19b44030096dd613379a152c4406c65cb3Jerome Poichet    include $(BUILD_STATIC_JAVA_LIBRARY)
691a402c33e7bf7b4bd736edc86ae24bc8bb91b627Kenny Rootendif # TARGET_BUILD_PDK != true
70e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom
718436e1610cc0f5d2821b0235523be105f4f5e7e3Jesse Wilson# This is used to generate a list of what is unused so it can be removed when bouncycastle is updated.
72e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom# Based on "Finding dead code" example in ProGuard manual at http://proguard.sourceforge.net/
73e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom.PHONY: bouncycastle-proguard-deadcode
74e143538c27e395546132cbbad0093efd319b190cBrian Carlstrombouncycastle-proguard-deadcode: $(full_classes_compiled_jar) $(full_java_libs)
75e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom	$(PROGUARD) \
76e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		-injars $(full_classes_compiled_jar) \
77b90d9ebc1004df6c0faeba68d917f0ded2e594d0Kenny Root		-libraryjars "$(call normalize-path-list,$(addsuffix (!org/bouncycastle/**.class,!com/android/org/conscrypt/OpenSSLMessageDigest.class),$(full_java_libs)))" \
78e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		-dontoptimize \
79e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		-dontobfuscate \
80e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		-dontpreverify \
81e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		-ignorewarnings \
82e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		-printusage \
83e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		-keep class org.bouncycastle.jce.provider.BouncyCastleProvider "{ public protected *; }" \
84e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		-keep class org.bouncycastle.jce.provider.symmetric.AESMappings "{ public protected *; }" \
85e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		-keep class org.bouncycastle.asn1.ASN1TaggedObject "{ public protected *; }" \
86e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		-keep class org.bouncycastle.asn1.x509.CertificateList "{ public protected *; }" \
87e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		-keep class org.bouncycastle.crypto.AsymmetricBlockCipher "{ public protected *; }" \
88e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		-keep class org.bouncycastle.x509.ExtendedPKIXBuilderParameters "{ public protected *; }" \
89e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		`(find $(LOCAL_PATH) -name '*.java' | xargs grep '"org.bouncycastle' | egrep '  (put|add)' | sed -e 's/");//' -e 's/.*"//'; \
90e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		  find $(LOCAL_PATH) -name '*.java' | xargs grep '  addHMACAlgorithm' | sed 's/"org.bouncycastle/\norg.bouncycastle/g' | grep ^org.bouncycastle | sed 's/".*//'; \
91e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom                  find . -name '*.java' | xargs grep 'import org.bouncycastle' | grep -v /bouncycastle/ | sed -e 's/.*:import //' -e 's/;//') \
92e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		  | sed -e 's/^/-keep class /' -e 's/$$/ { public protected \*; } /' | sort | uniq` \
93e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		-keepclassmembers "class * { \
94e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		    static final %                *; \
95e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		    static final java.lang.String *; \
96e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		}" \
97e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		-keepclassmembers "class * implements java.io.Serializable { \
98e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		    private static final java.io.ObjectStreamField[] serialPersistentFields; \
99e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		    private void writeObject(java.io.ObjectOutputStream); \
100e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		    private void readObject(java.io.ObjectInputStream); \
101e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		    java.lang.Object writeReplace(); \
102e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		    java.lang.Object readResolve(); \
103e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		}" \
104e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		-keepclassmembers "interface org.bouncycastle.crypto.paddings.BlockCipherPadding { \
105e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		    abstract public java.lang.String getPaddingName(); \
106e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		}" \
107e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		-keepclassmembers "class * implements org.bouncycastle.crypto.paddings.BlockCipherPadding { \
108e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		    public java.lang.String getPaddingName(); \
109e143538c27e395546132cbbad0093efd319b190cBrian Carlstrom		}"
1108436e1610cc0f5d2821b0235523be105f4f5e7e3Jesse Wilson
11146b2b1a974e08d4edd04aefc5e79076bae82809fKenny Root# Conscrypt isn't built in the PDK, so this cannot be built because it has a
11246b2b1a974e08d4edd04aefc5e79076bae82809fKenny Root# dependency on conscrypt-hostdex.
11346b2b1a974e08d4edd04aefc5e79076bae82809fKenny Rootifneq ($(TARGET_BUILD_PDK),true)
1148436e1610cc0f5d2821b0235523be105f4f5e7e3Jesse Wilson    include $(CLEAR_VARS)
1158436e1610cc0f5d2821b0235523be105f4f5e7e3Jesse Wilson    LOCAL_MODULE := bouncycastle-hostdex
116fa0f9bd8b89584a58337208fe2a0c3ce890e76a1Jesse Wilson    LOCAL_MODULE_TAGS := optional
117f847b1bef228a29e674e5f8568b4537f85ec7afbBrian Carlstrom    LOCAL_SRC_FILES := $(all_bcprov_src_files)
1188436e1610cc0f5d2821b0235523be105f4f5e7e3Jesse Wilson    LOCAL_JAVACFLAGS := -encoding UTF-8
1190ccea25f543c1cae4ebf0962c1714f317979c1a7Jean-Baptiste Queru    LOCAL_MODULE_TAGS := optional
120142ad143c914fba3342822034f18db341647b58fKenny Root    LOCAL_JAVA_LIBRARIES := conscrypt-hostdex
121434fc78f07ab056c9206e34abc6d5d4f832adfecBrian Carlstrom    LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
12233724b02cb3d7c8c398f1d42234bfb4d948f1666Brian Carlstrom    LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
123108187403f811ba04eda585fd1d94ef93a5bd173Narayan Kamath    include $(BUILD_HOST_DALVIK_JAVA_LIBRARY)
1248436e1610cc0f5d2821b0235523be105f4f5e7e3Jesse Wilsonendif
125e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
126e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrominclude $(CLEAR_VARS)
127e6bf3e8dfa2804891a82075cb469b736321b4827Brian CarlstromLOCAL_MODULE := bouncycastle-host
128e6bf3e8dfa2804891a82075cb469b736321b4827Brian CarlstromLOCAL_MODULE_TAGS := optional
129e6bf3e8dfa2804891a82075cb469b736321b4827Brian CarlstromLOCAL_SRC_FILES := $(ri_bcprov_src_files)
130e6bf3e8dfa2804891a82075cb469b736321b4827Brian CarlstromLOCAL_JAVACFLAGS := -encoding UTF-8
131e6bf3e8dfa2804891a82075cb469b736321b4827Brian CarlstromLOCAL_MODULE_TAGS := optional
13233724b02cb3d7c8c398f1d42234bfb4d948f1666Brian CarlstromLOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
133e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrominclude $(BUILD_HOST_JAVA_LIBRARY)
134e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
135e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrominclude $(CLEAR_VARS)
136e6bf3e8dfa2804891a82075cb469b736321b4827Brian CarlstromLOCAL_MODULE := bouncycastle-bcpkix-host
137e6bf3e8dfa2804891a82075cb469b736321b4827Brian CarlstromLOCAL_MODULE_TAGS := optional
138e6bf3e8dfa2804891a82075cb469b736321b4827Brian CarlstromLOCAL_SRC_FILES := $(call all-java-files-under,bcpkix/src/main/java)
139e6bf3e8dfa2804891a82075cb469b736321b4827Brian CarlstromLOCAL_JAVACFLAGS := -encoding UTF-8
140e6bf3e8dfa2804891a82075cb469b736321b4827Brian CarlstromLOCAL_MODULE_TAGS := optional
141e6bf3e8dfa2804891a82075cb469b736321b4827Brian CarlstromLOCAL_JAVA_LIBRARIES := bouncycastle-host
14233724b02cb3d7c8c398f1d42234bfb4d948f1666Brian CarlstromLOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
143e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrominclude $(BUILD_HOST_JAVA_LIBRARY)
144