aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--java/android/OlmLibSdk/olm-sdk/build.gradle2
-rw-r--r--java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmGroupSessionTest.java8
-rw-r--r--java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmInboundGroupSession.java15
-rw-r--r--java/android/OlmLibSdk/olm-sdk/src/main/jni/Android.mk4
-rw-r--r--java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_inbound_group_session.cpp23
-rw-r--r--java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_inbound_group_session.h2
6 files changed, 43 insertions, 11 deletions
diff --git a/java/android/OlmLibSdk/olm-sdk/build.gradle b/java/android/OlmLibSdk/olm-sdk/build.gradle
index b02ca0c..188acb6 100644
--- a/java/android/OlmLibSdk/olm-sdk/build.gradle
+++ b/java/android/OlmLibSdk/olm-sdk/build.gradle
@@ -11,7 +11,7 @@ android {
targetSdkVersion 21
versionCode 1
versionName "1.0"
- version "0.3.0"
+ version "0.2.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
diff --git a/java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmGroupSessionTest.java b/java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmGroupSessionTest.java
index 6e12463..7e0324b 100644
--- a/java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmGroupSessionTest.java
+++ b/java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmGroupSessionTest.java
@@ -151,8 +151,10 @@ public class OlmGroupSessionTest {
@Test
public void test10InboundDecryptMessage() {
// test decrypted message
- mBobDecryptedMessage = mBobInboundGroupSession.decryptMessage(mAliceToBobMessage);
+ OlmInboundGroupSession.DecryptIndex index = new OlmInboundGroupSession.DecryptIndex();
+ mBobDecryptedMessage = mBobInboundGroupSession.decryptMessage(mAliceToBobMessage, index);
assertFalse(TextUtils.isEmpty(mBobDecryptedMessage));
+ assertTrue(0==index.mIndex);
}
@Test
@@ -435,8 +437,10 @@ public class OlmGroupSessionTest {
assertTrue("Exception in test18TestBadCharacterCrashInDecrypt, Exception code=" + e.getExceptionCode(), false);
}
- String decryptedMessage = bobInboundGroupSession.decryptMessage(msgToDecryptWithEmoji);
+ OlmInboundGroupSession.DecryptIndex index = new OlmInboundGroupSession.DecryptIndex();
+ String decryptedMessage = bobInboundGroupSession.decryptMessage(msgToDecryptWithEmoji, index);
assertNotNull(decryptedMessage);
+ assertTrue(13==index.mIndex);
}
}
diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmInboundGroupSession.java b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmInboundGroupSession.java
index fa4ca1d..664b22e 100644
--- a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmInboundGroupSession.java
+++ b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmInboundGroupSession.java
@@ -45,6 +45,14 @@ public class OlmInboundGroupSession extends CommonSerializeUtils implements Seri
private transient long mNativeId;
/**
+ * Wrapper class to be used in {@link #decryptMessage(String, DecryptIndex)}
+ */
+ static public class DecryptIndex {
+ /** decrypt index **/
+ public long mIndex;
+ }
+
+ /**
* Constructor.<br>
* Create and save a new native session instance ID and start a new inbound group session.
* The session key parameter is retrieved from an outbound group session
@@ -136,13 +144,14 @@ public class OlmInboundGroupSession extends CommonSerializeUtils implements Seri
/**
* Decrypt the message passed in parameter.
* @param aEncryptedMsg the message to be decrypted
+ * @param aDecryptIndex_out decrypted message index
* @return the decrypted message if operation succeed, null otherwise.
*/
- public String decryptMessage(String aEncryptedMsg) {
- String decryptedMessage = decryptMessageJni(aEncryptedMsg, OlmManager.ENABLE_STRING_UTF8_SPECIFIC_CONVERSION);
+ public String decryptMessage(String aEncryptedMsg, DecryptIndex aDecryptIndex_out) {
+ String decryptedMessage = decryptMessageJni(aEncryptedMsg, aDecryptIndex_out, OlmManager.ENABLE_STRING_UTF8_SPECIFIC_CONVERSION);
return decryptedMessage;
}
- private native String decryptMessageJni(String aEncryptedMsg, boolean aIsUtf8ConversionRequired);
+ private native String decryptMessageJni(String aEncryptedMsg, DecryptIndex aDecryptIndex_out, boolean aIsUtf8ConversionRequired);
/**
diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/jni/Android.mk b/java/android/OlmLibSdk/olm-sdk/src/main/jni/Android.mk
index 2d94676..2a7d216 100644
--- a/java/android/OlmLibSdk/olm-sdk/src/main/jni/Android.mk
+++ b/java/android/OlmLibSdk/olm-sdk/src/main/jni/Android.mk
@@ -2,8 +2,8 @@ LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := olm
-MAJOR := 1
-MINOR := 3
+MAJOR := 2
+MINOR := 0
PATCH := 0
OLM_VERSION := $(MAJOR).$(MINOR).$(PATCH)
SRC_ROOT_DIR := ../../../../../../..
diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_inbound_group_session.cpp b/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_inbound_group_session.cpp
index a78c2cf..e450a4c 100644
--- a/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_inbound_group_session.cpp
+++ b/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_inbound_group_session.cpp
@@ -180,13 +180,16 @@ JNIEXPORT jstring OLM_INBOUND_GROUP_SESSION_FUNC_DEF(sessionIdentifierJni)(JNIEn
}
-JNIEXPORT jstring OLM_INBOUND_GROUP_SESSION_FUNC_DEF(decryptMessageJni)(JNIEnv *env, jobject thiz, jstring aEncryptedMsg, jboolean aIsUtf8ConversionRequired)
+JNIEXPORT jstring OLM_INBOUND_GROUP_SESSION_FUNC_DEF(decryptMessageJni)(JNIEnv *env, jobject thiz, jstring aEncryptedMsg, jobject aDecryptIndex, jboolean aIsUtf8ConversionRequired)
{
jstring decryptedMsgRetValue = 0;
OlmInboundGroupSession *sessionPtr = NULL;
const char *encryptedMsgPtr = NULL;
uint8_t *plainTextMsgPtr = NULL;
uint8_t *tempEncryptedPtr = NULL;
+ uint32_t messageIndex = 0;
+ jclass indexObjJClass = 0;
+ jfieldID indexMsgFieldId;
LOGD("## decryptMessageJni(): inbound group session IN");
@@ -198,10 +201,22 @@ JNIEXPORT jstring OLM_INBOUND_GROUP_SESSION_FUNC_DEF(decryptMessageJni)(JNIEnv *
{
LOGE(" ## decryptMessageJni(): failure - invalid encrypted message");
}
+ else if(0 == aDecryptIndex)
+ {
+ LOGE(" ## decryptMessageJni(): failure - invalid index object");
+ }
else if(0 == (encryptedMsgPtr = env->GetStringUTFChars(aEncryptedMsg, 0)))
{
LOGE(" ## decryptMessageJni(): failure - encrypted message JNI allocation OOM");
}
+ else if(0 == (indexObjJClass = env->GetObjectClass(aDecryptIndex)))
+ {
+ LOGE("## decryptMessageJni(): failure - unable to get index class");
+ }
+ else if(0 == (indexMsgFieldId = env->GetFieldID(indexObjJClass,"mIndex","J")))
+ {
+ LOGE("## decryptMessageJni(): failure - unable to get index type field");
+ }
else
{
// get encrypted message length
@@ -238,13 +253,17 @@ JNIEXPORT jstring OLM_INBOUND_GROUP_SESSION_FUNC_DEF(decryptMessageJni)(JNIEnv *
tempEncryptedPtr,
encryptedMsgLength,
plainTextMsgPtr,
- maxPlainTextLength);
+ maxPlainTextLength,
+ &messageIndex);
if(plaintextLength == olm_error())
{
LOGE(" ## decryptMessageJni(): failure - olm_group_decrypt Msg=%s",(const char *)olm_inbound_group_session_last_error(sessionPtr));
}
else
{
+ // update index
+ env->SetLongField(aDecryptIndex, indexMsgFieldId, (jlong)messageIndex);
+
// UTF-8 conversion workaround for issue on Android versions older than Marshmallow (23)
if(aIsUtf8ConversionRequired)
{
diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_inbound_group_session.h b/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_inbound_group_session.h
index ec402fd..7d6fb5e 100644
--- a/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_inbound_group_session.h
+++ b/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_inbound_group_session.h
@@ -33,7 +33,7 @@ JNIEXPORT jlong OLM_INBOUND_GROUP_SESSION_FUNC_DEF(createNewSessionJni)(JNIEnv *
JNIEXPORT jint OLM_INBOUND_GROUP_SESSION_FUNC_DEF(initInboundGroupSessionWithSessionKeyJni)(JNIEnv *env, jobject thiz, jstring aSessionKey);
JNIEXPORT jstring OLM_INBOUND_GROUP_SESSION_FUNC_DEF(sessionIdentifierJni)(JNIEnv *env, jobject thiz);
-JNIEXPORT jstring OLM_INBOUND_GROUP_SESSION_FUNC_DEF(decryptMessageJni)(JNIEnv *env, jobject thiz, jstring aEncryptedMsg, jboolean aIsUtf8ConversionRequired);
+JNIEXPORT jstring OLM_INBOUND_GROUP_SESSION_FUNC_DEF(decryptMessageJni)(JNIEnv *env, jobject thiz, jstring aEncryptedMsg, jobject aDecryptIndex, jboolean aIsUtf8ConversionRequired);
// serialization
JNIEXPORT jstring OLM_INBOUND_GROUP_SESSION_FUNC_DEF(serializeDataWithKeyJni)(JNIEnv *env, jobject thiz, jstring aKey, jobject aErrorMsg);