From 6445ea5f13850f42c3952bd06a2369317683ed88 Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Thu, 8 Jan 2015 13:48:49 -0800 Subject: Break project up into Java and Android build/test. --- android/build.gradle | 96 ++++++++++++++++++++++ .../org/whispersystems/libaxolotl/CurveTest.java | 26 ++++++ android/src/main/AndroidManifest.xml | 3 + .../libaxolotl/util/AndroidAxolotlLogger.java | 24 ++++++ 4 files changed, 149 insertions(+) create mode 100644 android/build.gradle create mode 100644 android/src/androidTest/java/org/whispersystems/libaxolotl/CurveTest.java create mode 100644 android/src/main/AndroidManifest.xml create mode 100644 android/src/main/java/org/whispersystems/libaxolotl/util/AndroidAxolotlLogger.java (limited to 'android') diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 00000000..482532e3 --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,96 @@ +buildscript { + repositories { + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:1.0.0' + } +} + +apply plugin: 'com.android.library' +apply plugin: 'maven' +apply plugin: 'signing' + +archivesBaseName = "axolotl-android" +version = version_number +group = group_info + +android { + compileSdkVersion 21 + buildToolsVersion "21.1.2" + + sourceSets { + androidTest { + java.srcDirs = ['src/androidTest/java', project(':tests').file('src/main/java')] + } + } + + libraryVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = output.outputFile + if (outputFile != null && outputFile.name.endsWith('.aar')) { + def fileName = "${archivesBaseName}-${version}.aar" + output.outputFile = new File(outputFile.parent, fileName) + } + } + } +} + +repositories { + mavenCentral() + mavenLocal() +} + +dependencies { + compile "org.whispersystems:curve25519-android:${curve25519_version}" + compile (project(':java')) { + exclude group: 'org.whispersystems', module: 'curve25519-java' + } +} + +signing { + required { has("release") && gradle.taskGraph.hasTask("uploadArchives") } + sign configurations.archives +} + +uploadArchives { + configuration = configurations.archives + repositories.mavenDeployer { + beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } + + repository(url: sonatypeRepo) { + authentication(userName: whisperSonatypeUsername, password: whisperSonatypePassword) + } + + pom.project { + name 'axolotl-android' + packaging 'aar' + description 'Axolotl library for Android' + url 'https://github.com/WhisperSystems/libaxolotl-android' + + scm { + url 'scm:git@github.com:WhisperSystems/libaxolotl-android.git' + connection 'scm:git@github.com:WhisperSystems/libaxolotl-android.git' + developerConnection 'scm:git@github.com:WhisperSystems/libaxolotl-android.git' + } + + developers { + developer { + name 'Moxie Marlinspike' + } + } + } + } +} + +task installArchives(type: Upload) { + description "Installs the artifacts to the local Maven repository." + configuration = configurations['archives'] + repositories { + mavenDeployer { + repository url: "file://${System.properties['user.home']}/.m2/repository" + } + } +} + diff --git a/android/src/androidTest/java/org/whispersystems/libaxolotl/CurveTest.java b/android/src/androidTest/java/org/whispersystems/libaxolotl/CurveTest.java new file mode 100644 index 00000000..bb539d49 --- /dev/null +++ b/android/src/androidTest/java/org/whispersystems/libaxolotl/CurveTest.java @@ -0,0 +1,26 @@ +package org.whispersystems.libaxolotl; + +import junit.framework.TestCase; + +import org.whispersystems.libaxolotl.ecc.Curve; +import org.whispersystems.libaxolotl.ecc.ECKeyPair; + +public class CurveTest extends TestCase { + + public void testPureJava() { + assertTrue(Curve.isNative()); + } + + public void testSignatureOverflow() throws InvalidKeyException { + ECKeyPair keys = Curve.generateKeyPair(); + byte[] message = new byte[4096]; + + try { + byte[] signature = Curve.calculateSignature(keys.getPrivateKey(), message); + throw new InvalidKeyException("Should have asserted!"); + } catch (AssertionError e) { + // Success! + } + } + +} diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml new file mode 100644 index 00000000..85f0fe6b --- /dev/null +++ b/android/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + + diff --git a/android/src/main/java/org/whispersystems/libaxolotl/util/AndroidAxolotlLogger.java b/android/src/main/java/org/whispersystems/libaxolotl/util/AndroidAxolotlLogger.java new file mode 100644 index 00000000..302c08a4 --- /dev/null +++ b/android/src/main/java/org/whispersystems/libaxolotl/util/AndroidAxolotlLogger.java @@ -0,0 +1,24 @@ +package org.whispersystems.libaxolotl.util; + +import android.util.Log; +import android.util.SparseIntArray; + +import org.whispersystems.libaxolotl.logging.AxolotlLogger; + +public class AndroidAxolotlLogger implements AxolotlLogger { + + private static final SparseIntArray PRIORITY_MAP = new SparseIntArray(5) {{ + put(AxolotlLogger.INFO, Log.INFO); + put(AxolotlLogger.ASSERT, Log.ASSERT); + put(AxolotlLogger.DEBUG, Log.DEBUG); + put(AxolotlLogger.VERBOSE, Log.VERBOSE); + put(AxolotlLogger.WARN, Log.WARN); + + }}; + + @Override + public void log(int priority, String tag, String message) { + int androidPriority = PRIORITY_MAP.get(priority, Log.WARN); + Log.println(androidPriority, tag, message); + } +} -- cgit v1.2.3