|
1 | 1 | #!/bin/bash |
2 | 2 |
|
3 | | -set -e |
4 | 3 | WORKSPACE=$(pwd) |
5 | 4 |
|
| 5 | +function checkReturn() { |
| 6 | + if [ "$1" != "0" ]; then |
| 7 | + echo "Error on line ${BASH_LINENO[0]}: $1" |
| 8 | + exit $1 |
| 9 | + fi |
| 10 | +} |
| 11 | + |
6 | 12 | AUTO_INSTALL_TOOLS=${AUTO_INSTALL_TOOLS:-true} |
7 | 13 | if [ "${AUTO_INSTALL_TOOLS}" == "true" ]; then |
| 14 | + echo "=== Installing prerequisite tools ===" |
8 | 15 | DEBIAN_FRONTEND=noninteractive apt update && apt install -y git make autoconf libtool android-tools-adb unzip wget |
| 16 | + checkReturn $? |
9 | 17 | fi |
10 | 18 |
|
11 | 19 | # https://developer.android.com/ndk/downloads/ |
12 | 20 | export ANDROID_NDK_ROOT=${ANDROID_NDK_ROOT:-${WORKSPACE}/android-ndk-r26b} |
13 | 21 | if [ ! -e ${ANDROID_NDK_ROOT} ]; then |
14 | | - wget -q https://dl.google.com/android/repository/android-ndk-r26b-linux.zip |
15 | | - unzip android-ndk-r26b-linux.zip |
| 22 | + echo "=== Installing Android NDK ===" |
| 23 | + wget -q https://dl.google.com/android/repository/android-ndk-r26b-linux.zip && \ |
| 24 | + unzip android-ndk-r26b-linux.zip |
| 25 | + checkReturn $? |
16 | 26 | fi |
17 | 27 | PATH="${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH" |
18 | 28 |
|
| 29 | +if [ "${CLEAN_BUILD}" = "true" ]; then |
| 30 | + rm -rf ${WORKSPACE}/openssl-* ${WORKSPACE}/wolfssl-* |
| 31 | +fi |
| 32 | + |
19 | 33 | # Compile OpenSSL |
20 | | -export OPENSSL_ALL_CIPHERS="-cipher ALL -ciphersuites TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_128_CCM_8_SHA256" |
21 | | -if [ ! -e ${WORKSPACE}/openssl ]; then |
22 | | - git clone https://github.com/openssl/openssl.git ${WORKSPACE}/openssl |
23 | | - cd ${WORKSPACE}/openssl && \ |
| 34 | +if [ ! -e ${WORKSPACE}/openssl-install ]; then |
| 35 | + OPENSSL_BRANCH=${OPENSSL_BRANCH:-"master"} |
| 36 | + echo "=== Installing OpenSSL ===" |
| 37 | + export OPENSSL_ALL_CIPHERS="-cipher ALL -ciphersuites TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_128_CCM_8_SHA256" |
| 38 | + git clone https://github.com/openssl/openssl.git --branch=${OPENSSL_BRANCH} ${WORKSPACE}/openssl-source && \ |
| 39 | + cd ${WORKSPACE}/openssl-source && \ |
24 | 40 | ./Configure android-x86_64 --prefix=${WORKSPACE}/openssl-install && \ |
25 | 41 | sed -i 's/-ldl//g' Makefile && \ |
26 | 42 | sed -i 's/-pie//g' Makefile && \ |
27 | 43 | make -j && \ |
28 | 44 | make -j install |
| 45 | + checkReturn $? |
29 | 46 | fi |
30 | 47 | export LD_LIBRARY_PATH="${WORKSPACE}/openssl-install/lib64:$LD_LIBRARY_PATH" |
31 | 48 |
|
32 | 49 | # Compile WolfSSL |
33 | | -export WOLFSSL_CONFIG_OPTS='--enable-debug --enable-opensslcoexist --enable-cmac --enable-keygen --enable-sha --enable-aesctr --enable-aesccm --enable-x963kdf --enable-compkey --enable-certgen --enable-aeskeywrap --enable-enckeys --enable-base16 --enable-aesgcm-stream --enable-curve25519 --enable-curve448 --enable-ed25519 --enable-ed448 --enable-pwdbased' |
34 | | -export WOLFSSL_CONFIG_CPPFLAGS=CPPFLAGS="-I${WORKSPACE}/openssl-install -DHAVE_AES_ECB -DWOLFSSL_AES_DIRECT -DWC_RSA_NO_PADDING -DWOLFSSL_PUBLIC_MP -DECC_MIN_KEY_SZ=192 -DHAVE_PUBLIC_FFDHE -DHAVE_FFDHE_6144 -DHAVE_FFDHE_8192 -DFP_MAX_BITS=16384 -DWOLFSSL_DH_EXTRA -DWOLFSSL_PSS_LONG_SALT -DWOLFSSL_PSS_SALT_LEN_DISCOVER" |
35 | 50 | export UNAME=Android |
36 | 51 | export CROSS_COMPILE=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android34- |
37 | | -export CC=x86_64-linux-android34-clang |
38 | | -if [ ! -e ${WORKSPACE}/wolfssl ]; then |
39 | | - git clone https://github.com/wolfssl/wolfssl ${WORKSPACE}/wolfssl |
40 | | - cd ${WORKSPACE}/wolfssl && \ |
41 | | - ./autogen.sh && \ |
42 | | - ./configure ${WOLFSSL_CONFIG_OPTS} "${WOLFSSL_CONFIG_CPPFLAGS}" -prefix=${WORKSPACE}/wolfssl-install --host=x86_64-linux-android --disable-asm CFLAGS=-fPIC && \ |
43 | | - make -j install |
| 52 | +if [ ! -e ${WORKSPACE}/wolfssl-install ]; then |
| 53 | + echo "=== Installing WolfSSL ===" |
| 54 | + export WOLFSSL_CONFIG_OPTS='--enable-opensslcoexist --enable-cmac --enable-keygen --enable-sha --enable-aesctr --enable-aesccm --enable-x963kdf --enable-compkey --enable-certgen --enable-aeskeywrap --enable-enckeys --enable-base16 --enable-aesgcm-stream --enable-pwdbased' |
| 55 | + export WOLFSSL_CONFIG_CPPFLAGS=CPPFLAGS="-I${WORKSPACE}/openssl-install -DHAVE_AES_ECB -DWOLFSSL_AES_DIRECT -DWC_RSA_NO_PADDING -DWOLFSSL_PUBLIC_MP -DECC_MIN_KEY_SZ=192 -DHAVE_PUBLIC_FFDHE -DHAVE_FFDHE_6144 -DHAVE_FFDHE_8192 -DFP_MAX_BITS=16384 -DWOLFSSL_DH_EXTRA -DWOLFSSL_PSS_LONG_SALT -DWOLFSSL_PSS_SALT_LEN_DISCOVER" |
| 56 | + if [ "${USE_FIPS}" = "true" ]; then |
| 57 | + WOLFSSL_CONFIG_OPTS+=' --enable-fips=ready' |
| 58 | + if [ "${USE_FIPS_CHECK}" = "true" ]; then |
| 59 | + git clone https://github.com/wolfssl/wolfssl ${WORKSPACE}/wolfssl && \ |
| 60 | + cd ${WORKSPACE}/wolfssl && ./fips-check.sh fips-ready keep && \ |
| 61 | + mv ${WORKSPACE}/wolfssl/XXX-fips-test ${WORKSPACE}/wolfssl-source && \ |
| 62 | + rm -rf ${WORKSPACE}/wolfssl && \ |
| 63 | + cd ${WORKSPACE}/wolfssl-source && ./autogen.sh |
| 64 | + checkReturn $? |
| 65 | + else |
| 66 | + wget -O ${WORKSPACE}/wolfssl-fips.zip https://www.wolfssl.com/wolfssl-5.6.4-gplv3-fips-ready.zip && \ |
| 67 | + cd ${WORKSPACE} && unzip wolfssl-fips.zip && \ |
| 68 | + mv ${WORKSPACE}/wolfssl-5.6.4-gplv3-fips-ready ${WORKSPACE}/wolfssl-source && \ |
| 69 | + rm ${WORKSPACE}/wolfssl-fips.zip |
| 70 | + checkReturn $? |
| 71 | + fi |
| 72 | + else |
| 73 | + WOLFSSL_CONFIG_OPTS+=' --enable-curve25519 --enable-curve448 --enable-ed25519 --enable-ed448' |
| 74 | + git clone https://github.com/wolfssl/wolfssl ${WORKSPACE}/wolfssl-source && \ |
| 75 | + cd ${WORKSPACE}/wolfssl-source && ./autogen.sh |
| 76 | + checkReturn $? |
| 77 | + fi |
| 78 | + cd ${WORKSPACE}/wolfssl-source && \ |
| 79 | + CC=x86_64-linux-android34-clang ./configure ${WOLFSSL_CONFIG_OPTS} "${WOLFSSL_CONFIG_CPPFLAGS}" -prefix=${WORKSPACE}/wolfssl-install --host=x86_64-linux-android --disable-asm CFLAGS=-fPIC && \ |
| 80 | + make |
| 81 | + checkReturn $? |
| 82 | + if [ "${USE_FIPS}" = "true" ]; then |
| 83 | + adb push --sync src/.libs/libwolfssl.so ./wolfcrypt/test/.libs/testwolfcrypt /data/local/tmp/ && \ |
| 84 | + NEWHASH=$(adb shell "LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/testwolfcrypt 2>&1 | sed -n 's/hash = \(.*\)/\1/p'") && \ |
| 85 | + sed -i "s/^\".*\";/\"${NEWHASH}\";/" wolfcrypt/src/fips_test.c && \ |
| 86 | + checkReturn $? |
| 87 | + fi |
| 88 | + make -j install |
| 89 | + checkReturn $? |
44 | 90 | fi |
45 | 91 | export LD_LIBRARY_PATH="${WORKSPACE}/wolfssl-install/lib:$LD_LIBRARY_PATH" |
46 | 92 | export LIBRARY_PATH="${WORKSPACE}/wolfssl-install/lib:$LIBRARY_PATH" |
47 | 93 |
|
| 94 | +echo "=== Installing wolfProvider ===" |
| 95 | + |
48 | 96 | # If running in wolfProvider/IDE/Android, then 'ln -s ../../ wolfProvider' |
49 | 97 | if [ ! -e ${WORKSPACE}/wolfProvider ]; then |
50 | 98 | git clone https://github.com/wolfssl/wolfProvider ${WORKSPACE}/wolfProvider |
| 99 | + checkReturn $? |
51 | 100 | fi |
52 | 101 | cd ${WORKSPACE}/wolfProvider && \ |
53 | 102 | ./autogen.sh && \ |
54 | | - ./configure --with-openssl=${WORKSPACE}/openssl-install --with-wolfssl=${WORKSPACE}/wolfssl-install --host=x86_64-linux-android CFLAGS="-lm -fPIC" --enable-debug && \ |
| 103 | + CC=x86_64-linux-android34-clang ./configure --with-openssl=${WORKSPACE}/openssl-install --with-wolfssl=${WORKSPACE}/wolfssl-install --host=x86_64-linux-android CFLAGS="-lm -fPIC" --enable-debug && \ |
55 | 104 | make -j |
| 105 | +checkReturn $? |
| 106 | + |
| 107 | +${CROSS_COMPILE}clang ${WORKSPACE}/wolfProvider/examples/openssl_example.c -I ${WORKSPACE}/openssl-install/include/ -L ${WORKSPACE}/openssl-install/lib/ -lcrypto -o ${WORKSPACE}/wolfProvider/examples/openssl_example |
| 108 | +checkReturn $? |
| 109 | + |
| 110 | +exit 0 |
0 commit comments