Skip to content

Commit 13d217a

Browse files
SessionHero01SessionHero01
authored andcommitted
Only integrate singing of the requests
1 parent b93e7cc commit 13d217a

File tree

14 files changed

+286
-385
lines changed

14 files changed

+286
-385
lines changed

library/src/main/cpp/jni_utils.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,13 @@ namespace jni_utils {
210210

211211
public:
212212
JavaByteArrayRef(JNIEnv *env, jbyteArray byte_array) : env(env), byte_array(byte_array) {
213-
jsize length = env->GetArrayLength(byte_array);
214-
data = std::span<unsigned char>(reinterpret_cast<unsigned char *>(env->GetByteArrayElements(byte_array, nullptr)), length);
213+
if (byte_array) {
214+
jsize length = env->GetArrayLength(byte_array);
215+
data = std::span<unsigned char>(
216+
reinterpret_cast<unsigned char *>(env->GetByteArrayElements(byte_array,
217+
nullptr)),
218+
length);
219+
}
215220
}
216221

217222
JavaByteArrayRef(const JavaByteArrayRef &) = delete;

library/src/main/cpp/pro_backend.cpp

Lines changed: 56 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -6,79 +6,76 @@
66

77
using namespace jni_utils;
88

9+
static jobject serializeMasterRotatingSignatures(
10+
JNIEnv *env, const session::pro_backend::MasterRotatingSignatures &sigs) {
11+
JavaLocalRef<jclass> result_class(
12+
env,
13+
env->FindClass(
14+
"network/loki/messenger/libsession_util/pro/BackendRequests$MasterRotatingSignatures"));
15+
16+
return env->NewObject(
17+
result_class.get(),
18+
env->GetMethodID(result_class.get(), "<init>", "([B[B)V"),
19+
util::bytes_from_span(env, sigs.master_sig),
20+
util::bytes_from_span(env, sigs.rotating_sig)
21+
);
22+
}
23+
924
extern "C"
10-
JNIEXPORT jstring JNICALL
11-
Java_network_loki_messenger_libsession_1util_pro_AddProPaymentRequests_buildJson(JNIEnv *env,
12-
jobject thiz,
13-
jint version,
14-
jbyteArray master_private_key,
15-
jbyteArray rotating_private_key,
16-
jint payment_provider,
17-
jstring payment_transaction_id,
18-
jstring payment_order_id) {
19-
return run_catching_cxx_exception_or_throws<jstring>(env, [=]() {
20-
return util::jstringFromOptional(env, session::pro_backend::AddProPaymentRequest::build_to_json(
21-
version,
25+
JNIEXPORT jobject JNICALL
26+
Java_network_loki_messenger_libsession_1util_pro_BackendRequests_signAddProPaymentRequest(
27+
JNIEnv *env, jobject thiz, jint version, jbyteArray master_private_key,
28+
jbyteArray rotating_private_key, jint payment_provider, jstring payment_id,
29+
jstring order_id) {
30+
return run_catching_cxx_exception_or_throws<jobject>(env, [=] {
31+
auto sigs = session::pro_backend::AddProPaymentRequest::build_sigs(
32+
static_cast<std::uint8_t>(version),
2233
JavaByteArrayRef(env, master_private_key).get(),
2334
JavaByteArrayRef(env, rotating_private_key).get(),
24-
static_cast<SESSION_PRO_BACKEND_PAYMENT_PROVIDER>(payment_provider),
25-
JavaStringRef(env, payment_transaction_id).get_raw(),
26-
JavaStringRef(env, payment_order_id).get_raw()
27-
)
28-
);
35+
static_cast<SESSION_PRO_BACKEND_PAYMENT_PROVIDER>(
36+
payment_provider),
37+
JavaStringRef(env, payment_id).get_raw(),
38+
JavaStringRef(env, order_id).get_raw());
39+
40+
return serializeMasterRotatingSignatures(env, sigs);
2941
});
3042
}
3143

32-
3344
extern "C"
3445
JNIEXPORT jobject JNICALL
35-
Java_network_loki_messenger_libsession_1util_pro_ProProofResponse_00024Companion_nativeParseRaw(
36-
JNIEnv *env, jobject thiz, jstring json) {
37-
return run_catching_cxx_exception_or_throws<jobject>(env, [=]() {
38-
auto response = session::pro_backend::AddProPaymentOrGetProProofResponse::parse(
39-
JavaStringRef(env, json).view()
46+
Java_network_loki_messenger_libsession_1util_pro_BackendRequests_signGetProProofRequest(JNIEnv *env,
47+
jobject thiz,
48+
jint version,
49+
jbyteArray master_private_key,
50+
jbyteArray rotating_private_key,
51+
jlong unix_ts_ms) {
52+
return run_catching_cxx_exception_or_throws<jobject>(env, [=] {
53+
auto sigs = session::pro_backend::GetProProofRequest::build_sigs(
54+
version,
55+
JavaByteArrayRef(env, master_private_key).get(),
56+
JavaByteArrayRef(env, rotating_private_key).get(),
57+
std::chrono::sys_time<std::chrono::milliseconds>{
58+
std::chrono::milliseconds{unix_ts_ms}}
4059
);
4160

42-
if (response.errors.empty()) {
43-
JavaLocalRef<jclass> pro_proof_class(env, env->FindClass("network/loki/messenger/libsession_util/pro/ProProof"));
44-
JavaLocalRef<jclass> success_class(env, env->FindClass("network/loki/messenger/libsession_util/pro/ProProofResponse$Success"));
45-
46-
return env->NewObject(
47-
success_class.get(),
48-
env->GetMethodID(success_class.get(), "<init>", "(Lnetwork/loki/messenger/libsession_util/pro/ProProof;)V"),
49-
env->NewObject(
50-
pro_proof_class.get(),
51-
env->GetMethodID(pro_proof_class.get(), "<init>", "(J)V"),
52-
reinterpret_cast<jlong>(new session::ProProof(response.proof))
53-
)
54-
);
55-
}
56-
57-
JavaLocalRef<jclass> error_class(env, env->FindClass("network/loki/messenger/libsession_util/pro/ProProofResponse$Failure"));
58-
59-
return env->NewObject(
60-
error_class.get(),
61-
env->GetMethodID(error_class.get(), "<init>", "(ILjava/util/List;)V"),
62-
static_cast<jint>(response.status),
63-
jstring_list_from_collection(env, response.errors)
64-
);
61+
return serializeMasterRotatingSignatures(env, sigs);
6562
});
6663
}
6764

6865
extern "C"
69-
JNIEXPORT jstring JNICALL
70-
Java_network_loki_messenger_libsession_1util_pro_GetProProofRequests_buildJson(JNIEnv *env,
71-
jint version,
72-
jobject thiz,
73-
jbyteArray master_private_key,
74-
jbyteArray rotating_private_key,
75-
jlong now_unix_ts) {
76-
return run_catching_cxx_exception_or_throws<jstring>(env, [=] () {
77-
return util::jstringFromOptional(env, session::pro_backend::GetProProofRequest::build_to_json(
78-
version,
66+
JNIEXPORT jbyteArray JNICALL
67+
Java_network_loki_messenger_libsession_1util_pro_BackendRequests_signGetProStatusRequest(
68+
JNIEnv *env, jobject thiz, jint version, jbyteArray master_private_key, jlong now_ms,
69+
jint count) {
70+
return run_catching_cxx_exception_or_throws<jbyteArray>(env, [=] {
71+
auto sig = session::pro_backend::GetProStatusRequest::build_sig(
72+
static_cast<std::uint8_t>(version),
7973
JavaByteArrayRef(env, master_private_key).get(),
80-
JavaByteArrayRef(env, rotating_private_key).get(),
81-
std::chrono::sys_time<std::chrono::milliseconds> { std::chrono::milliseconds{static_cast<int64_t>(now_unix_ts)} }
82-
));
74+
std::chrono::sys_time<std::chrono::milliseconds>{
75+
std::chrono::milliseconds{now_ms}},
76+
static_cast<std::uint32_t>(count)
77+
);
78+
79+
return util::bytes_from_span(env, sig);
8380
});
8481
}

library/src/main/cpp/pro_proof.cpp

Lines changed: 49 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -6,82 +6,62 @@
66
#include "util.h"
77
#include "jni_utils.h"
88

9+
using namespace jni_utils;
910

1011
extern "C"
1112
JNIEXPORT jint JNICALL
12-
Java_network_loki_messenger_libsession_1util_pro_ProProof_00024Companion_nativeGetVersion(
13-
JNIEnv *env, jobject thiz, jlong native_value) {
14-
return static_cast<jint>(
15-
reinterpret_cast<session::ProProof*>(native_value)->version);
16-
}
13+
Java_network_loki_messenger_libsession_1util_pro_ProProof_status(JNIEnv *env, jobject thiz,
14+
jbyteArray verify_pub_key,
15+
jlong now_unix_ts,
16+
jbyteArray signed_message_data,
17+
jbyteArray signed_message_signature) {
18+
return run_catching_cxx_exception_or_throws<jint>(env, [=]() {
19+
JavaLocalRef<jclass> clazz(env, env->GetObjectClass(thiz));
20+
auto get_version_method = env->GetMethodID(clazz.get(), "getVersion", "()I");
21+
auto get_gen_index_hash_method = env->GetMethodID(clazz.get(), "getGenIndexHash", "()[B");
22+
auto get_rotating_pub_key_method = env->GetMethodID(clazz.get(), "getRotatingPubKey",
23+
"()[B");
24+
auto get_expiry_method = env->GetMethodID(clazz.get(), "getExpiryMs", "()J");
25+
auto get_signature_method = env->GetMethodID(clazz.get(), "getSignature", "()[B");
1726

27+
auto version = env->CallIntMethod(thiz, get_version_method);
28+
JavaLocalRef<jbyteArray> gen_index_hash_bytes_obj(env,
29+
static_cast<jbyteArray>(env->CallObjectMethod(
30+
thiz,
31+
get_gen_index_hash_method)));
32+
JavaLocalRef<jbyteArray> rotating_pub_key_bytes_obj(env,
33+
static_cast<jbyteArray>(env->CallObjectMethod(
34+
thiz,
35+
get_rotating_pub_key_method)));
36+
auto expiry_ms = env->CallLongMethod(thiz, get_expiry_method);
37+
JavaLocalRef<jbyteArray> signature_bytes_obj(env,
38+
static_cast<jbyteArray>(env->CallObjectMethod(
39+
thiz, get_signature_method)));
1840

19-
extern "C"
20-
JNIEXPORT jlong JNICALL
21-
Java_network_loki_messenger_libsession_1util_pro_ProProof_00024Companion_nativeGetExpiry(
22-
JNIEnv *env, jobject thiz, jlong native_value) {
23-
return static_cast<jlong>(
24-
reinterpret_cast<session::ProProof*>(native_value)->expiry_unix_ts.time_since_epoch().count());
25-
}
26-
27-
extern "C"
28-
JNIEXPORT jbyteArray JNICALL
29-
Java_network_loki_messenger_libsession_1util_pro_ProProof_00024Companion_nativeGetRotatingPubKey(
30-
JNIEnv *env, jobject thiz, jlong native_value) {
31-
const auto& rotating_pubkey =
32-
reinterpret_cast<session::ProProof*>(native_value)->rotating_pubkey;
33-
34-
return util::bytes_from_span(env, rotating_pubkey);
35-
}
36-
37-
extern "C"
38-
JNIEXPORT jstring JNICALL
39-
Java_network_loki_messenger_libsession_1util_pro_ProProof_00024Companion_nativeSerialize(
40-
JNIEnv *env, jobject thiz, jlong native_value) {
41-
const auto& proof =
42-
*reinterpret_cast<session::ProProof*>(native_value);
43-
nlohmann::json j;
44-
j["version"] = proof.version;
45-
j["gen_index_hash"] = oxenc::to_base64(proof.gen_index_hash);
46-
j["rotating_pubkey"] = oxenc::to_base64(proof.rotating_pubkey);
47-
j["expiry_unix_ts_ms"] = proof.expiry_unix_ts.time_since_epoch().count();
48-
j["sig"] = oxenc::to_base64(proof.sig);
49-
50-
return util::jstringFromOptional(env, j.dump());
51-
}
41+
std::optional<session::ProSignedMessage> signed_msg;
42+
JavaByteArrayRef signed_message_data_ref(env, signed_message_data);
43+
JavaByteArrayRef signed_message_signature_ref(env, signed_message_signature);
5244

53-
template<size_t N>
54-
void from_json(const nlohmann::json& j, std::array<uint8_t, N>& arr) {
55-
auto b64_str = j.get<std::string_view>();
56-
auto bytes = oxenc::from_base64(b64_str);
57-
if (bytes.size() != N) {
58-
throw std::invalid_argument{"Invalid array size in from_json"};
59-
}
60-
std::copy(bytes.begin(), bytes.end(), arr.begin());
61-
}
45+
if (signed_message_data && signed_message_signature) {
46+
signed_msg.emplace(session::ProSignedMessage {
47+
.sig = signed_message_signature_ref.get(),
48+
.msg = signed_message_data_ref.get(),
49+
});
50+
}
6251

63-
extern "C"
64-
JNIEXPORT jlong JNICALL
65-
Java_network_loki_messenger_libsession_1util_pro_ProProof_00024Companion_nativeDeserialize(
66-
JNIEnv *env, jobject thiz, jstring data) {
67-
return jni_utils::run_catching_cxx_exception_or_throws<jlong>(env, [=]() {
68-
auto j = nlohmann::json::parse(jni_utils::JavaStringRef(env, data).view());
52+
session::ProProof pro_proof {
53+
.version = static_cast<std::uint8_t>(version),
54+
.gen_index_hash = *java_to_cpp_array<32>(env, gen_index_hash_bytes_obj.get()),
55+
.rotating_pubkey = *java_to_cpp_array<32>(env, rotating_pub_key_bytes_obj.get()),
56+
.expiry_unix_ts = std::chrono::sys_time<std::chrono::milliseconds>(
57+
std::chrono::milliseconds(expiry_ms)),
58+
.sig = *java_to_cpp_array<64>(env, signature_bytes_obj.get()),
59+
};
6960

70-
return reinterpret_cast<jlong>(new session::ProProof {
71-
.version = j.at("version").get<uint8_t>(),
72-
.gen_index_hash = j.at("gen_index_hash").get<session::array_uc32>(),
73-
.rotating_pubkey = j.at("rotating_pubkey").get<session::array_uc32>(),
74-
.expiry_unix_ts = std::chrono::sys_time<std::chrono::milliseconds>{
75-
std::chrono::milliseconds{static_cast<int64_t>(j.at("expiry_unix_ts_ms").get<uint64_t>())}},
76-
.sig = j.at("sig").get<session::array_uc64>(),
77-
});
61+
return static_cast<jint>(pro_proof.status(
62+
JavaByteArrayRef(env, verify_pub_key).get(),
63+
std::chrono::sys_time<std::chrono::milliseconds>{std::chrono::milliseconds(now_unix_ts)},
64+
signed_msg
65+
));
7866
});
79-
}
80-
81-
extern "C"
82-
JNIEXPORT void JNICALL
83-
Java_network_loki_messenger_libsession_1util_pro_ProProof_00024Companion_nativeDestroy(JNIEnv *env,
84-
jobject thiz,
85-
jlong native_value) {
86-
delete reinterpret_cast<session::ProProof*>(native_value);
8767
}

0 commit comments

Comments
 (0)