signMessage : the utf8 conversion is done on Java side.
This commit is contained in:
parent
e17eb69048
commit
c3eb050be2
3 changed files with 46 additions and 37 deletions
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue