diff --git a/library/src/main/cpp/CMakeLists.txt b/library/src/main/cpp/CMakeLists.txt index e14cfb8..da33623 100644 --- a/library/src/main/cpp/CMakeLists.txt +++ b/library/src/main/cpp/CMakeLists.txt @@ -41,6 +41,7 @@ set(SOURCES 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