Skip to content

Commit e192c9a

Browse files
SessionHero01SessionHero01
andauthored
Add more encrypt bindings (#9)
Co-authored-by: SessionHero01 <[email protected]>
1 parent 602cde7 commit e192c9a

File tree

2 files changed

+119
-5
lines changed

2 files changed

+119
-5
lines changed

library/src/main/cpp/encryption.cpp

Lines changed: 65 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ Java_network_loki_messenger_libsession_1util_SessionEncrypt_decryptForBlindedRec
1818
jbyteArray recipient_blind_id) {
1919
return jni_utils::run_catching_cxx_exception_or_throws<jobject>(env, [=] {
2020
auto [plain_text, session_id] = session::decrypt_from_blinded_recipient(
21-
JavaByteArrayRef(env, my_ed25519_privte_key).get(),
22-
JavaByteArrayRef(env, open_group_public_key).get(),
23-
JavaByteArrayRef(env, sender_blinded_id).get(),
24-
JavaByteArrayRef(env, recipient_blind_id).get(),
25-
JavaByteArrayRef(env, ciphertext).get()
21+
JavaByteArrayRef(env, my_ed25519_privte_key).get(),
22+
JavaByteArrayRef(env, open_group_public_key).get(),
23+
JavaByteArrayRef(env, sender_blinded_id).get(),
24+
JavaByteArrayRef(env, recipient_blind_id).get(),
25+
JavaByteArrayRef(env, ciphertext).get()
2626
);
2727

2828
return jni_utils::new_kotlin_pair(
@@ -32,3 +32,63 @@ Java_network_loki_messenger_libsession_1util_SessionEncrypt_decryptForBlindedRec
3232
);
3333
});
3434
}
35+
36+
extern "C"
37+
JNIEXPORT jobject JNICALL
38+
Java_network_loki_messenger_libsession_1util_SessionEncrypt_encryptForRecipient(JNIEnv *env,
39+
jobject thiz,
40+
jbyteArray ed25519_private_key,
41+
jbyteArray recipient_x25519_public_key,
42+
jbyteArray message) {
43+
return jni_utils::run_catching_cxx_exception_or_throws<jobject>(env, [=] {
44+
auto data = session::encrypt_for_recipient(
45+
JavaByteArrayRef(env, ed25519_private_key).get(),
46+
JavaByteArrayRef(env, recipient_x25519_public_key).get(),
47+
JavaByteArrayRef(env, message).get()
48+
);
49+
50+
return jni_utils::session_bytes_from_range(env, data);
51+
});
52+
}
53+
54+
extern "C"
55+
JNIEXPORT jobject JNICALL
56+
Java_network_loki_messenger_libsession_1util_SessionEncrypt_decryptIncoming(JNIEnv *env,
57+
jobject thiz,
58+
jbyteArray x25519_pub_key,
59+
jbyteArray x25519_priv_key,
60+
jbyteArray ciphertext) {
61+
return jni_utils::run_catching_cxx_exception_or_throws<jobject>(env, [=] {
62+
auto [plain_text, session_id] = session::decrypt_incoming_session_id(
63+
JavaByteArrayRef(env, x25519_pub_key).get(),
64+
JavaByteArrayRef(env, x25519_priv_key).get(),
65+
JavaByteArrayRef(env, ciphertext).get()
66+
);
67+
68+
return jni_utils::new_kotlin_pair(
69+
env,
70+
util::jstringFromOptional(env, session_id),
71+
jni_utils::session_bytes_from_range(env, plain_text)
72+
);
73+
});
74+
}
75+
76+
extern "C"
77+
JNIEXPORT jobject JNICALL
78+
Java_network_loki_messenger_libsession_1util_SessionEncrypt_encryptForBlindedRecipient(JNIEnv *env,
79+
jobject thiz,
80+
jbyteArray message,
81+
jbyteArray my_ed25519_privkey,
82+
jbyteArray server_pub_key,
83+
jbyteArray recipient_blind_id) {
84+
return jni_utils::run_catching_cxx_exception_or_throws<jobject>(env, [=] {
85+
auto data = session::encrypt_for_blinded_recipient(
86+
JavaByteArrayRef(env, my_ed25519_privkey).get(),
87+
JavaByteArrayRef(env, server_pub_key).get(),
88+
JavaByteArrayRef(env, recipient_blind_id).get(),
89+
JavaByteArrayRef(env, message).get()
90+
);
91+
92+
return jni_utils::session_bytes_from_range(env, data);
93+
});
94+
}

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

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,65 @@ import network.loki.messenger.libsession_util.util.Bytes
55
private typealias SessionId = String
66

77
object SessionEncrypt {
8+
/**
9+
* Decrypts data using the Session protocol for a blinded recipient.
10+
*
11+
* @param ciphertext The data to decrypt.
12+
* @param myEd25519Privkey The ED25519 private key to use for decryption. Could be 32 bytes seed or libsodium-style 64 bytes.
13+
* @param openGroupPubkey The public key of the open group. Must be 32 bytes unprefixed pub key.
14+
* @param senderBlindedId The sender's blinded ID. Must be 33 bytes prefixed with either 0x15 or 0x25.
15+
* @param recipientBlindId The recipient's blinded ID. Must be 33 bytes prefixed with either 0x15 or 0x25.
16+
* @return A pair of the sender's session ID and the decrypted message.
17+
*/
818
external fun decryptForBlindedRecipient(
919
ciphertext: ByteArray,
1020
myEd25519Privkey: ByteArray,
1121
openGroupPubkey: ByteArray,
1222
senderBlindedId: ByteArray,
1323
recipientBlindId: ByteArray
1424
): Pair<SessionId, Bytes>
25+
26+
/**
27+
* Encrypts data using the Session protocol for a blinded recipient.
28+
*
29+
* @param message The plaintext message to encrypt.
30+
* @param myEd25519Privkey The ED25519 private key to use for signing the message. Could be 32 bytes seed or libsodium-style 64 bytes.
31+
* @param serverPubKey The public key of the server. Must be 32 bytes unprefixed pub key.
32+
* @param recipientBlindId The recipient's blinded ID. Must be 33 bytes prefixed with either 0x15 or 0x25.
33+
*/
34+
external fun encryptForBlindedRecipient(
35+
message: ByteArray,
36+
myEd25519Privkey: ByteArray,
37+
serverPubKey: ByteArray,
38+
recipientBlindId: ByteArray,
39+
): Bytes
40+
41+
/**
42+
* Encrypts data using the Session protocol for `recipientX25519PublicKey`.
43+
*
44+
* @param ed25519PrivateKey The ED25519 private key to use for signing the message.
45+
* Could be 32bytes seed or libsodium-style 64 bytes
46+
* @param recipientX25519PublicKey Recipient's x25519 pub key. Must be 32 bytes unprefixed pub key.
47+
* @param message The plaintext message to encrypt.
48+
*/
49+
external fun encryptForRecipient(
50+
ed25519PrivateKey: ByteArray,
51+
recipientX25519PublicKey: ByteArray,
52+
message: ByteArray,
53+
): Bytes
54+
55+
/**
56+
* Decrypt data using the Session protocol.
57+
*
58+
* @param x25519PubKey The X25519 public key of what the sender used to encrypt the message. 32 bytes.
59+
* @param x25519PrivKey The X25519 private key to the public key used to encrypt the message. 32/64 bytes.
60+
* @param ciphertext The data to decrypt
61+
*
62+
* @return A pair of the sender's session ID and the decrypted message.
63+
*/
64+
external fun decryptIncoming(
65+
x25519PubKey: ByteArray,
66+
x25519PrivKey: ByteArray,
67+
ciphertext: ByteArray
68+
): Pair<SessionId, Bytes>
1569
}

0 commit comments

Comments
 (0)