• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#
2# Copyright (C) 2010 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#      http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16LOCAL_PATH := $(call my-dir)
17
18# All the files needed for OCSP testing
19all_bc_ocsp_files := $(call all-java-files-under,bcpkix/src/main/java/org/bouncycastle/cert/ocsp) \
20 $(call all-java-files-under,bcprov/src/main/java/org/bouncycastle/asn1/ocsp)
21
22# used for bouncycastle-hostdex where we want everything for testing
23all_bcprov_src_files := $(filter-out \
24 $(all_bc_ocsp_files), \
25 $(call all-java-files-under,bcprov/src/main/java))
26
27# used for bouncycastle for target where we want to be sure to use OpenSSLDigest
28android_bcprov_src_files := $(filter-out \
29 bcprov/src/main/java/org/bouncycastle/crypto/digests/AndroidDigestFactoryBouncyCastle.java, \
30 $(all_bcprov_src_files))
31
32# used for bouncycastle-host where we can't use OpenSSLDigest
33ri_bcprov_src_files := $(filter-out \
34 bcprov/src/main/java/org/bouncycastle/crypto/digests/AndroidDigestFactoryOpenSSL.java \
35 bcprov/src/main/java/org/bouncycastle/crypto/digests/OpenSSLDigest.java, \
36 $(all_bcprov_src_files))
37
38# used for host tools, but OCSP is only for testing
39all_bcpkix_src_files := $(filter-out \
40 $(all_bc_ocsp_files), \
41 $(call all-java-files-under,bcpkix/src/main/java))
42
43# These cannot build in the PDK, because the PDK requires all libraries
44# compile against SDK versions. LOCAL_NO_STANDARD_LIBRARIES conflicts with
45# this requirement.
46ifneq ($(TARGET_BUILD_PDK),true)
47
48    # non-jarjar version to build okhttp-tests
49    include $(CLEAR_VARS)
50    LOCAL_MODULE := bouncycastle-nojarjar
51    LOCAL_MODULE_TAGS := optional
52    LOCAL_SRC_FILES := $(android_bcprov_src_files)
53    LOCAL_JAVA_LIBRARIES := core-oj core-libart conscrypt
54    LOCAL_NO_STANDARD_LIBRARIES := true
55    LOCAL_JAVA_LANGUAGE_VERSION := 1.7
56    include $(BUILD_STATIC_JAVA_LIBRARY)
57
58    include $(CLEAR_VARS)
59    LOCAL_MODULE := bouncycastle
60    LOCAL_MODULE_TAGS := optional
61    LOCAL_STATIC_JAVA_LIBRARIES := bouncycastle-nojarjar
62    LOCAL_JAVA_LIBRARIES := core-oj core-libart conscrypt
63    LOCAL_NO_STANDARD_LIBRARIES := true
64    LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
65    LOCAL_JAVA_LANGUAGE_VERSION := 1.7
66    include $(BUILD_JAVA_LIBRARY)
67
68    # A guaranteed unstripped version of bouncycastle.
69    # The build system may or may not strip the bouncycastle jar, but this one will
70    # not be stripped. See b/24535627.
71    include $(CLEAR_VARS)
72    LOCAL_MODULE := bouncycastle-testdex
73    LOCAL_MODULE_TAGS := optional
74    LOCAL_STATIC_JAVA_LIBRARIES := bouncycastle-nojarjar
75    LOCAL_JAVA_LIBRARIES := core-oj core-libart conscrypt
76    LOCAL_NO_STANDARD_LIBRARIES := true
77    LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
78    LOCAL_JAVA_LANGUAGE_VERSION := 1.7
79    include $(BUILD_JAVA_LIBRARY)
80
81    # unbundled bouncycastle jar
82    include $(CLEAR_VARS)
83    LOCAL_MODULE := bouncycastle-unbundled
84    LOCAL_MODULE_TAGS := optional
85    LOCAL_SDK_VERSION := 9
86    LOCAL_SRC_FILES := $(ri_bcprov_src_files)
87    include $(BUILD_STATIC_JAVA_LIBRARY)
88
89    # PKIX classes used for testing
90    include $(CLEAR_VARS)
91    LOCAL_MODULE := bouncycastle-bcpkix-nojarjar
92    LOCAL_MODULE_TAGS := optional
93    LOCAL_SRC_FILES := $(all_bcpkix_src_files)
94    LOCAL_NO_STANDARD_LIBRARIES := true
95    LOCAL_JAVA_LIBRARIES := bouncycastle-nojarjar core-oj core-libart conscrypt
96    include $(BUILD_STATIC_JAVA_LIBRARY)
97
98    include $(CLEAR_VARS)
99    LOCAL_MODULE := bouncycastle-bcpkix
100    LOCAL_MODULE_TAGS := optional
101    LOCAL_STATIC_JAVA_LIBRARIES := bouncycastle-bcpkix-nojarjar
102    LOCAL_JAVA_LIBRARIES := core-oj core-libart conscrypt
103    LOCAL_NO_STANDARD_LIBRARIES := true
104    LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
105    include $(BUILD_STATIC_JAVA_LIBRARY)
106
107    # OCSP classes used for testing
108    include $(CLEAR_VARS)
109    LOCAL_MODULE := bouncycastle-ocsp
110    LOCAL_MODULE_TAGS := optional
111    LOCAL_SRC_FILES := $(all_bc_ocsp_files)
112    LOCAL_JAVA_LIBRARIES := bouncycastle-nojarjar bouncycastle-bcpkix-nojarjar core-oj core-libart conscrypt
113    LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
114    LOCAL_JAVA_LANGUAGE_VERSION := 1.7
115    LOCAL_NO_STANDARD_LIBRARIES := true
116    include $(BUILD_STATIC_JAVA_LIBRARY)
117endif # TARGET_BUILD_PDK != true
118
119# This is used to generate a list of what is unused so it can be removed when bouncycastle is updated.
120# Based on "Finding dead code" example in ProGuard manual at http://proguard.sourceforge.net/
121.PHONY: bouncycastle-proguard-deadcode
122bouncycastle-proguard-deadcode: $(full_classes_compiled_jar) $(full_java_libs)
123	$(PROGUARD) \
124		-injars $(full_classes_compiled_jar) \
125		-libraryjars "$(call normalize-path-list,$(addsuffix (!org/bouncycastle/**.class,!com/android/org/conscrypt/OpenSSLMessageDigest.class),$(full_java_libs)))" \
126		-dontoptimize \
127		-dontobfuscate \
128		-dontpreverify \
129		-ignorewarnings \
130		-printusage \
131		-keep class org.bouncycastle.jce.provider.BouncyCastleProvider "{ public protected *; }" \
132		-keep class org.bouncycastle.jce.provider.symmetric.AESMappings "{ public protected *; }" \
133		-keep class org.bouncycastle.asn1.ASN1TaggedObject "{ public protected *; }" \
134		-keep class org.bouncycastle.asn1.x509.CertificateList "{ public protected *; }" \
135		-keep class org.bouncycastle.crypto.AsymmetricBlockCipher "{ public protected *; }" \
136		-keep class org.bouncycastle.x509.ExtendedPKIXBuilderParameters "{ public protected *; }" \
137		`(find $(LOCAL_PATH) -name '*.java' | xargs grep '"org.bouncycastle' | egrep '  (put|add)' | sed -e 's/");//' -e 's/.*"//'; \
138		  find $(LOCAL_PATH) -name '*.java' | xargs grep '  addHMACAlgorithm' | sed 's/"org.bouncycastle/\norg.bouncycastle/g' | grep ^org.bouncycastle | sed 's/".*//'; \
139                  find . -name '*.java' | xargs grep 'import org.bouncycastle' | grep -v /bouncycastle/ | sed -e 's/.*:import //' -e 's/;//') \
140		  | sed -e 's/^/-keep class /' -e 's/$$/ { public protected \*; } /' | sort | uniq` \
141		-keepclassmembers "class * { \
142		    static final %                *; \
143		    static final java.lang.String *; \
144		}" \
145		-keepclassmembers "class * implements java.io.Serializable { \
146		    private static final java.io.ObjectStreamField[] serialPersistentFields; \
147		    private void writeObject(java.io.ObjectOutputStream); \
148		    private void readObject(java.io.ObjectInputStream); \
149		    java.lang.Object writeReplace(); \
150		    java.lang.Object readResolve(); \
151		}" \
152		-keepclassmembers "interface org.bouncycastle.crypto.paddings.BlockCipherPadding { \
153		    abstract public java.lang.String getPaddingName(); \
154		}" \
155		-keepclassmembers "class * implements org.bouncycastle.crypto.paddings.BlockCipherPadding { \
156		    public java.lang.String getPaddingName(); \
157		}"
158
159# Conscrypt isn't built in the PDK or on non-linux OSes, so this cannot be built
160# because it has a dependency on conscrypt-hostdex.
161ifneq ($(TARGET_BUILD_PDK),true)
162  ifeq ($(HOST_OS),linux)
163    include $(CLEAR_VARS)
164    LOCAL_MODULE := bouncycastle-hostdex-nojarjar
165    LOCAL_MODULE_TAGS := optional
166    LOCAL_SRC_FILES := $(all_bcprov_src_files)
167    LOCAL_JAVA_LIBRARIES := conscrypt-hostdex
168    include $(BUILD_HOST_DALVIK_STATIC_JAVA_LIBRARY)
169
170    include $(CLEAR_VARS)
171    LOCAL_MODULE := bouncycastle-hostdex
172    LOCAL_MODULE_TAGS := optional
173    LOCAL_STATIC_JAVA_LIBRARIES := bouncycastle-hostdex-nojarjar
174    LOCAL_JAVA_LIBRARIES := conscrypt-hostdex
175    LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
176    LOCAL_JAVA_LANGUAGE_VERSION := 1.7
177    include $(BUILD_HOST_DALVIK_JAVA_LIBRARY)
178
179    include $(CLEAR_VARS)
180    LOCAL_MODULE := bouncycastle-bcpkix-hostdex-nojarjar
181    LOCAL_MODULE_TAGS := optional
182    LOCAL_SRC_FILES := $(all_bcpkix_src_files)
183    LOCAL_STATIC_JAVA_LIBRARIES := bouncycastle-hostdex-nojarjar
184    include $(BUILD_HOST_DALVIK_STATIC_JAVA_LIBRARY)
185
186    include $(CLEAR_VARS)
187    LOCAL_MODULE := bouncycastle-bcpkix-hostdex
188    LOCAL_MODULE_TAGS := optional
189    LOCAL_STATIC_JAVA_LIBRARIES := bouncycastle-bcpkix-hostdex-nojarjar
190    LOCAL_STATIC_JAVA_LIBRARIES := bouncycastle-hostdex-nojarjar
191    LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
192    include $(BUILD_HOST_DALVIK_STATIC_JAVA_LIBRARY)
193
194    # OCSP classes used for testing
195    include $(CLEAR_VARS)
196    LOCAL_MODULE := bouncycastle-ocsp-hostdex
197    LOCAL_MODULE_TAGS := optional
198    LOCAL_SRC_FILES := $(all_bc_ocsp_files)
199    LOCAL_STATIC_JAVA_LIBRARIES := bouncycastle-hostdex-nojarjar bouncycastle-bcpkix-hostdex-nojarjar
200    LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
201    include $(BUILD_HOST_DALVIK_STATIC_JAVA_LIBRARY)
202  endif  # ($(HOST_OS),linux)
203endif
204
205include $(CLEAR_VARS)
206LOCAL_MODULE := bouncycastle-host
207LOCAL_MODULE_TAGS := optional
208LOCAL_SRC_FILES := $(ri_bcprov_src_files)
209LOCAL_JAVA_LANGUAGE_VERSION := 1.7
210include $(BUILD_HOST_JAVA_LIBRARY)
211
212include $(CLEAR_VARS)
213LOCAL_MODULE := bouncycastle-bcpkix-host
214LOCAL_MODULE_TAGS := optional
215LOCAL_SRC_FILES := $(all_bcpkix_src_files)
216LOCAL_JAVA_LIBRARIES := bouncycastle-host
217LOCAL_JAVA_LANGUAGE_VERSION := 1.7
218include $(BUILD_HOST_JAVA_LIBRARY)
219
220# OCSP classes used for testing
221include $(CLEAR_VARS)
222LOCAL_MODULE := bouncycastle-ocsp-host
223LOCAL_MODULE_TAGS := optional
224LOCAL_SRC_FILES := $(all_bc_ocsp_files)
225LOCAL_JAVA_LIBRARIES := bouncycastle-host bouncycastle-bcpkix-host
226include $(BUILD_HOST_JAVA_LIBRARY)
227
228# Unset these so they don't linger in the next makefile
229all_bcprov_src_files :=
230android_bcprov_src_files :=
231ri_bcprov_src_files :=
232all_bcpkix_src_files :=
233all_bc_ocsp_files :=
234