diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
index 39a87d9..99062fb 100644
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -1,2 +1,2 @@
-
+
diff --git a/android/build.gradle b/android/build.gradle
index 60bc792..8de57a0 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -10,38 +10,38 @@ def pEpEngineDB = new File(new File(pEpEngineSrc), 'db')
buildscript {
repositories {
- jcenter()
- //maven {url 'https://maven.google.com'}
google()
+ jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.4'
- //classpath 'com.android.tools.build:gradle:2.2.0'
}
}
allprojects {
repositories {
- jcenter()
google()
+ jcenter()
}
}
apply plugin: 'com.android.library'
android {
- compileSdkVersion 21
+ compileSdkVersion 27
buildToolsVersion '28.0.3'
defaultConfig {
- minSdkVersion 18
- targetSdkVersion 21
+ minSdkVersion 19
+ targetSdkVersion 27
versionCode 1
versionName "1.0"
externalNativeBuild {
ndkBuild {
abiFilters "armeabi-v7a"
+ //abiFilters ["armeabi-v7a"]
+ //abiFilters ["arm64-v8a, armeabi-v7a"]
}
}
}
@@ -53,10 +53,11 @@ android {
// where to find generated Java source
java.srcDirs = ['../src', 'src']
- //jniLibs.srcDirs = ['../libpEpAdapter/src',
- // '../pEpEngine/build-android/include/pEp',
- //s 'external/data/data/security.pEp/app_opt/lib']
+ jniLibs.srcDirs = ['libs',
+ // 'external/data/data/security.pEp/app_opt/lib'
+ ]
assets.srcDirs = ['assets', 'external/assets']
+ resources.srcDirs = ['res']
}
}
@@ -79,7 +80,7 @@ android {
jniDebuggable true
externalNativeBuild {
ndkBuild {
- arguments '-B', 'NDK_DEBUG=1', 'NDEBUG=null', 'NDK_LOG=1'
+ // arguments '-B', 'NDK_DEBUG=1', 'NDEBUG=null', 'NDK_LOG=1'
}
}
}
diff --git a/android/external/Makefile b/android/external/Makefile
index aa96239..446e6d9 100644
--- a/android/external/Makefile
+++ b/android/external/Makefile
@@ -1,5 +1,5 @@
#------------------------------------------------------------------------------#
-# Makefile to build GPGME, GnuPG and deps for use with pEpEngine
+# Makefile to build deps for use with pEpEngine
# based on gnupg-for-android/external/Makefile
#------------------------------------------------------------------------------#
@@ -16,7 +16,7 @@ PEP_PACKAGE_NAME ?= security.pEp
all: build assets
-build: showsetup libetpan-build gnupg-install gpgme-install uuid-install uuid-prebuild sequoia-build
+build: showsetup uuid-install uuid-prebuild sequoia-deps-build sequoia-ffi-install libetpan-build
#------------------------------------------------------------------------------#
# Manage paths for PREFIX, DESTDIR, LOCAL and PATH
@@ -25,7 +25,7 @@ EXTERNAL_ROOT := $(shell pwd)
# install root for built files
DESTDIR = $(EXTERNAL_ROOT)
-prefix = /data/data/$(PEP_PACKAGE_NAME)/app_opt
+prefix = /data/data/$(PEP_PACKAGE_NAME)/$(APP_ABI)/app_opt
LOCAL := $(DESTDIR)$(prefix)
PATH := ${PATH}:$(NDK_TOOLCHAIN)/bin:$(LOCAL)/bin
@@ -102,209 +102,6 @@ showsetup:
@echo "CFLAGS: $(CFLAGS)"
@echo "LDFLAGS: $(LDFLAGS)"
-
-#------------------------------------------------------------------------------#
-# libgpg-error
-
-EXTERNAL_GIT_REPOS += libgpg-error|git://git.gnupg.org/libgpg-error.git?libgpg-error-1.20
-
-libgpg-error/configure: libgpg-error.src.stamp libgpg-error/configure.ac
- cd libgpg-error && ./autogen.sh
-
-libgpg-error/Makefile: libgpg-error/configure
- cd libgpg-error && \
- ./configure \
- CC="$(CC)" \
- AR=$(AR) \
- RANLIB=$(RANLIB) \
- CFLAGS="$(CFLAGS)" \
- LDFLAGS="$(LDFLAGS)" \
- --disable-doc \
- --disable-languages \
- --host=$(HOST) \
- --prefix=$(LOCAL)
- ls -l libgpg-error/libtool
- # brute force and ignorance to make libtool comply with android style
- sed -i 's,^fast_install=.*,fast_install=needless,' libgpg-error/libtool
- sed -i 's,^version_type=.*,version_type=none,' libgpg-error/libtool
- sed -i 's,^shlibpath_overrides_runpath=.*,shlibpath_overrides_runpath=yes,' libgpg-error/libtool
- sed -i 's,^library_names_spec=.*,library_names_spec="\\$$libname\\$$release\\$$shared_ext",' libgpg-error/libtool
- sed -i 's,^soname_spec=.*,soname_spec="\\$$libname\\$$release\\$$shared_ext",' libgpg-error/libtool
- sed -i 's,^finish_cmds=.*,finish_cmds="",' libgpg-error/libtool
- sed -i 's,^sys_lib_dlsearch_path_spec=.*,sys_lib_dlsearch_path_spec="/lib /usr/lib",' libgpg-error/libtool
-
-libgpg-error/src/.libs/libgpg-error.so: libgpg-error/Makefile
- $(MAKE) -C libgpg-error
-
-libgpg-error-build: libgpg-error/src/.libs/libgpg-error.so
-
-$(LOCAL)/lib/libgpg-error.so: libgpg-error/src/.libs/libgpg-error.so
- $(MAKE) -C libgpg-error prefix=$(LOCAL) install
- ls -l $(LOCAL)/lib/libgpg-error.so*
-
-libgpg-error-install: $(LOCAL)/lib/libgpg-error.so
-
-#------------------------------------------------------------------------------#
-# libgcrypt
-
-EXTERNAL_GIT_REPOS += libgcrypt|git://git.gnupg.org/libgcrypt.git?libgcrypt-1.6.4
-
-libgcrypt/configure: libgcrypt.src.stamp libgcrypt/configure.ac
- cd libgcrypt && ./autogen.sh
-
-libgcrypt/Makefile: libgcrypt/configure
- -patch -N -p1 --reject-file=- libgcrypt/Makefile.am libgcrypt-disable-docs.patch
- cd libgcrypt && \
- CC="$(CC)" AR="$(AR)" RANLIB=$(RANLIB) CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
- ./configure \
- --enable-maintainer-mode \
- --host=$(HOST) \
- --with-gpg-error-prefix=$(LOCAL) \
- --prefix=$(LOCAL)
- -patch -N -p1 --reject-file=- libgcrypt/tests/random.c libgcrypt-disable-hanging-random-test.patch
- # force use of /dev/urandom
- -sed -i 's/NAME_OF_DEV_RANDOM/NAME_OF_DEV_URANDOM/' libgcrypt/random/rndlinux.c
-
-libgcrypt/src/.libs/libgcrypt.so: $(LOCAL)/lib/libgpg-error.so libgcrypt/Makefile
- $(MAKE) -C libgcrypt
-
-$(LOCAL)/lib/libgcrypt.so: libgcrypt/src/.libs/libgcrypt.so
- $(MAKE) -C libgcrypt prefix=$(LOCAL) install
- ls -l $(LOCAL)/lib/libgcrypt.so
-
-libgcrypt-build: libgcrypt/src/.libs/libgcrypt.so
-
-libgcrypt-install: $(LOCAL)/lib/libgcrypt.so
-
-#------------------------------------------------------------------------------#
-# libassuan
-
-EXTERNAL_GIT_REPOS += libassuan|git://git.gnupg.org/libassuan.git?libassuan-2.3.0
-
-libassuan/configure: libassuan.src.stamp libassuan/configure.ac
- cd libassuan && ./autogen.sh && autoreconf --install --force --verbose
-
-libassuan/Makefile: libassuan/configure
- -patch -N -p1 --reject-file=- libassuan/m4/libtool.m4 libtool-Add-Android-Linux-support.patch
- cd libassuan && \
- CC="$(CC)" AR="$(AR)" RANLIB=$(RANLIB) CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
- ./configure \
- --enable-maintainer-mode \
- --disable-largefile \
- --host=$(HOST) \
- --with-gpg-error-prefix=$(LOCAL) \
- --prefix=$(LOCAL)
-
-libassuan/src/.libs/libassuan.so: $(LOCAL)/lib/libgpg-error.so libassuan/Makefile
- $(MAKE) -C libassuan
-
-$(LOCAL)/lib/libassuan.so: libassuan/src/.libs/libassuan.so
- $(MAKE) -C libassuan prefix=$(LOCAL) install
- ls -l $(LOCAL)/lib/libassuan.so
-
-libassuan-build: libassuan/src/.libs/libassuan.so
-
-libassuan-install: $(LOCAL)/lib/libassuan.so
-
-#------------------------------------------------------------------------------#
-# libksba
-
-EXTERNAL_GIT_REPOS += libksba|git://git.gnupg.org/libksba.git?libksba-1.3.4
-
-libksba/configure: libksba.src.stamp libksba/configure.ac
- cd libksba && ./autogen.sh
-
-libksba/Makefile: $(LOCAL)/lib/libgpg-error.so libksba/configure
- -patch -N -p1 --reject-file=- libksba/m4/libtool.m4 libtool-Add-Android-Linux-support.patch
- cd libksba && \
- CC="$(CC)" AR="$(AR)" RANLIB=$(RANLIB) CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
- ./configure \
- --enable-maintainer-mode \
- --host=$(HOST) \
- --with-gpg-error-prefix=$(LOCAL) \
- --prefix=$(LOCAL)
-
-libksba/src/.libs/libksba.so: libksba/Makefile
- $(MAKE) -C libksba
-
-$(LOCAL)/lib/libksba.so: libksba/src/.libs/libksba.so
- $(MAKE) -C libksba prefix=$(LOCAL) install
- ls -l $(LOCAL)/lib/libksba.so
-
-libksba-build: libksba/src/.libs/libksba.so
-
-libksba-install: $(LOCAL)/lib/libksba.so
-
-
-#------------------------------------------------------------------------------#
-# npth
-
-EXTERNAL_GIT_REPOS += npth|git://git.gnupg.org/npth.git?npth-1.2
-
-npth/configure: npth.src.stamp npth/configure.ac
- cd npth && ./autogen.sh
-
-npth/Makefile: $(LOCAL)/lib/libgpg-error.so npth/configure
- cd npth && \
- CC="$(CC)" AR="$(AR)" RANLIB=$(RANLIB) CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
- ./configure $(CONFIGURE_ARGS) \
- --enable-maintainer-mode \
- --host=$(HOST) \
- --with-gpg-error-prefix=$(LOCAL) \
- --prefix=$(LOCAL)
-
-npth/src/.libs/libnpth.so: npth/Makefile
- $(MAKE) -C npth
-
-$(LOCAL)/lib/libnpth.so: npth/src/.libs/libnpth.so
- $(MAKE) -C npth prefix=$(LOCAL) install
- ls -l $(LOCAL)/lib/libnpth.so
-
-npth-build: npth/src/.libs/libnpth.so
-
-npth-install: $(LOCAL)/lib/libnpth.so
-
-#------------------------------------------------------------------------------#
-# curl
-
-EXTERNAL_GIT_REPOS += curl|https://github.com/bagder/curl?curl-7_45_0
-
-curl/configure: curl.src.stamp curl/configure.ac
- cd curl && ./buildconf
-
-curl/Makefile: curl/configure
- -patch -N -p1 --reject-file=- curl/m4/libtool.m4 libtool-Add-Android-Linux-support.patch
- cd curl && \
- CC="$(CC)" AR="$(AR)" RANLIB=$(RANLIB) CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
- ./configure \
- --host=$(HOST) \
- --prefix=$(prefix) \
- --with-gnu-ld \
- --disable-imap \
- --disable-ldap \
- --disable-pop3 \
- --disable-rtsp \
- --disable-smtp
- # brute force and ignorance to make libtool comply with android style
- sed -i 's,^fast_install=.*,fast_install=needless,' curl/libtool
- sed -i 's,^version_type=.*,version_type=none,' curl/libtool
- sed -i 's,^shlibpath_overrides_runpath=.*,shlibpath_overrides_runpath=yes,' curl/libtool
- sed -i 's,^library_names_spec=.*,library_names_spec="\\$$libname\\$$release\\$$shared_ext",' curl/libtool
- sed -i 's,^soname_spec=.*,soname_spec="\\$$libname\\$$release\\$$shared_ext",' curl/libtool
- sed -i 's,^finish_cmds=.*,finish_cmds="",' curl/libtool
- sed -i 's,^sys_lib_dlsearch_path_spec=.*,sys_lib_dlsearch_path_spec="/lib /usr/lib",' curl/libtool
-
-curl/lib/.libs/libcurl.so: curl/Makefile
- $(MAKE) -C curl
-
-$(LOCAL)/lib/libcurl.so: curl/lib/.libs/libcurl.so
- $(MAKE) -C curl DESTDIR=$(DESTDIR) prefix=$(prefix) install
- ls -l $(LOCAL)/lib/libcurl.so
-
-curl-build: curl/lib/.libs/libcurl.so
-
-curl-install: $(LOCAL)/lib/libcurl.so
-
#------------------------------------------------------------------------------#
# libiconv
@@ -336,12 +133,11 @@ libiconv/Makefile: libiconv.src.stamp
cp config.sub libiconv/libcharset/build-aux
cp config.guess libiconv/libcharset/build-aux
cd libiconv && \
- CC="$(CC)" AR="$(AR)" RANLIB=$(RANLIB) CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
+ CC="$(CC)" LD="$(LD)" AR="$(AR)" AS="$(AS)" RANLIB=$(RANLIB) STRIP="$(STRIP)" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
./configure \
- --enable-static \
- --enable-maintainer-mode \
+ --with-lib-path=$(LOCAL)/lib \
+ --with-include-path=$(LOCAL)/include \
--host=$(HOST) \
- --with-gnu-ld \
--prefix=$(LOCAL)
libiconv/lib/.libs/libiconv.so: libiconv/Makefile
@@ -355,101 +151,18 @@ libiconv-build: libiconv/lib/.libs/libiconv.so
libiconv-install: $(LOCAL)/lib/libiconv.so
-#------------------------------------------------------------------------------#
-# gnupg
-
-EXTERNAL_GIT_REPOS += gnupg|git://git.gnupg.org/gnupg.git?gnupg-2.0.30
-
-gnupg/configure: gnupg.src.stamp gnupg/configure.ac
- cd gnupg && ./autogen.sh
-
-gnupg/Makefile: gnupg/configure
- -patch -N -p1 --reject-file=- gnupg/gl/stdint_.h gnupg_fix_gmulib_stdint_with_bionic.patch
- -patch -N -p1 --reject-file=- gnupg/jnlib/dotlock.c gnupg_use_rename_for_dotlock.patch
- cd gnupg && \
- CC="$(CC)" AR="$(AR)" RANLIB=$(RANLIB) CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
- ./configure \
- --enable-maintainer-mode \
- --host=$(HOST) \
- --with-gpg-error-prefix=$(LOCAL) \
- --with-libgcrypt-prefix=$(LOCAL) \
- --with-libassuan-prefix=$(LOCAL) \
- --with-ksba-prefix=$(LOCAL) \
- --with-libcurl=$(LOCAL) \
- --disable-agent \
- --disable-scdaemon \
- --disable-ldap \
- --disable-doc \
- --disable-gpgsm \
- --prefix=$(prefix)
-
-gnupg/g10/gpg2: $(LOCAL)/lib/libgpg-error.so $(LOCAL)/lib/libgcrypt.so $(LOCAL)/lib/libksba.so $(LOCAL)/lib/libnpth.so $(LOCAL)/lib/libassuan.so $(LOCAL)/lib/libcurl.so $(LOCAL)/lib/libiconv.so gnupg/Makefile
- $(MAKE) -C gnupg
-
-$(LOCAL)/bin/gpg2: gnupg/g10/gpg2 gnupg/configure
- $(MAKE) -C gnupg prefix=$(LOCAL) install
- ls -l $(LOCAL)/bin/gpg2
-
-gnupg-build: gnupg/g10/gpg2
-
-gnupg-install: $(LOCAL)/bin/gpg2
- install -d $(LOCAL)/etc/gnupg
- install -d $(LOCAL)/var/run/gnupg
- install -d $(LOCAL)/var/cache/gnupg
-
-#------------------------------------------------------------------------------#
-# gpgme
-
-EXTERNAL_GIT_REPOS += gpgme|git://git.gnupg.org/gpgme.git?gpgme-1.8.0
-
-gpgme/configure: gpgme.src.stamp gpgme/configure.ac
- cd gpgme && ./autogen.sh
-
-ifneq ("x$(findstring '64',$(HOST))x","xx")
- gpgme_32b_force_no_largefile =
-else
- gpgme_32b_force_no_largefile = --disable-largefile
-endif
-
-gpgme/Makefile: gpgme/configure
- -patch -N -p1 --reject-file=- gpgme/m4/libtool.m4 libtool-Add-Android-Linux-support.patch
- cd gpgme && \
- CC="$(CC)" AR="$(AR)" RANLIB=$(RANLIB) CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
- ./configure \
- --host=$(HOST) \
- $(gpgme_32b_force_no_largefile) \
- --enable-maintainer-mode \
- --with-gpg-error-prefix=$(LOCAL) \
- --with-libassuan-prefix=$(LOCAL) \
- --enable-fixed-path=$(prefix)/bin \
- --disable-glibtest \
- --disable-gpg-test \
- --disable-gpgsm-test \
- --disable-gpgconf-test \
- --disable-g13-test \
- --prefix=$(prefix) \
- --enable-languages=cl
-
-
-gpgme/src/.libs/libgpgme.so: gpgme/Makefile
- $(MAKE) -C gpgme
-
-$(LOCAL)/lib/libgpgme.so: gpgme/src/.libs/libgpgme.so
- $(MAKE) -C gpgme DESTDIR=$(DESTDIR) prefix=$(prefix) install
-
-gpgme-build: gpgme/src/.libs/libgpgme.so
-
-gpgme-install: $(LOCAL)/bin/gpg2 $(LOCAL)/lib/libgpgme.so
-
#------------------------------------------------------------------------------#
# libetpan
EXTERNAL_GIT_REPOS += libetpan|https://github.com/fdik/libetpan.git?HEAD
-libetpan/build-android/libetpan-android-1.zip: libiconv-install libetpan.src.stamp
+libetpan/Makefile: libetpan.src.stamp libiconv-install
cd libetpan/build-android; ICONV_PREFIX=$(LOCAL) bash ./build.sh
+ touch libetpan.src.stamp
+ touch libicon-install
+ touch libetpan/Makefile
-libetpan-build: libetpan/build-android/libetpan-android-1.zip
+libetpan-build: libetpan/Makefile
libetpan-cleanzip:
rm -f libetpan/build-android/libetpan-android-1.zip
@@ -512,11 +225,50 @@ uuid/jni/Android.mk: uuid.src.stamp
#------------------------------------------------------------------------------#
# Sequoia
-OPENSSL_VERSION=1.1.1a
+OPENSSL_VERSION=1.1.1b
GMP_VERSION=6.1.2
NETTLE_VERSION=3.4.1
-sequoia-build: gmp-install nettle-install
+sequoia-deps-build: gmp-install nettle-install openssl-install
+
+#------------------------------------------------------------------------------#
+# OpenSSL
+
+openssl-$(OPENSSL_VERSION).tar.gz:
+ wget -nc https://www.openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz
+ md5sum -c openssl-$(OPENSSL_VERSION).tar.gz.md5
+
+openssl.src.stamp: openssl-$(OPENSSL_VERSION).tar.gz
+ tar xvf openssl-$(OPENSSL_VERSION).tar.gz
+ mv openssl-$(OPENSSL_VERSION) openssl
+ touch $@
+
+openssl-src: openssl.src.stamp
+
+openssl-clean:
+ rm -rf openssl
+ rm -rf openssl.src.stamp
+
+EXTERNAL_SRCS += openssl-src
+EXTERNAL_SRCS_CLEAN += openssl-clean
+
+openssl/Makefile: openssl.src.stamp
+ cd openssl && \
+ PATH="$(ANDROID_NDK_HOME)/bin:$(PATH)" ./Configure android-arm --prefix=$(prefix)
+
+openssl/libssl.so: openssl/Makefile
+ PATH="$(ANDROID_NDK_HOME)/bin:$(PATH)" $(MAKE) -C openssl
+
+$(LOCAL)/lib/libssl.so: openssl/libssl.so
+ PATH="$(ANDROID_NDK_HOME)/bin:$(PATH)" $(MAKE) -C openssl DESTDIR=$(DESTDIR) prefix=$(prefix) install
+ pwd
+ ls -l $(LOCAL)/lib/libssl.so
+
+openssl-build: openssl/libssl.so
+
+openssl-install: $(LOCAL)/lib/libssl.so
+
+
#------------------------------------------------------------------------------#
# GMP
@@ -550,6 +302,7 @@ gmp/.libs/libgmp.so: gmp/Makefile
$(LOCAL)/lib/libgmp.so: gmp/.libs/libgmp.so
$(MAKE) -C gmp DESTDIR=$(DESTDIR) prefix=$(prefix) install
+ #gmp/libtool --finish $(LOCAL)/lib/
ls -l $(LOCAL)/lib/libgmp.so
gmp-build: gmp/.libs/libgmp.so
@@ -560,7 +313,7 @@ gmp-install: $(LOCAL)/lib/libgmp.so
#------------------------------------------------------------------------------#
# NETTLE
-nettle-$(NETTLE_VERSION).tar.bz2: $(LOCAL)/lib/libgmp.so
+nettle-$(NETTLE_VERSION).tar.gz: $(LOCAL)/lib/libgmp.so
wget -nc https://ftp.gnu.org/gnu/nettle/nettle-$(NETTLE_VERSION).tar.gz
md5sum -c nettle-$(NETTLE_VERSION).tar.gz.md5
@@ -598,6 +351,41 @@ nettle-build: nettle/libnettle.so
nettle-install: $(LOCAL)/lib/libnettle.so
+
+#------------------------------------------------------------------------------#
+# Sequoia-ffi
+EXTERNAL_GIT_REPOS += sequoia|https://gitlab.com/husspEp/sequoia.git?master
+
+CARGO_TARGET_DIR=$(EXTERNAL_ROOT)/sequoia/build/$(APP_ABI)
+
+
+
+sequoia-ffi-clean:
+ rm -rf sequoia
+ rm -rf sequoia.src.stamp
+
+EXTERNAL_SRCS_CLEAN += sequoia-ffi-clean
+
+$(CARGO_TARGET_DIR)/armv7-linux-androideabi/release/libsequoia_openpgp_ffi.so: sequoia.src.stamp nettle-install
+ cd sequoia && PATH="$(ANDROID_NDK_HOME)/bin:$(PATH)" \
+ LD_LIBRARY_PATH=$(LOCAL)/lib/ \
+ PKG_CONFIG_PATH=$(LOCAL)/lib/pkgconfig \
+ PKG_CONFIG_ALLOW_CROSS=1 \
+ ARMV7_LINUX_ANDROIDEABI_OPENSSL_LIB_DIR="$(LOCAL)/lib" \
+ ARMV7_LINUX_ANDROIDEABI_OPENSSL_INCLUDE_DIR="$(LOCAL)/include" \
+ ARMV7_LINUX_ANDROIDEABI_OPENSSL_DIR="$(LOCAL)/bin" \
+ CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) cargo build --target armv7-linux-androideabi -p sequoia-openpgp-ffi --release
+
+
+$(LOCAL)/lib/libsequoia_openpgp_ffi.so: $(CARGO_TARGET_DIR)/armv7-linux-androideabi/release/libsequoia_openpgp_ffi.so
+ cp $(CARGO_TARGET_DIR)/armv7-linux-androideabi/release/libsequoia_openpgp_ffi.* $(LOCAL)/lib/
+ ls -l $(LOCAL)/lib/libsequoia_openpgp_ffi.so
+
+
+sequoia-ffi-build: $(CARGO_TARGET_DIR)/armv7-linux-androideabi/release/libsequoia_openpgp_ffi.so
+
+sequoia-ffi-install: sequoia-deps-build $(LOCAL)/lib/libsequoia_openpgp_ffi.so
+
#------------------------------------------------------------------------------#
# assets for Android app
@@ -687,20 +475,13 @@ clean-all: clean
#------------------------------------------------------------------------------#
.PHONY = clean clean-install clean-assets libetpan-cleanzip\
- libgpg-error-build libgpg-error-install \
- libgcrypt-build libgcrypt-install \
- libassuan-build libassuan-install \
- libksba-build libksba-install \
- libnpth-build libnpth-install \
libiconv-build libiconv-install \
uuid-build uuid-prebuild uuid-install \
- gnupg-build gnupg-install\
gmp-build gmp-install \
- sequoia-build \
+ sequoia-deps-build \
+ openssl-build openssl-install \
nettle-build nettle-install \
- gpgme-build gpgme-install\
- curl-build curl-install \
+ sequoia-ffi-build sequoia-ffi-install\
assets \
- $(EXTERNAL_LOCAL_GITS_UPDATE) $(EXTERNAL_SRCS) \
+ $(EXTERNAL_LOCAL_GITS_UPDATE) $(EXTERNAL_SRCS) $(EXTERNAL_SRCS_CLEAN)\
showsetup
-
diff --git a/android/external/gmp-6.1.2.tar.bz2.md5 b/android/external/gmp-6.1.2.tar.bz2.md5
new file mode 100644
index 0000000..7143577
--- /dev/null
+++ b/android/external/gmp-6.1.2.tar.bz2.md5
@@ -0,0 +1 @@
+8ddbb26dc3bd4e2302984debba1406a5 gmp-6.1.2.tar.bz2
diff --git a/android/external/nettle-3.4.1.tar.gz.md5 b/android/external/nettle-3.4.1.tar.gz.md5
new file mode 100644
index 0000000..38cfc6a
--- /dev/null
+++ b/android/external/nettle-3.4.1.tar.gz.md5
@@ -0,0 +1 @@
+9bdebb0e2f638d3b9d91f7fc264b70c1 nettle-3.4.1.tar.gz
diff --git a/android/external/openssl-1.1.1b.tar.gz.md5 b/android/external/openssl-1.1.1b.tar.gz.md5
new file mode 100644
index 0000000..86c1370
--- /dev/null
+++ b/android/external/openssl-1.1.1b.tar.gz.md5
@@ -0,0 +1 @@
+4532712e7bcc9414f5bce995e4e13930 openssl-1.1.1b.tar.gz
diff --git a/android/jni/Android.mk b/android/jni/Android.mk
index 1c95ffb..6aa6e6b 100644
--- a/android/jni/Android.mk
+++ b/android/jni/Android.mk
@@ -1,49 +1,33 @@
LOCAL_PATH:= $(call my-dir)
SRC_PATH := $(LOCAL_PATH)/../../../
ENGINE_PATH := $(LOCAL_PATH)/../../../pEpEngine
-GPGBUILD:= $(LOCAL_PATH)/../external/data/data/security.pEp/app_opt
+GPGBUILD:= $(LOCAL_PATH)/../external/data/data/security.pEp
include $(CLEAR_VARS)
-LOCAL_MODULE := libassuan
-LOCAL_SRC_FILES := $(GPGBUILD)/lib/libassuan.so
-include $(PREBUILT_SHARED_LIBRARY)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := libcurl
-LOCAL_SRC_FILES := $(GPGBUILD)/lib/libcurl.so
+LOCAL_MODULE := libiconv
+LOCAL_SRC_FILES := $(GPGBUILD)/$(TARGET_ARCH_ABI)/app_opt/lib/libiconv.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
-LOCAL_MODULE := libgcrypt
-LOCAL_SRC_FILES := $(GPGBUILD)/lib/libgcrypt.so
-include $(PREBUILT_SHARED_LIBRARY)
+LOCAL_MODULE := libsequoia_openpgp_ffi
+LOCAL_SRC_FILES := $(GPGBUILD)/$(TARGET_ARCH_ABI)/app_opt/lib/libsequoia_openpgp_ffi.a
+include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
-LOCAL_MODULE := libgpg-error
-LOCAL_SRC_FILES := $(GPGBUILD)/lib/libgpg-error.so
+LOCAL_MODULE := libhogweed
+LOCAL_SRC_FILES := $(GPGBUILD)/$(TARGET_ARCH_ABI)/app_opt/lib/libhogweed.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
-LOCAL_MODULE := libgpgme
-LOCAL_SRC_FILES := $(GPGBUILD)/lib/libgpgme.so
-LOCAL_EXPORT_C_INCLUDES := $(GPGBUILD)/include
+LOCAL_MODULE := libgmp
+LOCAL_SRC_FILES := $(GPGBUILD)/$(TARGET_ARCH_ABI)/app_opt/lib/libgmp.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
-LOCAL_MODULE := libksba
-LOCAL_SRC_FILES := $(GPGBUILD)/lib/libksba.so
+LOCAL_MODULE := libnettle
+LOCAL_SRC_FILES := $(GPGBUILD)/$(TARGET_ARCH_ABI)/app_opt/lib/libnettle.so
include $(PREBUILT_SHARED_LIBRARY)
-include $(CLEAR_VARS)
-LOCAL_MODULE := libiconv
-LOCAL_SRC_FILES := $(GPGBUILD)/lib/libiconv.a
-include $(PREBUILT_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := libuuid
-LOCAL_SRC_FILES := $(GPGBUILD)/lib/libuuid.a
-include $(PREBUILT_STATIC_LIBRARY)
-
include $(CLEAR_VARS)
LOCAL_MODULE := libetpan
@@ -57,28 +41,29 @@ $(shell sh $(ENGINE_PATH)/build-android/takeOutHeaderFiles.sh $(ENGINE_PATH))
include $(CLEAR_VARS)
LOCAL_MODULE := pEpJNI
-LOCAL_SHARED_LIBRARIES := libgpgme libassuan libcurl libgcrypt libgpg-error
-LOCAL_STATIC_LIBRARIES := pEpEngine libetpan libiconv libuuid pEpAdapter
+LOCAL_SHARED_LIBRARIES := libnettle libhogweed libgmp
+LOCAL_STATIC_LIBRARIES := pEpEngine libetpan libiconv libuuid pEpAdapter libsequoia_openpgp_ffi
LOCAL_CPP_FEATURES += exceptions
-LOCAL_CPPFLAGS += -std=c++14 -DANDROID_STL=c++_shared -DHAVE_PTHREADS -DDISABLE_SYNC
+LOCAL_CPPFLAGS += -std=c++14 -DANDROID_STL=c++_shared -DHAVE_PTHREADS -DDISABLE_SYNC -fuse-ld=lld
LOCAL_SRC_FILES := \
- ../../src/org_pEp_jniadapter_AbstractEngine.cc \
- ../../src/org_pEp_jniadapter_Engine.cc \
- ../../src/org_pEp_jniadapter_Message.cc \
+ ../../src/foundation_pEp_jniadapter_AbstractEngine.cc \
+ ../../src/foundation_pEp_jniadapter_Engine.cc \
+ ../../src/foundation_pEp_jniadapter_Message.cc \
../../src/throw_pEp_exception.cc \
../../src/basic_api.cc \
../../src/jniutils.cc
-LOCAL_C_INCLUDES += $(GPGBUILD)/include
-LOCAL_C_INCLUDES += $(LIB_PEP_ADAPTER_PATH)/build-android/include $(SRC_PATH)/libpEpAdapter
+LOCAL_C_INCLUDES += $(GPGBUILD)/$(TARGET_ARCH_ABI)/app_opt/include
+LOCAL_C_INCLUDES += $(LIB_PEP_ADAPTER_PATH)/build-android/include $(SRC_PATH)/libpEpAdapter $(SRC_PATH)/test/sequoia/openpgp-ffi/include
+LOCAL_LDFLAGS = -Wl,--allow-multiple-definition
LOCAL_LDLIBS += -llog
+
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := pEpJNIAndroidHelper
-LOCAL_SHARED_LIBRARIES := libgpgme
LOCAL_CFLAGS += -DANDROID_STL=c++_shared
-LOCAL_SRC_FILES := org_pEp_jniadapter_AndroidHelper.cc
+LOCAL_SRC_FILES := foundation_pEp_jniadapter_AndroidHelper.cc
include $(BUILD_SHARED_LIBRARY)
$(call import-add-path,$(SRC_PATH))
@@ -86,3 +71,4 @@ $(call import-module, pEpEngine/build-android/jni/)
$(info $(LOCAL_PATH))
$(call import-module, libpEpAdapter/build-android/jni/)
$(info $(LOCAL_PATH))
+$(call import-module, pEpJNIAdapter/android/external/uuid/jni)
diff --git a/android/jni/Application.mk b/android/jni/Application.mk
index 0e7d1e7..9c1391f 100644
--- a/android/jni/Application.mk
+++ b/android/jni/Application.mk
@@ -1,6 +1,6 @@
APP_STL := c++_shared
-APP_OPTIM := debug
-APP_PLATFORM=android-18
+#APP_OPTIM := debug
+#APP_PLATFORM=android-18
APP_ABI := armeabi-v7a
NDK_TOOLCHAIN_VERSION = clang
APP_UNIFIED_HEADERS=true
diff --git a/android/jni/foundation_pEp_jniadapter_AndroidHelper.cc b/android/jni/foundation_pEp_jniadapter_AndroidHelper.cc
new file mode 100644
index 0000000..bb0d5c7
--- /dev/null
+++ b/android/jni/foundation_pEp_jniadapter_AndroidHelper.cc
@@ -0,0 +1,20 @@
+
+#include "foundation_pEp_jniadapter_AndroidHelper.h"
+
+#include
+
+extern "C" {
+
+JNIEXPORT jint JNICALL Java_foundation_pEp_jniadapter_AndroidHelper_setenv
+ (JNIEnv* env, jclass clazz, jstring key, jstring value, jboolean overwrite)
+{
+ char* k = (char *) env->GetStringUTFChars(key, NULL);
+ char* v = (char *) env->GetStringUTFChars(value, NULL);
+ int err = setenv(k, v, overwrite);
+ env->ReleaseStringUTFChars(key, k);
+ env->ReleaseStringUTFChars(value, v);
+ return err;
+}
+
+} // extern "C"
+
diff --git a/android/jni/org_pEp_jniadapter_AndroidHelper.h b/android/jni/foundation_pEp_jniadapter_AndroidHelper.h
similarity index 86%
rename from android/jni/org_pEp_jniadapter_AndroidHelper.h
rename to android/jni/foundation_pEp_jniadapter_AndroidHelper.h
index 96303d1..2bf43b7 100644
--- a/android/jni/org_pEp_jniadapter_AndroidHelper.h
+++ b/android/jni/foundation_pEp_jniadapter_AndroidHelper.h
@@ -12,7 +12,7 @@ extern "C" {
* Method: setenv
* Signature: (Ljava/lang/String;Ljava/lang/String;Z)I
*/
-JNIEXPORT jint JNICALL Java_org_pEp_jniadapter_AndroidHelper_setenv
+JNIEXPORT jint JNICALL Java_foundation_pEp_jniadapter_AndroidHelper_setenv
(JNIEnv *, jclass, jstring, jstring, jboolean);
#ifdef __cplusplus
diff --git a/android/jni/org_pEp_jniadapter_AndroidHelper.cc b/android/jni/org_pEp_jniadapter_AndroidHelper.cc
deleted file mode 100644
index 28e37c6..0000000
--- a/android/jni/org_pEp_jniadapter_AndroidHelper.cc
+++ /dev/null
@@ -1,34 +0,0 @@
-
-#include "org_pEp_jniadapter_AndroidHelper.h"
-
-#include
-
-#include
-
-extern "C" {
-
-JNIEXPORT jint JNICALL Java_org_pEp_jniadapter_AndroidHelper_setenv
- (JNIEnv* env, jclass clazz, jstring key, jstring value, jboolean overwrite)
-{
- char* k = (char *) env->GetStringUTFChars(key, NULL);
- char* v = (char *) env->GetStringUTFChars(value, NULL);
- int err = setenv(k, v, overwrite);
- env->ReleaseStringUTFChars(key, k);
- env->ReleaseStringUTFChars(value, v);
- return err;
-}
-
-JNIEXPORT jint JNICALL Java_org_pEp_jniadapter_AndroidHelper_nativeSetup
- (JNIEnv* env, jclass clazz, jstring debugflag)
-{
- char* cdebugflag = (char *) env->GetStringUTFChars(debugflag, NULL);
- gpgme_set_global_flag("debug", cdebugflag);
- env->ReleaseStringUTFChars(debugflag, cdebugflag);
- gpgme_set_global_flag ("disable-gpgconf", "");
- gpgme_set_global_flag ("gpg-name", "gpg2");
-
- return 0;
-}
-
-} // extern "C"
-
diff --git a/android/src/org/pEp/jniadapter/AndroidHelper.java b/android/src/foundation/pEp/jniadapter/AndroidHelper.java
similarity index 83%
rename from android/src/org/pEp/jniadapter/AndroidHelper.java
rename to android/src/foundation/pEp/jniadapter/AndroidHelper.java
index d7509eb..e5b7366 100644
--- a/android/src/org/pEp/jniadapter/AndroidHelper.java
+++ b/android/src/foundation/pEp/jniadapter/AndroidHelper.java
@@ -1,4 +1,4 @@
-package org.pEp.jniadapter;
+package foundation.pEp.jniadapter;
import android.content.Context;
import android.content.res.AssetManager;
@@ -18,7 +18,6 @@ public class AndroidHelper {
public static final String TAG = "AndroidHelper";
private static native int setenv(String key, String value, boolean overwrite);
- private static native int nativeSetup(String debugflag);
private static File homeDir;
public static File gnupgHomeDir;
@@ -133,18 +132,42 @@ public class AndroidHelper {
public static void nativeSetup(Context c) {
// pre-load libs for pepengine, as
// android cannot solve lib dependencies on its own
- System.loadLibrary("gpg-error");
- System.loadLibrary("assuan");
- System.loadLibrary("gpgme");
-
- if (BuildConfig.DEBUG) {
- // With lots of log
- nativeSetup("9:" + new File(c.getFilesDir(), "gpgme.log").getAbsolutePath());
- } else {
- // With almost no log
- nativeSetup("0:" + new File(c.getFilesDir(), "gpgme.log").getAbsolutePath());
- }
+ System.loadLibrary("gmp");
+ System.loadLibrary("nettle");
+ System.loadLibrary("hogweed");
+
+ migrateFromGPGToSequoiaIfNeeded(c.getFilesDir());
+
+ }
+ private static void migrateFromGPGToSequoiaIfNeeded(File filesDir) {
+ if (gnupgHomeDir.exists()) {
+ try {
+ RandomAccessFile pubring = new RandomAccessFile(gnupgHomeDir.getAbsolutePath() + "/pubring.gpg", "r");
+ RandomAccessFile secring = new RandomAccessFile((gnupgHomeDir.getAbsolutePath() + "/secring.gpg"), "r");
+
+ byte[] pubringBytes = new byte[(int) pubring.length()];
+ pubring.readFully(pubringBytes);
+ Engine pEpEngine = new Engine();
+ pEpEngine.importKey(pubringBytes);
+
+ byte[] secringBytes = new byte[(int) secring.length()];
+ secring.readFully(secringBytes);
+ pEpEngine.importKey(secringBytes);
+
+
+ //TODO: MARK KEYRING AS IMPORTED
+ boolean renamed = gnupgHomeDir.renameTo(new File(homeDir, ".legacyKeyring"));
+ Log.d("pEp", String.format(".gnupg moved to .legacyKeyring %b", renamed));
+ new File(filesDir, "gpgme.log").delete();
+ } catch (FileNotFoundException ignore) {
+ //No keyring - nothing to do.
+ } catch (IOException exception) {
+ Log.e(TAG, "migrateFromGPGToSequoiaIfNeeded: ", exception);
+ } catch (pEpException exception) {
+ Log.w(TAG, "migrateFromGPGToSequoiaIfNeeded: NOTHING IMPORTED", exception);
+ }
+ }
}
public static void setup(Context c) {
diff --git a/src/foundation/pEp/jniadapter/AbstractEngine.java b/src/foundation/pEp/jniadapter/AbstractEngine.java
index 756fb55..35d8ed6 100644
--- a/src/foundation/pEp/jniadapter/AbstractEngine.java
+++ b/src/foundation/pEp/jniadapter/AbstractEngine.java
@@ -175,7 +175,7 @@ abstract class AbstractEngine implements AutoCloseable {
public int notifyHandshakeCallFromC(_Identity _myself, _Identity _partner, SyncHandshakeSignal _signal) {
Identity myself = new Identity(_myself);
Identity partner = new Identity(_partner);
-
+ System.out.println("pEpSync" +"notifyHandshakeCallFromC: " + notifyHandshakeCallback);
if (notifyHandshakeCallback != null) {
notifyHandshakeCallback.notifyHandshake(myself, partner, _signal);
} else {
@@ -185,6 +185,7 @@ abstract class AbstractEngine implements AutoCloseable {
}
public int messageToSendCallFromC (Message message) {
+ System.out.println("pEpSync" + "messageToSendCallFromC: " + messageToSendCallback );
if (messageToSendCallback != null) {
messageToSendCallback.messageToSend(message);
} else {