Skip to content

Commit 7c32460

Browse files
SessionHero01SessionHero01
authored andcommitted
Add ed25519 key gen and x25519
1 parent 3c7cc45 commit 7c32460

File tree

5 files changed

+50
-0
lines changed

5 files changed

+50
-0
lines changed

library/src/main/cpp/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ set(SOURCES
4242
encryption.cpp
4343
jni_utils.cpp
4444
ed25519.cpp
45+
curve25519.cpp
4546
)
4647

4748
add_library( # Sets the name of the library.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#include "jni_utils.h"
2+
3+
#include <session/curve25519.hpp>
4+
5+
extern "C"
6+
JNIEXPORT jobject JNICALL
7+
Java_network_loki_messenger_libsession_1util_Curve25519_fromED25519(JNIEnv *env, jobject thiz,
8+
jbyteArray ed25519_public_key,
9+
jbyteArray ed25519_private_key) {
10+
return jni_utils::run_catching_cxx_exception_or_throws<jobject>(env, [=] {
11+
auto pk = session::curve25519::to_curve25519_pubkey(jni_utils::JavaByteArrayRef(env, ed25519_public_key).get());
12+
auto sk = session::curve25519::to_curve25519_seckey(jni_utils::JavaByteArrayRef(env, ed25519_private_key).get());
13+
14+
return jni_utils::new_key_pair(env, util::bytes_from_span(env, pk), util::bytes_from_span(env, sk));
15+
});
16+
}

library/src/main/cpp/ed25519.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,17 @@ Java_network_loki_messenger_libsession_1util_ED25519_verify(JNIEnv *env, jobject
3030
jni_utils::JavaByteArrayRef(env, message).get()
3131
);
3232
});
33+
}
34+
35+
extern "C"
36+
JNIEXPORT jobject JNICALL
37+
Java_network_loki_messenger_libsession_1util_ED25519_generate(JNIEnv *env, jobject thiz,
38+
jbyteArray seed) {
39+
return jni_utils::run_catching_cxx_exception_or_throws<jobject>(env, [=] {
40+
auto [pk, sk] = seed
41+
? session::ed25519::ed25519_key_pair(jni_utils::JavaByteArrayRef(env, seed).get())
42+
: session::ed25519::ed25519_key_pair();
43+
44+
return jni_utils::new_key_pair(env, util::bytes_from_span(env, pk), util::bytes_from_span(env, sk));
45+
});
3346
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package network.loki.messenger.libsession_util
2+
3+
import network.loki.messenger.libsession_util.util.KeyPair
4+
5+
object Curve25519 {
6+
private external fun fromED25519(
7+
ed25519PublicKey: ByteArray,
8+
ed25519PrivateKey: ByteArray,
9+
): KeyPair
10+
11+
fun fromED25519(keyPair: KeyPair): KeyPair =
12+
fromED25519(
13+
ed25519PublicKey = keyPair.pubKey.data,
14+
ed25519PrivateKey = keyPair.secretKey.data
15+
)
16+
}

library/src/main/java/network/loki/messenger/libsession_util/ED25519.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package network.loki.messenger.libsession_util
22

3+
import network.loki.messenger.libsession_util.util.KeyPair
4+
35
object ED25519 {
46
/**
57
* Sign a message using the ed25519 private key
@@ -25,4 +27,6 @@ object ED25519 {
2527
message: ByteArray,
2628
signature: ByteArray,
2729
): Boolean
30+
31+
external fun generate(seed: ByteArray?): KeyPair
2832
}

0 commit comments

Comments
 (0)