Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
matrix-org
Olm
Commits
45a98c20
Commit
45a98c20
authored
Jan 03, 2017
by
ylecollen
Browse files
EncryptMessage triggers an exception when it fails
parent
9552e14f
Changes
4
Hide whitespace changes
Inline
Side-by-side
java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmGroupSessionTest.java
View file @
45a98c20
...
@@ -113,7 +113,11 @@ public class OlmGroupSessionTest {
...
@@ -113,7 +113,11 @@ public class OlmGroupSessionTest {
@Test
@Test
public
void
test05OutboundGroupEncryptMessage
()
{
public
void
test05OutboundGroupEncryptMessage
()
{
// alice encrypts a message to bob
// alice encrypts a message to bob
mAliceToBobMessage
=
mAliceOutboundGroupSession
.
encryptMessage
(
CLEAR_MESSAGE1
);
try
{
mAliceToBobMessage
=
mAliceOutboundGroupSession
.
encryptMessage
(
CLEAR_MESSAGE1
);
}
catch
(
OlmOutboundGroupSession
.
EncryptMessageException
e
)
{
assertTrue
(
"Exception in bob encryptMessage, Exception code="
+
e
.
getMessage
(),
false
);
}
assertFalse
(
TextUtils
.
isEmpty
(
mAliceToBobMessage
));
assertFalse
(
TextUtils
.
isEmpty
(
mAliceToBobMessage
));
// test message index after encryption is incremented
// test message index after encryption is incremented
...
...
java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmOutboundGroupSession.java
View file @
45a98c20
...
@@ -42,6 +42,15 @@ public class OlmOutboundGroupSession extends CommonSerializeUtils implements Ser
...
@@ -42,6 +42,15 @@ public class OlmOutboundGroupSession extends CommonSerializeUtils implements Ser
*/
*/
private
transient
long
mNativeId
;
private
transient
long
mNativeId
;
/**
* Exception triggered in {@link #encryptMessage(String)}
*/
static
public
class
EncryptMessageException
extends
Exception
{
public
EncryptMessageException
(
String
message
)
{
super
(
message
);
}
}
/**
/**
* Constructor.<br>
* Constructor.<br>
* Create and save a new session native instance ID and
* Create and save a new session native instance ID and
...
@@ -252,22 +261,34 @@ public class OlmOutboundGroupSession extends CommonSerializeUtils implements Ser
...
@@ -252,22 +261,34 @@ public class OlmOutboundGroupSession extends CommonSerializeUtils implements Ser
* Encrypt some plain-text message.<br>
* Encrypt some plain-text message.<br>
* The message given as parameter is encrypted and returned as the return value.
* The message given as parameter is encrypted and returned as the return value.
* @param aClearMsg message to be encrypted
* @param aClearMsg message to be encrypted
* @return the encrypted message if operation succeed, null otherwise
* @return the encrypted message
* @exception EncryptMessageException the encryption failure reason
*/
*/
public
String
encryptMessage
(
String
aClearMsg
)
{
public
String
encryptMessage
(
String
aClearMsg
)
throws
EncryptMessageException
{
String
retValue
=
null
;
String
retValue
=
null
;
if
(!
TextUtils
.
isEmpty
(
aClearMsg
))
{
if
(!
TextUtils
.
isEmpty
(
aClearMsg
))
{
StringBuffer
errorMsg
=
new
StringBuffer
();
try
{
try
{
retValue
=
new
String
(
encryptMessageJni
(
aClearMsg
.
getBytes
(
"UTF-8"
)),
"UTF-8"
);
byte
[]
encryptedBuffer
=
encryptMessageJni
(
aClearMsg
.
getBytes
(
"UTF-8"
),
errorMsg
);
if
(
null
!=
encryptedBuffer
)
{
retValue
=
new
String
(
encryptedBuffer
,
"UTF-8"
);
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
Log
.
e
(
LOG_TAG
,
"## encryptMessage() failed "
+
e
.
getMessage
());
Log
.
e
(
LOG_TAG
,
"## encryptMessage() failed "
+
e
.
getMessage
());
errorMsg
.
append
(
e
.
getMessage
());
}
if
(
0
!=
errorMsg
.
length
())
{
throw
new
EncryptMessageException
(
errorMsg
.
toString
());
}
}
}
}
return
retValue
;
return
retValue
;
}
}
private
native
byte
[]
encryptMessageJni
(
byte
[]
aClearMsgBuffer
);
private
native
byte
[]
encryptMessageJni
(
byte
[]
aClearMsgBuffer
,
StringBuffer
aErrorMsg
);
/**
/**
* Return true the object resources have been released.<br>
* Return true the object resources have been released.<br>
...
...
java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_outbound_group_session.cpp
View file @
45a98c20
...
@@ -268,7 +268,7 @@ JNIEXPORT jbyteArray OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(sessionKeyJni)(JNIEnv *
...
@@ -268,7 +268,7 @@ JNIEXPORT jbyteArray OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(sessionKeyJni)(JNIEnv *
return
returnValue
;
return
returnValue
;
}
}
JNIEXPORT
jbyteArray
OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF
(
encryptMessageJni
)(
JNIEnv
*
env
,
jobject
thiz
,
jbyteArray
aClearMsgBuffer
)
JNIEXPORT
jbyteArray
OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF
(
encryptMessageJni
)(
JNIEnv
*
env
,
jobject
thiz
,
jbyteArray
aClearMsgBuffer
,
jobject
aErrorMsg
)
{
{
LOGD
(
"## encryptMessageJni(): IN"
);
LOGD
(
"## encryptMessageJni(): IN"
);
...
@@ -277,10 +277,17 @@ JNIEXPORT jbyteArray OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(encryptMessageJni)(JNIE
...
@@ -277,10 +277,17 @@ JNIEXPORT jbyteArray OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(encryptMessageJni)(JNIE
OlmOutboundGroupSession
*
sessionPtr
=
NULL
;
OlmOutboundGroupSession
*
sessionPtr
=
NULL
;
jbyte
*
clearMsgPtr
=
NULL
;
jbyte
*
clearMsgPtr
=
NULL
;
jclass
errorMsgJClass
=
0
;
jmethodID
errorMsgMethodId
=
0
;
if
(
!
(
sessionPtr
=
(
OlmOutboundGroupSession
*
)
getOutboundGroupSessionInstanceId
(
env
,
thiz
)))
if
(
!
(
sessionPtr
=
(
OlmOutboundGroupSession
*
)
getOutboundGroupSessionInstanceId
(
env
,
thiz
)))
{
{
LOGE
(
" ## encryptMessageJni(): failure - invalid outbound group session ptr=NULL"
);
LOGE
(
" ## encryptMessageJni(): failure - invalid outbound group session ptr=NULL"
);
}
}
else
if
(
!
aErrorMsg
)
{
LOGE
(
" ## encryptMessageJni(): failure - invalid error output"
);
}
else
if
(
!
aClearMsgBuffer
)
else
if
(
!
aClearMsgBuffer
)
{
{
LOGE
(
" ## encryptMessageJni(): failure - invalid clear message"
);
LOGE
(
" ## encryptMessageJni(): failure - invalid clear message"
);
...
@@ -289,6 +296,14 @@ JNIEXPORT jbyteArray OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(encryptMessageJni)(JNIE
...
@@ -289,6 +296,14 @@ JNIEXPORT jbyteArray OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(encryptMessageJni)(JNIE
{
{
LOGE
(
" ## encryptMessageJni(): failure - clear message JNI allocation OOM"
);
LOGE
(
" ## encryptMessageJni(): failure - clear message JNI allocation OOM"
);
}
}
else
if
(
!
(
errorMsgJClass
=
env
->
GetObjectClass
(
aErrorMsg
)))
{
LOGE
(
" ## encryptMessageJni(): failure - unable to get error class"
);
}
else
if
(
!
(
errorMsgMethodId
=
env
->
GetMethodID
(
errorMsgJClass
,
"append"
,
"(Ljava/lang/String;)Ljava/lang/StringBuffer;"
)))
{
LOGE
(
" ## encryptMessageJni(): failure - unable to get error method ID"
);
}
else
else
{
{
// get clear message length
// get clear message length
...
@@ -312,9 +327,19 @@ JNIEXPORT jbyteArray OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(encryptMessageJni)(JNIE
...
@@ -312,9 +327,19 @@ JNIEXPORT jbyteArray OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(encryptMessageJni)(JNIE
clearMsgLength
,
clearMsgLength
,
encryptedMsgPtr
,
encryptedMsgPtr
,
encryptedMsgLength
);
encryptedMsgLength
);
if
(
encryptedLength
==
olm_error
())
if
(
encryptedLength
==
olm_error
())
{
{
LOGE
(
" ## encryptMessageJni(): failure - olm_group_encrypt Msg=%s"
,(
const
char
*
)
olm_outbound_group_session_last_error
(
sessionPtr
));
const
char
*
errorMsgPtr
=
olm_outbound_group_session_last_error
(
sessionPtr
);
LOGE
(
" ## encryptMessageJni(): failure - olm_group_decrypt_max_plaintext_length Msg=%s"
,
errorMsgPtr
);
jstring
errorJstring
=
env
->
NewStringUTF
(
errorMsgPtr
);
if
(
errorJstring
)
{
env
->
CallObjectMethod
(
aErrorMsg
,
errorMsgMethodId
,
errorJstring
);
}
}
}
else
else
{
{
...
@@ -329,7 +354,7 @@ JNIEXPORT jbyteArray OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(encryptMessageJni)(JNIE
...
@@ -329,7 +354,7 @@ JNIEXPORT jbyteArray OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(encryptMessageJni)(JNIE
free
(
encryptedMsgPtr
);
free
(
encryptedMsgPtr
);
}
}
}
}
// free alloc
// free alloc
if
(
clearMsgPtr
)
if
(
clearMsgPtr
)
...
...
java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_outbound_group_session.h
View file @
45a98c20
...
@@ -37,7 +37,7 @@ JNIEXPORT jbyteArray OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(sessionIdentifierJni)(J
...
@@ -37,7 +37,7 @@ JNIEXPORT jbyteArray OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF(sessionIdentifierJni)(J
JNIEXPORT
jint
OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF
(
messageIndexJni
)(
JNIEnv
*
env
,
jobject
thiz
);
JNIEXPORT
jint
OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF
(
messageIndexJni
)(
JNIEnv
*
env
,
jobject
thiz
);
JNIEXPORT
jbyteArray
OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF
(
sessionKeyJni
)(
JNIEnv
*
env
,
jobject
thiz
);
JNIEXPORT
jbyteArray
OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF
(
sessionKeyJni
)(
JNIEnv
*
env
,
jobject
thiz
);
JNIEXPORT
jbyteArray
OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF
(
encryptMessageJni
)(
JNIEnv
*
env
,
jobject
thiz
,
jbyteArray
aClearMsgBuffer
);
JNIEXPORT
jbyteArray
OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF
(
encryptMessageJni
)(
JNIEnv
*
env
,
jobject
thiz
,
jbyteArray
aClearMsgBuffer
,
jobject
aErrorMsg
);
// serialization
// serialization
JNIEXPORT
jstring
OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF
(
serializeDataWithKeyJni
)(
JNIEnv
*
env
,
jobject
thiz
,
jbyteArray
aKey
,
jobject
aErrorMsg
);
JNIEXPORT
jstring
OLM_OUTBOUND_GROUP_SESSION_FUNC_DEF
(
serializeDataWithKeyJni
)(
JNIEnv
*
env
,
jobject
thiz
,
jbyteArray
aKey
,
jobject
aErrorMsg
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment