1package com.peachpasswords.sync23internal data class NoiseKKKeyPair(4 val publicKey: ByteArray,5 val secretKey: ByteArray,6)78910111213internal suspend fun noiseKKInitiator(14 ourStaticPrivateKey: ByteArray,15 ourStaticPublicKey: ByteArray,16 responderStaticPublicKey: ByteArray,17 send: suspend (ByteArray) -> Unit,18 receive: suspend () -> ByteArray,19 ephemeral: NoiseKKKeyPair? = null,20): NoiseNKSession {21 val native = RustNoiseSession(22 if (ephemeral == null) {23 RustNoiseNative.nativeCreateKkInitiator(24 ourStaticPrivateKey,25 ourStaticPublicKey,26 responderStaticPublicKey,27 )28 } else {29 RustNoiseNative.nativeCreateKkInitiatorForTest(30 ourStaticPrivateKey,31 ourStaticPublicKey,32 responderStaticPublicKey,33 ephemeral.secretKey,34 )35 },36 )37 return try {38 send(native.writeHandshake())39 native.readHandshake(receive())40 native41 } catch (error: Throwable) {42 native.close()43 throw error44 }45}4647internal suspend fun noiseKKResponder(48 ourStaticPrivateKey: ByteArray,49 ourStaticPublicKey: ByteArray,50 expectedInitiatorStaticPublicKey: ByteArray,51 send: suspend (ByteArray) -> Unit,52 receive: suspend () -> ByteArray,53 ephemeral: NoiseKKKeyPair? = null,54): NoiseNKSession {55 val native = RustNoiseSession(56 if (ephemeral == null) {57 RustNoiseNative.nativeCreateKkResponder(58 ourStaticPrivateKey,59 ourStaticPublicKey,60 expectedInitiatorStaticPublicKey,61 )62 } else {63 RustNoiseNative.nativeCreateKkResponderForTest(64 ourStaticPrivateKey,65 ourStaticPublicKey,66 expectedInitiatorStaticPublicKey,67 ephemeral.secretKey,68 )69 },70 )71 return try {72 native.readHandshake(receive())73 send(native.writeHandshake())74 native75 } catch (error: Throwable) {76 native.close()77 throw error78 }79}80