Skip to content

Commit a2684c9

Browse files
authored
Merge pull request #14 from bandi13/sampleApp
Sample app
2 parents a959613 + 8521873 commit a2684c9

15 files changed

Lines changed: 301 additions & 73 deletions

.gitignore

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,10 @@
5757
/wolfssl*
5858

5959
IDE/Android/android-ndk-r26b/
60-
IDE/Android/openssl/
60+
IDE/Android/openssl-source/
6161
IDE/Android/openssl-install/
62-
IDE/Android/wolfssl/
62+
IDE/Android/wolfssl-source/
6363
IDE/Android/wolfssl-install/
64-
IDE/Android/wolfProvider/
64+
IDE/Android/wolfProvider/
65+
66+
examples/openssl_example

IDE/Android/README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,18 @@ Providers:
4141
```
4242

4343
An alternate way of running `build.sh` is within a Docker environment. This can avoid unwanted local changes to your system by wrapping the environment in a container. Simply launch Docker with `docker run --rm -it -v $(pwd)/../../:/ws -w /ws/IDE/Android ubuntu:22.04 ./build.sh`. This should start the script and build everything in the local folder. Then you can take the `run.sh` script and run it from your host environment.
44+
45+
# build.sh options
46+
There are a few environment flags that can be passed to the script to modify its execution. This section details the functionality.
47+
48+
## AUTO_INSTALL_TOOLS
49+
This setting will run on a Debian system the required commands to install the dependencies of this script.
50+
51+
## CLEAN_BUILD
52+
This will remove previous sources and binaries in the folder to have a clean start.
53+
54+
## USE_FIPS
55+
This sets WolfSSL to use the FIPS version. Note some algorithms are turned off as they are not FIPS certified (ie: ed25519 and ed448).
56+
57+
### USE_FIPS_CHECK
58+
If you have access to the official FIPS GitHub repository, you can use that as the source. Generally it is intended for internal use.

IDE/Android/build.sh

Lines changed: 72 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,110 @@
11
#!/bin/bash
22

3-
set -e
43
WORKSPACE=$(pwd)
54

5+
function checkReturn() {
6+
if [ "$1" != "0" ]; then
7+
echo "Error on line ${BASH_LINENO[0]}: $1"
8+
exit $1
9+
fi
10+
}
11+
612
AUTO_INSTALL_TOOLS=${AUTO_INSTALL_TOOLS:-true}
713
if [ "${AUTO_INSTALL_TOOLS}" == "true" ]; then
14+
echo "=== Installing prerequisite tools ==="
815
DEBIAN_FRONTEND=noninteractive apt update && apt install -y git make autoconf libtool android-tools-adb unzip wget
16+
checkReturn $?
917
fi
1018

1119
# https://developer.android.com/ndk/downloads/
1220
export ANDROID_NDK_ROOT=${ANDROID_NDK_ROOT:-${WORKSPACE}/android-ndk-r26b}
1321
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 $?
1626
fi
1727
PATH="${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH"
1828

29+
if [ "${CLEAN_BUILD}" = "true" ]; then
30+
rm -rf ${WORKSPACE}/openssl-* ${WORKSPACE}/wolfssl-*
31+
fi
32+
1933
# 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 && \
2440
./Configure android-x86_64 --prefix=${WORKSPACE}/openssl-install && \
2541
sed -i 's/-ldl//g' Makefile && \
2642
sed -i 's/-pie//g' Makefile && \
2743
make -j && \
2844
make -j install
45+
checkReturn $?
2946
fi
3047
export LD_LIBRARY_PATH="${WORKSPACE}/openssl-install/lib64:$LD_LIBRARY_PATH"
3148

3249
# 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"
3550
export UNAME=Android
3651
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 $?
4490
fi
4591
export LD_LIBRARY_PATH="${WORKSPACE}/wolfssl-install/lib:$LD_LIBRARY_PATH"
4692
export LIBRARY_PATH="${WORKSPACE}/wolfssl-install/lib:$LIBRARY_PATH"
4793

94+
echo "=== Installing wolfProvider ==="
95+
4896
# If running in wolfProvider/IDE/Android, then 'ln -s ../../ wolfProvider'
4997
if [ ! -e ${WORKSPACE}/wolfProvider ]; then
5098
git clone https://github.com/wolfssl/wolfProvider ${WORKSPACE}/wolfProvider
99+
checkReturn $?
51100
fi
52101
cd ${WORKSPACE}/wolfProvider && \
53102
./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 && \
55104
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

IDE/Android/run.sh

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,17 @@ WORKSPACE=$(pwd)
77
rm -rf ${WORKSPACE}/openssl-install/share
88
rm -rf ${WORKSPACE}/openssl-install/ssl/misc/tsget
99

10-
adb push --sync ${WORKSPACE}/openssl-install ${WORKSPACE}/wolfssl/src/.libs/libwolfssl.so ${WORKSPACE}/wolfProvider/.libs/libwolfprov.so ${WORKSPACE}/wolfProvider/provider.conf ${WORKSPACE}/wolfProvider/scripts run_helper.sh /data/local/tmp/.
10+
adb push --sync ${WORKSPACE}/openssl-install \
11+
${WORKSPACE}/openssl-source/test/evp_test \
12+
${WORKSPACE}/wolfssl-install/lib/libwolfssl.so \
13+
${WORKSPACE}/wolfProvider/.libs/libwolfprov.so \
14+
${WORKSPACE}/wolfProvider/provider.conf \
15+
${WORKSPACE}/wolfProvider/scripts \
16+
${WORKSPACE}/run_helper.sh \
17+
${WORKSPACE}/wolfProvider/examples/openssl_example \
18+
${WORKSPACE}/run_openssl.sh \
19+
/data/local/tmp/.
1120

1221
adb shell "cd /data/local/tmp/ && ./run_helper.sh"
1322

23+
adb shell "cd /data/local/tmp/ && ./run_openssl.sh"

IDE/Android/run_helper.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ EVP_TESTS=(
3636
for T in ${EVP_TESTS[@]}
3737
do
3838
printf "\t\t$T ... "
39-
${RUNDIR}/openssl/test/evp_test -config ${RUNDIR}/provider.conf \
39+
${RUNDIR}/evp_test -config ${RUNDIR}/provider.conf \
4040
${RUNDIR}/scripts/evp_test/$T \
4141
>$T.log 2>&1
4242
if [ "$?" = "0" ]; then

IDE/Android/run_openssl.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
RUNDIR=/data/local/tmp/
2+
export LD_LIBRARY_PATH=${RUNDIR}:${RUNDIR}/openssl-install/lib
3+
export OPENSSL_MODULES=${RUNDIR}
4+
export OPENSSL_CONF=${RUNDIR}/provider.conf
5+
${RUNDIR}/openssl-install/bin/openssl list -provider-path ${RUNDIR} -providers -verbose
6+
#${RUNDIR}/openssl-install/bin/openssl help list
7+
8+
${RUNDIR}/openssl_example

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,5 +113,5 @@ To run automated unit tests:
113113
### Integration Tests
114114

115115
To run the cipher suite testing:
116-
* ./scripts/wp-cs-test.sh
116+
* ./scripts/test-wp-cs.sh
117117

examples/openssl_example.c

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
4+
#include <openssl/params.h>
5+
#include <openssl/provider.h>
6+
#include <openssl/err.h>
7+
8+
int main(void)
9+
{
10+
/*
11+
OSSL_PROVIDER *legacy;
12+
OSSL_PROVIDER *deflt;
13+
14+
// Load Multiple providers into the default (NULL) library context
15+
legacy = OSSL_PROVIDER_load(NULL, "legacy");
16+
if (legacy == NULL) {
17+
printf("Failed to load Legacy provider\n");
18+
exit(EXIT_FAILURE);
19+
}
20+
deflt = OSSL_PROVIDER_load(NULL, "default");
21+
if (deflt == NULL) {
22+
printf("Failed to load Default provider\n");
23+
OSSL_PROVIDER_unload(legacy);
24+
exit(EXIT_FAILURE);
25+
}
26+
OSSL_PROVIDER_unload(legacy);
27+
OSSL_PROVIDER_unload(deflt);
28+
*/
29+
30+
// Rest of application
31+
32+
OSSL_PROVIDER *prov = NULL;
33+
const char *build = NULL;
34+
OSSL_PARAM request[] = {
35+
{ "buildinfo", OSSL_PARAM_UTF8_PTR, &build, 0, 0 },
36+
{ NULL, 0, NULL, 0, 0 }
37+
};
38+
39+
if ((prov = OSSL_PROVIDER_load(NULL, "libwolfprov")) != NULL
40+
&& OSSL_PROVIDER_get_params(prov, request))
41+
printf("Provider 'libwolfprov' buildinfo: %s\n", build);
42+
else
43+
ERR_print_errors_fp(stderr);
44+
45+
if (OSSL_PROVIDER_self_test(prov) == 0)
46+
printf("Provider selftest failed\n");
47+
else
48+
printf("Provider selftest passed\n");
49+
50+
OSSL_PROVIDER_unload(prov);
51+
exit(EXIT_SUCCESS);
52+
}

scripts/test-openssl.sh

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@
2222
# Execute this script from: wolfProvider
2323
#set -e
2424

25+
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
26+
source ${SCRIPT_DIR}/utils-openssl.sh
27+
source ${SCRIPT_DIR}/utils-wolfssl.sh
28+
2529
do_cleanup() {
2630
echo "Cleanup"
2731
}
@@ -34,9 +38,6 @@ do_trap() {
3438

3539
trap do_trap INT TERM
3640

37-
source ${PWD}/scripts/utils-openssl.sh
38-
source ${PWD}/scripts/utils-wolfssl.sh
39-
4041
#
4142
# evp_test
4243
#
@@ -87,6 +88,8 @@ source ${PWD}/scripts/utils-wolfssl.sh
8788
# evppkey_kdf_scrypt.txt - SCRYPT not supported
8889
# evppkey_sm2.txt - SM2 not supported
8990
# evprand.txt - random is HashDRBG and internals not accessible.
91+
# evppkey_rsa_common.txt
92+
# evppkey_rsa.txt
9093

9194
evp_test_run() {
9295
printf "\tTesting with evp_test:\n"
@@ -115,8 +118,6 @@ evp_test_run() {
115118
evppkey_kdf_hkdf.txt
116119
evppkey_kdf_tls1_prf.txt
117120
evppkey_mismatch.txt
118-
evppkey_rsa_common.txt
119-
evppkey_rsa.txt
120121
)
121122

122123
for T in ${EVP_TESTS[@]}
@@ -247,7 +248,7 @@ WOLFPROV_DIR=$PWD
247248
WOLFPROV_CONFIG=$WOLFPROV_DIR/provider.conf
248249
WOLFPROV_PATH=$WOLFPROV_DIR/.libs
249250
LOGDIR=$WOLFPROV_DIR/scripts/log
250-
LOG_FILE=$LOGDIR/dependencies.log
251+
LOG_FILE=$LOGDIR/test-openssl.log
251252
export OPENSSL_MODULES=$WOLFPROV_PATH
252253

253254
if [ ! -d "$LOGDIR" ]; then
@@ -280,18 +281,18 @@ printf "LD_LIBRARY_PATH: $LD_LIBRARY_PATH\n"
280281
# Set up wolfProvider
281282
cd ${WOLFPROV_DIR}
282283
if [ ! -e "${WOLFPROV_DIR}/configure" ]; then
283-
./autogen.sh &>> $LOG_FILE
284-
./configure --with-openssl=${OPENSSL_INSTALL_DIR} --with-wolfssl=${WOLFSSL_INSTALL_DIR} &>> $LOG_FILE
284+
./autogen.sh >>$LOG_FILE 2>&1
285+
./configure --with-openssl=${OPENSSL_INSTALL_DIR} --with-wolfssl=${WOLFSSL_INSTALL_DIR} >>$LOG_FILE 2>&1
285286
fi
286-
make -j$NUMCPU &>> $LOG_FILE
287+
make -j$NUMCPU >>$LOG_FILE 2>&1
287288
if [ $? != 0 ]; then
288289
printf "\n\n...\n"
289290
tail -n 40 $LOG_FILE
290291
do_cleanup
291292
exit 1
292293
fi
293294

294-
make test &>> $LOG_FILE
295+
make test >>$LOG_FILE 2>&1
295296
if [ $? != 0 ]; then
296297
printf "\n\n...\n"
297298
tail -n 40 $LOG_FILE

0 commit comments

Comments
 (0)