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
16a28f29
Commit
16a28f29
authored
Apr 04, 2019
by
Valere
Browse files
Added macLongKdf support
parent
c9369a43
Changes
4
Hide whitespace changes
Inline
Side-by-side
android/olm-sdk/src/androidTest/java/org/matrix/olm/OlmSasTest.java
View file @
16a28f29
...
...
@@ -83,6 +83,17 @@ public class OlmSasTest {
Log
.
e
(
OlmSasTest
.
class
.
getSimpleName
(),
"#### Bob Mac is "
+
new
String
(
bobMac
,
"UTF-8"
));
byte
[]
aliceLongKdfMac
=
aliceSas
.
calculateMacLongKdf
(
"Hello world!"
,
"SAS"
);
byte
[]
bobLongKdfMac
=
bobSas
.
calculateMacLongKdf
(
"Hello world!"
,
"SAS"
);
assertTrue
(
aliceLongKdfMac
.
length
>
0
&&
bobLongKdfMac
.
length
>
0
);
assertEquals
(
aliceLongKdfMac
.
length
,
bobLongKdfMac
.
length
);
assertArrayEquals
(
aliceLongKdfMac
,
bobLongKdfMac
);
Log
.
e
(
OlmSasTest
.
class
.
getSimpleName
(),
"#### Alice lkdf Mac is "
+
new
String
(
aliceLongKdfMac
,
"UTF-8"
));
Log
.
e
(
OlmSasTest
.
class
.
getSimpleName
(),
"#### Bob lkdf Mac is "
+
new
String
(
bobLongKdfMac
,
"UTF-8"
));
}
catch
(
Exception
e
)
{
assertTrue
(
"OlmSas init failed "
+
e
.
getMessage
(),
false
);
e
.
printStackTrace
();
...
...
android/olm-sdk/src/main/java/org/matrix/olm/OlmSAS.java
View file @
16a28f29
...
...
@@ -103,6 +103,14 @@ public class OlmSAS {
}
}
public
byte
[]
calculateMacLongKdf
(
String
message
,
String
info
)
throws
OlmException
{
try
{
return
calculateMacLongKdfJni
(
message
.
getBytes
(
"UTF-8"
),
info
.
getBytes
(
"UTF-8"
));
}
catch
(
UnsupportedEncodingException
e
)
{
throw
new
OlmException
(
OlmException
.
EXCEPTION_CODE_SAS_ERROR
,
e
.
getMessage
());
}
}
/**
* Create an OLM session in native side.<br>
* Do not forget to call {@link #releaseSASJni()} when JAVA side is done.
...
...
@@ -127,6 +135,8 @@ public class OlmSAS {
private
native
byte
[]
calculateMacJni
(
byte
[]
message
,
byte
[]
info
);
private
native
byte
[]
calculateMacLongKdfJni
(
byte
[]
message
,
byte
[]
info
);
/**
* Release native session and invalid its JAVA reference counter part.<br>
* Public API for {@link #releaseSASJni()}.
...
...
android/olm-sdk/src/main/jni/olm_sas.cpp
View file @
16a28f29
...
...
@@ -306,5 +306,85 @@ JNIEXPORT jbyteArray OLM_SAS_FUNC_DEF(calculateMacJni)(JNIEnv *env, jobject thiz
env
->
ThrowNew
(
env
->
FindClass
(
"java/lang/Exception"
),
errorMessage
);
}
return
returnValue
;
}
JNIEXPORT
jbyteArray
OLM_SAS_FUNC_DEF
(
calculateMacLongKdfJni
)(
JNIEnv
*
env
,
jobject
thiz
,
jbyteArray
messageBuffer
,
jbyteArray
infoBuffer
)
{
LOGD
(
"## calculateMacLongKdfJni(): IN"
);
const
char
*
errorMessage
=
NULL
;
jbyteArray
returnValue
=
0
;
OlmSAS
*
sasPtr
=
getOlmSasInstanceId
(
env
,
thiz
);
jbyte
*
messagePtr
=
NULL
;
jboolean
messageWasCopied
=
JNI_FALSE
;
jbyte
*
infoPtr
=
NULL
;
jboolean
infoWasCopied
=
JNI_FALSE
;
if
(
!
sasPtr
)
{
LOGE
(
"## calculateMacLongKdfJni(): failure - invalid SAS ptr=NULL"
);
errorMessage
=
"invalid SAS ptr=NULL"
;
}
else
if
(
!
messageBuffer
)
{
LOGE
(
"## calculateMacLongKdfJni(): failure - invalid message"
);
errorMessage
=
"invalid info"
;
}
else
if
(
!
(
messagePtr
=
env
->
GetByteArrayElements
(
messageBuffer
,
&
messageWasCopied
)))
{
LOGE
(
" ## calculateMacLongKdfJni(): failure - message JNI allocation OOM"
);
errorMessage
=
"message JNI allocation OOM"
;
}
else
if
(
!
(
infoPtr
=
env
->
GetByteArrayElements
(
infoBuffer
,
&
infoWasCopied
)))
{
LOGE
(
" ## calculateMacLongKdfJni(): failure - info JNI allocation OOM"
);
errorMessage
=
"info JNI allocation OOM"
;
}
else
{
size_t
infoLength
=
(
size_t
)
env
->
GetArrayLength
(
infoBuffer
);
size_t
messageLength
=
(
size_t
)
env
->
GetArrayLength
(
messageBuffer
);
size_t
macLength
=
olm_sas_mac_length
(
sasPtr
);
void
*
macPtr
=
malloc
(
macLength
*
sizeof
(
uint8_t
));
size_t
result
=
olm_sas_calculate_mac_long_kdf
(
sasPtr
,
messagePtr
,
messageLength
,
infoPtr
,
infoLength
,
macPtr
,
macLength
);
if
(
result
==
olm_error
())
{
errorMessage
=
(
const
char
*
)
olm_sas_last_error
(
sasPtr
);
LOGE
(
"## calculateMacLongKdfJni(): failure - error calculating SAS mac Msg=%s"
,
errorMessage
);
}
else
{
returnValue
=
env
->
NewByteArray
(
macLength
);
env
->
SetByteArrayRegion
(
returnValue
,
0
,
macLength
,
(
jbyte
*
)
macPtr
);
}
if
(
macPtr
)
{
free
(
macPtr
);
}
}
// free alloc
if
(
infoPtr
)
{
if
(
infoWasCopied
)
{
memset
(
infoPtr
,
0
,
(
size_t
)
env
->
GetArrayLength
(
infoBuffer
));
}
env
->
ReleaseByteArrayElements
(
infoBuffer
,
infoPtr
,
JNI_ABORT
);
}
if
(
messagePtr
)
{
if
(
messageWasCopied
)
{
memset
(
messagePtr
,
0
,
(
size_t
)
env
->
GetArrayLength
(
messageBuffer
));
}
env
->
ReleaseByteArrayElements
(
messageBuffer
,
messagePtr
,
JNI_ABORT
);
}
if
(
errorMessage
)
{
env
->
ThrowNew
(
env
->
FindClass
(
"java/lang/Exception"
),
errorMessage
);
}
return
returnValue
;
}
\ No newline at end of file
android/olm-sdk/src/main/jni/olm_sas.h
View file @
16a28f29
...
...
@@ -32,6 +32,7 @@ JNIEXPORT jbyteArray OLM_SAS_FUNC_DEF(getPubKeyJni)(JNIEnv *env, jobject thiz);
JNIEXPORT
void
OLM_SAS_FUNC_DEF
(
setTheirPubKey
)(
JNIEnv
*
env
,
jobject
thiz
,
jbyteArray
pubKey
);
JNIEXPORT
jbyteArray
OLM_SAS_FUNC_DEF
(
generateShortCodeJni
)(
JNIEnv
*
env
,
jobject
thiz
,
jbyteArray
infoStringBytes
,
jint
byteNb
);
JNIEXPORT
jbyteArray
OLM_SAS_FUNC_DEF
(
calculateMacJni
)(
JNIEnv
*
env
,
jobject
thiz
,
jbyteArray
messageBuffer
,
jbyteArray
infoBuffer
);
JNIEXPORT
jbyteArray
OLM_SAS_FUNC_DEF
(
calculateMacLongKdfJni
)(
JNIEnv
*
env
,
jobject
thiz
,
jbyteArray
messageBuffer
,
jbyteArray
infoBuffer
);
#ifdef __cplusplus
}
...
...
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