1package com.peachpasswords.sync2345678internal object RustNoiseNative {9 init {10 System.loadLibrary("peach_noise_core")11 }1213 external fun nativeCreateNkInitiator(remotePublicKey: ByteArray): Long14 external fun nativeCreateNkResponder(15 localPrivateKey: ByteArray,16 localPublicKey: ByteArray,17 ): Long18 external fun nativeCreateNkInitiatorForTest(19 remotePublicKey: ByteArray,20 ephemeralPrivateKey: ByteArray,21 ): Long22 external fun nativeCreateNkResponderForTest(23 localPrivateKey: ByteArray,24 localPublicKey: ByteArray,25 ephemeralPrivateKey: ByteArray,26 ): Long2728 external fun nativeCreateKkInitiator(29 localPrivateKey: ByteArray,30 localPublicKey: ByteArray,31 remotePublicKey: ByteArray,32 ): Long33 external fun nativeCreateKkResponder(34 localPrivateKey: ByteArray,35 localPublicKey: ByteArray,36 remotePublicKey: ByteArray,37 ): Long38 external fun nativeCreateKkInitiatorForTest(39 localPrivateKey: ByteArray,40 localPublicKey: ByteArray,41 remotePublicKey: ByteArray,42 ephemeralPrivateKey: ByteArray,43 ): Long44 external fun nativeCreateKkResponderForTest(45 localPrivateKey: ByteArray,46 localPublicKey: ByteArray,47 remotePublicKey: ByteArray,48 ephemeralPrivateKey: ByteArray,49 ): Long5051 external fun nativeWriteHandshake(handle: Long, payload: ByteArray): ByteArray52 external fun nativeReadHandshake(handle: Long, message: ByteArray): ByteArray53 external fun nativeEncrypt(handle: Long, plaintext: ByteArray): ByteArray54 external fun nativeDecrypt(handle: Long, ciphertext: ByteArray): ByteArray55 external fun nativeHandshakeHash(handle: Long): ByteArray56 external fun nativeRekeyOutgoing(handle: Long)57 external fun nativeRekeyIncoming(handle: Long)58 external fun nativeClose(handle: Long)59}6061internal class RustNoiseSession(62 private var handle: Long,63) : NoiseNKSession {64 private fun openHandle(): Long {65 check(handle != 0L) { "Noise session is closed" }66 return handle67 }6869 fun writeHandshake(payload: ByteArray = ByteArray(0)): ByteArray =70 RustNoiseNative.nativeWriteHandshake(openHandle(), payload)7172 fun readHandshake(message: ByteArray): ByteArray =73 RustNoiseNative.nativeReadHandshake(openHandle(), message)7475 override fun encrypt(plaintext: ByteArray): ByteArray =76 RustNoiseNative.nativeEncrypt(openHandle(), plaintext)7778 override fun decrypt(ciphertext: ByteArray): ByteArray =79 RustNoiseNative.nativeDecrypt(openHandle(), ciphertext)8081 override val handshakeHash: ByteArray82 get() = RustNoiseNative.nativeHandshakeHash(openHandle())8384 override fun rekeyOutgoing() {85 RustNoiseNative.nativeRekeyOutgoing(openHandle())86 }8788 override fun rekeyIncoming() {89 RustNoiseNative.nativeRekeyIncoming(openHandle())90 }9192 override fun close() {93 val value = handle94 if (value == 0L) return95 handle = 0L96 RustNoiseNative.nativeClose(value)97 }98}99