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
b893b81c
Commit
b893b81c
authored
Jan 02, 2017
by
ylecollen
Browse files
Simplify signMessageJni
parent
60bcf865
Changes
1
Hide whitespace changes
Inline
Side-by-side
java/android/OlmLibSdk/olm-sdk/src/main/jni/olm_account.cpp
View file @
b893b81c
...
...
@@ -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
...
...
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