mirror of
https://github.com/oxen-io/session-android.git
synced 2025-12-31 04:56:11 +00:00
fix: group keys constructor
This commit is contained in:
@@ -6,18 +6,58 @@ extern "C"
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupKeysConfig_00024Companion_newInstance(JNIEnv *env,
|
||||
jobject thiz,
|
||||
jbyteArray public_key,
|
||||
jbyteArray secret_key,
|
||||
jbyteArray user_secret_key,
|
||||
jbyteArray group_public_key,
|
||||
jbyteArray group_secret_key,
|
||||
jbyteArray initial_dump,
|
||||
jobject info,
|
||||
jobject members) {
|
||||
// TODO: implement newInstance()
|
||||
jobject info_jobject,
|
||||
jobject members_jobject) {
|
||||
std::lock_guard lock{util::util_mutex_};
|
||||
auto user_key_bytes = util::ustring_from_bytes(env, user_secret_key);
|
||||
auto pub_key_bytes = util::ustring_from_bytes(env, group_public_key);
|
||||
std::optional<session::ustring> secret_key_optional{std::nullopt};
|
||||
std::optional<session::ustring> initial_dump_optional{std::nullopt};
|
||||
if (group_secret_key != nullptr) {
|
||||
auto secret_key_bytes = util::ustring_from_bytes(env, group_secret_key);
|
||||
secret_key_optional = secret_key_bytes;
|
||||
}
|
||||
if (initial_dump != nullptr) {
|
||||
auto initial_dump_bytes = util::ustring_from_bytes(env, initial_dump);
|
||||
initial_dump_optional = initial_dump_bytes;
|
||||
}
|
||||
|
||||
auto info = ptrToInfo(env, info_jobject);
|
||||
auto members = ptrToMembers(env, members_jobject);
|
||||
|
||||
auto* keys = new session::config::groups::Keys(user_key_bytes,
|
||||
pub_key_bytes,
|
||||
secret_key_optional,
|
||||
initial_dump_optional,
|
||||
*info,
|
||||
*members);
|
||||
|
||||
jclass groupKeysConfig = env->FindClass("network/loki/messenger/libsession_util/GroupKeysConfig");
|
||||
jmethodID constructor = env->GetMethodID(groupKeysConfig, "<init>", "(J)V");
|
||||
jobject newConfig = env->NewObject(groupKeysConfig, constructor, reinterpret_cast<jlong>(keys));
|
||||
|
||||
return newConfig;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupKeysConfig_groupKeys(JNIEnv *env, jobject thiz) {
|
||||
// TODO: implement groupKeys()
|
||||
std::lock_guard lock{util::util_mutex_};
|
||||
auto config = ptrToKeys(env, thiz);
|
||||
auto keys = config->group_keys();
|
||||
jclass stack = env->FindClass("java/util/Stack");
|
||||
jmethodID init = env->GetMethodID(stack, "<init>", "()V");
|
||||
jobject our_stack = env->NewObject(stack, init);
|
||||
jmethodID push = env->GetMethodID(stack, "push", "(Ljava/lang/Object;)Ljava/lang/Object;");
|
||||
for (auto& key : keys) {
|
||||
auto key_bytes = util::bytes_from_ustring(env, key.data());
|
||||
env->CallObjectMethod(our_stack, push, key_bytes);
|
||||
}
|
||||
return our_stack;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
@@ -28,6 +68,7 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_loadKey(JNIEnv *env
|
||||
jlong timestamp_ms,
|
||||
jobject info_jobject,
|
||||
jobject members_jobject) {
|
||||
std::lock_guard lock{util::util_mutex_};
|
||||
auto keys = ptrToKeys(env, thiz);
|
||||
auto data_bytes = util::ustring_from_bytes(env, data);
|
||||
auto msg_bytes = util::ustring_from_bytes(env, msg_id);
|
||||
@@ -39,6 +80,7 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_loadKey(JNIEnv *env
|
||||
extern "C"
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupKeysConfig_needsRekey(JNIEnv *env, jobject thiz) {
|
||||
std::lock_guard lock{util::util_mutex_};
|
||||
auto keys = ptrToKeys(env, thiz);
|
||||
return keys->needs_rekey();
|
||||
}
|
||||
@@ -46,6 +88,7 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_needsRekey(JNIEnv *
|
||||
extern "C"
|
||||
JNIEXPORT jbyteArray JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupKeysConfig_pendingKey(JNIEnv *env, jobject thiz) {
|
||||
std::lock_guard lock{util::util_mutex_};
|
||||
auto keys = ptrToKeys(env, thiz);
|
||||
auto pending = keys->pending_key();
|
||||
if (!pending) {
|
||||
@@ -59,6 +102,7 @@ extern "C"
|
||||
JNIEXPORT jbyteArray JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupKeysConfig_pendingPush(JNIEnv *env,
|
||||
jobject thiz) {
|
||||
std::lock_guard lock{util::util_mutex_};
|
||||
auto keys = ptrToKeys(env, thiz);
|
||||
auto pending = keys->pending_config();
|
||||
if (!pending) {
|
||||
@@ -72,6 +116,7 @@ extern "C"
|
||||
JNIEXPORT jbyteArray JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupKeysConfig_rekey(JNIEnv *env, jobject thiz,
|
||||
jobject info_jobject, jobject members_jobject) {
|
||||
std::lock_guard lock{util::util_mutex_};
|
||||
auto keys = ptrToKeys(env, thiz);
|
||||
auto info = ptrToInfo(env, info_jobject);
|
||||
auto members = ptrToMembers(env, members_jobject);
|
||||
|
||||
@@ -5,6 +5,7 @@ JNIEXPORT jobject JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupMemberConfig_00024Companion_newInstance(
|
||||
JNIEnv *env, jobject thiz, jbyteArray pub_key, jbyteArray secret_key,
|
||||
jbyteArray initial_dump) {
|
||||
std::lock_guard lock{util::util_mutex_};
|
||||
auto pub_key_bytes = util::ustring_from_bytes(env, pub_key);
|
||||
std::optional<session::ustring> secret_key_optional{std::nullopt};
|
||||
std::optional<session::ustring> initial_dump_optional{std::nullopt};
|
||||
@@ -29,6 +30,7 @@ Java_network_loki_messenger_libsession_1util_GroupMemberConfig_00024Companion_ne
|
||||
extern "C"
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupMemberConfig_all(JNIEnv *env, jobject thiz) {
|
||||
std::lock_guard lock{util::util_mutex_};
|
||||
auto config = ptrToMembers(env, thiz);
|
||||
jclass stack = env->FindClass("java/util/Stack");
|
||||
jmethodID init = env->GetMethodID(stack, "<init>", "()V");
|
||||
@@ -54,6 +56,7 @@ extern "C"
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupMemberConfig_get(JNIEnv *env, jobject thiz,
|
||||
jstring pub_key_hex) {
|
||||
std::lock_guard lock{util::util_mutex_};
|
||||
auto config = ptrToMembers(env, thiz);
|
||||
auto pub_key_bytes = env->GetStringUTFChars(pub_key_hex, nullptr);
|
||||
auto member = config->get(pub_key_bytes);
|
||||
@@ -70,6 +73,7 @@ JNIEXPORT jobject JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupMemberConfig_getOrConstruct(JNIEnv *env,
|
||||
jobject thiz,
|
||||
jstring pub_key_hex) {
|
||||
std::lock_guard lock{util::util_mutex_};
|
||||
auto config = ptrToMembers(env, thiz);
|
||||
auto pub_key_bytes = env->GetStringUTFChars(pub_key_hex, nullptr);
|
||||
auto member = config->get_or_construct(pub_key_bytes);
|
||||
@@ -82,6 +86,7 @@ extern "C"
|
||||
JNIEXPORT void JNICALL
|
||||
Java_network_loki_messenger_libsession_1util_GroupMemberConfig_set(JNIEnv *env, jobject thiz,
|
||||
jobject group_member) {
|
||||
std::lock_guard lock{util::util_mutex_};
|
||||
auto config = ptrToMembers(env, thiz);
|
||||
auto deserialized = util::deserialize_group_member(env, group_member);
|
||||
config->set(deserialized);
|
||||
|
||||
@@ -10,6 +10,7 @@ import network.loki.messenger.libsession_util.util.UserPic
|
||||
import org.session.libsignal.protos.SignalServiceProtos.SharedConfigMessage.Kind
|
||||
import org.session.libsignal.utilities.IdPrefix
|
||||
import org.session.libsignal.utilities.Log
|
||||
import java.util.Stack
|
||||
|
||||
|
||||
sealed class ConfigBase(protected val /* yucky */ pointer: Long) {
|
||||
@@ -245,7 +246,7 @@ class GroupMemberConfig(pointer: Long): ConfigBase(pointer) {
|
||||
initialDump: ByteArray?
|
||||
): GroupMemberConfig
|
||||
}
|
||||
external fun all(): List<GroupMember>
|
||||
external fun all(): Stack<GroupMember>
|
||||
external fun erase(groupMember: GroupMember): Boolean
|
||||
external fun get(pubKeyHex: String): GroupMember?
|
||||
external fun getOrConstruct(pubKeyHex: String): GroupMember
|
||||
@@ -258,14 +259,15 @@ class GroupKeysConfig(pointer: Long): ConfigBase(pointer) {
|
||||
System.loadLibrary("session_util")
|
||||
}
|
||||
external fun newInstance(
|
||||
publicKey: ByteArray,
|
||||
secretKey: ByteArray?,
|
||||
userSecretKey: ByteArray,
|
||||
groupPublicKey: ByteArray,
|
||||
groupSecretKey: ByteArray?,
|
||||
initialDump: ByteArray?,
|
||||
info: GroupInfoConfig,
|
||||
members: GroupMemberConfig
|
||||
): GroupKeysConfig
|
||||
}
|
||||
external fun groupKeys(): List<ByteArray>
|
||||
external fun groupKeys(): Stack<ByteArray>
|
||||
external fun loadKey(data: ByteArray,
|
||||
msgId: ByteArray,
|
||||
timestampMs: Long,
|
||||
|
||||
Reference in New Issue
Block a user