add Android NDK Sample, update README.md
parent
acc4973a40
commit
2eb80aeeba
|
@ -0,0 +1,6 @@
|
|||
[submodule "android/wolfssljni-ndk-sample/wolfssl"]
|
||||
path = android/wolfssljni-ndk-sample/wolfssl
|
||||
url = https://github.com/wolfSSL/wolfssl.git
|
||||
[submodule "android/wolfssljni-ndk-sample/wolfssljni"]
|
||||
path = android/wolfssljni-ndk-sample/wolfssljni
|
||||
url = https://github.com/wolfSSL/wolfssljni.git
|
52
README.md
52
README.md
|
@ -1,37 +1,45 @@
|
|||
wolfSSL Example Applications
|
||||
============================
|
||||
|
||||
This repository contains example applications, written in C, which
|
||||
demonstrate how to use the wolfSSL lightweight SSL/TLS library for secure
|
||||
This repository contains example applications, written in C, which
|
||||
demonstrate how to use the wolfSSL lightweight SSL/TLS library for secure
|
||||
communication.
|
||||
|
||||
Each directory represents a unique topic (SSL/TLS, DTLS, PSK, etc.) and
|
||||
Each directory represents a unique topic (SSL/TLS, DTLS, PSK, etc.) and
|
||||
contains a Makefile as well as a simple tutorial on the given topic.
|
||||
|
||||
## Current Examples
|
||||
|
||||
#### android (Android NDK Examples)
|
||||
|
||||
This directory contains examples that demonstrate using wolfSSL and wolfSSLJNI
|
||||
on the Android platform, using the Android NDK toolchain.
|
||||
|
||||
Please see the README.md in android/ for further usage and details.
|
||||
|
||||
#### clu (wolfSSL Command Line Utility)
|
||||
|
||||
This is a tool to provide command line access to wolfcrypt cryptographic libraries.
|
||||
wolfSSL command line utility will allow users to encrypt or decrypt a user specified
|
||||
file to any file name and extension.
|
||||
This is a tool to provide command line access to wolfcrypt cryptographic
|
||||
libraries. wolfSSL command line utility will allow users to encrypt or decrypt
|
||||
a user specified file to any file name and extension.
|
||||
|
||||
Please see the README.md in clu/ for further usage and details.
|
||||
|
||||
###### Unique feature to wolfSSL CLU
|
||||
The decision to allow for unique file extensions was prompted by automated tools
|
||||
available for brute forcing files. It will not provide extra security cryptographically
|
||||
however it will force attackers to check the header information on every single brute
|
||||
force attempt. This will provide further frustration and an extra step in any attempt
|
||||
to brute force a file encrypted with our utility.
|
||||
The decision to allow for unique file extensions was prompted by automated
|
||||
tools available for brute forcing files. It will not provide extra security
|
||||
cryptographically however it will force attackers to check the header
|
||||
information on every single brute force attempt. This will provide further
|
||||
frustration and an extra step in any attempt to brute force a file encrypted
|
||||
with our utility.
|
||||
|
||||
#### DTLS (Datagram TLS)
|
||||
|
||||
This directory contains examples of using DTLS, with client and server
|
||||
examples demonstrating UDP, DTLS, non-blocking, session resumption,
|
||||
This directory contains examples of using DTLS, with client and server
|
||||
examples demonstrating UDP, DTLS, non-blocking, session resumption,
|
||||
and multi-threading.
|
||||
|
||||
When compiling wolfSSL for use with these examples, wolfSSL will need to be
|
||||
When compiling wolfSSL for use with these examples, wolfSSL will need to be
|
||||
compiled with DTLS support:
|
||||
|
||||
```
|
||||
|
@ -48,11 +56,11 @@ make
|
|||
|
||||
#### PSK (Pre-Shared Keys)
|
||||
|
||||
This directory contains examples of using PSK, with client and server examples
|
||||
demonstrating TCP/IP, PSK, non-blocking, session resumption, and
|
||||
This directory contains examples of using PSK, with client and server examples
|
||||
demonstrating TCP/IP, PSK, non-blocking, session resumption, and
|
||||
multi-threading.
|
||||
|
||||
When compiling wolfSSL for use with these examples, wolfSSL will need to be
|
||||
When compiling wolfSSL for use with these examples, wolfSSL will need to be
|
||||
compiled with PSK support:
|
||||
|
||||
```
|
||||
|
@ -69,8 +77,8 @@ make
|
|||
|
||||
#### SSL/TLS
|
||||
|
||||
This directory contains examples of using SSL/TLS, with client and server
|
||||
examples demonstrating TCP/IP, SSL/TLS, non-blocking, session resumption, and
|
||||
This directory contains examples of using SSL/TLS, with client and server
|
||||
examples demonstrating TCP/IP, SSL/TLS, non-blocking, session resumption, and
|
||||
multi-threading.
|
||||
|
||||
Examples in this directory may be compiled using:
|
||||
|
@ -82,12 +90,12 @@ make
|
|||
|
||||
## Notes
|
||||
|
||||
When necessary, examples will use the example certificates and keys located
|
||||
in the ./certs directory. These certificates and keys have been pulled in from
|
||||
When necessary, examples will use the example certificates and keys located
|
||||
in the ./certs directory. These certificates and keys have been pulled in from
|
||||
the main wolfSSL repository.
|
||||
|
||||
## Support
|
||||
|
||||
Please contact wolfSSL at support@wolfssl.com with any questions, bug fixes,
|
||||
Please contact wolfSSL at support@wolfssl.com with any questions, bug fixes,
|
||||
or suggested feature additions.
|
||||
|
||||
|
|
|
@ -0,0 +1,104 @@
|
|||
# wolfSSL / wolfSSL JNI Android Examples
|
||||
|
||||
This directory contains:
|
||||
|
||||
wolfssljni-ndk-sample - Example project that demonstrates how to integrate
|
||||
wolfSSL and wolfSSL JNI into an Android NDK application's Android.mk build
|
||||
file.
|
||||
|
||||
## Prerequisites for successful installation
|
||||
|
||||
Prerequisites
|
||||
In order to build the wolfCrypt JNI wrapper and wolfCAVP-Android application,
|
||||
you need to:
|
||||
* Install the `Android SDK` [link](http://developer.android.com/sdk/index.html)
|
||||
* Install the `Android NDK` [link](https://developer.android.com/tools/sdk/ndk/index.html)
|
||||
|
||||
Note that these instructions do not use the Android Studio IDE and environment.
|
||||
This package has been developed and tested using the Android NDK and SDK
|
||||
command line tools.
|
||||
|
||||
After installing the Android SDK, run the `SDK Tools` app packaged with it and
|
||||
install Android 4.4:
|
||||
|
||||
```
|
||||
$ android
|
||||
```
|
||||
|
||||
To set up an emulator and create an "Android Virtual Device (avd)" image, run:
|
||||
|
||||
```
|
||||
$ android avd
|
||||
```
|
||||
|
||||
## Compiling and Running the wolfssljni-ndk-sample
|
||||
|
||||
After the development environment has been set up, follow these instructions
|
||||
to compile and install the wolfCrypt JNI + wolfSSL bundle on
|
||||
the Emulator:
|
||||
|
||||
1) Change directories into the android/wolfssljni-ndk-sample directory
|
||||
2) Checkout wolfssl and wolfssljni git submodules
|
||||
3) Update Android project as shown below
|
||||
4) Proceed to compile NDK and Java code as shown below
|
||||
|
||||
```
|
||||
$ cd android/wolfssljni-ndk-sample
|
||||
$ git submodule init
|
||||
$ git submodule update
|
||||
$ android update project -p . -s
|
||||
$ ndk-build
|
||||
$ ant debug
|
||||
```
|
||||
|
||||
To install and run the application in an Android emulator, start the emulator:
|
||||
|
||||
```
|
||||
$ emulator -avd <target_name>
|
||||
```
|
||||
|
||||
Where you can get a list of targets (including the one you created above),
|
||||
using:
|
||||
|
||||
```
|
||||
$ emulator -list-avds
|
||||
```
|
||||
|
||||
then issue 'ant debug install' from the wolfssljni-ndk-sample directory to
|
||||
install the apk into the emulator:
|
||||
|
||||
```
|
||||
$ ant debug install
|
||||
```
|
||||
|
||||
Logcat output from the emulator can be viewed by opening a new terminal window
|
||||
while the emulator is running and issuing:
|
||||
|
||||
```
|
||||
$ adb logcat
|
||||
```
|
||||
|
||||
### Installing and Running wolfCAVP App on Device instead of Emulator
|
||||
|
||||
Compiling, installing, and running the wolfssljni-ndk-sample application on a
|
||||
real device, versus the Android Emulator is quite easy, and nearly identical
|
||||
to running on the Emulator.
|
||||
|
||||
To compile the application, follow the same steps as shown above.
|
||||
|
||||
After compilation:
|
||||
|
||||
1) Turn on the Android Device
|
||||
|
||||
2) Go to "Settings -> Developer options" and verify that "USB Debugging"
|
||||
is enabled (checked).
|
||||
|
||||
3) Plug Android phone into development computer with USB cable
|
||||
|
||||
4) Once the phone has been plugged into the development machine, the same
|
||||
command line tools can be used to install apps, view the logcat, and
|
||||
pull/push data from/to the device using "adb pull" and "adb push"
|
||||
commands. This means you can follow the same steps to install the app
|
||||
on the phone, as described above for the emulator - using
|
||||
"adb debug install".
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.wolfssl.example"
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0">
|
||||
<uses-sdk android:minSdkVersion="10" />
|
||||
<application android:label="@string/app_name" android:icon="@drawable/icon">
|
||||
<activity android:name="JNITest"
|
||||
android:label="@string/app_name">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
</manifest>
|
|
@ -0,0 +1,18 @@
|
|||
# This file is used to override default values used by the Ant build system.
|
||||
#
|
||||
# This file must be checked into Version Control Systems, as it is
|
||||
# integral to the build system of your project.
|
||||
|
||||
# This file is only used by the Ant script.
|
||||
|
||||
# You can use this to override default values such as
|
||||
# 'source.dir' for the location of your java source folder and
|
||||
# 'out.dir' for the location of your output folder.
|
||||
|
||||
# You can also use it define how the release builds are signed by declaring
|
||||
# the following properties:
|
||||
# 'key.store' for the location of your keystore and
|
||||
# 'key.alias' for the name of the key to use.
|
||||
# The password will be asked during the build when you use the 'release' target.
|
||||
|
||||
source.dir=src;wolfssl-jni-1.1/src/java;
|
|
@ -0,0 +1,99 @@
|
|||
TOP_PATH := $(call my-dir)/..
|
||||
|
||||
# Build wolfSSL shared library
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_PATH := $(TOP_PATH)/wolfssl
|
||||
LOCAL_MODULE := libwolfssl
|
||||
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
|
||||
LOCAL_C_INCLUDES := $(LOCAL_PATH)
|
||||
LOCAL_CFLAGS := -DOPENSSL_EXTRA -DWOLFSSL_DTLS -D_POSIX_THREADS -DNDEBUG \
|
||||
-DPERSIST_SESSION_CACHE -DPERSIST_CERT_CACHE -DATOMIC_USER \
|
||||
-DHAVE_PK_CALLBACKS -DNO_DSA -DHAVE_ECC -DTFM_ECC256 \
|
||||
-DECC_SHAMIR -DNO_PSK -DNO_MD4 -DNO_HC128 -DNO_RABBIT \
|
||||
-DHAVE_OCSP -DHAVE_CRL \
|
||||
-Wall
|
||||
LOCAL_SRC_FILES := src/crl.c \
|
||||
src/internal.c \
|
||||
src/io.c \
|
||||
src/keys.c \
|
||||
src/ocsp.c \
|
||||
src/sniffer.c \
|
||||
src/ssl.c \
|
||||
src/tls.c \
|
||||
wolfcrypt/src/aes.c \
|
||||
wolfcrypt/src/arc4.c \
|
||||
wolfcrypt/src/asm.c \
|
||||
wolfcrypt/src/asn.c \
|
||||
wolfcrypt/src/blake2b.c \
|
||||
wolfcrypt/src/camellia.c \
|
||||
wolfcrypt/src/chacha.c \
|
||||
wolfcrypt/src/chacha20_poly1305.c \
|
||||
wolfcrypt/src/coding.c \
|
||||
wolfcrypt/src/compress.c \
|
||||
wolfcrypt/src/curve25519.c \
|
||||
wolfcrypt/src/des3.c \
|
||||
wolfcrypt/src/dh.c \
|
||||
wolfcrypt/src/dsa.c \
|
||||
wolfcrypt/src/ecc.c \
|
||||
wolfcrypt/src/ecc_fp.c \
|
||||
wolfcrypt/src/ed25519.c \
|
||||
wolfcrypt/src/error.c \
|
||||
wolfcrypt/src/fe_low_mem.c \
|
||||
wolfcrypt/src/fe_operations.c \
|
||||
wolfcrypt/src/ge_low_mem.c \
|
||||
wolfcrypt/src/ge_operations.c \
|
||||
wolfcrypt/src/hash.c \
|
||||
wolfcrypt/src/hc128.c \
|
||||
wolfcrypt/src/hmac.c \
|
||||
wolfcrypt/src/integer.c \
|
||||
wolfcrypt/src/logging.c \
|
||||
wolfcrypt/src/md2.c \
|
||||
wolfcrypt/src/md4.c \
|
||||
wolfcrypt/src/md5.c \
|
||||
wolfcrypt/src/memory.c \
|
||||
wolfcrypt/src/misc.c \
|
||||
wolfcrypt/src/pkcs7.c \
|
||||
wolfcrypt/src/poly1305.c \
|
||||
wolfcrypt/src/pwdbased.c \
|
||||
wolfcrypt/src/rabbit.c \
|
||||
wolfcrypt/src/random.c \
|
||||
wolfcrypt/src/ripemd.c \
|
||||
wolfcrypt/src/rsa.c \
|
||||
wolfcrypt/src/sha.c \
|
||||
wolfcrypt/src/sha256.c \
|
||||
wolfcrypt/src/sha512.c \
|
||||
wolfcrypt/src/tfm.c \
|
||||
wolfcrypt/src/wc_port.c
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
|
||||
|
||||
## Build wolfSSL JNI library
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_PATH := $(TOP_PATH)/wolfssljni
|
||||
LOCAL_MODULE := libwolfssljni
|
||||
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/native
|
||||
LOCAL_C_INCLUDES := $(LOCAL_PATH)/native
|
||||
LOCAL_SRC_FILES := native/com_wolfssl_WolfSSL.c \
|
||||
native/com_wolfssl_WolfSSLContext.c \
|
||||
native/com_wolfssl_WolfSSLSession.c \
|
||||
native/com_wolfssl_wolfcrypt_ECC.c \
|
||||
native/com_wolfssl_wolfcrypt_RSA.c
|
||||
LOCAL_CFLAGS := -DOPENSSL_EXTRA -DWOLFSSL_DTLS -D_POSIX_THREADS -DNDEBUG \
|
||||
-DPERSIST_SESSION_CACHE -DPERSIST_CERT_CACHE -DATOMIC_USER \
|
||||
-DHAVE_PK_CALLBACKS -DNO_DSA -DHAVE_ECC -DTFM_ECC256 \
|
||||
-DECC_SHAMIR -DNO_PSK -DNO_MD4 -DNO_HC128 -DNO_RABBIT \
|
||||
-DHAVE_OCSP -DHAVE_CRL \
|
||||
-Wall -Os
|
||||
LOCAL_SHARED_LIBRARIES := libwolfssl
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_PATH := $(TOP_PATH)/jni
|
||||
LOCAL_MODULE := libjnitest
|
||||
LOCAL_C_INCLUDES := $(LOCAL_PATH)
|
||||
LOCAL_SRC_FILES := jnitest.c
|
||||
LOCAL_CFLAGS := -Wall
|
||||
LOCAL_SHARED_LIBRARIES := libwolfssl
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
/* com_wolfssl_example_JNITest.h
|
||||
*
|
||||
* Copyright (C) 2006-2015 wolfSSL Inc.
|
||||
*
|
||||
* This file is part of wolfSSL. (formerly known as CyaSSL)
|
||||
*
|
||||
* wolfSSL is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* wolfSSL is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_wolfssl_example_JNITest */
|
||||
|
||||
#ifndef _Included_com_wolfssl_example_JNITest
|
||||
#define _Included_com_wolfssl_example_JNITest
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: com_wolfssl_example_JNITest
|
||||
* Method: getJniString
|
||||
* Signature: ()Ljava/lang/String;
|
||||
*/
|
||||
JNIEXPORT jstring JNICALL Java_com_wolfssl_example_JNITest_getJniString
|
||||
(JNIEnv *, jobject);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
|
@ -0,0 +1,30 @@
|
|||
/* jnitest.c
|
||||
*
|
||||
* Copyright (C) 2006-2015 wolfSSL Inc.
|
||||
*
|
||||
* This file is part of wolfSSL. (formerly known as CyaSSL)
|
||||
*
|
||||
* wolfSSL is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* wolfSSL is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include <jni.h>
|
||||
#include <wolfssl/ssl.h>
|
||||
|
||||
JNIEXPORT jstring JNICALL Java_com_wolfssl_example_JNITest_getJniString
|
||||
(JNIEnv* jenv, jobject jobj)
|
||||
{
|
||||
return (*jenv)->NewStringUTF(jenv, "Hello from native JNI");
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
# This file is automatically generated by Android Tools.
|
||||
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
|
||||
#
|
||||
# This file must be checked in Version Control Systems.
|
||||
#
|
||||
# To customize properties used by the Ant build system use,
|
||||
# "build.properties", and override values to adapt the script to your
|
||||
# project structure.
|
||||
|
||||
# Project target.
|
||||
target=android-19
|
||||
|
Binary file not shown.
After Width: | Height: | Size: 4.0 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.5 KiB |
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
>
|
||||
<TextView
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Hello World, JNITest"
|
||||
/>
|
||||
</LinearLayout>
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">JNITest</string>
|
||||
</resources>
|
|
@ -0,0 +1,61 @@
|
|||
/* JNITest.java
|
||||
*
|
||||
* Copyright (C) 2006-2015 wolfSSL Inc.
|
||||
*
|
||||
* This file is part of wolfSSL. (formerly known as CyaSSL)
|
||||
*
|
||||
* wolfSSL is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* wolfSSL is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
package com.wolfssl.example;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.widget.TextView;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.wolfssl.WolfSSL;
|
||||
|
||||
public class JNITest extends Activity
|
||||
{
|
||||
/** Called when the activity is first created. */
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
/* create TextView and set contents */
|
||||
TextView tv = new TextView(this);
|
||||
String jniString = getJniString();
|
||||
tv.setText(jniString);
|
||||
setContentView(tv);
|
||||
|
||||
try {
|
||||
|
||||
/* initialize wolfSSL library, using JNI wrapper */
|
||||
WolfSSL sslLib = new WolfSSL();
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public native String getJniString();
|
||||
|
||||
static {
|
||||
/* these must be loaded in the correct order of dependency */
|
||||
System.loadLibrary("wolfssl");
|
||||
System.loadLibrary("wolfssljni");
|
||||
System.loadLibrary("jnitest");
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
Subproject commit ea7f955bd44a5b607938c3fad095c3e27a853407
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 1cf5e24da2871bf8b4332e1f7f2e634395141f8c
|
Loading…
Reference in New Issue