diff --git a/libsession-util/libsession-util b/libsession-util/libsession-util index 3eb9eb7923..e2eed34ef2 160000 --- a/libsession-util/libsession-util +++ b/libsession-util/libsession-util @@ -1 +1 @@ -Subproject commit 3eb9eb79235d8454aa6fc56278230a1fa26c9fb7 +Subproject commit e2eed34ef25b3076a29000e43163bda832793159 diff --git a/libsession-util/src/main/cpp/CMakeLists.txt b/libsession-util/src/main/cpp/CMakeLists.txt index 97fc9a1817..c41413161d 100644 --- a/libsession-util/src/main/cpp/CMakeLists.txt +++ b/libsession-util/src/main/cpp/CMakeLists.txt @@ -10,7 +10,7 @@ cmake_minimum_required(VERSION 3.18.1) project("session_util") # Compiles in C++17 mode -set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) diff --git a/libsession-util/src/main/cpp/blinded_key.cpp b/libsession-util/src/main/cpp/blinded_key.cpp index 1ed1cfd554..fd2109be20 100644 --- a/libsession-util/src/main/cpp/blinded_key.cpp +++ b/libsession-util/src/main/cpp/blinded_key.cpp @@ -14,11 +14,11 @@ Java_network_loki_messenger_libsession_1util_util_BlindKeyAPI_blindVersionKeyPai jobject thiz, jbyteArray ed25519_secret_key) { return jni_utils::run_catching_cxx_exception_or_throws(env, [=] { - const auto [pk, sk] = session::blind_version_key_pair(util::ustring_from_bytes(env, ed25519_secret_key)); + const auto [pk, sk] = session::blind_version_key_pair(util::vector_from_bytes(env, ed25519_secret_key)); jclass kp_class = env->FindClass("network/loki/messenger/libsession_util/util/KeyPair"); jmethodID kp_constructor = env->GetMethodID(kp_class, "", "([B[B)V"); - return env->NewObject(kp_class, kp_constructor, util::bytes_from_ustring(env, {pk.data(), pk.size()}), util::bytes_from_ustring(env, {sk.data(), sk.size()})); + return env->NewObject(kp_class, kp_constructor, util::bytes_from_vector(env, {pk.data(), pk.data() + pk.size()}), util::bytes_from_vector(env, {sk.data(), sk.data() + sk.size()})); }); } extern "C" @@ -28,7 +28,7 @@ Java_network_loki_messenger_libsession_1util_util_BlindKeyAPI_blindVersionSign(J jbyteArray ed25519_secret_key, jlong timestamp) { return jni_utils::run_catching_cxx_exception_or_throws(env, [=] { - auto bytes = session::blind_version_sign(util::ustring_from_bytes(env, ed25519_secret_key), session::Platform::android, timestamp); - return util::bytes_from_ustring(env, bytes); + auto bytes = session::blind_version_sign(util::vector_from_bytes(env, ed25519_secret_key), session::Platform::android, timestamp); + return util::bytes_from_vector(env, bytes); }); } \ No newline at end of file diff --git a/libsession-util/src/main/cpp/config_base.cpp b/libsession-util/src/main/cpp/config_base.cpp index 8017d2bc7d..795c988d49 100644 --- a/libsession-util/src/main/cpp/config_base.cpp +++ b/libsession-util/src/main/cpp/config_base.cpp @@ -32,7 +32,7 @@ Java_network_loki_messenger_libsession_1util_ConfigBase_push(JNIEnv *env, jobjec auto to_push_str = std::get<1>(push_tuple); auto to_delete = std::get<2>(push_tuple); - jbyteArray returnByteArray = util::bytes_from_ustring(env, to_push_str); + jbyteArray returnByteArray = util::bytes_from_vector(env, to_push_str); jlong seqNo = std::get<0>(push_tuple); jclass returnObjectClass = env->FindClass("network/loki/messenger/libsession_util/util/ConfigPush"); jclass stackClass = env->FindClass("java/util/Stack"); @@ -59,7 +59,7 @@ Java_network_loki_messenger_libsession_1util_ConfigBase_dump(JNIEnv *env, jobjec std::lock_guard lock{util::util_mutex_}; auto config = ptrToConfigBase(env, thiz); auto dumped = config->dump(); - jbyteArray bytes = util::bytes_from_ustring(env, dumped); + jbyteArray bytes = util::bytes_from_vector(env, dumped); return bytes; } @@ -90,7 +90,7 @@ Java_network_loki_messenger_libsession_1util_ConfigBase_merge___3Lkotlin_Pair_2( std::lock_guard lock{util::util_mutex_}; auto conf = ptrToConfigBase(env, thiz); size_t number = env->GetArrayLength(to_merge); - std::vector> configs = {}; + std::vector>> configs = {}; for (int i = 0; i < number; i++) { auto jElement = (jobject) env->GetObjectArrayElement(to_merge, i); auto pair = extractHashAndData(env, jElement); diff --git a/libsession-util/src/main/cpp/config_base.h b/libsession-util/src/main/cpp/config_base.h index 3f6e6ceba8..e80f13d68a 100644 --- a/libsession-util/src/main/cpp/config_base.h +++ b/libsession-util/src/main/cpp/config_base.h @@ -12,15 +12,15 @@ inline session::config::ConfigBase* ptrToConfigBase(JNIEnv *env, jobject obj) { return (session::config::ConfigBase*) env->GetLongField(obj, pointerField); } -inline std::pair extractHashAndData(JNIEnv *env, jobject kotlin_pair) { +inline std::pair> extractHashAndData(JNIEnv *env, jobject kotlin_pair) { jclass pair = env->FindClass("kotlin/Pair"); jfieldID first = env->GetFieldID(pair, "first", "Ljava/lang/Object;"); jfieldID second = env->GetFieldID(pair, "second", "Ljava/lang/Object;"); jstring hash_as_jstring = static_cast(env->GetObjectField(kotlin_pair, first)); jbyteArray data_as_jbytes = static_cast(env->GetObjectField(kotlin_pair, second)); auto hash_as_string = env->GetStringUTFChars(hash_as_jstring, nullptr); - auto data_as_ustring = util::ustring_from_bytes(env, data_as_jbytes); - auto ret_pair = std::pair{hash_as_string, data_as_ustring}; + auto data_as_vector = util::vector_from_bytes(env, data_as_jbytes); + auto ret_pair = std::pair>{hash_as_string, data_as_vector}; env->ReleaseStringUTFChars(hash_as_jstring, hash_as_string); return ret_pair; } diff --git a/libsession-util/src/main/cpp/config_common.cpp b/libsession-util/src/main/cpp/config_common.cpp index 848c816bf7..1da3fb4bfa 100644 --- a/libsession-util/src/main/cpp/config_common.cpp +++ b/libsession-util/src/main/cpp/config_common.cpp @@ -17,9 +17,9 @@ Java_network_loki_messenger_libsession_1util_ConfigKt_createConfigObject( jbyteArray initial_dump) { return jni_utils::run_catching_cxx_exception_or_throws(env, [=] { auto config_name = util::string_from_jstring(env, java_config_name); - auto secret_key = util::ustring_from_bytes(env, ed25519_secret_key); + auto secret_key = util::vector_from_bytes(env, ed25519_secret_key); auto initial = initial_dump - ? std::optional(util::ustring_from_bytes(env, initial_dump)) + ? std::optional(util::vector_from_bytes(env, initial_dump)) : std::nullopt; diff --git a/libsession-util/src/main/cpp/contacts.h b/libsession-util/src/main/cpp/contacts.h index f091e195ea..4108352e07 100644 --- a/libsession-util/src/main/cpp/contacts.h +++ b/libsession-util/src/main/cpp/contacts.h @@ -2,6 +2,7 @@ #define SESSION_ANDROID_CONTACTS_H #include +#include #include "session/config/contacts.hpp" #include "util.h" @@ -58,7 +59,7 @@ inline session::config::contact_info deserialize_contact(JNIEnv *env, jobject in auto expiry_pair = util::deserialize_expiry(env, expiry_mode); std::string url; - session::ustring key; + std::vector key; if (user_pic != nullptr) { auto deserialized_pic = util::deserialize_user_pic(env, user_pic); @@ -66,7 +67,7 @@ inline session::config::contact_info deserialize_contact(JNIEnv *env, jobject in auto url_bytes = env->GetStringUTFChars(url_jstring, nullptr); url = std::string(url_bytes); env->ReleaseStringUTFChars(url_jstring, url_bytes); - key = util::ustring_from_bytes(env, deserialized_pic.second); + key = util::vector_from_bytes(env, deserialized_pic.second); } auto account_id_bytes = env->GetStringUTFChars(account_id, nullptr); diff --git a/libsession-util/src/main/cpp/conversation.cpp b/libsession-util/src/main/cpp/conversation.cpp index 3fb322533b..19f5f6f4e2 100644 --- a/libsession-util/src/main/cpp/conversation.cpp +++ b/libsession-util/src/main/cpp/conversation.cpp @@ -152,8 +152,8 @@ Java_network_loki_messenger_libsession_1util_ConversationVolatileConfig_getOrCon auto convos = ptrToConvoInfo(env, thiz); auto base_url_chars = env->GetStringUTFChars(base_url, nullptr); auto room_chars = env->GetStringUTFChars(room, nullptr); - auto pub_key_ustring = util::ustring_from_bytes(env, pub_key); - auto open = convos->get_or_construct_community(base_url_chars, room_chars, pub_key_ustring); + auto pub_key_vector = util::vector_from_bytes(env, pub_key); + auto open = convos->get_or_construct_community(base_url_chars, room_chars, pub_key_vector); auto serialized = serialize_open_group(env, open); return serialized; } diff --git a/libsession-util/src/main/cpp/group_info.cpp b/libsession-util/src/main/cpp/group_info.cpp index c80db46d2a..79f173d6e7 100644 --- a/libsession-util/src/main/cpp/group_info.cpp +++ b/libsession-util/src/main/cpp/group_info.cpp @@ -10,15 +10,15 @@ Java_network_loki_messenger_libsession_1util_GroupInfoConfig_00024Companion_newI jbyteArray secret_key, jbyteArray initial_dump) { std::lock_guard guard{util::util_mutex_}; - std::optional secret_key_optional{std::nullopt}; - std::optional initial_dump_optional{std::nullopt}; - auto pub_key_bytes = util::ustring_from_bytes(env, pub_key); + std::optional> secret_key_optional{std::nullopt}; + std::optional> initial_dump_optional{std::nullopt}; + auto pub_key_bytes = util::vector_from_bytes(env, pub_key); if (secret_key && env->GetArrayLength(secret_key) > 0) { - auto secret_key_bytes = util::ustring_from_bytes(env, secret_key); + auto secret_key_bytes = util::vector_from_bytes(env, secret_key); secret_key_optional = secret_key_bytes; } if (initial_dump && env->GetArrayLength(initial_dump) > 0) { - auto initial_dump_bytes = util::ustring_from_bytes(env, initial_dump); + auto initial_dump_bytes = util::vector_from_bytes(env, initial_dump); initial_dump_optional = initial_dump_bytes; } @@ -159,7 +159,7 @@ Java_network_loki_messenger_libsession_1util_GroupInfoConfig_setProfilePic(JNIEn auto group_info = ptrToInfo(env, thiz); auto user_pic = util::deserialize_user_pic(env, new_profile_pic); auto url = env->GetStringUTFChars(user_pic.first, nullptr); - auto key = util::ustring_from_bytes(env, user_pic.second); + auto key = util::vector_from_bytes(env, user_pic.second); group_info->set_profile_pic(url, key); env->ReleaseStringUTFChars(user_pic.first, url); } diff --git a/libsession-util/src/main/cpp/group_keys.cpp b/libsession-util/src/main/cpp/group_keys.cpp index d70d1aa36e..8a5a16707c 100644 --- a/libsession-util/src/main/cpp/group_keys.cpp +++ b/libsession-util/src/main/cpp/group_keys.cpp @@ -23,18 +23,18 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_00024Companion_newI jlong members_pointer) { return jni_utils::run_catching_cxx_exception_or_throws(env, [=] { 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 secret_key_optional{std::nullopt}; - std::optional initial_dump_optional{std::nullopt}; + auto user_key_bytes = util::vector_from_bytes(env, user_secret_key); + auto pub_key_bytes = util::vector_from_bytes(env, group_public_key); + std::optional> secret_key_optional{std::nullopt}; + std::optional> initial_dump_optional{std::nullopt}; if (group_secret_key && env->GetArrayLength(group_secret_key) > 0) { - auto secret_key_bytes = util::ustring_from_bytes(env, group_secret_key); + auto secret_key_bytes = util::vector_from_bytes(env, group_secret_key); secret_key_optional = secret_key_bytes; } if (initial_dump && env->GetArrayLength(initial_dump) > 0) { - auto initial_dump_bytes = util::ustring_from_bytes(env, initial_dump); + auto initial_dump_bytes = util::vector_from_bytes(env, initial_dump); initial_dump_optional = initial_dump_bytes; } @@ -63,7 +63,7 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_groupKeys(JNIEnv *e 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()); + auto key_bytes = util::bytes_from_span(env, key); env->CallObjectMethod(our_stack, push, key_bytes); } return our_stack; @@ -79,7 +79,7 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_loadKey(JNIEnv *env jlong members_ptr) { std::lock_guard lock{util::util_mutex_}; auto keys = ptrToKeys(env, thiz); - auto message_bytes = util::ustring_from_bytes(env, message); + auto message_bytes = util::vector_from_bytes(env, message); auto hash_bytes = env->GetStringUTFChars(hash, nullptr); auto info = reinterpret_cast(info_ptr); auto members = reinterpret_cast(members_ptr); @@ -119,7 +119,7 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_pendingKey(JNIEnv * if (!pending) { return nullptr; } - auto pending_bytes = util::bytes_from_ustring(env, *pending); + auto pending_bytes = util::bytes_from_span(env, *pending); return pending_bytes; } @@ -133,7 +133,7 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_pendingConfig(JNIEn if (!pending) { return nullptr; } - auto pending_bytes = util::bytes_from_ustring(env, *pending); + auto pending_bytes = util::bytes_from_span(env, *pending); return pending_bytes; } @@ -146,7 +146,7 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_rekey(JNIEnv *env, auto info = reinterpret_cast(info_ptr); auto members = reinterpret_cast(members_ptr); auto rekey = keys->rekey(*info, *members); - auto rekey_bytes = util::bytes_from_ustring(env, rekey.data()); + auto rekey_bytes = util::bytes_from_span(env, rekey); return rekey_bytes; } @@ -156,7 +156,7 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_dump(JNIEnv *env, j std::lock_guard lock{util::util_mutex_}; auto keys = ptrToKeys(env, thiz); auto dump = keys->dump(); - auto byte_array = util::bytes_from_ustring(env, dump); + auto byte_array = util::bytes_from_vector(env, dump); return byte_array; } @@ -175,9 +175,9 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_encrypt(JNIEnv *env return jni_utils::run_catching_cxx_exception_or_throws(env, [=] { std::lock_guard lock{util::util_mutex_}; auto ptr = ptrToKeys(env, thiz); - auto plaintext_ustring = util::ustring_from_bytes(env, plaintext); - auto enc = ptr->encrypt_message(plaintext_ustring); - return util::bytes_from_ustring(env, enc); + auto plaintext_vector = util::vector_from_bytes(env, plaintext); + auto enc = ptr->encrypt_message(plaintext_vector); + return util::bytes_from_vector(env, enc); }); } @@ -188,11 +188,11 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_decrypt(JNIEnv *env return jni_utils::run_catching_cxx_exception_or_throws(env, [=] { std::lock_guard lock{util::util_mutex_}; auto ptr = ptrToKeys(env, thiz); - auto ciphertext_ustring = util::ustring_from_bytes(env, ciphertext); - auto decrypted = ptr->decrypt_message(ciphertext_ustring); + auto ciphertext_vector = util::vector_from_bytes(env, ciphertext); + auto decrypted = ptr->decrypt_message(ciphertext_vector); auto sender = decrypted.first; auto plaintext = decrypted.second; - auto plaintext_bytes = util::bytes_from_ustring(env, plaintext); + auto plaintext_bytes = util::bytes_from_vector(env, plaintext); auto sender_session_id = util::serialize_account_id(env, sender.data()); auto pair_class = env->FindClass("kotlin/Pair"); auto pair_constructor = env->GetMethodID(pair_class, "", "(Ljava/lang/Object;Ljava/lang/Object;)V"); @@ -212,7 +212,7 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_keys(JNIEnv *env, j 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); + auto key_bytes = util::bytes_from_span(env, key); env->CallObjectMethod(our_stack, push, key_bytes); } return our_stack; @@ -246,7 +246,7 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_makeSubAccount(JNIE auto ptr = ptrToKeys(env, thiz); auto deserialized_id = util::deserialize_account_id(env, session_id); auto new_subaccount_key = ptr->swarm_make_subaccount(deserialized_id.data(), can_write, can_delete); - auto jbytes = util::bytes_from_ustring(env, new_subaccount_key); + auto jbytes = util::bytes_from_vector(env, new_subaccount_key); return jbytes; } @@ -261,7 +261,7 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_getSubAccountToken( auto ptr = ptrToKeys(env, thiz); auto deserialized_id = util::deserialize_account_id(env, session_id); auto token = ptr->swarm_subaccount_token(deserialized_id, can_write, can_delete); - auto jbytes = util::bytes_from_ustring(env, token); + auto jbytes = util::bytes_from_vector(env, token); return jbytes; } @@ -273,9 +273,9 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_subAccountSign(JNIE jbyteArray signing_value) { std::lock_guard lock{util::util_mutex_}; auto ptr = ptrToKeys(env, thiz); - auto message_ustring = util::ustring_from_bytes(env, message); - auto signing_value_ustring = util::ustring_from_bytes(env, signing_value); - auto swarm_auth = ptr->swarm_subaccount_sign(message_ustring, signing_value_ustring, false); + auto message_vector = util::vector_from_bytes(env, message); + auto signing_value_vector = util::vector_from_bytes(env, signing_value); + auto swarm_auth = ptr->swarm_subaccount_sign(message_vector, signing_value_vector, false); return util::deserialize_swarm_auth(env, swarm_auth); } @@ -291,7 +291,7 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_supplementFor(JNIEn user_session_ids.push_back(util::string_from_jstring(env, (jstring)(env->GetObjectArrayElement(j_user_session_ids, i)))); } auto supplement = ptr->key_supplement(user_session_ids); - return util::bytes_from_ustring(env, supplement); + return util::bytes_from_vector(env, supplement); } extern "C" JNIEXPORT jint JNICALL @@ -326,11 +326,11 @@ Java_network_loki_messenger_libsession_1util_GroupKeysConfig_loadAdminKey(JNIEnv jlong members_ptr) { std::lock_guard lock{util::util_mutex_}; auto ptr = ptrToKeys(env, thiz); - auto admin_key_ustring = util::ustring_from_bytes(env, admin_key); + auto admin_key_vector = util::vector_from_bytes(env, admin_key); auto info = reinterpret_cast(info_ptr); auto members = reinterpret_cast(members_ptr); jni_utils::run_catching_cxx_exception_or_throws(env, [&] { - ptr->load_admin_key(admin_key_ustring, *info, *members); + ptr->load_admin_key(admin_key_vector, *info, *members); }); } diff --git a/libsession-util/src/main/cpp/group_members.cpp b/libsession-util/src/main/cpp/group_members.cpp index 7d4dd58cf2..952f3d735a 100644 --- a/libsession-util/src/main/cpp/group_members.cpp +++ b/libsession-util/src/main/cpp/group_members.cpp @@ -8,15 +8,15 @@ Java_network_loki_messenger_libsession_1util_GroupMembersConfig_00024Companion_n 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 secret_key_optional{std::nullopt}; - std::optional initial_dump_optional{std::nullopt}; + auto pub_key_bytes = util::vector_from_bytes(env, pub_key); + std::optional> secret_key_optional{std::nullopt}; + std::optional> initial_dump_optional{std::nullopt}; if (secret_key && env->GetArrayLength(secret_key) > 0) { - auto secret_key_bytes = util::ustring_from_bytes(env, secret_key); + auto secret_key_bytes = util::vector_from_bytes(env, secret_key); secret_key_optional = secret_key_bytes; } if (initial_dump && env->GetArrayLength(initial_dump) > 0) { - auto initial_dump_bytes = util::ustring_from_bytes(env, initial_dump); + auto initial_dump_bytes = util::vector_from_bytes(env, initial_dump); initial_dump_optional = initial_dump_bytes; } @@ -209,7 +209,7 @@ Java_network_loki_messenger_libsession_1util_util_GroupMember_setProfilePic(JNIE jobject pic) { const auto [jurl, jkey] = util::deserialize_user_pic(env, pic); auto url = util::string_from_jstring(env, jurl); - auto key = util::ustring_from_bytes(env, jkey); + auto key = util::vector_from_bytes(env, jkey); auto &picture = ptrToMember(env, thiz)->profile_picture; picture.url = url; picture.key = key; diff --git a/libsession-util/src/main/cpp/user_groups.cpp b/libsession-util/src/main/cpp/user_groups.cpp index b34d56e825..029f7a00ae 100644 --- a/libsession-util/src/main/cpp/user_groups.cpp +++ b/libsession-util/src/main/cpp/user_groups.cpp @@ -339,8 +339,8 @@ Java_network_loki_messenger_libsession_1util_util_GroupInfo_00024ClosedGroupInfo auto seed_bytes = env->GetByteArrayElements(seed, nullptr); auto admin_key = session::ed25519::ed25519_key_pair( - session::ustring_view(reinterpret_cast(seed_bytes), 32)).second; + std::span(reinterpret_cast(seed_bytes), 32)).second; env->ReleaseByteArrayElements(seed, seed_bytes, 0); - return util::bytes_from_ustring(env, session::ustring_view(admin_key.data(), admin_key.size())); + return util::bytes_from_span(env, std::span(admin_key.data(), admin_key.size())); } \ No newline at end of file diff --git a/libsession-util/src/main/cpp/user_groups.h b/libsession-util/src/main/cpp/user_groups.h index 265af68013..8282cd0db7 100644 --- a/libsession-util/src/main/cpp/user_groups.h +++ b/libsession-util/src/main/cpp/user_groups.h @@ -62,8 +62,8 @@ inline session::config::legacy_group_info deserialize_legacy_group_info(JNIEnv * auto id_bytes = util::string_from_jstring(env, id); auto name_bytes = env->GetStringUTFChars(name, nullptr); - auto enc_pub_key_bytes = util::ustring_from_bytes(env, enc_pub_key); - auto enc_sec_key_bytes = util::ustring_from_bytes(env, enc_sec_key); + auto enc_pub_key_bytes = util::vector_from_bytes(env, enc_pub_key); + auto enc_sec_key_bytes = util::vector_from_bytes(env, enc_sec_key); auto info_deserialized = conf->get_or_construct_legacy_group(id_bytes); @@ -115,8 +115,8 @@ inline jobject serialize_legacy_group_info(JNIEnv *env, session::config::legacy_ jstring account_id = env->NewStringUTF(info.session_id.data()); jstring name = env->NewStringUTF(info.name.data()); jobject members = serialize_members(env, info.members()); - jbyteArray enc_pubkey = util::bytes_from_ustring(env, info.enc_pubkey); - jbyteArray enc_seckey = util::bytes_from_ustring(env, info.enc_seckey); + jbyteArray enc_pubkey = util::bytes_from_vector(env, info.enc_pubkey); + jbyteArray enc_seckey = util::bytes_from_vector(env, info.enc_seckey); long long priority = info.priority; long long joined_at = info.joined_at; @@ -128,8 +128,8 @@ inline jobject serialize_legacy_group_info(JNIEnv *env, session::config::legacy_ inline jobject serialize_closed_group_info(JNIEnv* env, session::config::group_info info) { auto session_id = util::serialize_account_id(env, info.id); - jbyteArray admin_bytes = info.secretkey.empty() ? nullptr : util::bytes_from_ustring(env, info.secretkey); - jbyteArray auth_bytes = info.auth_data.empty() ? nullptr : util::bytes_from_ustring(env, info.auth_data); + jbyteArray admin_bytes = info.secretkey.empty() ? nullptr : util::bytes_from_vector(env, info.secretkey); + jbyteArray auth_bytes = info.auth_data.empty() ? nullptr : util::bytes_from_vector(env, info.auth_data); jstring name = util::jstringFromOptional(env, info.name); jclass group_info_class = env->FindClass("network/loki/messenger/libsession_util/util/GroupInfo$ClosedGroupInfo"); @@ -159,8 +159,8 @@ inline session::config::group_info deserialize_closed_group_info(JNIEnv* env, jo jstring name_jstring = (jstring)env->GetObjectField(info_serialized, name_field); auto id_bytes = util::deserialize_account_id(env, id_jobject); - auto secret_bytes = util::ustring_from_bytes(env, secret_jBytes); - auto auth_bytes = util::ustring_from_bytes(env, auth_jBytes); + auto secret_bytes = util::vector_from_bytes(env, secret_jBytes); + auto auth_bytes = util::vector_from_bytes(env, auth_jBytes); auto name = util::string_from_jstring(env, name_jstring); session::config::group_info group_info(id_bytes); diff --git a/libsession-util/src/main/cpp/user_profile.cpp b/libsession-util/src/main/cpp/user_profile.cpp index 47def9b6b5..254a561c66 100644 --- a/libsession-util/src/main/cpp/user_profile.cpp +++ b/libsession-util/src/main/cpp/user_profile.cpp @@ -42,7 +42,7 @@ Java_network_loki_messenger_libsession_1util_UserProfile_setPic(JNIEnv *env, job auto profile = ptrToProfile(env, thiz); auto pic = util::deserialize_user_pic(env, user_pic); auto url = env->GetStringUTFChars(pic.first, nullptr); - auto key = util::ustring_from_bytes(env, pic.second); + auto key = util::vector_from_bytes(env, pic.second); profile->set_profile_pic(url, key); env->ReleaseStringUTFChars(pic.first, url); } diff --git a/libsession-util/src/main/cpp/util.cpp b/libsession-util/src/main/cpp/util.cpp index 70979c4ca5..dffcfc349e 100644 --- a/libsession-util/src/main/cpp/util.cpp +++ b/libsession-util/src/main/cpp/util.cpp @@ -2,6 +2,7 @@ #include "sodium/randombytes.h" #include #include +#include #include #include @@ -17,26 +18,35 @@ namespace util { std::mutex util_mutex_ = std::mutex(); - jbyteArray bytes_from_ustring(JNIEnv* env, session::ustring_view from_str) { - size_t length = from_str.length(); + jbyteArray bytes_from_vector(JNIEnv* env, std::vector from_str) { + size_t length = from_str.size(); auto jlength = (jsize)length; jbyteArray new_array = env->NewByteArray(jlength); env->SetByteArrayRegion(new_array, 0, jlength, (jbyte*)from_str.data()); return new_array; } - session::ustring ustring_from_bytes(JNIEnv* env, jbyteArray byteArray) { + std::vector vector_from_bytes(JNIEnv* env, jbyteArray byteArray) { if (byteArray == nullptr) { return {}; } size_t len = env->GetArrayLength(byteArray); auto bytes = env->GetByteArrayElements(byteArray, nullptr); - session::ustring st{reinterpret_cast(bytes), len}; + auto begin = reinterpret_cast(bytes); + std::vector st{begin, begin + len}; env->ReleaseByteArrayElements(byteArray, bytes, 0); return st; } + jbyteArray bytes_from_span(JNIEnv* env, std::span from_str) { + size_t length = from_str.size(); + auto jlength = (jsize)length; + jbyteArray new_array = env->NewByteArray(jlength); + env->SetByteArrayRegion(new_array, 0, jlength, (jbyte*)from_str.data()); + return new_array; + } + std::string string_from_jstring(JNIEnv* env, jstring string) { size_t len = env->GetStringUTFLength(string); auto chars = env->GetStringUTFChars(string, nullptr); @@ -50,7 +60,7 @@ namespace util { jclass returnObjectClass = env->FindClass("network/loki/messenger/libsession_util/util/UserPic"); jmethodID constructor = env->GetMethodID(returnObjectClass, "", "(Ljava/lang/String;[B)V"); jstring url = env->NewStringUTF(pic.url.data()); - jbyteArray byteArray = util::bytes_from_ustring(env, pic.key); + jbyteArray byteArray = util::bytes_from_vector(env, pic.key); return env->NewObject(returnObjectClass, constructor, url, byteArray); } @@ -202,14 +212,14 @@ JNIEXPORT jobject JNICALL Java_network_loki_messenger_libsession_1util_util_Sodium_ed25519KeyPair(JNIEnv *env, jobject thiz, jbyteArray seed) { std::array ed_pk; // NOLINT(cppcoreguidelines-pro-type-member-init) std::array ed_sk; // NOLINT(cppcoreguidelines-pro-type-member-init) - auto seed_bytes = util::ustring_from_bytes(env, seed); + auto seed_bytes = util::vector_from_bytes(env, seed); crypto_sign_ed25519_seed_keypair(ed_pk.data(), ed_sk.data(), seed_bytes.data()); jclass kp_class = env->FindClass("network/loki/messenger/libsession_util/util/KeyPair"); jmethodID kp_constructor = env->GetMethodID(kp_class, "", "([B[B)V"); - jbyteArray pk_jarray = util::bytes_from_ustring(env, session::ustring_view {ed_pk.data(), ed_pk.size()}); - jbyteArray sk_jarray = util::bytes_from_ustring(env, session::ustring_view {ed_sk.data(), ed_sk.size()}); + jbyteArray pk_jarray = util::bytes_from_span(env, std::span {ed_pk.data(), ed_pk.size()}); + jbyteArray sk_jarray = util::bytes_from_span(env, std::span {ed_sk.data(), ed_sk.size()}); jobject return_obj = env->NewObject(kp_class, kp_constructor, pk_jarray, sk_jarray); return return_obj; @@ -220,7 +230,7 @@ JNIEXPORT jbyteArray JNICALL Java_network_loki_messenger_libsession_1util_util_Sodium_ed25519PkToCurve25519(JNIEnv *env, jobject thiz, jbyteArray pk) { - auto ed_pk = util::ustring_from_bytes(env, pk); + auto ed_pk = util::vector_from_bytes(env, pk); std::array curve_pk; // NOLINT(cppcoreguidelines-pro-type-member-init) int success = crypto_sign_ed25519_pk_to_curve25519(curve_pk.data(), ed_pk.data()); if (success != 0) { @@ -228,7 +238,7 @@ Java_network_loki_messenger_libsession_1util_util_Sodium_ed25519PkToCurve25519(J env->ThrowNew(exception, "Invalid crypto_sign_ed25519_pk_to_curve25519 operation"); return nullptr; } - jbyteArray curve_pk_jarray = util::bytes_from_ustring(env, session::ustring_view {curve_pk.data(), curve_pk.size()}); + jbyteArray curve_pk_jarray = util::bytes_from_span(env, std::span {curve_pk.data(), curve_pk.size()}); return curve_pk_jarray; } @@ -243,26 +253,26 @@ Java_network_loki_messenger_libsession_1util_util_Sodium_encryptForMultipleSimpl env->ThrowNew(env->FindClass("java/lang/IllegalArgumentException"), "Messages and recipients must be the same size"); return nullptr; } - std::vector message_vec{}; - std::vector recipient_vec{}; + std::vector> message_vec{}; + std::vector> recipient_vec{}; for (int i = 0; i < size; i++) { jbyteArray message_j = static_cast(env->GetObjectArrayElement(messages, i)); jbyteArray recipient_j = static_cast(env->GetObjectArrayElement(recipients, i)); - session::ustring message = util::ustring_from_bytes(env, message_j); - session::ustring recipient = util::ustring_from_bytes(env, recipient_j); + std::vector message = util::vector_from_bytes(env, message_j); + std::vector recipient = util::vector_from_bytes(env, recipient_j); - message_vec.emplace_back(session::ustring{message}); - recipient_vec.emplace_back(session::ustring{recipient}); + message_vec.emplace_back(message); + recipient_vec.emplace_back(recipient); } - std::vector message_sv_vec{}; - std::vector recipient_sv_vec{}; + std::vector> message_sv_vec{}; + std::vector> recipient_sv_vec{}; for (int i = 0; i < size; i++) { - message_sv_vec.emplace_back(session::to_unsigned_sv(message_vec[i])); - recipient_sv_vec.emplace_back(session::to_unsigned_sv(recipient_vec[i])); + message_sv_vec.emplace_back(session::to_span(message_vec[i])); + recipient_sv_vec.emplace_back(session::to_span(recipient_vec[i])); } - auto sk = util::ustring_from_bytes(env, ed25519_secret_key); + auto sk = util::vector_from_bytes(env, ed25519_secret_key); std::array random_nonce; randombytes_buf(random_nonce.data(), random_nonce.size()); @@ -273,11 +283,11 @@ Java_network_loki_messenger_libsession_1util_util_Sodium_encryptForMultipleSimpl recipient_sv_vec, sk, domain_string, - session::ustring_view {random_nonce.data(), 24} + std::span {random_nonce.data(), 24} ); env->ReleaseStringUTFChars(domain, domain_string); - auto encoded = util::bytes_from_ustring(env, result); + auto encoded = util::bytes_from_vector(env, result); return encoded; } @@ -289,19 +299,19 @@ Java_network_loki_messenger_libsession_1util_util_Sodium_decryptForMultipleSimpl jbyteArray secret_key, jbyteArray sender_pub_key, jstring domain) { - auto sk_ustring = util::ustring_from_bytes(env, secret_key); - auto encoded_ustring = util::ustring_from_bytes(env, encoded); - auto pub_ustring = util::ustring_from_bytes(env, sender_pub_key); + auto sk_vector = util::vector_from_bytes(env, secret_key); + auto encoded_vector = util::vector_from_bytes(env, encoded); + auto pub_vector = util::vector_from_bytes(env, sender_pub_key); auto domain_bytes = env->GetStringUTFChars(domain, nullptr); auto result = session::decrypt_for_multiple_simple( - encoded_ustring, - sk_ustring, - pub_ustring, + encoded_vector, + sk_vector, + pub_vector, domain_bytes ); env->ReleaseStringUTFChars(domain,domain_bytes); if (result) { - return util::bytes_from_ustring(env, *result); + return util::bytes_from_vector(env, *result); } else { LOGD("no result from decrypt"); } @@ -321,7 +331,7 @@ Java_network_loki_messenger_libsession_1util_util_BaseCommunityInfo_00024Compani auto base_j = env->NewStringUTF(base.data()); auto room_j = env->NewStringUTF(room.data()); - auto pk_jbytes = util::bytes_from_ustring(env, pk); + auto pk_jbytes = util::bytes_from_vector(env, pk); jobject triple = env->NewObject(clazz, constructor, base_j, room_j, pk_jbytes); return triple; diff --git a/libsession-util/src/main/cpp/util.h b/libsession-util/src/main/cpp/util.h index 234ceb0017..7c884dfe6c 100644 --- a/libsession-util/src/main/cpp/util.h +++ b/libsession-util/src/main/cpp/util.h @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include "session/types.hpp" #include "session/config/groups/info.hpp" #include "session/config/groups/keys.hpp" @@ -14,8 +16,9 @@ namespace util { extern std::mutex util_mutex_; - jbyteArray bytes_from_ustring(JNIEnv* env, session::ustring_view from_str); - session::ustring ustring_from_bytes(JNIEnv* env, jbyteArray byteArray); + jbyteArray bytes_from_vector(JNIEnv* env, std::vector from_str); + std::vector vector_from_bytes(JNIEnv* env, jbyteArray byteArray); + jbyteArray bytes_from_span(JNIEnv* env, std::span from_str); std::string string_from_jstring(JNIEnv* env, jstring string); jobject serialize_user_pic(JNIEnv *env, session::config::profile_pic pic); std::pair deserialize_user_pic(JNIEnv *env, jobject user_pic);