@ethora/chat-component-rn 26.8.6 → 26.8.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/README.md +40 -0
- package/lib/commonjs/assets/icons.js +4 -2
- package/lib/commonjs/assets/icons.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatHeader.js +28 -6
- package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatRoom.js +9 -1
- package/lib/commonjs/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/commonjs/components/MainComponents/EncryptedSendNotice.js +47 -0
- package/lib/commonjs/components/MainComponents/EncryptedSendNotice.js.map +1 -0
- package/lib/commonjs/components/MainComponents/EncryptionCard.js +286 -0
- package/lib/commonjs/components/MainComponents/EncryptionCard.js.map +1 -0
- package/lib/commonjs/components/MainComponents/MediaMessage.js +7 -0
- package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js +5 -0
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/SealedAttachment.js +231 -0
- package/lib/commonjs/components/MainComponents/SealedAttachment.js.map +1 -0
- package/lib/commonjs/components/MessageBubble/BottomReplyContainer.js +2 -1
- package/lib/commonjs/components/MessageBubble/BottomReplyContainer.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/Message.js +66 -6
- package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js +2 -1
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +7 -4
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +159 -16
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js +4 -0
- package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
- package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js +29 -6
- package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js +5 -1
- package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/ChatRoomItem.js +32 -9
- package/lib/commonjs/components/RoomComponents/ChatRoomItem.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/LastMessageItem.js +6 -0
- package/lib/commonjs/components/RoomComponents/LastMessageItem.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js +2 -2
- package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js +4 -6
- package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js +2 -2
- package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessageSealed.js +41 -0
- package/lib/commonjs/components/RoomComponents/styled/LastMessageSealed.js.map +1 -0
- package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js +2 -2
- package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
- package/lib/commonjs/components/Thread/ThreadWrapper.js +53 -45
- package/lib/commonjs/components/Thread/ThreadWrapper.js.map +1 -1
- package/lib/commonjs/components/UsersList/UsersList.js +2 -1
- package/lib/commonjs/components/UsersList/UsersList.js.map +1 -1
- package/lib/commonjs/components/styled/SendInput.js +4 -2
- package/lib/commonjs/components/styled/SendInput.js.map +1 -1
- package/lib/commonjs/e2ee/crypto.js +207 -0
- package/lib/commonjs/e2ee/crypto.js.map +1 -0
- package/lib/commonjs/e2ee/deviceStore.js +84 -0
- package/lib/commonjs/e2ee/deviceStore.js.map +1 -0
- package/lib/commonjs/e2ee/fileCipher.js +95 -0
- package/lib/commonjs/e2ee/fileCipher.js.map +1 -0
- package/lib/commonjs/e2ee/fileEnvelope.js +79 -0
- package/lib/commonjs/e2ee/fileEnvelope.js.map +1 -0
- package/lib/commonjs/e2ee/index.js +210 -0
- package/lib/commonjs/e2ee/index.js.map +1 -0
- package/lib/commonjs/e2ee/limits.js +9 -0
- package/lib/commonjs/e2ee/limits.js.map +1 -0
- package/lib/commonjs/e2ee/ns.js +8 -0
- package/lib/commonjs/e2ee/ns.js.map +1 -0
- package/lib/commonjs/e2ee/omemo.js +622 -0
- package/lib/commonjs/e2ee/omemo.js.map +1 -0
- package/lib/commonjs/e2ee/protobuf.js +149 -0
- package/lib/commonjs/e2ee/protobuf.js.map +1 -0
- package/lib/commonjs/e2ee/ratchet.js +238 -0
- package/lib/commonjs/e2ee/ratchet.js.map +1 -0
- package/lib/commonjs/e2ee/sealedBody.js +23 -0
- package/lib/commonjs/e2ee/sealedBody.js.map +1 -0
- package/lib/commonjs/e2ee/sealedFiles.js +174 -0
- package/lib/commonjs/e2ee/sealedFiles.js.map +1 -0
- package/lib/commonjs/e2ee/send.js +54 -0
- package/lib/commonjs/e2ee/send.js.map +1 -0
- package/lib/commonjs/e2ee/stanza.js +114 -0
- package/lib/commonjs/e2ee/stanza.js.map +1 -0
- package/lib/commonjs/e2ee/store.js +43 -0
- package/lib/commonjs/e2ee/store.js.map +1 -0
- package/lib/commonjs/helpers/accountName.js +23 -0
- package/lib/commonjs/helpers/accountName.js.map +1 -0
- package/lib/commonjs/helpers/createMessageFromXml.js +19 -4
- package/lib/commonjs/helpers/createMessageFromXml.js.map +1 -1
- package/lib/commonjs/helpers/createUserNameFromSetUser.js +2 -1
- package/lib/commonjs/helpers/createUserNameFromSetUser.js.map +1 -1
- package/lib/commonjs/helpers/displayName.js +16 -0
- package/lib/commonjs/helpers/displayName.js.map +1 -0
- package/lib/commonjs/helpers/persistCrypto.js +5 -0
- package/lib/commonjs/helpers/persistCrypto.js.map +1 -1
- package/lib/commonjs/helpers/secureKeyValue.js +20 -0
- package/lib/commonjs/helpers/secureKeyValue.js.map +1 -1
- package/lib/commonjs/helpers/videoCache.js +136 -0
- package/lib/commonjs/helpers/videoCache.js.map +1 -0
- package/lib/commonjs/hooks/useLogout.js +8 -0
- package/lib/commonjs/hooks/useLogout.js.map +1 -1
- package/lib/commonjs/hooks/useSendMessage.js +71 -7
- package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
- package/lib/commonjs/i18n/strings.js +180 -0
- package/lib/commonjs/i18n/strings.js.map +1 -1
- package/lib/commonjs/main.js +13 -0
- package/lib/commonjs/main.js.map +1 -1
- package/lib/commonjs/networking/api-requests/auth.api.js +4 -1
- package/lib/commonjs/networking/api-requests/auth.api.js.map +1 -1
- package/lib/commonjs/networking/api-requests/rooms.api.js +111 -17
- package/lib/commonjs/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js +40 -0
- package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/sendMediaMessage.xmpp.js +16 -3
- package/lib/commonjs/networking/xmpp/sendMediaMessage.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js +13 -6
- package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js +14 -6
- package/lib/commonjs/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmppClient.js +6 -0
- package/lib/commonjs/networking/xmppClient.js.map +1 -1
- package/lib/commonjs/roomStore/persistBackend.js +9 -12
- package/lib/commonjs/roomStore/persistBackend.js.map +1 -1
- package/lib/commonjs/roomStore/persistence.js +8 -1
- package/lib/commonjs/roomStore/persistence.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/module/assets/icons.js +3 -1
- package/lib/module/assets/icons.js.map +1 -1
- package/lib/module/components/MainComponents/ChatHeader.js +29 -7
- package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/module/components/MainComponents/ChatRoom.js +9 -1
- package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/module/components/MainComponents/EncryptedSendNotice.js +42 -0
- package/lib/module/components/MainComponents/EncryptedSendNotice.js.map +1 -0
- package/lib/module/components/MainComponents/EncryptionCard.js +281 -0
- package/lib/module/components/MainComponents/EncryptionCard.js.map +1 -0
- package/lib/module/components/MainComponents/MediaMessage.js +7 -0
- package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/module/components/MainComponents/ReduxWrapper.js +5 -0
- package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/SealedAttachment.js +224 -0
- package/lib/module/components/MainComponents/SealedAttachment.js.map +1 -0
- package/lib/module/components/MessageBubble/BottomReplyContainer.js +2 -1
- package/lib/module/components/MessageBubble/BottomReplyContainer.js.map +1 -1
- package/lib/module/components/MessageBubble/Message.js +69 -9
- package/lib/module/components/MessageBubble/Message.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageInteractions.js +2 -1
- package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +7 -4
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +161 -18
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/PdfView.js +4 -0
- package/lib/module/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
- package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js +32 -8
- package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
- package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js +4 -0
- package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
- package/lib/module/components/RoomComponents/ChatRoomItem.js +32 -9
- package/lib/module/components/RoomComponents/ChatRoomItem.js.map +1 -1
- package/lib/module/components/RoomComponents/LastMessageItem.js +6 -0
- package/lib/module/components/RoomComponents/LastMessageItem.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastAudioMessage.js +2 -2
- package/lib/module/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessageFile.js +4 -6
- package/lib/module/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js +2 -2
- package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessageSealed.js +36 -0
- package/lib/module/components/RoomComponents/styled/LastMessageSealed.js.map +1 -0
- package/lib/module/components/RoomComponents/styled/LastMessageVideo.js +2 -2
- package/lib/module/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
- package/lib/module/components/Thread/ThreadWrapper.js +54 -46
- package/lib/module/components/Thread/ThreadWrapper.js.map +1 -1
- package/lib/module/components/UsersList/UsersList.js +2 -1
- package/lib/module/components/UsersList/UsersList.js.map +1 -1
- package/lib/module/components/styled/SendInput.js +4 -2
- package/lib/module/components/styled/SendInput.js.map +1 -1
- package/lib/module/e2ee/crypto.js +170 -0
- package/lib/module/e2ee/crypto.js.map +1 -0
- package/lib/module/e2ee/deviceStore.js +77 -0
- package/lib/module/e2ee/deviceStore.js.map +1 -0
- package/lib/module/e2ee/fileCipher.js +90 -0
- package/lib/module/e2ee/fileCipher.js.map +1 -0
- package/lib/module/e2ee/fileEnvelope.js +66 -0
- package/lib/module/e2ee/fileEnvelope.js.map +1 -0
- package/lib/module/e2ee/index.js +185 -0
- package/lib/module/e2ee/index.js.map +1 -0
- package/lib/module/e2ee/limits.js +5 -0
- package/lib/module/e2ee/limits.js.map +1 -0
- package/lib/module/e2ee/ns.js +4 -0
- package/lib/module/e2ee/ns.js.map +1 -0
- package/lib/module/e2ee/omemo.js +610 -0
- package/lib/module/e2ee/omemo.js.map +1 -0
- package/lib/module/e2ee/protobuf.js +140 -0
- package/lib/module/e2ee/protobuf.js.map +1 -0
- package/lib/module/e2ee/ratchet.js +228 -0
- package/lib/module/e2ee/ratchet.js.map +1 -0
- package/lib/module/e2ee/sealedBody.js +19 -0
- package/lib/module/e2ee/sealedBody.js.map +1 -0
- package/lib/module/e2ee/sealedFiles.js +154 -0
- package/lib/module/e2ee/sealedFiles.js.map +1 -0
- package/lib/module/e2ee/send.js +48 -0
- package/lib/module/e2ee/send.js.map +1 -0
- package/lib/module/e2ee/stanza.js +107 -0
- package/lib/module/e2ee/stanza.js.map +1 -0
- package/lib/module/e2ee/store.js +35 -0
- package/lib/module/e2ee/store.js.map +1 -0
- package/lib/module/helpers/accountName.js +18 -0
- package/lib/module/helpers/accountName.js.map +1 -0
- package/lib/module/helpers/createMessageFromXml.js +19 -4
- package/lib/module/helpers/createMessageFromXml.js.map +1 -1
- package/lib/module/helpers/createUserNameFromSetUser.js +3 -1
- package/lib/module/helpers/createUserNameFromSetUser.js.map +1 -1
- package/lib/module/helpers/displayName.js +11 -0
- package/lib/module/helpers/displayName.js.map +1 -0
- package/lib/module/helpers/persistCrypto.js +4 -0
- package/lib/module/helpers/persistCrypto.js.map +1 -1
- package/lib/module/helpers/secureKeyValue.js +19 -0
- package/lib/module/helpers/secureKeyValue.js.map +1 -1
- package/lib/module/helpers/videoCache.js +125 -0
- package/lib/module/helpers/videoCache.js.map +1 -0
- package/lib/module/hooks/useLogout.js +8 -0
- package/lib/module/hooks/useLogout.js.map +1 -1
- package/lib/module/hooks/useSendMessage.js +71 -7
- package/lib/module/hooks/useSendMessage.js.map +1 -1
- package/lib/module/i18n/strings.js +180 -0
- package/lib/module/i18n/strings.js.map +1 -1
- package/lib/module/main.js +1 -0
- package/lib/module/main.js.map +1 -1
- package/lib/module/networking/api-requests/auth.api.js +4 -1
- package/lib/module/networking/api-requests/auth.api.js.map +1 -1
- package/lib/module/networking/api-requests/rooms.api.js +109 -18
- package/lib/module/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/module/networking/xmpp/handleStanzas.xmpp.js +38 -0
- package/lib/module/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/sendMediaMessage.xmpp.js +16 -3
- package/lib/module/networking/xmpp/sendMediaMessage.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/sendTextMessage.xmpp.js +13 -6
- package/lib/module/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js +14 -6
- package/lib/module/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js.map +1 -1
- package/lib/module/networking/xmppClient.js +6 -0
- package/lib/module/networking/xmppClient.js.map +1 -1
- package/lib/module/roomStore/persistBackend.js +10 -13
- package/lib/module/roomStore/persistBackend.js.map +1 -1
- package/lib/module/roomStore/persistence.js +8 -1
- package/lib/module/roomStore/persistence.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/typescript/assets/icons.d.ts +8 -0
- package/lib/typescript/assets/icons.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatRoom.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/EncryptedSendNotice.d.ts +4 -0
- package/lib/typescript/components/MainComponents/EncryptedSendNotice.d.ts.map +1 -0
- package/lib/typescript/components/MainComponents/EncryptionCard.d.ts +10 -0
- package/lib/typescript/components/MainComponents/EncryptionCard.d.ts.map +1 -0
- package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/SealedAttachment.d.ts +13 -0
- package/lib/typescript/components/MainComponents/SealedAttachment.d.ts.map +1 -0
- package/lib/typescript/components/MessageBubble/BottomReplyContainer.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/Message.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/PdfView.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserSettingsModal/UserSettingsModal.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/LastMessageItem.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastAudioMessage.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastMessageSealed.d.ts +7 -0
- package/lib/typescript/components/RoomComponents/styled/LastMessageSealed.d.ts.map +1 -0
- package/lib/typescript/components/Thread/ThreadWrapper.d.ts.map +1 -1
- package/lib/typescript/components/UsersList/UsersList.d.ts.map +1 -1
- package/lib/typescript/components/styled/SendInput.d.ts +1 -0
- package/lib/typescript/components/styled/SendInput.d.ts.map +1 -1
- package/lib/typescript/e2ee/crypto.d.ts +28 -0
- package/lib/typescript/e2ee/crypto.d.ts.map +1 -0
- package/lib/typescript/e2ee/deviceStore.d.ts +4 -0
- package/lib/typescript/e2ee/deviceStore.d.ts.map +1 -0
- package/lib/typescript/e2ee/fileCipher.d.ts +7 -0
- package/lib/typescript/e2ee/fileCipher.d.ts.map +1 -0
- package/lib/typescript/e2ee/fileEnvelope.d.ts +27 -0
- package/lib/typescript/e2ee/fileEnvelope.d.ts.map +1 -0
- package/lib/typescript/e2ee/index.d.ts +23 -0
- package/lib/typescript/e2ee/index.d.ts.map +1 -0
- package/lib/typescript/e2ee/limits.d.ts +3 -0
- package/lib/typescript/e2ee/limits.d.ts.map +1 -0
- package/lib/typescript/e2ee/ns.d.ts +2 -0
- package/lib/typescript/e2ee/ns.d.ts.map +1 -0
- package/lib/typescript/e2ee/omemo.d.ts +64 -0
- package/lib/typescript/e2ee/omemo.d.ts.map +1 -0
- package/lib/typescript/e2ee/protobuf.d.ts +25 -0
- package/lib/typescript/e2ee/protobuf.d.ts.map +1 -0
- package/lib/typescript/e2ee/ratchet.d.ts +39 -0
- package/lib/typescript/e2ee/ratchet.d.ts.map +1 -0
- package/lib/typescript/e2ee/sealedBody.d.ts +2 -0
- package/lib/typescript/e2ee/sealedBody.d.ts.map +1 -0
- package/lib/typescript/e2ee/sealedFiles.d.ts +31 -0
- package/lib/typescript/e2ee/sealedFiles.d.ts.map +1 -0
- package/lib/typescript/e2ee/send.d.ts +6 -0
- package/lib/typescript/e2ee/send.d.ts.map +1 -0
- package/lib/typescript/e2ee/stanza.d.ts +8 -0
- package/lib/typescript/e2ee/stanza.d.ts.map +1 -0
- package/lib/typescript/e2ee/store.d.ts +16 -0
- package/lib/typescript/e2ee/store.d.ts.map +1 -0
- package/lib/typescript/helpers/accountName.d.ts +7 -0
- package/lib/typescript/helpers/accountName.d.ts.map +1 -0
- package/lib/typescript/helpers/createMessageFromXml.d.ts.map +1 -1
- package/lib/typescript/helpers/createUserNameFromSetUser.d.ts.map +1 -1
- package/lib/typescript/helpers/displayName.d.ts +2 -0
- package/lib/typescript/helpers/displayName.d.ts.map +1 -0
- package/lib/typescript/helpers/persistCrypto.d.ts +1 -0
- package/lib/typescript/helpers/persistCrypto.d.ts.map +1 -1
- package/lib/typescript/helpers/secureKeyValue.d.ts +4 -0
- package/lib/typescript/helpers/secureKeyValue.d.ts.map +1 -1
- package/lib/typescript/helpers/videoCache.d.ts +19 -0
- package/lib/typescript/helpers/videoCache.d.ts.map +1 -0
- package/lib/typescript/hooks/useLogout.d.ts.map +1 -1
- package/lib/typescript/hooks/useSendMessage.d.ts.map +1 -1
- package/lib/typescript/i18n/strings.d.ts.map +1 -1
- package/lib/typescript/main.d.ts +2 -0
- package/lib/typescript/main.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/auth.api.d.ts +4 -1
- package/lib/typescript/networking/api-requests/auth.api.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/rooms.api.d.ts +22 -1
- package/lib/typescript/networking/api-requests/rooms.api.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/handleStanzas.xmpp.d.ts +1 -0
- package/lib/typescript/networking/xmpp/handleStanzas.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/sendMediaMessage.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/sendTextMessage.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmppClient.d.ts.map +1 -1
- package/lib/typescript/roomStore/persistBackend.d.ts.map +1 -1
- package/lib/typescript/roomStore/persistence.d.ts.map +1 -1
- package/lib/typescript/types/models/message.model.d.ts +5 -0
- package/lib/typescript/types/models/message.model.d.ts.map +1 -1
- package/lib/typescript/types/models/room.model.d.ts +5 -0
- package/lib/typescript/types/models/room.model.d.ts.map +1 -1
- package/lib/typescript/types/types.d.ts +4 -0
- package/lib/typescript/types/types.d.ts.map +1 -1
- package/lib/typescript/version.d.ts +1 -1
- package/package.json +8 -4
- package/src/assets/icons.tsx +27 -0
- package/src/components/MainComponents/ChatHeader.tsx +30 -9
- package/src/components/MainComponents/ChatRoom.tsx +11 -1
- package/src/components/MainComponents/EncryptedSendNotice.tsx +35 -0
- package/src/components/MainComponents/EncryptionCard.tsx +287 -0
- package/src/components/MainComponents/MediaMessage.tsx +5 -0
- package/src/components/MainComponents/ReduxWrapper.tsx +5 -0
- package/src/components/MainComponents/SealedAttachment.tsx +251 -0
- package/src/components/MessageBubble/BottomReplyContainer.tsx +2 -1
- package/src/components/MessageBubble/Message.tsx +96 -6
- package/src/components/MessageBubble/MessageInteractions.tsx +2 -3
- package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +7 -4
- package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +181 -35
- package/src/components/Modals/FilePreviewModal/PdfView.tsx +4 -0
- package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +53 -8
- package/src/components/Modals/UserSettingsModal/UserSettingsModal.tsx +5 -0
- package/src/components/RoomComponents/ChatRoomItem.tsx +23 -11
- package/src/components/RoomComponents/LastMessageItem.tsx +5 -0
- package/src/components/RoomComponents/styled/LastAudioMessage.tsx +3 -1
- package/src/components/RoomComponents/styled/LastMessageFile.tsx +2 -2
- package/src/components/RoomComponents/styled/LastMessagePhoto.tsx +1 -1
- package/src/components/RoomComponents/styled/LastMessageSealed.tsx +31 -0
- package/src/components/RoomComponents/styled/LastMessageVideo.tsx +1 -1
- package/src/components/Thread/ThreadWrapper.tsx +13 -0
- package/src/components/UsersList/UsersList.tsx +2 -1
- package/src/components/styled/SendInput.tsx +5 -2
- package/src/e2ee/crypto.ts +194 -0
- package/src/e2ee/deviceStore.ts +80 -0
- package/src/e2ee/fileCipher.ts +86 -0
- package/src/e2ee/fileEnvelope.ts +115 -0
- package/src/e2ee/index.ts +192 -0
- package/src/e2ee/limits.ts +2 -0
- package/src/e2ee/ns.ts +1 -0
- package/src/e2ee/omemo.ts +802 -0
- package/src/e2ee/protobuf.ts +188 -0
- package/src/e2ee/ratchet.ts +271 -0
- package/src/e2ee/sealedBody.ts +17 -0
- package/src/e2ee/sealedFiles.ts +181 -0
- package/src/e2ee/send.ts +70 -0
- package/src/e2ee/stanza.ts +133 -0
- package/src/e2ee/store.ts +54 -0
- package/src/helpers/accountName.ts +15 -0
- package/src/helpers/createMessageFromXml.ts +31 -6
- package/src/helpers/createUserNameFromSetUser.ts +2 -1
- package/src/helpers/displayName.ts +9 -0
- package/src/helpers/persistCrypto.ts +5 -0
- package/src/helpers/secureKeyValue.ts +15 -0
- package/src/helpers/videoCache.ts +138 -0
- package/src/hooks/useLogout.tsx +9 -0
- package/src/hooks/useSendMessage.tsx +71 -5
- package/src/i18n/strings.ts +180 -0
- package/src/main.ts +2 -0
- package/src/networking/api-requests/auth.api.ts +9 -1
- package/src/networking/api-requests/rooms.api.ts +121 -18
- package/src/networking/xmpp/handleStanzas.xmpp.ts +49 -0
- package/src/networking/xmpp/sendMediaMessage.xmpp.ts +19 -1
- package/src/networking/xmpp/sendTextMessage.xmpp.ts +17 -10
- package/src/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.ts +23 -10
- package/src/networking/xmppClient.ts +6 -0
- package/src/roomStore/persistBackend.ts +8 -11
- package/src/roomStore/persistence.ts +15 -0
- package/src/types/models/message.model.ts +5 -0
- package/src/types/models/room.model.ts +5 -0
- package/src/types/types.ts +4 -0
- package/src/version.ts +1 -1
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
4
|
+
import { secureGetOrCreate } from '../helpers/secureKeyValue';
|
|
5
|
+
import { decryptFromPersist, encryptForPersist, isPersistKeyKept } from '../helpers/persistCrypto';
|
|
6
|
+
import { randomBytes, toHex } from './crypto';
|
|
7
|
+
import { createStore } from './store';
|
|
8
|
+
const MMKV_INSTANCE_ID = 'ethora-omemo';
|
|
9
|
+
const MMKV_KEY_STORE_KEY = 'ethora_omemo_store_key';
|
|
10
|
+
const ASYNC_STORAGE_PREFIX = '@ethora/omemo:';
|
|
11
|
+
const createMmkvBackend = async () => {
|
|
12
|
+
let MMKV;
|
|
13
|
+
try {
|
|
14
|
+
MMKV = require('react-native-mmkv').MMKV;
|
|
15
|
+
} catch {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
if (typeof MMKV !== 'function') {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
const key = await secureGetOrCreate(MMKV_KEY_STORE_KEY, () => toHex(randomBytes(8)));
|
|
22
|
+
if (!key) {
|
|
23
|
+
throw new Error('e2ee: the device store key was not kept');
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const storage = new MMKV({
|
|
27
|
+
id: MMKV_INSTANCE_ID,
|
|
28
|
+
encryptionKey: key.value
|
|
29
|
+
});
|
|
30
|
+
if (key.created) {
|
|
31
|
+
storage.clearAll();
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
getItem: async key => storage.getString(key) ?? null,
|
|
35
|
+
setItem: async (key, value) => void storage.set(key, value),
|
|
36
|
+
removeItem: async key => void storage.delete(key)
|
|
37
|
+
};
|
|
38
|
+
} catch (e) {
|
|
39
|
+
console.warn('[e2ee] react-native-mmkv present but unusable, falling back', e);
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
const asyncStorageBackend = {
|
|
44
|
+
getItem: async key => {
|
|
45
|
+
const raw = await AsyncStorage.getItem(ASYNC_STORAGE_PREFIX + key);
|
|
46
|
+
return raw ? decryptFromPersist(raw) : null;
|
|
47
|
+
},
|
|
48
|
+
setItem: async (key, value) => AsyncStorage.setItem(ASYNC_STORAGE_PREFIX + key, await encryptForPersist(value)),
|
|
49
|
+
removeItem: key => AsyncStorage.removeItem(ASYNC_STORAGE_PREFIX + key)
|
|
50
|
+
};
|
|
51
|
+
const createAsyncStorageBackend = async () => {
|
|
52
|
+
if (!(await isPersistKeyKept())) {
|
|
53
|
+
throw new Error('e2ee: the storage cipher key was not kept');
|
|
54
|
+
}
|
|
55
|
+
return asyncStorageBackend;
|
|
56
|
+
};
|
|
57
|
+
let backendPromise = null;
|
|
58
|
+
const getBackend = () => {
|
|
59
|
+
if (!backendPromise) {
|
|
60
|
+
const opening = createMmkvBackend().then(mmkv => mmkv ?? createAsyncStorageBackend());
|
|
61
|
+
backendPromise = opening;
|
|
62
|
+
// A refusal is not cached: the next start may find the store usable.
|
|
63
|
+
opening.catch(() => {
|
|
64
|
+
if (backendPromise === opening) {
|
|
65
|
+
backendPromise = null;
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return backendPromise;
|
|
70
|
+
};
|
|
71
|
+
export async function openDeviceStore(jid) {
|
|
72
|
+
return createStore(await getBackend(), jid);
|
|
73
|
+
}
|
|
74
|
+
export const __resetDeviceStoreForTests = () => {
|
|
75
|
+
backendPromise = null;
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=deviceStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["AsyncStorage","secureGetOrCreate","decryptFromPersist","encryptForPersist","isPersistKeyKept","randomBytes","toHex","createStore","MMKV_INSTANCE_ID","MMKV_KEY_STORE_KEY","ASYNC_STORAGE_PREFIX","createMmkvBackend","MMKV","require","key","Error","storage","id","encryptionKey","value","created","clearAll","getItem","getString","setItem","set","removeItem","delete","e","console","warn","asyncStorageBackend","raw","createAsyncStorageBackend","backendPromise","getBackend","opening","then","mmkv","catch","openDeviceStore","jid","__resetDeviceStoreForTests"],"sourceRoot":"../../../src","sources":["e2ee/deviceStore.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { cbc } from '@noble/ciphers/aes.js';
|
|
4
|
+
import { hmac } from '@noble/hashes/hmac.js';
|
|
5
|
+
import { sha256 } from '@noble/hashes/sha2.js';
|
|
6
|
+
import { bytesEqual, concatBytes, hkdfSha256, randomBytes } from './crypto';
|
|
7
|
+
const SLICE = 32 * 1024;
|
|
8
|
+
const BLOCK = 16;
|
|
9
|
+
const yieldToUi = () => new Promise(resolve => setTimeout(resolve, 0));
|
|
10
|
+
function payloadKeys(key) {
|
|
11
|
+
const km = hkdfSha256(key, undefined, 'OMEMO Payload', 80);
|
|
12
|
+
return {
|
|
13
|
+
enc: km.slice(0, 32),
|
|
14
|
+
auth: km.slice(32, 64),
|
|
15
|
+
iv: km.slice(64)
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export async function encryptLargePayload(plaintext, onProgress) {
|
|
19
|
+
const key = randomBytes(32);
|
|
20
|
+
const {
|
|
21
|
+
enc,
|
|
22
|
+
auth,
|
|
23
|
+
iv
|
|
24
|
+
} = payloadKeys(key);
|
|
25
|
+
const payload = new Uint8Array((Math.floor(plaintext.length / BLOCK) + 1) * BLOCK);
|
|
26
|
+
const mac = hmac.create(sha256, auth);
|
|
27
|
+
let offset = 0;
|
|
28
|
+
let chain = iv;
|
|
29
|
+
while (plaintext.length - offset > SLICE) {
|
|
30
|
+
const out = payload.subarray(offset, offset + SLICE);
|
|
31
|
+
out.set(cbc(enc, chain, {
|
|
32
|
+
disablePadding: true
|
|
33
|
+
}).encrypt(plaintext.subarray(offset, offset + SLICE)));
|
|
34
|
+
mac.update(out);
|
|
35
|
+
chain = out.slice(SLICE - BLOCK);
|
|
36
|
+
offset += SLICE;
|
|
37
|
+
onProgress?.(offset / plaintext.length);
|
|
38
|
+
await yieldToUi();
|
|
39
|
+
}
|
|
40
|
+
const last = cbc(enc, chain).encrypt(plaintext.subarray(offset));
|
|
41
|
+
payload.set(last, offset);
|
|
42
|
+
mac.update(last);
|
|
43
|
+
onProgress?.(1);
|
|
44
|
+
return {
|
|
45
|
+
keyMaterial: concatBytes(key, mac.digest().slice(0, 16)),
|
|
46
|
+
payload
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export async function decryptLargePayload(keyMaterial, payload, onProgress) {
|
|
50
|
+
if (keyMaterial.length !== 48) {
|
|
51
|
+
throw new Error('Invalid key material');
|
|
52
|
+
}
|
|
53
|
+
if (payload.length === 0 || payload.length % BLOCK !== 0) {
|
|
54
|
+
throw new Error('Payload authentication failed');
|
|
55
|
+
}
|
|
56
|
+
const {
|
|
57
|
+
enc,
|
|
58
|
+
auth,
|
|
59
|
+
iv
|
|
60
|
+
} = payloadKeys(keyMaterial.slice(0, 32));
|
|
61
|
+
const mac = hmac.create(sha256, auth);
|
|
62
|
+
for (let offset = 0; offset < payload.length; offset += SLICE) {
|
|
63
|
+
mac.update(payload.subarray(offset, offset + SLICE));
|
|
64
|
+
onProgress?.(Math.min(offset + SLICE, payload.length) / payload.length * 0.65);
|
|
65
|
+
if (offset + SLICE < payload.length) {
|
|
66
|
+
await yieldToUi();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (!bytesEqual(mac.digest().slice(0, 16), keyMaterial.slice(32))) {
|
|
70
|
+
throw new Error('Payload authentication failed');
|
|
71
|
+
}
|
|
72
|
+
const plaintext = new Uint8Array(payload.length);
|
|
73
|
+
let offset = 0;
|
|
74
|
+
let chain = iv;
|
|
75
|
+
while (payload.length - offset > SLICE) {
|
|
76
|
+
const part = payload.subarray(offset, offset + SLICE);
|
|
77
|
+
plaintext.set(cbc(enc, chain, {
|
|
78
|
+
disablePadding: true
|
|
79
|
+
}).decrypt(part), offset);
|
|
80
|
+
chain = part.slice(SLICE - BLOCK);
|
|
81
|
+
offset += SLICE;
|
|
82
|
+
onProgress?.(0.65 + offset / payload.length * 0.35);
|
|
83
|
+
await yieldToUi();
|
|
84
|
+
}
|
|
85
|
+
const last = cbc(enc, chain).decrypt(payload.subarray(offset));
|
|
86
|
+
plaintext.set(last, offset);
|
|
87
|
+
onProgress?.(1);
|
|
88
|
+
return plaintext.subarray(0, offset + last.length);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=fileCipher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["cbc","hmac","sha256","bytesEqual","concatBytes","hkdfSha256","randomBytes","SLICE","BLOCK","yieldToUi","Promise","resolve","setTimeout","payloadKeys","key","km","undefined","enc","slice","auth","iv","encryptLargePayload","plaintext","onProgress","payload","Uint8Array","Math","floor","length","mac","create","offset","chain","out","subarray","set","disablePadding","encrypt","update","last","keyMaterial","digest","decryptLargePayload","Error","min","part","decrypt"],"sourceRoot":"../../../src","sources":["e2ee/fileCipher.ts"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,uBAAuB;AAC3C,SAASC,IAAI,QAAQ,uBAAuB;AAC5C,SAASC,MAAM,QAAQ,uBAAuB;AAC9C,SAASC,UAAU,EAAEC,WAAW,EAAEC,UAAU,EAAEC,WAAW,QAAQ,UAAU;AAE3E,MAAMC,KAAK,GAAG,EAAE,GAAG,IAAI;AACvB,MAAMC,KAAK,GAAG,EAAE;AAIhB,MAAMC,SAAS,GAAGA,CAAA,KAAM,IAAIC,OAAO,CAAQC,OAAO,IAAKC,UAAU,CAACD,OAAO,EAAE,CAAC,CAAC,CAAC;AAE9E,SAASE,WAAWA,CAACC,GAAe,EAAE;EACpC,MAAMC,EAAE,GAAGV,UAAU,CAACS,GAAG,EAAEE,SAAS,EAAE,eAAe,EAAE,EAAE,CAAC;EAC1D,OAAO;IAAEC,GAAG,EAAEF,EAAE,CAACG,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;IAAEC,IAAI,EAAEJ,EAAE,CAACG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;IAAEE,EAAE,EAAEL,EAAE,CAACG,KAAK,CAAC,EAAE;EAAE,CAAC;AAC3E;AAEA,OAAO,eAAeG,mBAAmBA,CACvCC,SAAqB,EACrBC,UAAqB,EACsC;EAC3D,MAAMT,GAAG,GAAGR,WAAW,CAAC,EAAE,CAAC;EAC3B,MAAM;IAAEW,GAAG;IAAEE,IAAI;IAAEC;EAAG,CAAC,GAAGP,WAAW,CAACC,GAAG,CAAC;EAC1C,MAAMU,OAAO,GAAG,IAAIC,UAAU,CAAC,CAACC,IAAI,CAACC,KAAK,CAACL,SAAS,CAACM,MAAM,GAAGpB,KAAK,CAAC,GAAG,CAAC,IAAIA,KAAK,CAAC;EAClF,MAAMqB,GAAG,GAAG5B,IAAI,CAAC6B,MAAM,CAAC5B,MAAM,EAAEiB,IAAI,CAAC;EAErC,IAAIY,MAAM,GAAG,CAAC;EACd,IAAIC,KAAK,GAAGZ,EAAE;EACd,OAAOE,SAAS,CAACM,MAAM,GAAGG,MAAM,GAAGxB,KAAK,EAAE;IACxC,MAAM0B,GAAG,GAAGT,OAAO,CAACU,QAAQ,CAACH,MAAM,EAAEA,MAAM,GAAGxB,KAAK,CAAC;IACpD0B,GAAG,CAACE,GAAG,CACLnC,GAAG,CAACiB,GAAG,EAAEe,KAAK,EAAE;MAAEI,cAAc,EAAE;IAAK,CAAC,CAAC,CAACC,OAAO,CAC/Cf,SAAS,CAACY,QAAQ,CAACH,MAAM,EAAEA,MAAM,GAAGxB,KAAK,CAC3C,CACF,CAAC;IACDsB,GAAG,CAACS,MAAM,CAACL,GAAG,CAAC;IACfD,KAAK,GAAGC,GAAG,CAACf,KAAK,CAACX,KAAK,GAAGC,KAAK,CAAC;IAChCuB,MAAM,IAAIxB,KAAK;IACfgB,UAAU,GAAGQ,MAAM,GAAGT,SAAS,CAACM,MAAM,CAAC;IACvC,MAAMnB,SAAS,CAAC,CAAC;EACnB;EACA,MAAM8B,IAAI,GAAGvC,GAAG,CAACiB,GAAG,EAAEe,KAAK,CAAC,CAACK,OAAO,CAACf,SAAS,CAACY,QAAQ,CAACH,MAAM,CAAC,CAAC;EAChEP,OAAO,CAACW,GAAG,CAACI,IAAI,EAAER,MAAM,CAAC;EACzBF,GAAG,CAACS,MAAM,CAACC,IAAI,CAAC;EAChBhB,UAAU,GAAG,CAAC,CAAC;EAEf,OAAO;IAAEiB,WAAW,EAAEpC,WAAW,CAACU,GAAG,EAAEe,GAAG,CAACY,MAAM,CAAC,CAAC,CAACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAAEM;EAAQ,CAAC;AAC9E;AAEA,OAAO,eAAekB,mBAAmBA,CACvCF,WAAuB,EACvBhB,OAAmB,EACnBD,UAAqB,EACA;EACrB,IAAIiB,WAAW,CAACZ,MAAM,KAAK,EAAE,EAAE;IAAC,MAAM,IAAIe,KAAK,CAAC,sBAAsB,CAAC;EAAC;EACxE,IAAInB,OAAO,CAACI,MAAM,KAAK,CAAC,IAAIJ,OAAO,CAACI,MAAM,GAAGpB,KAAK,KAAK,CAAC,EAAE;IACxD,MAAM,IAAImC,KAAK,CAAC,+BAA+B,CAAC;EAClD;EACA,MAAM;IAAE1B,GAAG;IAAEE,IAAI;IAAEC;EAAG,CAAC,GAAGP,WAAW,CAAC2B,WAAW,CAACtB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;EAE/D,MAAMW,GAAG,GAAG5B,IAAI,CAAC6B,MAAM,CAAC5B,MAAM,EAAEiB,IAAI,CAAC;EACrC,KAAK,IAAIY,MAAM,GAAG,CAAC,EAAEA,MAAM,GAAGP,OAAO,CAACI,MAAM,EAAEG,MAAM,IAAIxB,KAAK,EAAE;IAC7DsB,GAAG,CAACS,MAAM,CAACd,OAAO,CAACU,QAAQ,CAACH,MAAM,EAAEA,MAAM,GAAGxB,KAAK,CAAC,CAAC;IACpDgB,UAAU,GAAIG,IAAI,CAACkB,GAAG,CAACb,MAAM,GAAGxB,KAAK,EAAEiB,OAAO,CAACI,MAAM,CAAC,GAAGJ,OAAO,CAACI,MAAM,GAAI,IAAI,CAAC;IAChF,IAAIG,MAAM,GAAGxB,KAAK,GAAGiB,OAAO,CAACI,MAAM,EAAE;MAAC,MAAMnB,SAAS,CAAC,CAAC;IAAC;EAC1D;EACA,IAAI,CAACN,UAAU,CAAC0B,GAAG,CAACY,MAAM,CAAC,CAAC,CAACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAEsB,WAAW,CAACtB,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE;IACjE,MAAM,IAAIyB,KAAK,CAAC,+BAA+B,CAAC;EAClD;EAEA,MAAMrB,SAAS,GAAG,IAAIG,UAAU,CAACD,OAAO,CAACI,MAAM,CAAC;EAChD,IAAIG,MAAM,GAAG,CAAC;EACd,IAAIC,KAAK,GAAGZ,EAAE;EACd,OAAOI,OAAO,CAACI,MAAM,GAAGG,MAAM,GAAGxB,KAAK,EAAE;IACtC,MAAMsC,IAAI,GAAGrB,OAAO,CAACU,QAAQ,CAACH,MAAM,EAAEA,MAAM,GAAGxB,KAAK,CAAC;IACrDe,SAAS,CAACa,GAAG,CAACnC,GAAG,CAACiB,GAAG,EAAEe,KAAK,EAAE;MAAEI,cAAc,EAAE;IAAK,CAAC,CAAC,CAACU,OAAO,CAACD,IAAI,CAAC,EAAEd,MAAM,CAAC;IAC9EC,KAAK,GAAGa,IAAI,CAAC3B,KAAK,CAACX,KAAK,GAAGC,KAAK,CAAC;IACjCuB,MAAM,IAAIxB,KAAK;IACfgB,UAAU,GAAG,IAAI,GAAIQ,MAAM,GAAGP,OAAO,CAACI,MAAM,GAAI,IAAI,CAAC;IACrD,MAAMnB,SAAS,CAAC,CAAC;EACnB;EACA,MAAM8B,IAAI,GAAGvC,GAAG,CAACiB,GAAG,EAAEe,KAAK,CAAC,CAACc,OAAO,CAACtB,OAAO,CAACU,QAAQ,CAACH,MAAM,CAAC,CAAC;EAC9DT,SAAS,CAACa,GAAG,CAACI,IAAI,EAAER,MAAM,CAAC;EAC3BR,UAAU,GAAG,CAAC,CAAC;EACf,OAAOD,SAAS,CAACY,QAAQ,CAAC,CAAC,EAAEH,MAAM,GAAGQ,IAAI,CAACX,MAAM,CAAC;AACpD","ignoreList":[]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { bytesToUtf8, fromBase64, randomBytes, toBase64, toHex, utf8ToBytes } from './crypto';
|
|
4
|
+
import { decryptLargePayload, encryptLargePayload } from './fileCipher';
|
|
5
|
+
export { parseSealedMediaBody } from './sealedBody';
|
|
6
|
+
const MAGIC = Uint8Array.from([0x45, 0x54, 0x48, 0x4f, 0x46, 0x49, 0x4c, 0x45]);
|
|
7
|
+
const VERSION = 1;
|
|
8
|
+
const HEADER_OFFSET = MAGIC.length + 1 + 4;
|
|
9
|
+
export function encodeFileEnvelope(meta, bytes) {
|
|
10
|
+
const header = utf8ToBytes(JSON.stringify({
|
|
11
|
+
mimetype: meta.mimetype,
|
|
12
|
+
originalname: meta.originalname,
|
|
13
|
+
size: meta.size
|
|
14
|
+
}));
|
|
15
|
+
const out = new Uint8Array(HEADER_OFFSET + header.length + bytes.length);
|
|
16
|
+
out.set(MAGIC, 0);
|
|
17
|
+
out[MAGIC.length] = VERSION;
|
|
18
|
+
new DataView(out.buffer).setUint32(MAGIC.length + 1, header.length, false);
|
|
19
|
+
out.set(header, HEADER_OFFSET);
|
|
20
|
+
out.set(bytes, HEADER_OFFSET + header.length);
|
|
21
|
+
return out;
|
|
22
|
+
}
|
|
23
|
+
export function decodeFileEnvelope(envelope) {
|
|
24
|
+
if (envelope.length < HEADER_OFFSET) {
|
|
25
|
+
throw new Error('file_envelope_truncated');
|
|
26
|
+
}
|
|
27
|
+
for (let i = 0; i < MAGIC.length; i++) {
|
|
28
|
+
if (envelope[i] !== MAGIC[i]) {
|
|
29
|
+
throw new Error('file_envelope_bad_magic');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const version = envelope[MAGIC.length];
|
|
33
|
+
if (version !== VERSION) {
|
|
34
|
+
throw new Error(`file_envelope_unsupported_version_${version}`);
|
|
35
|
+
}
|
|
36
|
+
const headerLen = new DataView(envelope.buffer, envelope.byteOffset, envelope.byteLength).getUint32(MAGIC.length + 1, false);
|
|
37
|
+
const bodyStart = HEADER_OFFSET + headerLen;
|
|
38
|
+
if (bodyStart > envelope.length) {
|
|
39
|
+
throw new Error('file_envelope_truncated');
|
|
40
|
+
}
|
|
41
|
+
const meta = JSON.parse(bytesToUtf8(envelope.subarray(HEADER_OFFSET, bodyStart)));
|
|
42
|
+
return {
|
|
43
|
+
meta,
|
|
44
|
+
bytes: envelope.subarray(bodyStart)
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export async function sealFileForUpload(file, onProgress) {
|
|
48
|
+
const envelope = encodeFileEnvelope({
|
|
49
|
+
mimetype: file.type || 'application/octet-stream',
|
|
50
|
+
originalname: file.name || 'blob',
|
|
51
|
+
size: file.bytes.length
|
|
52
|
+
}, file.bytes);
|
|
53
|
+
const {
|
|
54
|
+
keyMaterial,
|
|
55
|
+
payload
|
|
56
|
+
} = await encryptLargePayload(envelope, onProgress);
|
|
57
|
+
return {
|
|
58
|
+
ciphertext: payload,
|
|
59
|
+
keyMaterial: toBase64(keyMaterial),
|
|
60
|
+
filename: toHex(randomBytes(16))
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export async function openSealedFile(ciphertext, keyMaterial, onProgress) {
|
|
64
|
+
return decodeFileEnvelope(await decryptLargePayload(fromBase64(keyMaterial), ciphertext, onProgress));
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=fileEnvelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["bytesToUtf8","fromBase64","randomBytes","toBase64","toHex","utf8ToBytes","decryptLargePayload","encryptLargePayload","parseSealedMediaBody","MAGIC","Uint8Array","from","VERSION","HEADER_OFFSET","length","encodeFileEnvelope","meta","bytes","header","JSON","stringify","mimetype","originalname","size","out","set","DataView","buffer","setUint32","decodeFileEnvelope","envelope","Error","i","version","headerLen","byteOffset","byteLength","getUint32","bodyStart","parse","subarray","sealFileForUpload","file","onProgress","type","name","keyMaterial","payload","ciphertext","filename","openSealedFile"],"sourceRoot":"../../../src","sources":["e2ee/fileEnvelope.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Platform } from 'react-native';
|
|
4
|
+
import { store } from '../roomStore';
|
|
5
|
+
export { NS_OMEMO } from './ns';
|
|
6
|
+
let enabled = false;
|
|
7
|
+
let instance;
|
|
8
|
+
let starting;
|
|
9
|
+
let live;
|
|
10
|
+
let generation = 0;
|
|
11
|
+
const bareJidOf = client => client?.jid?.bare?.().toString()?.toLowerCase() || undefined;
|
|
12
|
+
const deviceLabel = () => Platform.OS === 'ios' ? 'iOS' : Platform.OS === 'android' ? 'Android' : 'Mobile';
|
|
13
|
+
export function setE2eeEnabled(value) {
|
|
14
|
+
if (enabled === value) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
enabled = value;
|
|
18
|
+
if (!enabled) {
|
|
19
|
+
instance = undefined;
|
|
20
|
+
starting = undefined;
|
|
21
|
+
generation++;
|
|
22
|
+
} else {
|
|
23
|
+
void maybeStart();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export function isE2eeEnabled() {
|
|
27
|
+
return enabled;
|
|
28
|
+
}
|
|
29
|
+
export function onOnline(client) {
|
|
30
|
+
live = client;
|
|
31
|
+
if (instance && instance.jid === bareJidOf(client)) {
|
|
32
|
+
instance.useClient(client);
|
|
33
|
+
void instance.ensurePublished();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
void maybeStart();
|
|
37
|
+
}
|
|
38
|
+
function maybeStart() {
|
|
39
|
+
const client = live;
|
|
40
|
+
if (!enabled || !client) {
|
|
41
|
+
return Promise.resolve(undefined);
|
|
42
|
+
}
|
|
43
|
+
const jid = bareJidOf(client);
|
|
44
|
+
if (!jid) {
|
|
45
|
+
return Promise.resolve(undefined);
|
|
46
|
+
}
|
|
47
|
+
if (instance && instance.jid === jid) {
|
|
48
|
+
return Promise.resolve(instance);
|
|
49
|
+
}
|
|
50
|
+
if (starting) {
|
|
51
|
+
return starting;
|
|
52
|
+
}
|
|
53
|
+
const mine = ++generation;
|
|
54
|
+
starting = (async () => {
|
|
55
|
+
await Promise.resolve();
|
|
56
|
+
try {
|
|
57
|
+
const {
|
|
58
|
+
Omemo: OmemoClass
|
|
59
|
+
} = require('./omemo');
|
|
60
|
+
const {
|
|
61
|
+
openDeviceStore
|
|
62
|
+
} = require('./deviceStore');
|
|
63
|
+
const keyStore = await openDeviceStore(jid);
|
|
64
|
+
const created = await OmemoClass.open(client, jid, keyStore, {
|
|
65
|
+
label: deviceLabel()
|
|
66
|
+
});
|
|
67
|
+
if (mine !== generation) {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
if (live && live !== client) {
|
|
71
|
+
created.useClient(live);
|
|
72
|
+
}
|
|
73
|
+
instance = created;
|
|
74
|
+
if (__DEV__) {
|
|
75
|
+
console.log(`[e2ee] device ${created.deviceId} ready for ${jid} (${created.fingerprint})`);
|
|
76
|
+
}
|
|
77
|
+
return instance;
|
|
78
|
+
} catch (err) {
|
|
79
|
+
console.warn('[e2ee] could not start', err);
|
|
80
|
+
return undefined;
|
|
81
|
+
} finally {
|
|
82
|
+
if (mine === generation) {
|
|
83
|
+
starting = undefined;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
})();
|
|
87
|
+
return starting;
|
|
88
|
+
}
|
|
89
|
+
export function stopOmemo() {
|
|
90
|
+
instance = undefined;
|
|
91
|
+
starting = undefined;
|
|
92
|
+
live = undefined;
|
|
93
|
+
generation++;
|
|
94
|
+
}
|
|
95
|
+
export function omemo() {
|
|
96
|
+
return enabled ? instance : undefined;
|
|
97
|
+
}
|
|
98
|
+
export function omemoReady() {
|
|
99
|
+
if (!enabled) {
|
|
100
|
+
return Promise.resolve(undefined);
|
|
101
|
+
}
|
|
102
|
+
if (instance) {
|
|
103
|
+
return Promise.resolve(instance);
|
|
104
|
+
}
|
|
105
|
+
return starting ?? maybeStart();
|
|
106
|
+
}
|
|
107
|
+
export function isE2eeRoom(roomJid) {
|
|
108
|
+
if (!roomJid) {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
const jid = roomJid.split('/')[0];
|
|
112
|
+
return Boolean(store.getState()?.rooms?.rooms?.[jid]?.e2ee);
|
|
113
|
+
}
|
|
114
|
+
export function canSendToRoom(roomJid) {
|
|
115
|
+
return enabled || !isE2eeRoom(roomJid);
|
|
116
|
+
}
|
|
117
|
+
export function canEditMessage(message) {
|
|
118
|
+
if (!message) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
return message.unencrypted === true || !isE2eeRoom(message.roomJid);
|
|
122
|
+
}
|
|
123
|
+
export function canSendMediaToRoom(roomJid) {
|
|
124
|
+
return enabled || !isE2eeRoom(roomJid);
|
|
125
|
+
}
|
|
126
|
+
export function roomRecipients(roomJid, domain) {
|
|
127
|
+
const jid = roomJid.split('/')[0];
|
|
128
|
+
const members = store.getState()?.rooms?.rooms?.[jid]?.members ?? [];
|
|
129
|
+
return toAccounts(members, domain);
|
|
130
|
+
}
|
|
131
|
+
const toAccounts = (members, domain) => members.map(m => String(m?.xmppUsername || '').split('@')[0]).filter(Boolean).map(local => `${local}@${domain}`.toLowerCase());
|
|
132
|
+
const FETCHED_MEMBERS_TTL = 60_000;
|
|
133
|
+
const fetchedMembers = new Map();
|
|
134
|
+
export async function resolveRecipients(roomJid, domain) {
|
|
135
|
+
const jid = roomJid.split('/')[0];
|
|
136
|
+
const known = roomRecipients(roomJid, domain);
|
|
137
|
+
const expected = Number(store.getState()?.rooms?.rooms?.[jid]?.usersCnt || 0);
|
|
138
|
+
if (known.length > 0 && known.length >= expected) {
|
|
139
|
+
return known;
|
|
140
|
+
}
|
|
141
|
+
const cached = fetchedMembers.get(jid);
|
|
142
|
+
if (cached && Date.now() - cached.at < FETCHED_MEMBERS_TTL) {
|
|
143
|
+
return cached.accounts;
|
|
144
|
+
}
|
|
145
|
+
const accounts = (async () => {
|
|
146
|
+
const api = require('../networking/api-requests/rooms.api');
|
|
147
|
+
const response = await api.getRoomByName(jid.split('@')[0]);
|
|
148
|
+
const room = response?.result ?? response;
|
|
149
|
+
const appId = api.ownAppId();
|
|
150
|
+
const found = toAccounts((room?.members || []).map(m => ({
|
|
151
|
+
xmppUsername: api.memberAccount(m, appId)
|
|
152
|
+
})), domain);
|
|
153
|
+
if (found.length === 0) {
|
|
154
|
+
throw new Error('no members returned');
|
|
155
|
+
}
|
|
156
|
+
if (found.length < known.length) {
|
|
157
|
+
return known;
|
|
158
|
+
}
|
|
159
|
+
return found;
|
|
160
|
+
})().catch(err => {
|
|
161
|
+
fetchedMembers.delete(jid);
|
|
162
|
+
throw new Error(`omemo_members_unknown: ${String(err?.message || err)}`);
|
|
163
|
+
});
|
|
164
|
+
fetchedMembers.set(jid, {
|
|
165
|
+
at: Date.now(),
|
|
166
|
+
accounts
|
|
167
|
+
});
|
|
168
|
+
return accounts;
|
|
169
|
+
}
|
|
170
|
+
export function senderJidFromMuc(from, domain) {
|
|
171
|
+
const nick = String(from || '').split('/')[1];
|
|
172
|
+
if (!nick || !domain) {
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
return `${nick}@${domain}`.toLowerCase();
|
|
176
|
+
}
|
|
177
|
+
export function accountDomain(client) {
|
|
178
|
+
return String(client?.jid?.getDomain?.() || '').toLowerCase();
|
|
179
|
+
}
|
|
180
|
+
export const __resetE2eeForTests = () => {
|
|
181
|
+
enabled = false;
|
|
182
|
+
stopOmemo();
|
|
183
|
+
fetchedMembers.clear();
|
|
184
|
+
};
|
|
185
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Platform","store","NS_OMEMO","enabled","instance","starting","live","generation","bareJidOf","client","jid","bare","toString","toLowerCase","undefined","deviceLabel","OS","setE2eeEnabled","value","maybeStart","isE2eeEnabled","onOnline","useClient","ensurePublished","Promise","resolve","mine","Omemo","OmemoClass","require","openDeviceStore","keyStore","created","open","label","__DEV__","console","log","deviceId","fingerprint","err","warn","stopOmemo","omemo","omemoReady","isE2eeRoom","roomJid","split","Boolean","getState","rooms","e2ee","canSendToRoom","canEditMessage","message","unencrypted","canSendMediaToRoom","roomRecipients","domain","members","toAccounts","map","m","String","xmppUsername","filter","local","FETCHED_MEMBERS_TTL","fetchedMembers","Map","resolveRecipients","known","expected","Number","usersCnt","length","cached","get","Date","now","at","accounts","api","response","getRoomByName","room","result","appId","ownAppId","found","memberAccount","Error","catch","delete","set","senderJidFromMuc","from","nick","accountDomain","getDomain","__resetE2eeForTests","clear"],"sourceRoot":"../../../src","sources":["e2ee/index.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MAX_SEAL_BYTES","MAX_OPEN_BYTES"],"sourceRoot":"../../../src","sources":["e2ee/limits.ts"],"mappings":";;AAAA,OAAO,MAAMA,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;AAC9C,OAAO,MAAMC,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NS_OMEMO"],"sourceRoot":"../../../src","sources":["e2ee/ns.ts"],"mappings":";;AAAA,OAAO,MAAMA,QAAQ,GAAG,kBAAkB","ignoreList":[]}
|