aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorylecollen <ylecollen@amdocs.com>2016-12-21 18:37:34 +0100
committerylecollen <ylecollen@amdocs.com>2016-12-21 18:37:34 +0100
commitc3eb050be23b1c17897a0899016f152e669bbda4 (patch)
treec2cd7d2d366e46a7109b981e5ad94f16f3982b59
parente17eb690487e9cf0062a9da3a91afeae80bc43eb (diff)
signMessage : the utf8 conversion is done on Java side.
-rw-r--r--java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmAccount.java20
-rw-r--r--java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_account.cpp61
-rw-r--r--java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_account.h2
3 files changed, 46 insertions, 37 deletions
diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmAccount.java b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmAccount.java
index 82533c2..984ef57 100644
--- a/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmAccount.java
+++ b/java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmAccount.java
@@ -383,9 +383,25 @@ public class OlmAccount extends CommonSerializeUtils implements Serializable {
* @return the signed message if operation succeed, null otherwise
*/
public String signMessage(String aMessage) {
- return signMessageJni(aMessage);
+ if (null == aMessage) {
+ return null;
+ }
+
+ byte[] utf8String = null;
+
+ try {
+ utf8String = aMessage.getBytes("UTF-8");
+ } catch (Exception e) {
+ Log.d(LOG_TAG,"## signMessage(): failed ="+e.getMessage());
+ }
+
+ if (null == utf8String) {
+ return null;
+ }
+
+ return signMessageJni(utf8String);
}
- private native String signMessageJni(String aMessage);
+ private native String signMessageJni(byte[] aMessage);
/**
* Return the number of unreleased OlmAccount instances.<br>
diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_account.cpp b/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_account.cpp
index 5d79ecb..6fc1227 100644
--- a/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_account.cpp
+++ b/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_account.cpp
@@ -393,7 +393,7 @@ JNIEXPORT jint OLM_ACCOUNT_FUNC_DEF(markOneTimeKeysAsPublishedJni)(JNIEnv *env,
* @param aMessage message to sign
* @return the signed message, null otherwise
**/
-JNIEXPORT jstring OLM_ACCOUNT_FUNC_DEF(signMessageJni)(JNIEnv *env, jobject thiz, jstring aMessage)
+JNIEXPORT jstring OLM_ACCOUNT_FUNC_DEF(signMessageJni)(JNIEnv *env, jobject thiz, jbyteArray aMessage)
{
OlmAccount* accountPtr = NULL;
size_t signatureLength;
@@ -411,48 +411,41 @@ JNIEXPORT jstring OLM_ACCOUNT_FUNC_DEF(signMessageJni)(JNIEnv *env, jobject thiz
}
else
{
- // convert message from JAVA to C string
- const char* messageToSign = env->GetStringUTFChars(aMessage, 0);
- if(NULL == messageToSign)
+ int messageLength = env->GetArrayLength(aMessage);
+ unsigned char* messageToSign = new unsigned char[messageLength];
+ env->GetByteArrayRegion(aMessage, 0, messageLength, reinterpret_cast<jbyte*>(messageToSign));
+
+ // signature memory allocation
+ signatureLength = olm_account_signature_length(accountPtr);
+ if(NULL == (signedMsgPtr = (void*)malloc((signatureLength+1)*sizeof(uint8_t))))
{
- LOGE("## signMessageJni(): failure - message JNI allocation OOM");
+ LOGE("## signMessageJni(): failure - signature allocation OOM");
}
else
- {
- int messageLength = env->GetStringUTFLength(aMessage);
-
- // signature memory allocation
- signatureLength = olm_account_signature_length(accountPtr);
- if(NULL == (signedMsgPtr = (void*)malloc((signatureLength+1)*sizeof(uint8_t))))
+ { // sign message
+ resultSign = olm_account_sign(accountPtr,
+ (void*)messageToSign,
+ (size_t)messageLength,
+ signedMsgPtr,
+ signatureLength);
+ if(resultSign == olm_error())
{
- LOGE("## signMessageJni(): failure - signature allocation OOM");
+ LOGE("## signMessageJni(): failure - error signing message Msg=%s",(const char *)olm_account_last_error(accountPtr));
}
else
- { // sign message
- resultSign = olm_account_sign(accountPtr,
- (void*)messageToSign,
- (size_t)messageLength,
- signedMsgPtr,
- signatureLength);
- if(resultSign == olm_error())
- {
- LOGE("## signMessageJni(): failure - error signing message Msg=%s",(const char *)olm_account_last_error(accountPtr));
- }
- else
- {
- // info: signatureLength is always equal to resultSign
- (static_cast<char*>(signedMsgPtr))[signatureLength] = static_cast<char>('\0');
- // convert to jstring
- signedMsgRetValue = env->NewStringUTF((const char*)signedMsgPtr); // UTF8
- LOGD("## signMessageJni(): success - retCode=%lu signatureLength=%lu", static_cast<long unsigned int>(resultSign), static_cast<long unsigned int>(signatureLength));
- }
-
- free(signedMsgPtr);
+ {
+ // info: signatureLength is always equal to resultSign
+ (static_cast<char*>(signedMsgPtr))[signatureLength] = static_cast<char>('\0');
+ // convert to jstring
+ signedMsgRetValue = env->NewStringUTF((const char*)signedMsgPtr); // UTF8
+ LOGD("## signMessageJni(): success - retCode=%lu signatureLength=%lu", static_cast<long unsigned int>(resultSign), static_cast<long unsigned int>(signatureLength));
}
- // release messageToSign
- env->ReleaseStringUTFChars(aMessage, messageToSign);
+ free(signedMsgPtr);
}
+
+ // release messageToSign
+ free(messageToSign);
}
return signedMsgRetValue;
diff --git a/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_account.h b/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_account.h
index d57c7d9..04f3718 100644
--- a/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_account.h
+++ b/java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_account.h
@@ -43,7 +43,7 @@ JNIEXPORT jint OLM_ACCOUNT_FUNC_DEF(removeOneTimeKeysForSessionJni)(JNIEnv *env,
JNIEXPORT jint OLM_ACCOUNT_FUNC_DEF(markOneTimeKeysAsPublishedJni)(JNIEnv *env, jobject thiz);
// signing
-JNIEXPORT jstring OLM_ACCOUNT_FUNC_DEF(signMessageJni)(JNIEnv *env, jobject thiz, jstring aMessage);
+JNIEXPORT jstring OLM_ACCOUNT_FUNC_DEF(signMessageJni)(JNIEnv *env, jobject thiz, jbyteArray aMessage);
// serialization
JNIEXPORT jstring OLM_ACCOUNT_FUNC_DEF(serializeDataWithKeyJni)(JNIEnv *env, jobject thiz, jstring aKey, jobject aErrorMsg);