Skip to content

Unofficial Android liboqs library including an example App integrating the liboqs-java classes for android.

License

Notifications You must be signed in to change notification settings

Hatzen/LibOQSTestApp

Repository files navigation

LibOQSTestApp

KemTest on Android x86_64

This is an unofficial test app for https://github.com/open-quantum-safe/liboqs .
This app shows how to use liboqs on android devices. Usually you would use the openssl implementation but for end to end encryption using it locally may be useful.

Project structure

The project is split into

  1. the module which wraps the JNI Interface to use liboqs on android (https://github.com/Hatzen/LibOQSTestApp/tree/master/liboqs-android).
    The package name "com.example.liboqs.*" will change in future and may produce a breaking change.

  2. and an example app (https://github.com/Hatzen/LibOQSTestApp/tree/master/app) showing the usage with a fictional example

Description of sources and modifications

Currently constant copies of https://github.com/open-quantum-safe/liboqs and https://github.com/open-quantum-safe/liboqs-java are used as android needs further configurations to build them for the correct abi.

The prebuild liboqs.so files (https://github.com/Hatzen/LibOQSTestApp/tree/master/app/jni/jniLibs) are generated with https://github.com/open-quantum-safe/liboqs/blob/main/scripts/build-android.sh manually.
There seems to be an issue (or further configuration) with compiling for 32 Bit abis like x86 and arm-7 (#2 and #3). Because of this the local emulator (x86) might not compile as no .so file is provided.

The jni files (https://github.com/Hatzen/LibOQSTestApp/tree/master/app/jni/jni) are slightly modified (package name changes and a minor fix) to compile successfully.
And the way of loading the liboqs.so files had to be changed: https://github.com/Hatzen/LibOQSTestApp/blob/master/liboqs-android/src/main/java/com/example/liboqs/Common.java#L31

OpenSSL:

in some cases it might be a better solution to use the openssl implementation. But using it globally for all applications will require rooting the device and specific configurations.
Using it only for your own android application will require further investigation, but is possible:
https://stackoverflow.com/questions/3046573/how-to-use-openssl-library-in-the-android-application https://proandroiddev.com/tutorial-compile-openssl-to-1-1-1-for-android-application-87137968fee https://stackoverflow.com/a/54053709/8524651 https://wiki.openssl.org/index.php/Android

TODOs

  • Setup CI to use newest versions of jni and liboqs

About

Unofficial Android liboqs library including an example App integrating the liboqs-java classes for android.

Topics

Resources

License

Stars

Watchers

Forks

Languages