- Add in/outbound group unit test OK
This commit is contained in:
parent
1028099550
commit
ebfcd03ce5
9 changed files with 199 additions and 314 deletions
|
@ -1,6 +1,7 @@
|
||||||
package org.matrix.olm;
|
package org.matrix.olm;
|
||||||
|
|
||||||
import android.support.test.runner.AndroidJUnit4;
|
import android.support.test.runner.AndroidJUnit4;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
|
@ -10,6 +11,7 @@ import org.junit.runner.RunWith;
|
||||||
import org.junit.runners.MethodSorters;
|
import org.junit.runners.MethodSorters;
|
||||||
|
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
@ -19,6 +21,15 @@ public class OlmGroupTest {
|
||||||
private static final String LOG_TAG = "OlmSessionTest";
|
private static final String LOG_TAG = "OlmSessionTest";
|
||||||
|
|
||||||
private static OlmManager mOlmManager;
|
private static OlmManager mOlmManager;
|
||||||
|
private static OlmOutboundGroupSession mAliceOutboundSession;
|
||||||
|
private static String mAliceSessionIdentifier;
|
||||||
|
private static long mAliceMessageIndex;
|
||||||
|
public static final String CLEAR_MESSAGE1 = "Hello!";
|
||||||
|
private static String mAliceToBobMessage;
|
||||||
|
private static OlmInboundGroupSession mBobInboundSession;
|
||||||
|
private static String mAliceOutboundSessionKey;
|
||||||
|
private static String mBobSessionIdentifier;
|
||||||
|
private static String mBobDecryptedMessage;
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void setUpClass(){
|
public static void setUpClass(){
|
||||||
|
@ -30,66 +41,112 @@ public class OlmGroupTest {
|
||||||
Log.d(LOG_TAG, "## setUpClass(): lib version="+version);
|
Log.d(LOG_TAG, "## setUpClass(): lib version="+version);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test00AliceToBob() {
|
|
||||||
// TBD
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Basic test:
|
* Basic test:
|
||||||
* - alice creates an account
|
|
||||||
* - bob creates an account
|
|
||||||
* - alice creates an outbound group session
|
* - alice creates an outbound group session
|
||||||
* - bob creates an inbound group session with alice's outbound session key
|
* - bob creates an inbound group session with alice's outbound session key
|
||||||
* - alice encrypts a message with its session
|
* - alice encrypts a message with its session
|
||||||
* - bob decrypts the encrypted message with its session
|
* - bob decrypts the encrypted message with its session
|
||||||
|
* - decrypted message is identical to original alice message
|
||||||
*/
|
*/
|
||||||
//@Test
|
@Test
|
||||||
public void test01AliceToBob() {
|
public void test01CreateOutboundSession() {
|
||||||
// creates alice outbound session
|
// alice creates OUTBOUND GROUP SESSION
|
||||||
OlmOutboundGroupSession aliceOutboundSession = new OlmOutboundGroupSession();
|
try {
|
||||||
|
mAliceOutboundSession = new OlmOutboundGroupSession();
|
||||||
|
} catch (OlmException e) {
|
||||||
|
assertTrue("Exception in OlmOutboundGroupSession, Exception code=" + e.getExceptionCode(), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// test accounts creation
|
@Test
|
||||||
String aliceSessionIdentifier = aliceOutboundSession.sessionIdentifier();
|
public void test02GetOutboundGroupSessionIdentifier() {
|
||||||
assertNotNull(aliceSessionIdentifier);
|
// test session ID
|
||||||
assertTrue(aliceSessionIdentifier.length()>0);
|
mAliceSessionIdentifier = mAliceOutboundSession.sessionIdentifier();
|
||||||
|
assertNotNull(mAliceSessionIdentifier);
|
||||||
|
assertTrue(mAliceSessionIdentifier.length() > 0);
|
||||||
|
}
|
||||||
|
|
||||||
String aliceOutboundSessionKey = aliceOutboundSession.sessionKey();
|
@Test
|
||||||
assertNotNull(aliceOutboundSessionKey);
|
public void test03GetOutboundGroupSessionKey() {
|
||||||
assertTrue(aliceOutboundSessionKey.length()>0);
|
// test session Key
|
||||||
|
mAliceOutboundSessionKey = mAliceOutboundSession.sessionKey();
|
||||||
|
assertNotNull(mAliceOutboundSessionKey);
|
||||||
|
assertTrue(mAliceOutboundSessionKey.length() > 0);
|
||||||
|
}
|
||||||
|
|
||||||
long messageIndex = aliceOutboundSession.messageIndex();
|
@Test
|
||||||
assertTrue(0==messageIndex);
|
public void test04GetOutboundGroupMessageIndex() {
|
||||||
|
// test message index before any encryption
|
||||||
|
mAliceMessageIndex = mAliceOutboundSession.messageIndex();
|
||||||
|
assertTrue(0 == mAliceMessageIndex);
|
||||||
|
}
|
||||||
|
|
||||||
String clearMessage = "Hello!";
|
@Test
|
||||||
String encryptedMessage = aliceOutboundSession.encryptMessage(clearMessage);
|
public void test05OutboundGroupEncryptMessage() {
|
||||||
assertNotNull(encryptedMessage);
|
// alice encrypts a message to bob
|
||||||
|
mAliceToBobMessage = mAliceOutboundSession.encryptMessage(CLEAR_MESSAGE1);
|
||||||
|
assertFalse(TextUtils.isEmpty(mAliceToBobMessage));
|
||||||
|
|
||||||
messageIndex = aliceOutboundSession.messageIndex();
|
// test message index after encryption is incremented
|
||||||
assertTrue(1==messageIndex);
|
mAliceMessageIndex = mAliceOutboundSession.messageIndex();
|
||||||
|
assertTrue(1== mAliceMessageIndex);
|
||||||
|
}
|
||||||
|
|
||||||
assertTrue(encryptedMessage.length()>=0);
|
@Test
|
||||||
|
public void test06CreateInboundGroupSession() {
|
||||||
|
// bob creates INBOUND GROUP SESSION with alice outbound key
|
||||||
|
try {
|
||||||
|
mBobInboundSession = new OlmInboundGroupSession(mAliceOutboundSessionKey);
|
||||||
|
} catch (OlmException e) {
|
||||||
|
assertTrue("Exception in bob OlmInboundGroupSession, Exception code=" + e.getExceptionCode(), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
OlmInboundGroupSession bobInboundSession = new OlmInboundGroupSession();
|
@Test
|
||||||
bobInboundSession.initInboundGroupSessionWithSessionKey(aliceOutboundSessionKey);
|
public void test07OutboundGroupSessionIdentifiers() {
|
||||||
// check session identifiers are equals
|
// check session identifiers are equals
|
||||||
aliceSessionIdentifier = aliceOutboundSession.sessionIdentifier();
|
mAliceSessionIdentifier = mAliceOutboundSession.sessionIdentifier();
|
||||||
String bobSessionIdentifier = aliceOutboundSession.sessionIdentifier();
|
assertFalse(TextUtils.isEmpty(mAliceSessionIdentifier));
|
||||||
assertTrue(aliceSessionIdentifier.equals(bobSessionIdentifier ));
|
|
||||||
|
|
||||||
String decryptedMessage = bobInboundSession.decryptMessage(encryptedMessage);
|
|
||||||
assertTrue(decryptedMessage.equals(bobSessionIdentifier ));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//@Test
|
@Test
|
||||||
public void test02InboundGroupSession() {
|
public void test08InboundGroupSessionIdentifiers() {
|
||||||
// creates alice outbound session
|
// check session identifiers are equals
|
||||||
OlmInboundGroupSession aliceInboundSession = new OlmInboundGroupSession();
|
mBobSessionIdentifier = mBobInboundSession.sessionIdentifier();
|
||||||
|
assertFalse(TextUtils.isEmpty(mBobSessionIdentifier));
|
||||||
// test session identifier
|
assertTrue(mAliceSessionIdentifier.equals(mBobSessionIdentifier));
|
||||||
String sessionIdentifier = aliceInboundSession.sessionIdentifier();
|
|
||||||
assertNotNull(sessionIdentifier);
|
|
||||||
assertTrue(sessionIdentifier.length()>0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test09SessionIdentifiersIdentical() {
|
||||||
|
// check session identifiers are equals
|
||||||
|
assertTrue(mAliceSessionIdentifier.equals(mBobSessionIdentifier));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test10InboundDecryptMessage() {
|
||||||
|
// test decrypted message
|
||||||
|
mBobDecryptedMessage = mBobInboundSession.decryptMessage(mAliceToBobMessage);
|
||||||
|
assertFalse(TextUtils.isEmpty(mBobDecryptedMessage));
|
||||||
|
assertTrue(mBobDecryptedMessage.equals(CLEAR_MESSAGE1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test11InboundDecryptedMessageIdentical() {
|
||||||
|
// test decrypted message
|
||||||
|
assertTrue(mBobDecryptedMessage.equals(CLEAR_MESSAGE1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test12ReleaseOutboundSession() {
|
||||||
|
// release group sessions
|
||||||
|
mAliceOutboundSession.releaseSession();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test13ReleaseInboundSession() {
|
||||||
|
// release group sessions
|
||||||
|
mBobInboundSession.releaseSession();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
package org.matrix.olm;
|
package org.matrix.olm;
|
||||||
|
|
||||||
public class OlmUtilsException extends Exception {
|
public class OlmException extends Exception {
|
||||||
// exception codes
|
// exception codes
|
||||||
public static final int EXCEPTION_CODE_INIT_NEW_SESSION_FAILURE = 0;
|
public static final int EXCEPTION_CODE_INIT_NEW_SESSION_FAILURE = 0;
|
||||||
public static final int EXCEPTION_CODE_INIT_OUTBOUND_GROUP_SESSION = 1;
|
public static final int EXCEPTION_CODE_INIT_OUTBOUND_GROUP_SESSION = 1;
|
||||||
|
@ -24,7 +24,7 @@ public class OlmUtilsException extends Exception {
|
||||||
|
|
||||||
private final int mCode;
|
private final int mCode;
|
||||||
|
|
||||||
public OlmUtilsException(int aExceptionCode) {
|
public OlmException(int aExceptionCode) {
|
||||||
super();
|
super();
|
||||||
mCode = aExceptionCode;
|
mCode = aExceptionCode;
|
||||||
}
|
}
|
|
@ -48,16 +48,16 @@ public class OlmInboundGroupSession implements Serializable {
|
||||||
* The session key parameter is retrieved from a outbound group session
|
* The session key parameter is retrieved from a outbound group session
|
||||||
* See {@link #initNewSession()} and {@link #initInboundGroupSessionWithSessionKey(String)}
|
* See {@link #initNewSession()} and {@link #initInboundGroupSessionWithSessionKey(String)}
|
||||||
* @param aSessionKey session key
|
* @param aSessionKey session key
|
||||||
* @throws OlmUtilsException
|
* @throws OlmException
|
||||||
*/
|
*/
|
||||||
public OlmInboundGroupSession(String aSessionKey) throws OlmUtilsException {
|
public OlmInboundGroupSession(String aSessionKey) throws OlmException {
|
||||||
if(initNewSession()) {
|
if(initNewSession()) {
|
||||||
if( 0 != initInboundGroupSessionWithSessionKey(aSessionKey)) {
|
if( 0 != initInboundGroupSessionWithSessionKey(aSessionKey)) {
|
||||||
releaseSession();// prevent memory leak before throwing
|
releaseSession();// prevent memory leak before throwing
|
||||||
throw new OlmUtilsException(OlmUtilsException.EXCEPTION_CODE_INIT_INBOUND_GROUP_SESSION);
|
throw new OlmException(OlmException.EXCEPTION_CODE_INIT_INBOUND_GROUP_SESSION);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new OlmUtilsException(OlmUtilsException.EXCEPTION_CODE_INIT_NEW_SESSION_FAILURE);
|
throw new OlmException(OlmException.EXCEPTION_CODE_INIT_NEW_SESSION_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,6 @@ package org.matrix.olm;
|
||||||
|
|
||||||
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
public class OlmOutboundGroupSession {
|
public class OlmOutboundGroupSession {
|
||||||
private static final String LOG_TAG = "OlmOutboundGroupSession";
|
private static final String LOG_TAG = "OlmOutboundGroupSession";
|
||||||
|
@ -41,16 +40,16 @@ public class OlmOutboundGroupSession {
|
||||||
* Create and save a new session native instance ID and
|
* Create and save a new session native instance ID and
|
||||||
* initialise a new outbound group session.<br>
|
* initialise a new outbound group session.<br>
|
||||||
* See {@link #initNewSession()} and {@link #initOutboundGroupSession()}
|
* See {@link #initNewSession()} and {@link #initOutboundGroupSession()}
|
||||||
* @throws OlmUtilsException
|
* @throws OlmException
|
||||||
*/
|
*/
|
||||||
public OlmOutboundGroupSession() throws OlmUtilsException {
|
public OlmOutboundGroupSession() throws OlmException {
|
||||||
if(initNewSession()) {
|
if(initNewSession()) {
|
||||||
if( 0 != initOutboundGroupSession()) {
|
if( 0 != initOutboundGroupSession()) {
|
||||||
releaseSession();// prevent memory leak before throwing
|
releaseSession();// prevent memory leak before throwing
|
||||||
throw new OlmUtilsException(OlmUtilsException.EXCEPTION_CODE_INIT_OUTBOUND_GROUP_SESSION);
|
throw new OlmException(OlmException.EXCEPTION_CODE_INIT_OUTBOUND_GROUP_SESSION);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new OlmUtilsException(OlmUtilsException.EXCEPTION_CODE_INIT_NEW_SESSION_FAILURE);
|
throw new OlmException(OlmException.EXCEPTION_CODE_INIT_NEW_SESSION_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ JNIEXPORT void OLM_INBOUND_GROUP_SESSION_FUNC_DEF(releaseSessionJni)(JNIEnv *env
|
||||||
{
|
{
|
||||||
OlmInboundGroupSession* sessionPtr = NULL;
|
OlmInboundGroupSession* sessionPtr = NULL;
|
||||||
|
|
||||||
LOGD("## releaseSessionJni(): sessionPtr=%p",sessionPtr);
|
LOGD("## releaseSessionJni(): intbound group session");
|
||||||
|
|
||||||
if(NULL == (sessionPtr = (OlmInboundGroupSession*)getInboundGroupSessionInstanceId(env,thiz)))
|
if(NULL == (sessionPtr = (OlmInboundGroupSession*)getInboundGroupSessionInstanceId(env,thiz)))
|
||||||
{
|
{
|
||||||
|
@ -34,12 +34,14 @@ JNIEXPORT void OLM_INBOUND_GROUP_SESSION_FUNC_DEF(releaseSessionJni)(JNIEnv *env
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
size_t retCode = olm_clear_inbound_group_session(sessionPtr);
|
LOGD(" ## releaseSessionJni(): sessionPtr=%p",sessionPtr);
|
||||||
LOGD("## releaseSessionJni(): clear_inbound_group_session=%lu",retCode);
|
|
||||||
|
|
||||||
LOGD("## releaseSessionJni(): IN");
|
size_t retCode = olm_clear_inbound_group_session(sessionPtr);
|
||||||
|
LOGD(" ## releaseSessionJni(): clear_inbound_group_session=%lu",retCode);
|
||||||
|
|
||||||
|
LOGD(" ## releaseSessionJni(): free IN");
|
||||||
free(sessionPtr);
|
free(sessionPtr);
|
||||||
LOGD("## releaseSessionJni(): OUT");
|
LOGD(" ## releaseSessionJni(): free OUT");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,20 +54,23 @@ JNIEXPORT void OLM_INBOUND_GROUP_SESSION_FUNC_DEF(releaseSessionJni)(JNIEnv *env
|
||||||
JNIEXPORT jlong OLM_INBOUND_GROUP_SESSION_FUNC_DEF(initNewSessionJni)(JNIEnv *env, jobject thiz)
|
JNIEXPORT jlong OLM_INBOUND_GROUP_SESSION_FUNC_DEF(initNewSessionJni)(JNIEnv *env, jobject thiz)
|
||||||
{
|
{
|
||||||
OlmInboundGroupSession* sessionPtr = NULL;
|
OlmInboundGroupSession* sessionPtr = NULL;
|
||||||
size_t sessionSize = olm_inbound_group_session_size();
|
size_t sessionSize = 0;
|
||||||
|
|
||||||
|
LOGD("## initNewSessionJni(): inbound group session IN");
|
||||||
|
sessionSize = olm_inbound_group_session_size();
|
||||||
|
|
||||||
if(0 == sessionSize)
|
if(0 == sessionSize)
|
||||||
{
|
{
|
||||||
LOGE("## initNewSessionJni(): failure - inbound group session size = 0");
|
LOGE(" ## initNewSessionJni(): failure - inbound group session size = 0");
|
||||||
}
|
}
|
||||||
else if(NULL != (sessionPtr=(OlmInboundGroupSession*)malloc(sessionSize)))
|
else if(NULL != (sessionPtr=(OlmInboundGroupSession*)malloc(sessionSize)))
|
||||||
{
|
{
|
||||||
sessionPtr = olm_inbound_group_session(sessionPtr);
|
sessionPtr = olm_inbound_group_session(sessionPtr);
|
||||||
LOGD("## initNewSessionJni(): success - inbound group session size=%lu",sessionSize);
|
LOGD(" ## initNewSessionJni(): success - inbound group session size=%lu",sessionSize);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOGE("## initNewSessionJni(): failure - inbound group session OOM");
|
LOGE(" ## initNewSessionJni(): failure - inbound group session OOM");
|
||||||
}
|
}
|
||||||
|
|
||||||
return (jlong)(intptr_t)sessionPtr;
|
return (jlong)(intptr_t)sessionPtr;
|
||||||
|
@ -83,32 +88,34 @@ JNIEXPORT jint OLM_INBOUND_GROUP_SESSION_FUNC_DEF(initInboundGroupSessionWithSes
|
||||||
const uint8_t *sessionKeyPtr = NULL;
|
const uint8_t *sessionKeyPtr = NULL;
|
||||||
size_t sessionResult;
|
size_t sessionResult;
|
||||||
|
|
||||||
|
LOGD("## initInboundGroupSessionWithSessionKeyJni(): inbound group session IN");
|
||||||
|
|
||||||
if(NULL == (sessionPtr = (OlmInboundGroupSession*)getInboundGroupSessionInstanceId(env,thiz)))
|
if(NULL == (sessionPtr = (OlmInboundGroupSession*)getInboundGroupSessionInstanceId(env,thiz)))
|
||||||
{
|
{
|
||||||
LOGE("## initInboundGroupSessionWithSessionKeyJni(): failure - invalid inbound group session instance");
|
LOGE(" ## initInboundGroupSessionWithSessionKeyJni(): failure - invalid inbound group session instance");
|
||||||
}
|
}
|
||||||
else if(0 == aSessionKey)
|
else if(0 == aSessionKey)
|
||||||
{
|
{
|
||||||
LOGE("## initInboundGroupSessionWithSessionKeyJni(): failure - invalid aSessionKey");
|
LOGE(" ## initInboundGroupSessionWithSessionKeyJni(): failure - invalid aSessionKey");
|
||||||
}
|
}
|
||||||
else if(NULL == (sessionKeyPtr = (const uint8_t *)env->GetStringUTFChars(aSessionKey, 0)))
|
else if(NULL == (sessionKeyPtr = (const uint8_t *)env->GetStringUTFChars(aSessionKey, 0)))
|
||||||
{
|
{
|
||||||
LOGE("## initInboundSessionFromIdKeyJni(): failure - session key JNI allocation OOM");
|
LOGE(" ## initInboundSessionFromIdKeyJni(): failure - session key JNI allocation OOM");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
size_t sessionKeyLength = (size_t)env->GetStringUTFLength(aSessionKey);
|
size_t sessionKeyLength = (size_t)env->GetStringUTFLength(aSessionKey);
|
||||||
LOGD("## initInboundSessionFromIdKeyJni(): sessionKeyLength=%lu",sessionKeyLength);
|
LOGD(" ## initInboundSessionFromIdKeyJni(): sessionKeyLength=%lu",sessionKeyLength);
|
||||||
|
|
||||||
sessionResult = olm_init_inbound_group_session(sessionPtr, sessionKeyPtr, sessionKeyLength);
|
sessionResult = olm_init_inbound_group_session(sessionPtr, sessionKeyPtr, sessionKeyLength);
|
||||||
if(sessionResult == olm_error()) {
|
if(sessionResult == olm_error()) {
|
||||||
const char *errorMsgPtr = olm_inbound_group_session_last_error(sessionPtr);
|
const char *errorMsgPtr = olm_inbound_group_session_last_error(sessionPtr);
|
||||||
LOGE("## initInboundSessionFromIdKeyJni(): failure - init inbound session creation Msg=%s",errorMsgPtr);
|
LOGE(" ## initInboundSessionFromIdKeyJni(): failure - init inbound session creation Msg=%s",errorMsgPtr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
retCode = ERROR_CODE_OK;
|
retCode = ERROR_CODE_OK;
|
||||||
LOGD("## initInboundSessionFromIdKeyJni(): success - result=%lu", sessionResult);
|
LOGD(" ## initInboundSessionFromIdKeyJni(): success - result=%lu", sessionResult);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,17 +142,17 @@ JNIEXPORT jstring OLM_INBOUND_GROUP_SESSION_FUNC_DEF(sessionIdentifierJni)(JNIEn
|
||||||
|
|
||||||
if(NULL == (sessionPtr = (OlmInboundGroupSession*)getInboundGroupSessionInstanceId(env,thiz)))
|
if(NULL == (sessionPtr = (OlmInboundGroupSession*)getInboundGroupSessionInstanceId(env,thiz)))
|
||||||
{
|
{
|
||||||
LOGE("## sessionIdentifierJni(): failure - invalid inbound group session instance");
|
LOGE(" ## sessionIdentifierJni(): failure - invalid inbound group session instance");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// get the size to alloc
|
// get the size to alloc
|
||||||
size_t lengthSessionId = olm_inbound_group_session_id_length(sessionPtr);
|
size_t lengthSessionId = olm_inbound_group_session_id_length(sessionPtr);
|
||||||
LOGD("## sessionIdentifierJni(): inbound group session lengthSessionId=%lu",lengthSessionId);
|
LOGD(" ## sessionIdentifierJni(): inbound group session lengthSessionId=%lu",lengthSessionId);
|
||||||
|
|
||||||
if(NULL == (sessionIdPtr = (uint8_t*)malloc(lengthSessionId*sizeof(uint8_t))))
|
if(NULL == (sessionIdPtr = (uint8_t*)malloc(lengthSessionId*sizeof(uint8_t))))
|
||||||
{
|
{
|
||||||
LOGE("## sessionIdentifierJni(): failure - inbound group session identifier allocation OOM");
|
LOGE(" ## sessionIdentifierJni(): failure - inbound group session identifier allocation OOM");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -153,13 +160,13 @@ JNIEXPORT jstring OLM_INBOUND_GROUP_SESSION_FUNC_DEF(sessionIdentifierJni)(JNIEn
|
||||||
if (result == olm_error())
|
if (result == olm_error())
|
||||||
{
|
{
|
||||||
const char *errorMsgPtr = olm_inbound_group_session_last_error(sessionPtr);
|
const char *errorMsgPtr = olm_inbound_group_session_last_error(sessionPtr);
|
||||||
LOGE("## sessionIdentifierJni(): failure - get inbound group session identifier failure Msg=%s",errorMsgPtr);
|
LOGE(" ## sessionIdentifierJni(): failure - get inbound group session identifier failure Msg=%s",errorMsgPtr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// update length
|
// update length
|
||||||
sessionIdPtr[result] = static_cast<char>('\0');
|
sessionIdPtr[result] = static_cast<char>('\0');
|
||||||
LOGD("## sessionIdentifierJni(): success - inbound group session result=%lu sessionId=%s",result, (char*)sessionIdPtr);
|
LOGD(" ## sessionIdentifierJni(): success - inbound group session result=%lu sessionId=%s",result, (char*)sessionIdPtr);
|
||||||
returnValueStr = env->NewStringUTF((const char*)sessionIdPtr);
|
returnValueStr = env->NewStringUTF((const char*)sessionIdPtr);
|
||||||
}
|
}
|
||||||
free(sessionIdPtr);
|
free(sessionIdPtr);
|
||||||
|
@ -178,19 +185,19 @@ JNIEXPORT jstring OLM_INBOUND_GROUP_SESSION_FUNC_DEF(decryptMessageJni)(JNIEnv *
|
||||||
uint8_t *plainTextMsgPtr = NULL;
|
uint8_t *plainTextMsgPtr = NULL;
|
||||||
uint8_t *tempEncryptedPtr = NULL;
|
uint8_t *tempEncryptedPtr = NULL;
|
||||||
|
|
||||||
LOGD("## decryptMessageJni(): IN");
|
LOGD("## decryptMessageJni(): inbound group session IN");
|
||||||
|
|
||||||
if(NULL == (sessionPtr = (OlmInboundGroupSession*)getInboundGroupSessionInstanceId(env,thiz)))
|
if(NULL == (sessionPtr = (OlmInboundGroupSession*)getInboundGroupSessionInstanceId(env,thiz)))
|
||||||
{
|
{
|
||||||
LOGE("## decryptMessageJni(): failure - invalid inbound group session ptr=NULL");
|
LOGE(" ## decryptMessageJni(): failure - invalid inbound group session ptr=NULL");
|
||||||
}
|
}
|
||||||
else if(0 == aEncryptedMsg)
|
else if(0 == aEncryptedMsg)
|
||||||
{
|
{
|
||||||
LOGE("## decryptMessageJni(): failure - invalid encrypted message");
|
LOGE(" ## decryptMessageJni(): failure - invalid encrypted message");
|
||||||
}
|
}
|
||||||
else if(0 == (encryptedMsgPtr = env->GetStringUTFChars(aEncryptedMsg, 0)))
|
else if(0 == (encryptedMsgPtr = env->GetStringUTFChars(aEncryptedMsg, 0)))
|
||||||
{
|
{
|
||||||
LOGE("## decryptMessageJni(): failure - encrypted message JNI allocation OOM");
|
LOGE(" ## decryptMessageJni(): failure - encrypted message JNI allocation OOM");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -200,12 +207,12 @@ JNIEXPORT jstring OLM_INBOUND_GROUP_SESSION_FUNC_DEF(decryptMessageJni)(JNIEnv *
|
||||||
// create a dedicated temp buffer to be used in next Olm API calls
|
// create a dedicated temp buffer to be used in next Olm API calls
|
||||||
if(NULL == (tempEncryptedPtr = static_cast<uint8_t*>(malloc(encryptedMsgLength*sizeof(uint8_t)))))
|
if(NULL == (tempEncryptedPtr = static_cast<uint8_t*>(malloc(encryptedMsgLength*sizeof(uint8_t)))))
|
||||||
{
|
{
|
||||||
LOGE("## decryptMessageJni(): failure - tempEncryptedPtr allocation OOM");
|
LOGE(" ## decryptMessageJni(): failure - tempEncryptedPtr allocation OOM");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
memcpy(tempEncryptedPtr, encryptedMsgPtr, encryptedMsgLength);
|
memcpy(tempEncryptedPtr, encryptedMsgPtr, encryptedMsgLength);
|
||||||
LOGD("## decryptMessageJni(): encryptedMsgLength=%lu encryptedMsg=%s",encryptedMsgLength,encryptedMsgPtr);
|
LOGD(" ## decryptMessageJni(): encryptedMsgLength=%lu encryptedMsg=%s",encryptedMsgLength,encryptedMsgPtr);
|
||||||
|
|
||||||
// get max plaintext length
|
// get max plaintext length
|
||||||
size_t maxPlainTextLength = olm_group_decrypt_max_plaintext_length(sessionPtr,
|
size_t maxPlainTextLength = olm_group_decrypt_max_plaintext_length(sessionPtr,
|
||||||
|
@ -214,11 +221,11 @@ JNIEXPORT jstring OLM_INBOUND_GROUP_SESSION_FUNC_DEF(decryptMessageJni)(JNIEnv *
|
||||||
if(maxPlainTextLength == olm_error())
|
if(maxPlainTextLength == olm_error())
|
||||||
{
|
{
|
||||||
const char *errorMsgPtr = olm_inbound_group_session_last_error(sessionPtr);
|
const char *errorMsgPtr = olm_inbound_group_session_last_error(sessionPtr);
|
||||||
LOGE("## decryptMessageJni(): failure - olm_group_decrypt_max_plaintext_length Msg=%s",errorMsgPtr);
|
LOGE(" ## decryptMessageJni(): failure - olm_group_decrypt_max_plaintext_length Msg=%s",errorMsgPtr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOGD("## decryptMessageJni(): maxPlaintextLength=%lu",maxPlainTextLength);
|
LOGD(" ## decryptMessageJni(): maxPlaintextLength=%lu",maxPlainTextLength);
|
||||||
|
|
||||||
// allocate output decrypted message
|
// allocate output decrypted message
|
||||||
plainTextMsgPtr = static_cast<uint8_t*>(malloc(maxPlainTextLength*sizeof(uint8_t)));
|
plainTextMsgPtr = static_cast<uint8_t*>(malloc(maxPlainTextLength*sizeof(uint8_t)));
|
||||||
|
@ -233,14 +240,14 @@ JNIEXPORT jstring OLM_INBOUND_GROUP_SESSION_FUNC_DEF(decryptMessageJni)(JNIEnv *
|
||||||
if(plaintextLength == olm_error())
|
if(plaintextLength == olm_error())
|
||||||
{
|
{
|
||||||
const char *errorMsgPtr = olm_inbound_group_session_last_error(sessionPtr);
|
const char *errorMsgPtr = olm_inbound_group_session_last_error(sessionPtr);
|
||||||
LOGE("## decryptMessageJni(): failure - olm_group_decrypt Msg=%s",errorMsgPtr);
|
LOGE(" ## decryptMessageJni(): failure - olm_group_decrypt Msg=%s",errorMsgPtr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// update decrypted buffer size
|
// update decrypted buffer size
|
||||||
plainTextMsgPtr[plaintextLength] = static_cast<char>('\0');
|
plainTextMsgPtr[plaintextLength] = static_cast<char>('\0');
|
||||||
|
|
||||||
LOGD("## decryptMessageJni(): decrypted returnedLg=%lu plainTextMsgPtr=%s",plaintextLength, (char*)plainTextMsgPtr);
|
LOGD(" ## decryptMessageJni(): decrypted returnedLg=%lu plainTextMsgPtr=%s",plaintextLength, (char*)plainTextMsgPtr);
|
||||||
decryptedMsgRetValue = env->NewStringUTF((const char*)plainTextMsgPtr);
|
decryptedMsgRetValue = env->NewStringUTF((const char*)plainTextMsgPtr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,20 +26,22 @@ JNIEXPORT void OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(releaseSessionJni)(JNIEnv *en
|
||||||
{
|
{
|
||||||
OlmOutboundGroupSession* sessionPtr = NULL;
|
OlmOutboundGroupSession* sessionPtr = NULL;
|
||||||
|
|
||||||
LOGD("## releaseSessionJni(): sessionPtr=%p",sessionPtr);
|
LOGD("## releaseSessionJni(): outbound group session");
|
||||||
|
|
||||||
if(NULL == (sessionPtr = (OlmOutboundGroupSession*)getOutboundGroupSessionInstanceId(env,thiz)))
|
if(NULL == (sessionPtr = (OlmOutboundGroupSession*)getOutboundGroupSessionInstanceId(env,thiz)))
|
||||||
{
|
{
|
||||||
LOGE("## releaseSessionJni(): failure - invalid outbound group session instance");
|
LOGE(" ## releaseSessionJni(): failure - invalid outbound group session instance");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
size_t retCode = olm_clear_outbound_group_session(sessionPtr);
|
LOGD(" ## releaseSessionJni(): sessionPtr=%p",sessionPtr);
|
||||||
LOGD("## releaseSessionJni(): clear_outbound_group_session=%lu",retCode);
|
|
||||||
|
|
||||||
LOGD("## releaseSessionJni(): IN");
|
size_t retCode = olm_clear_outbound_group_session(sessionPtr);
|
||||||
|
LOGD(" ## releaseSessionJni(): clear_outbound_group_session=%lu",retCode);
|
||||||
|
|
||||||
|
LOGD(" ## releaseSessionJni(): free IN");
|
||||||
free(sessionPtr);
|
free(sessionPtr);
|
||||||
LOGD("## releaseSessionJni(): OUT");
|
LOGD(" ## releaseSessionJni(): free OUT");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,20 +54,23 @@ JNIEXPORT void OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(releaseSessionJni)(JNIEnv *en
|
||||||
JNIEXPORT jlong OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(initNewSessionJni)(JNIEnv *env, jobject thiz)
|
JNIEXPORT jlong OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(initNewSessionJni)(JNIEnv *env, jobject thiz)
|
||||||
{
|
{
|
||||||
OlmOutboundGroupSession* sessionPtr = NULL;
|
OlmOutboundGroupSession* sessionPtr = NULL;
|
||||||
size_t sessionSize = olm_outbound_group_session_size();
|
size_t sessionSize = 0;
|
||||||
|
|
||||||
|
LOGD("## initNewSessionJni(): outbound group session IN");
|
||||||
|
sessionSize = olm_outbound_group_session_size();
|
||||||
|
|
||||||
if(0 == sessionSize)
|
if(0 == sessionSize)
|
||||||
{
|
{
|
||||||
LOGE("## initNewSessionJni(): failure - outbound group session size = 0");
|
LOGE(" ## initNewSessionJni(): failure - outbound group session size = 0");
|
||||||
}
|
}
|
||||||
else if(NULL != (sessionPtr=(OlmOutboundGroupSession*)malloc(sessionSize)))
|
else if(NULL != (sessionPtr=(OlmOutboundGroupSession*)malloc(sessionSize)))
|
||||||
{
|
{
|
||||||
sessionPtr = olm_outbound_group_session(sessionPtr);
|
sessionPtr = olm_outbound_group_session(sessionPtr);
|
||||||
LOGD("## initNewSessionJni(): success - outbound group session size=%lu",sessionSize);
|
LOGD(" ## initNewSessionJni(): success - outbound group session size=%lu",sessionSize);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOGE("## initNewSessionJni(): failure - outbound group session OOM");
|
LOGE(" ## initNewSessionJni(): failure - outbound group session OOM");
|
||||||
}
|
}
|
||||||
|
|
||||||
return (jlong)(intptr_t)sessionPtr;
|
return (jlong)(intptr_t)sessionPtr;
|
||||||
|
@ -85,33 +90,33 @@ JNIEXPORT jint OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(initOutboundGroupSessionJni)(
|
||||||
|
|
||||||
if(NULL == (sessionPtr = (OlmOutboundGroupSession*)getOutboundGroupSessionInstanceId(env,thiz)))
|
if(NULL == (sessionPtr = (OlmOutboundGroupSession*)getOutboundGroupSessionInstanceId(env,thiz)))
|
||||||
{
|
{
|
||||||
LOGE("## initOutboundGroupSessionJni(): failure - invalid outbound group session instance");
|
LOGE(" ## initOutboundGroupSessionJni(): failure - invalid outbound group session instance");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// compute random buffer
|
// compute random buffer
|
||||||
size_t randomLength = olm_init_outbound_group_session_random_length(sessionPtr);
|
size_t randomLength = olm_init_outbound_group_session_random_length(sessionPtr);
|
||||||
LOGW("## initOutboundGroupSessionJni(): randomLength=%lu",randomLength);
|
LOGW(" ## initOutboundGroupSessionJni(): randomLength=%lu",randomLength);
|
||||||
if((0!=randomLength) && !setRandomInBuffer(&randomBuffPtr, randomLength))
|
if((0!=randomLength) && !setRandomInBuffer(&randomBuffPtr, randomLength))
|
||||||
{
|
{
|
||||||
LOGE("## initOutboundGroupSessionJni(): failure - random buffer init");
|
LOGE(" ## initOutboundGroupSessionJni(): failure - random buffer init");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(0==randomLength)
|
if(0==randomLength)
|
||||||
{
|
{
|
||||||
LOGW("## initOutboundGroupSessionJni(): random buffer is not required");
|
LOGW(" ## initOutboundGroupSessionJni(): random buffer is not required");
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t sessionResult = olm_init_outbound_group_session(sessionPtr, randomBuffPtr, randomLength);
|
size_t sessionResult = olm_init_outbound_group_session(sessionPtr, randomBuffPtr, randomLength);
|
||||||
if(sessionResult == olm_error()) {
|
if(sessionResult == olm_error()) {
|
||||||
const char *errorMsgPtr = olm_outbound_group_session_last_error(sessionPtr);
|
const char *errorMsgPtr = olm_outbound_group_session_last_error(sessionPtr);
|
||||||
LOGE("## initOutboundGroupSessionJni(): failure - init outbound session creation Msg=%s",errorMsgPtr);
|
LOGE(" ## initOutboundGroupSessionJni(): failure - init outbound session creation Msg=%s",errorMsgPtr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
retCode = ERROR_CODE_OK;
|
retCode = ERROR_CODE_OK;
|
||||||
LOGD("## initOutboundGroupSessionJni(): success - result=%lu", sessionResult);
|
LOGD(" ## initOutboundGroupSessionJni(): success - result=%lu", sessionResult);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -137,17 +142,17 @@ JNIEXPORT jstring OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(sessionIdentifierJni)(JNIE
|
||||||
|
|
||||||
if(NULL == (sessionPtr = (OlmOutboundGroupSession*)getOutboundGroupSessionInstanceId(env,thiz)))
|
if(NULL == (sessionPtr = (OlmOutboundGroupSession*)getOutboundGroupSessionInstanceId(env,thiz)))
|
||||||
{
|
{
|
||||||
LOGE("## sessionIdentifierJni(): failure - invalid outbound group session instance");
|
LOGE(" ## sessionIdentifierJni(): failure - invalid outbound group session instance");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// get the size to alloc
|
// get the size to alloc
|
||||||
size_t lengthSessionId = olm_outbound_group_session_id_length(sessionPtr);
|
size_t lengthSessionId = olm_outbound_group_session_id_length(sessionPtr);
|
||||||
LOGD("## sessionIdentifierJni(): outbound group session lengthSessionId=%lu",lengthSessionId);
|
LOGD(" ## sessionIdentifierJni(): outbound group session lengthSessionId=%lu",lengthSessionId);
|
||||||
|
|
||||||
if(NULL == (sessionIdPtr = (uint8_t*)malloc(lengthSessionId*sizeof(uint8_t))))
|
if(NULL == (sessionIdPtr = (uint8_t*)malloc(lengthSessionId*sizeof(uint8_t))))
|
||||||
{
|
{
|
||||||
LOGE("## sessionIdentifierJni(): failure - outbound identifier allocation OOM");
|
LOGE(" ## sessionIdentifierJni(): failure - outbound identifier allocation OOM");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -155,13 +160,13 @@ JNIEXPORT jstring OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(sessionIdentifierJni)(JNIE
|
||||||
if (result == olm_error())
|
if (result == olm_error())
|
||||||
{
|
{
|
||||||
const char *errorMsgPtr = olm_outbound_group_session_last_error(sessionPtr);
|
const char *errorMsgPtr = olm_outbound_group_session_last_error(sessionPtr);
|
||||||
LOGE("## sessionIdentifierJni(): failure - outbound group session identifier failure Msg=%s",errorMsgPtr);
|
LOGE(" ## sessionIdentifierJni(): failure - outbound group session identifier failure Msg=%s",errorMsgPtr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// update length
|
// update length
|
||||||
sessionIdPtr[result] = static_cast<char>('\0');
|
sessionIdPtr[result] = static_cast<char>('\0');
|
||||||
LOGD("## sessionIdentifierJni(): success - outbound group session identifier result=%lu sessionId=%s",result, (char*)sessionIdPtr);
|
LOGD(" ## sessionIdentifierJni(): success - outbound group session identifier result=%lu sessionId=%s",result, (char*)sessionIdPtr);
|
||||||
returnValueStr = env->NewStringUTF((const char*)sessionIdPtr);
|
returnValueStr = env->NewStringUTF((const char*)sessionIdPtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,13 +194,13 @@ JNIEXPORT jint OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(messageIndexJni)(JNIEnv *env,
|
||||||
|
|
||||||
if(NULL == (sessionPtr = (OlmOutboundGroupSession*)getOutboundGroupSessionInstanceId(env,thiz)))
|
if(NULL == (sessionPtr = (OlmOutboundGroupSession*)getOutboundGroupSessionInstanceId(env,thiz)))
|
||||||
{
|
{
|
||||||
LOGE("## messageIndexJni(): failure - invalid outbound group session instance");
|
LOGE(" ## messageIndexJni(): failure - invalid outbound group session instance");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
indexRetValue = static_cast<jint>(olm_outbound_group_session_message_index(sessionPtr));
|
indexRetValue = static_cast<jint>(olm_outbound_group_session_message_index(sessionPtr));
|
||||||
}
|
}
|
||||||
LOGD("## messageIndexJni(): success - index=%d",indexRetValue);
|
LOGD(" ## messageIndexJni(): success - index=%d",indexRetValue);
|
||||||
|
|
||||||
return indexRetValue;
|
return indexRetValue;
|
||||||
}
|
}
|
||||||
|
@ -282,28 +287,28 @@ JNIEXPORT jstring OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(encryptMessageJni)(JNIEnv
|
||||||
size_t encryptedMsgLength = olm_group_encrypt_message_length(sessionPtr,clearMsgLength);
|
size_t encryptedMsgLength = olm_group_encrypt_message_length(sessionPtr,clearMsgLength);
|
||||||
if(NULL == (encryptedMsgPtr = (uint8_t*)malloc(encryptedMsgLength*sizeof(uint8_t))))
|
if(NULL == (encryptedMsgPtr = (uint8_t*)malloc(encryptedMsgLength*sizeof(uint8_t))))
|
||||||
{
|
{
|
||||||
LOGE("## encryptMessageJni(): failure - encryptedMsgPtr buffer OOM");
|
LOGE(" ## encryptMessageJni(): failure - encryptedMsgPtr buffer OOM");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOGD(" ## encryptMessageJni(): estimated encryptedMsgLength=%lu",encryptedMsgLength);
|
LOGD(" ## encryptMessageJni(): estimated encryptedMsgLength=%lu",encryptedMsgLength);
|
||||||
|
|
||||||
size_t decryptedLength = olm_group_encrypt(sessionPtr,
|
size_t encryptedLength = olm_group_encrypt(sessionPtr,
|
||||||
(uint8_t*)clearMsgPtr,
|
(uint8_t*)clearMsgPtr,
|
||||||
clearMsgLength,
|
clearMsgLength,
|
||||||
encryptedMsgPtr,
|
encryptedMsgPtr,
|
||||||
encryptedMsgLength);
|
encryptedMsgLength);
|
||||||
if(decryptedLength == olm_error())
|
if(encryptedLength == olm_error())
|
||||||
{
|
{
|
||||||
const char *errorMsgPtr = olm_outbound_group_session_last_error(sessionPtr);
|
const char *errorMsgPtr = olm_outbound_group_session_last_error(sessionPtr);
|
||||||
LOGE(" ## encryptMessageJni(): failure - olm_group_decrypt Msg=%s",errorMsgPtr);
|
LOGE(" ## encryptMessageJni(): failure - olm_group_encrypt Msg=%s",errorMsgPtr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// update decrypted buffer size
|
// update decrypted buffer size
|
||||||
encryptedMsgPtr[decryptedLength] = static_cast<char>('\0');
|
encryptedMsgPtr[encryptedLength] = static_cast<char>('\0');
|
||||||
|
|
||||||
LOGD(" ## encryptMessageJni(): decrypted returnedLg=%lu plainTextMsgPtr=%s",decryptedLength, (char*)encryptedMsgPtr);
|
LOGD(" ## encryptMessageJni(): encrypted returnedLg=%lu plainTextMsgPtr=%s",encryptedLength, (char*)encryptedMsgPtr);
|
||||||
encryptedMsgRetValue = env->NewStringUTF((const char*)encryptedMsgPtr);
|
encryptedMsgRetValue = env->NewStringUTF((const char*)encryptedMsgPtr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,14 +69,16 @@ JNIEXPORT jlong OLM_SESSION_FUNC_DEF(initNewSessionJni)(JNIEnv *env, jobject thi
|
||||||
{
|
{
|
||||||
OlmSession* sessionPtr = NULL;
|
OlmSession* sessionPtr = NULL;
|
||||||
|
|
||||||
|
LOGD("## initNewSessionJni(): OlmSession IN");
|
||||||
|
|
||||||
// init account memory allocation
|
// init account memory allocation
|
||||||
if(NULL == (sessionPtr = initializeSessionMemory()))
|
if(NULL == (sessionPtr = initializeSessionMemory()))
|
||||||
{
|
{
|
||||||
LOGE("## initNewSessionJni(): failure - init session OOM");
|
LOGE(" ## initNewSessionJni(): failure - init session OOM");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOGD("## initNewSessionJni(): success - OLM session created");
|
LOGD(" ## initNewSessionJni(): success - OLM session created");
|
||||||
}
|
}
|
||||||
|
|
||||||
return (jlong)(intptr_t)sessionPtr;
|
return (jlong)(intptr_t)sessionPtr;
|
||||||
|
|
|
@ -1,6 +1,3 @@
|
||||||
/**
|
|
||||||
* Created by pedrocon on 06/10/2016.
|
|
||||||
*/
|
|
||||||
/*
|
/*
|
||||||
* Copyright 2016 OpenMarket Ltd
|
* Copyright 2016 OpenMarket Ltd
|
||||||
*
|
*
|
||||||
|
@ -21,201 +18,20 @@
|
||||||
#include "olm_utility.h"
|
#include "olm_utility.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Init a buffer with a given number of random values.
|
* Verify an ed25519 signature.
|
||||||
* @param aBuffer2Ptr the buffer to be initialized
|
* If the key was too small then the message will be "OLM.INVALID_BASE64".
|
||||||
* @param aRandomSize the number of random values to apply
|
* If the signature was invalid then the message will be "OLM.BAD_MESSAGE_MAC".
|
||||||
* @return true if operation succeed, false otherwise
|
* @param aKey the ed25519 key.
|
||||||
**/
|
* @param aMessage the message which was signed.
|
||||||
bool setRandomInBuffer(uint8_t **aBuffer2Ptr, size_t aRandomSize)
|
* @param aSignature the base64-encoded signature to be checked.
|
||||||
|
* @param the result error if there is a problem with the verification.
|
||||||
|
* @return true if validation succeed, false otherwise
|
||||||
|
*/
|
||||||
|
JNIEXPORT bool OLM_UTILITY_FUNC_DEF(ed25519VerifyJni)(JNIEnv *env, jobject thiz, jstring aKey, jstring aMessage, jstring aSignature, jobject aErrorMessage)
|
||||||
{
|
{
|
||||||
bool retCode = false;
|
bool retCode = false;
|
||||||
if(NULL == aBuffer2Ptr)
|
|
||||||
{
|
|
||||||
LOGD("## setRandomInBuffer(): failure - aBuffer=NULL");
|
|
||||||
}
|
|
||||||
else if(0 == aRandomSize)
|
|
||||||
{
|
|
||||||
LOGD("## setRandomInBuffer(): failure - random size=0");
|
|
||||||
}
|
|
||||||
else if(NULL == (*aBuffer2Ptr = (uint8_t*)malloc(aRandomSize*sizeof(uint8_t))))
|
|
||||||
{
|
|
||||||
LOGD("## setRandomInBuffer(): failure - alloc mem OOM");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOGD("## setRandomInBuffer(): randomSize=%ld",aRandomSize);
|
|
||||||
|
|
||||||
srand(time(NULL)); // init seed
|
|
||||||
for(size_t i=0;i<aRandomSize;i++)
|
|
||||||
{
|
|
||||||
(*aBuffer2Ptr)[i] = (uint8_t)(rand()%ACCOUNT_CREATION_RANDOM_MODULO);
|
|
||||||
|
|
||||||
// debug purpose
|
|
||||||
//LOGD("## setRandomInBuffer(): randomBuffPtr[%ld]=%d",i, (*aBuffer2Ptr)[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
retCode = true;
|
|
||||||
}
|
|
||||||
return retCode;
|
return retCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read the account instance ID of the calling object.
|
|
||||||
* @param aJniEnv pointer pointing on the JNI function table
|
|
||||||
* @param aJavaObject reference to the object on which the method is invoked
|
|
||||||
* @return the instance ID if operation succeed, -1 if instance ID was not found.
|
|
||||||
**/
|
|
||||||
jlong getAccountInstanceId(JNIEnv* aJniEnv, jobject aJavaObject)
|
|
||||||
{
|
|
||||||
jlong instanceId=-1;
|
|
||||||
jfieldID instanceIdField;
|
|
||||||
jclass loaderClass;
|
|
||||||
|
|
||||||
if(NULL!=aJniEnv)
|
|
||||||
{
|
|
||||||
if(0 != (loaderClass=aJniEnv->GetObjectClass(aJavaObject)))
|
|
||||||
{
|
|
||||||
if(0 != (instanceIdField=aJniEnv->GetFieldID(loaderClass, "mNativeOlmAccountId", "J")))
|
|
||||||
{
|
|
||||||
instanceId = aJniEnv->GetLongField(aJavaObject, instanceIdField);
|
|
||||||
aJniEnv->DeleteLocalRef(loaderClass);
|
|
||||||
LOGD("## getAccountInstanceId(): read from java instanceId=%lld",instanceId);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOGD("## getAccountInstanceId() ERROR! GetFieldID=null");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOGD("## getAccountInstanceId() ERROR! GetObjectClass=null");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOGD("## getAccountInstanceId() ERROR! aJniEnv=NULL");
|
|
||||||
}
|
|
||||||
LOGD("## getAccountInstanceId() success - instanceId=%lld",instanceId);
|
|
||||||
return instanceId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read the session instance ID of the calling object (aJavaObject).<br>
|
|
||||||
* @param aJniEnv pointer pointing on the JNI function table
|
|
||||||
* @param aJavaObject reference to the object on which the method is invoked
|
|
||||||
* @return the instance ID if read succeed, -1 otherwise.
|
|
||||||
**/
|
|
||||||
jlong getSessionInstanceId(JNIEnv* aJniEnv, jobject aJavaObject)
|
|
||||||
{
|
|
||||||
jlong instanceId=-1;
|
|
||||||
jfieldID instanceIdField;
|
|
||||||
jclass loaderClass;
|
|
||||||
|
|
||||||
if(NULL!=aJniEnv)
|
|
||||||
{
|
|
||||||
if(0 != (loaderClass=aJniEnv->GetObjectClass(aJavaObject)))
|
|
||||||
{
|
|
||||||
if(0 != (instanceIdField=aJniEnv->GetFieldID(loaderClass, "mNativeOlmSessionId", "J")))
|
|
||||||
{
|
|
||||||
instanceId = aJniEnv->GetLongField(aJavaObject, instanceIdField);
|
|
||||||
aJniEnv->DeleteLocalRef(loaderClass);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOGD("## getSessionInstanceId() ERROR! GetFieldID=null");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOGD("## getSessionInstanceId() ERROR! GetObjectClass=null");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOGD("## getSessionInstanceId() ERROR! aJniEnv=NULL");
|
|
||||||
}
|
|
||||||
|
|
||||||
//LOGD("## getSessionInstanceId() success - instanceId=%lld",instanceId);
|
|
||||||
return instanceId;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read the inbound group session instance ID of the calling object (aJavaObject).<br>
|
|
||||||
* @param aJniEnv pointer pointing on the JNI function table
|
|
||||||
* @param aJavaObject reference to the object on which the method is invoked
|
|
||||||
* @return the instance ID if read succeed, -1 otherwise.
|
|
||||||
**/
|
|
||||||
jlong getInboundGroupSessionInstanceId(JNIEnv* aJniEnv, jobject aJavaObject)
|
|
||||||
{
|
|
||||||
jlong instanceId=-1;
|
|
||||||
jfieldID instanceIdField;
|
|
||||||
jclass loaderClass;
|
|
||||||
|
|
||||||
if(NULL!=aJniEnv)
|
|
||||||
{
|
|
||||||
if(0 != (loaderClass=aJniEnv->GetObjectClass(aJavaObject)))
|
|
||||||
{
|
|
||||||
if(0 != (instanceIdField=aJniEnv->GetFieldID(loaderClass, "mNativeOlmInboundGroupSessionId", "J")))
|
|
||||||
{
|
|
||||||
instanceId = aJniEnv->GetLongField(aJavaObject, instanceIdField);
|
|
||||||
aJniEnv->DeleteLocalRef(loaderClass);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOGD("## getSessionInstanceId() ERROR! GetFieldID=null");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOGD("## getSessionInstanceId() ERROR! GetObjectClass=null");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOGD("## getSessionInstanceId() ERROR! aJniEnv=NULL");
|
|
||||||
}
|
|
||||||
|
|
||||||
return instanceId;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read the outbound group session instance ID of the calling object (aJavaObject).<br>
|
|
||||||
* @param aJniEnv pointer pointing on the JNI function table
|
|
||||||
* @param aJavaObject reference to the object on which the method is invoked
|
|
||||||
* @return the instance ID if read succeed, -1 otherwise.
|
|
||||||
**/
|
|
||||||
jlong getOutboundGroupSessionInstanceId(JNIEnv* aJniEnv, jobject aJavaObject)
|
|
||||||
{
|
|
||||||
jlong instanceId=-1;
|
|
||||||
jfieldID instanceIdField;
|
|
||||||
jclass loaderClass;
|
|
||||||
|
|
||||||
if(NULL!=aJniEnv)
|
|
||||||
{
|
|
||||||
if(0 != (loaderClass=aJniEnv->GetObjectClass(aJavaObject)))
|
|
||||||
{
|
|
||||||
if(0 != (instanceIdField=aJniEnv->GetFieldID(loaderClass, "mNativeOlmOutboundGroupSessionId", "J")))
|
|
||||||
{
|
|
||||||
instanceId = aJniEnv->GetLongField(aJavaObject, instanceIdField);
|
|
||||||
aJniEnv->DeleteLocalRef(loaderClass);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOGD("## getSessionInstanceId() ERROR! GetFieldID=null");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOGD("## getSessionInstanceId() ERROR! GetObjectClass=null");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOGD("## getSessionInstanceId() ERROR! aJniEnv=NULL");
|
|
||||||
}
|
|
||||||
|
|
||||||
return instanceId;
|
|
||||||
}
|
|
|
@ -17,19 +17,18 @@
|
||||||
#ifndef _OMLUTILITY_H
|
#ifndef _OMLUTILITY_H
|
||||||
#define _OMLUTILITY_H
|
#define _OMLUTILITY_H
|
||||||
|
|
||||||
|
#define OLM_UTILITY_FUNC_DEF(func_name) FUNC_DEF(OlmUtility,func_name)
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool setRandomInBuffer(uint8_t **aBuffer2Ptr, size_t aRandomSize);
|
JNIEXPORT bool OLM_UTILITY_FUNC_DEF(ed25519VerifyJni)(JNIEnv *env, jobject thiz, jstring aKey, jstring aMessage, jstring aSignature, jobject aErrorMessage);
|
||||||
jlong getSessionInstanceId(JNIEnv* aJniEnv, jobject aJavaObject);
|
|
||||||
jlong getAccountInstanceId(JNIEnv* aJniEnv, jobject aJavaObject);
|
|
||||||
jlong getInboundGroupSessionInstanceId(JNIEnv* aJniEnv, jobject aJavaObject);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue