mirror of
https://github.com/oxen-io/session-android.git
synced 2023-12-14 02:53:01 +01:00
feat: add lock guard and implement new decrypt method
This commit is contained in:
parent
eddeb1236d
commit
0f7b17b384
|
@ -147,6 +147,7 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_rekey(JNIEnv *env,
|
||||||
extern "C"
|
extern "C"
|
||||||
JNIEXPORT jbyteArray JNICALL
|
JNIEXPORT jbyteArray JNICALL
|
||||||
Java_network_loki_messenger_libsession_1util_GroupKeysConfig_dump(JNIEnv *env, jobject thiz) {
|
Java_network_loki_messenger_libsession_1util_GroupKeysConfig_dump(JNIEnv *env, jobject thiz) {
|
||||||
|
std::lock_guard lock{util::util_mutex_};
|
||||||
auto keys = ptrToKeys(env, thiz);
|
auto keys = ptrToKeys(env, thiz);
|
||||||
auto dump = keys->dump();
|
auto dump = keys->dump();
|
||||||
auto byte_array = util::bytes_from_ustring(env, dump);
|
auto byte_array = util::bytes_from_ustring(env, dump);
|
||||||
|
@ -156,6 +157,7 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_dump(JNIEnv *env, j
|
||||||
extern "C"
|
extern "C"
|
||||||
JNIEXPORT void JNICALL
|
JNIEXPORT void JNICALL
|
||||||
Java_network_loki_messenger_libsession_1util_GroupKeysConfig_free(JNIEnv *env, jobject thiz) {
|
Java_network_loki_messenger_libsession_1util_GroupKeysConfig_free(JNIEnv *env, jobject thiz) {
|
||||||
|
std::lock_guard lock{util::util_mutex_};
|
||||||
auto ptr = ptrToKeys(env, thiz);
|
auto ptr = ptrToKeys(env, thiz);
|
||||||
delete ptr;
|
delete ptr;
|
||||||
}
|
}
|
||||||
|
@ -164,6 +166,7 @@ extern "C"
|
||||||
JNIEXPORT jbyteArray JNICALL
|
JNIEXPORT jbyteArray JNICALL
|
||||||
Java_network_loki_messenger_libsession_1util_GroupKeysConfig_encrypt(JNIEnv *env, jobject thiz,
|
Java_network_loki_messenger_libsession_1util_GroupKeysConfig_encrypt(JNIEnv *env, jobject thiz,
|
||||||
jbyteArray plaintext) {
|
jbyteArray plaintext) {
|
||||||
|
std::lock_guard lock{util::util_mutex_};
|
||||||
auto ptr = ptrToKeys(env, thiz);
|
auto ptr = ptrToKeys(env, thiz);
|
||||||
auto plaintext_ustring = util::ustring_from_bytes(env, plaintext);
|
auto plaintext_ustring = util::ustring_from_bytes(env, plaintext);
|
||||||
auto enc = ptr->encrypt_message(plaintext_ustring);
|
auto enc = ptr->encrypt_message(plaintext_ustring);
|
||||||
|
@ -171,14 +174,24 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_encrypt(JNIEnv *env
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
JNIEXPORT jbyteArray JNICALL
|
JNIEXPORT jobject JNICALL
|
||||||
Java_network_loki_messenger_libsession_1util_GroupKeysConfig_decrypt(JNIEnv *env, jobject thiz,
|
Java_network_loki_messenger_libsession_1util_GroupKeysConfig_decrypt(JNIEnv *env, jobject thiz,
|
||||||
jbyteArray ciphertext) {
|
jbyteArray ciphertext) {
|
||||||
|
std::lock_guard lock{util::util_mutex_};
|
||||||
auto ptr = ptrToKeys(env, thiz);
|
auto ptr = ptrToKeys(env, thiz);
|
||||||
auto ciphertext_ustring = util::ustring_from_bytes(env, ciphertext);
|
auto ciphertext_ustring = util::ustring_from_bytes(env, ciphertext);
|
||||||
auto plaintext = ptr->decrypt_message(ciphertext_ustring);
|
try {
|
||||||
if (plaintext) {
|
auto decrypted = ptr->decrypt_message(ciphertext_ustring);
|
||||||
return util::bytes_from_ustring(env, *plaintext);
|
auto sender = decrypted.first;
|
||||||
|
auto plaintext = decrypted.second;
|
||||||
|
auto plaintext_bytes = util::bytes_from_ustring(env, plaintext);
|
||||||
|
auto sender_session_id = util::serialize_session_id(env, sender.data());
|
||||||
|
auto pair_class = env->FindClass("kotlin/Pair");
|
||||||
|
auto pair_constructor = env->GetMethodID(pair_class, "<init>", "(Ljava/lang/Object;Ljava/lang/Object;)V");
|
||||||
|
auto pair_obj = env->NewObject(pair_class, pair_constructor, plaintext_bytes, sender_session_id);
|
||||||
|
return pair_obj;
|
||||||
|
} catch (std::exception& e) {
|
||||||
|
// TODO: maybe log here
|
||||||
}
|
}
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -186,6 +199,7 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_decrypt(JNIEnv *env
|
||||||
extern "C"
|
extern "C"
|
||||||
JNIEXPORT jobject JNICALL
|
JNIEXPORT jobject JNICALL
|
||||||
Java_network_loki_messenger_libsession_1util_GroupKeysConfig_keys(JNIEnv *env, jobject thiz) {
|
Java_network_loki_messenger_libsession_1util_GroupKeysConfig_keys(JNIEnv *env, jobject thiz) {
|
||||||
|
std::lock_guard lock{util::util_mutex_};
|
||||||
auto ptr = ptrToKeys(env, thiz);
|
auto ptr = ptrToKeys(env, thiz);
|
||||||
auto keys = ptr->group_keys();
|
auto keys = ptr->group_keys();
|
||||||
jclass stack = env->FindClass("java/util/Stack");
|
jclass stack = env->FindClass("java/util/Stack");
|
||||||
|
@ -203,6 +217,7 @@ extern "C"
|
||||||
JNIEXPORT jobject JNICALL
|
JNIEXPORT jobject JNICALL
|
||||||
Java_network_loki_messenger_libsession_1util_GroupKeysConfig_currentHashes(JNIEnv *env,
|
Java_network_loki_messenger_libsession_1util_GroupKeysConfig_currentHashes(JNIEnv *env,
|
||||||
jobject thiz) {
|
jobject thiz) {
|
||||||
|
std::lock_guard lock{util::util_mutex_};
|
||||||
auto ptr = ptrToKeys(env, thiz);
|
auto ptr = ptrToKeys(env, thiz);
|
||||||
auto existing = ptr->current_hashes();
|
auto existing = ptr->current_hashes();
|
||||||
jclass stack = env->FindClass("java/util/Stack");
|
jclass stack = env->FindClass("java/util/Stack");
|
||||||
|
|
|
@ -39,7 +39,6 @@ sealed class ConfigBase(pointer: Long): Config(pointer) {
|
||||||
is GroupMembersConfig -> Kind.CLOSED_GROUP_MEMBERS
|
is GroupMembersConfig -> Kind.CLOSED_GROUP_MEMBERS
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: time in future to activate (hardcoded to 1st jan 2024 for testing, change before release)
|
|
||||||
private const val ACTIVATE_TIME = 1690761600000
|
private const val ACTIVATE_TIME = 1690761600000
|
||||||
|
|
||||||
fun isNewConfigEnabled(forced: Boolean, currentTime: Long) =
|
fun isNewConfigEnabled(forced: Boolean, currentTime: Long) =
|
||||||
|
@ -292,8 +291,7 @@ class GroupMembersConfig(pointer: Long): ConfigBase(pointer), Closeable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sealed class ConfigSig(pointer: Long) : Config(pointer) {
|
sealed class ConfigSig(pointer: Long) : Config(pointer)
|
||||||
}
|
|
||||||
|
|
||||||
class GroupKeysConfig(pointer: Long): ConfigSig(pointer) {
|
class GroupKeysConfig(pointer: Long): ConfigSig(pointer) {
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -330,7 +328,7 @@ class GroupKeysConfig(pointer: Long): ConfigSig(pointer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
external fun encrypt(plaintext: ByteArray): ByteArray
|
external fun encrypt(plaintext: ByteArray): ByteArray
|
||||||
external fun decrypt(ciphertext: ByteArray): ByteArray?
|
external fun decrypt(ciphertext: ByteArray): Pair<ByteArray, SessionId>?
|
||||||
|
|
||||||
external fun keys(): Stack<ByteArray>
|
external fun keys(): Stack<ByteArray>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue