- Notifications
You must be signed in to change notification settings - Fork82
(Android) Networking and Cryptography Library (NaCL) JNI binding. JNI is utilized for fastest access to native code. Accessible either in Android or Java application. Uses SWIG to generate Java JNI bindings. SWIG definitions are extensible to other languages.
License
joshjdevl/libsodium-jni
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
This project is entirely maintained in my spare time. Donations are appreciated: 👏
Bitcoin address: 1EC6j1f2sDGy9L8ma8FFfQyxt9mb9a6Xxy
Bitcoin Cash address: 1PSxB3DRCkeaZK7nSbJ1hoxbsWAXwM8Hyx
Ethereum address: 2f30c73e8d643356ebbcfee7013ccd03c05097fb
Peercoin address: PQUavHtRCLtevq75GhLCec41nvDtmM4wvf
Raiblocks address: xrb_1dxetbqeo38gcxejt8n6utajorrntbfrr1qftpw7qwarw6d8kp74fwmcuqi9
Monero address: 48btz6nV4SjWyhDpkXrVVXAtgN6aStdnz8weMyB6qAMhhBVqiy1v3HC6XL1j7K27ZfFRhpw3Y4A4uE8o2PXMxFxY1Q5gGvW
A Java JNI binding (to allow for Java and Android integration) toNetworking and Cryptography library byDaniel J. Bernstein.
Why JNI and not JNA? JNI is much faster than JNA and JNI is faster than JNR.
If you do use this project in your research project, please do cite this repo. Thanks!
Credits to:
- Libsodium: authorFrank Denis andContributors
- Kalium: authorabstractj andContributors
- Robosodium: authorGerardSoleCa
- libstodium: authorArteMisc
- Java package is under
org.libsodium.jni - Maven coordinates are in the Sonatype OSSrepository
<dependency> <groupId>com.github.joshjdevl.libsodiumjni</groupId> <artifactId>libsodium-jni-aar</artifactId> <version>2.0.1</version> <type>aar</type></dependency>- Add library to dependencies:
// build.gradledependencies {... compile'com.github.joshjdevl.libsodiumjni:libsodium-jni-aar:2.0.1'}
- To fix the warningallowBackup, add
xmlns:tools="http://schemas.android.com/tools"andtools:replace="android:allowBackup"to your Manifest:
<!-- AndroidManifest.xml--><?xml version="1.0" encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"package="com.name.myapp"> <application ...tools:replace="android:allowBackup"> <activityandroid:name=".MainActivity"> ... </activity> </application></manifest>
<dependency> <groupId>com.github.joshjdevl.libsodiumjni</groupId> <artifactId>libsodium-jni</artifactId> <version>2.0.1</version> <type>jar</type></dependency>Exampleinvocations
- import org.libsodium.jni.NaCl; (this calls System.loadLibrary("sodiumjni");)
- call NaCl.sodium(). {whatever_method_you_want}
- Note that AndroidallowBackup is set to false. WARNING Your application can override the allow backup, just be sure that there is no sensitive data or secrets that might be backed up. Option can be used with
tools:replace="android:allowBackup"
// MainActivity.ktimportorg.libsodium.jni.SodiumConstantsimportorg.libsodium.jni.crypto.Randomimportorg.libsodium.jni.keys.KeyPairclassMainActivity :AppCompatActivity() {overridefunonCreate(savedInstanceState:Bundle?) {super.onCreate(savedInstanceState) setContentView(R.layout.activity_main)// Test Libsodiumval seed=Random().randomBytes(SodiumConstants.SECRETKEY_BYTES)val encryptionKeyPair=KeyPair(seed)Log.i("PUBLIC KEY:", encryptionKeyPair.publicKey.toString()) }}
Install brew
The docker container is available fromlibsodium-jni which is a Automated Build.
Please refer to thedocker build for the commands used to build.
AVagrantfile is available for those that would like to set up a virtual machine.
Clone the repo and import project from folder example/Sodium in Android studio (Android studio 2.1). Android studio will handle the rest.Compile and run. Tested to emulators down to Android Version 16.
To use the AAR project as is (No .SO file imports needed).
It is also possible to build the AAR library yourself using the provided scriptslinux ormac. After building the library open module settings and add the libsodium-jni-release.aar and/or libsodium-jni-debug.aar as a dependency.
To use the library with your own custom code, skip the aar file and add
- The native .SO libraries in your project (Create jnilibs folder and make the required changes to the gradle file)
- Add the source code from the src folder and add your own additional code.
libsodium-jni is currently being used in production. Feedback, bug reports and patches are always welcome. Everything has been tested and working on ubuntu 12.04 32bit and 64 bit, macos, and Android.
gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 4524D716
SWIG is used to generate the Java JNI bindings. This means that the same interface definition can be used to generate bindings for all languages supported by SWIG. The interface can be foundhere
About
(Android) Networking and Cryptography Library (NaCL) JNI binding. JNI is utilized for fastest access to native code. Accessible either in Android or Java application. Uses SWIG to generate Java JNI bindings. SWIG definitions are extensible to other languages.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.