aboutsummaryrefslogtreecommitdiff
path: root/java/android/OlmLibSdk/olm-sdk/src/main/jni
diff options
context:
space:
mode:
Diffstat (limited to 'java/android/OlmLibSdk/olm-sdk/src/main/jni')
-rw-r--r--java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_account.cpp101
1 files changed, 51 insertions, 50 deletions
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 121dccd..9c572e5 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
@@ -396,65 +396,66 @@ JNIEXPORT jint OLM_ACCOUNT_FUNC_DEF(markOneTimeKeysAsPublishedJni)(JNIEnv *env,
**/
JNIEXPORT jstring OLM_ACCOUNT_FUNC_DEF(signMessageJni)(JNIEnv *env, jobject thiz, jbyteArray aMessage)
{
- OlmAccount* accountPtr = NULL;
- size_t signatureLength;
- void* signedMsgPtr;
- size_t resultSign;
- jstring signedMsgRetValue = NULL;
+ OlmAccount* accountPtr = NULL;
+ size_t signatureLength;
+ void* signedMsgPtr;
+ size_t resultSign;
+ jstring signedMsgRetValue = NULL;
- if(NULL == aMessage)
- {
- LOGE("## signMessageJni(): failure - invalid aMessage param");
- }
- else if(NULL == (accountPtr = (OlmAccount*)getAccountInstanceId(env,thiz)))
+ if(NULL == aMessage)
+ {
+ LOGE("## signMessageJni(): failure - invalid aMessage param");
+ }
+ else if(NULL == (accountPtr = (OlmAccount*)getAccountInstanceId(env,thiz)))
+ {
+ LOGE("## signMessageJni(): failure - invalid account ptr");
+ }
+ else
+ {
+ int messageLength = env->GetArrayLength(aMessage);
+ jbyte* messageToSign = env->GetByteArrayElements(aMessage, NULL);
+
+ // signature memory allocation
+ signatureLength = olm_account_signature_length(accountPtr);
+
+ if(NULL == (signedMsgPtr = (void*)malloc((signatureLength+1)*sizeof(uint8_t))))
{
- LOGE("## signMessageJni(): failure - invalid account ptr");
+ LOGE("## signMessageJni(): failure - signature allocation OOM");
}
else
{
- 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 - signature allocation OOM");
- }
- 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);
- }
-
- // release messageToSign
- free(messageToSign);
+ // 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);
+ }
+
+ // release messageToSign
+ if (messageToSign)
+ {
+ env->ReleaseByteArrayElements(aMessage, messageToSign, JNI_ABORT);
}
+ }
- return signedMsgRetValue;
+ return signedMsgRetValue;
}
-
-
-
/**
* Serialize and encrypt account instance into a base64 string.<br>
* @param aKey key used to encrypt the serialized account data