diff --git a/native/handlers/peer-to-peer-message-handler.js b/native/handlers/peer-to-peer-message-handler.js --- a/native/handlers/peer-to-peer-message-handler.js +++ b/native/handlers/peer-to-peer-message-handler.js @@ -5,6 +5,7 @@ peerToPeerMessageTypes, } from 'lib/types/tunnelbroker/peer-to-peer-message-types.js'; +import { commCoreModule } from '../native-modules.js'; import { nativeInboundContentSessionCreator } from '../utils/crypto-utils.js'; async function peerToPeerMessageHandler( @@ -22,7 +23,19 @@ ); } } else if (message.type === peerToPeerMessageTypes.ENCRYPTED_MESSAGE) { - console.log('Received encrypted message'); + try { + const decrypted = await commCoreModule.decrypt( + message.encryptedContent, + message.senderInfo.deviceID, + ); + console.log( + `Decrypted message from device ${message.senderInfo.deviceID}: ${decrypted}`, + ); + } catch (e) { + console.log( + `Error decrypting message from device ${message.senderInfo.deviceID}: ${e.message}`, + ); + } } } diff --git a/native/profile/tunnelbroker-menu.react.js b/native/profile/tunnelbroker-menu.react.js --- a/native/profile/tunnelbroker-menu.react.js +++ b/native/profile/tunnelbroker-menu.react.js @@ -7,13 +7,21 @@ import { useTunnelbroker } from 'lib/tunnelbroker/tunnelbroker-context.js'; import type { TunnelbrokerMessage } from 'lib/types/tunnelbroker/messages.js'; +import { + type EncryptedMessage, + peerToPeerMessageTypes, +} from 'lib/types/tunnelbroker/peer-to-peer-message-types.js'; import type { ProfileNavigationProp } from './profile.react.js'; import Button from '../components/button.react.js'; import TextInput from '../components/text-input.react.js'; +import { commCoreModule } from '../native-modules.js'; import type { NavigationRoute } from '../navigation/route-names.js'; import { useColors, useStyles } from '../themes/colors.js'; -import { createOlmSessionsWithOwnDevices } from '../utils/crypto-utils.js'; +import { + createOlmSessionsWithOwnDevices, + getContentSigningKey, +} from '../utils/crypto-utils.js'; type Props = { +navigation: ProfileNavigationProp<'TunnelbrokerMenu'>, @@ -56,6 +64,30 @@ } }, [sendMessage]); + const onSendEncryptedMessage = React.useCallback(async () => { + try { + const encrypted = await commCoreModule.encrypt( + `Encrypted message to ${recipient}`, + recipient, + ); + const deviceID = await getContentSigningKey(); + const encryptedMessage: EncryptedMessage = { + type: peerToPeerMessageTypes.ENCRYPTED_MESSAGE, + senderInfo: { + deviceID, + userID: 'someID', + }, + encryptedContent: encrypted, + }; + await sendMessage({ + deviceID: recipient, + payload: JSON.stringify(encryptedMessage), + }); + } catch (e) { + console.log(`Error sending encrypted content to device: ${e.message}`); + } + }, [recipient, sendMessage]); + return ( + MESSAGES