From 6410ea128073464f9c6bc87fca9ec2a6947e9f08 Mon Sep 17 00:00:00 2001 From: SessionHero01 Date: Wed, 21 May 2025 14:44:40 +1000 Subject: [PATCH] Add binding for ed25519 --- library/src/main/cpp/CMakeLists.txt | 3 ++ library/src/main/cpp/ed25519.cpp | 33 +++++++++++++++++++ .../loki/messenger/libsession_util/ED25519.kt | 28 ++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 library/src/main/cpp/ed25519.cpp create mode 100644 library/src/main/java/network/loki/messenger/libsession_util/ED25519.kt diff --git a/library/src/main/cpp/CMakeLists.txt b/library/src/main/cpp/CMakeLists.txt index 5409e1b..da33623 100644 --- a/library/src/main/cpp/CMakeLists.txt +++ b/library/src/main/cpp/CMakeLists.txt @@ -39,6 +39,9 @@ set(SOURCES group_info.cpp config_common.cpp logging.cpp + encryption.cpp + jni_utils.cpp + ed25519.cpp ) add_library( # Sets the name of the library. diff --git a/library/src/main/cpp/ed25519.cpp b/library/src/main/cpp/ed25519.cpp new file mode 100644 index 0000000..23cb993 --- /dev/null +++ b/library/src/main/cpp/ed25519.cpp @@ -0,0 +1,33 @@ +#include "jni_utils.h" +#include "util.h" + +#include + +extern "C" +JNIEXPORT jbyteArray JNICALL +Java_network_loki_messenger_libsession_1util_ED25519_sign(JNIEnv *env, jobject thiz, + jbyteArray ed25519_private_key, + jbyteArray message) { + return jni_utils::run_catching_cxx_exception_or_throws(env, [=] { + auto sigs = session::ed25519::sign( + jni_utils::JavaByteArrayRef(env, ed25519_private_key).get(), + jni_utils::JavaByteArrayRef(env, message).get()); + + return util::bytes_from_vector(env, sigs); + }); +} + +extern "C" +JNIEXPORT jboolean JNICALL +Java_network_loki_messenger_libsession_1util_ED25519_verify(JNIEnv *env, jobject thiz, + jbyteArray ed25519_public_key, + jbyteArray message, + jbyteArray signature) { + return jni_utils::run_catching_cxx_exception_or_throws(env, [=] { + return session::ed25519::verify( + jni_utils::JavaByteArrayRef(env, signature).get(), + jni_utils::JavaByteArrayRef(env, ed25519_public_key).get(), + jni_utils::JavaByteArrayRef(env, message).get() + ); + }); +} \ No newline at end of file diff --git a/library/src/main/java/network/loki/messenger/libsession_util/ED25519.kt b/library/src/main/java/network/loki/messenger/libsession_util/ED25519.kt new file mode 100644 index 0000000..6a0d69f --- /dev/null +++ b/library/src/main/java/network/loki/messenger/libsession_util/ED25519.kt @@ -0,0 +1,28 @@ +package network.loki.messenger.libsession_util + +object ED25519 { + /** + * Sign a message using the ed25519 private key + * + * @param ed25519PrivateKey 64 bytes ed25519 private key + * @param message Message to sign + * @return 64 bytes signature + */ + external fun sign( + ed25519PrivateKey: ByteArray, + message: ByteArray, + ): ByteArray + + /** + * Verify a message using the ed25519 public key + * + * @param ed25519PublicKey 32 bytes ed25519 public key + * @param message Message to verify + * @param signature 64 bytes signature + */ + external fun verify( + ed25519PublicKey: ByteArray, + message: ByteArray, + signature: ByteArray, + ): Boolean +} \ No newline at end of file