Rocket.Chat.ReactNative/app/lib/encryption
Alex Junior cd00366613
Chore: Update react-native-mmkv-storage to 0.6.12 (#3634)
* chore: updating mmkv library

* feat: updating android ejson to use the getSecureKey new version

* feat: updating IOS files to use the getSecureKey new version

* feat: changing all mmkv methods to use sync calls

* feat: changing mmkv methods from Screen lock

* feat: changing all mmkv methods from login, ssl certificate and change/add server

* feat: changing all mmkv methods from login, ssl certificate and change/add server

* feat: changing all mmkv methods from logout

* feat: changing all mmkv methods from e2e

* fix: small fix at encryption and server drop down

* feat: changing all mmkv methods from set theme

* feat: changing all mmkv methods from openLink

* fix: setting up mmkv to works property on Android

* fix: fix an error to set the theme when open the app

* refactor: change the react-native branch (temporary)

* refactor: removing all `Async` from mmkv functions name

* refactor: removing await from unnecessary functions, removing console.log and update cocoapods

* refactor: removing unnecessary undefined from methods

* feat: creating a custom hook for mmkv

* refactor: changing the fetchPasscode to use the useUserPreferences hook

* refactor: changing setTheme from app/index

* refactor: small fix on setTheme

* chore: update mmkv to 0.6.11

* chore: update mmkv to 0.6.11

* chore: minor tweak

* chore: update mmkv to 0.6.12

* chore: mock NativeModules

* chore: fix test mmkv

* chore: removing custom MMKV JSI module, since is no more necessary after 0.6.11 version

* feat: removing some async calls from mmkv after update from develop

* feat: creating a function to get the initialTheme

* feat: removing unnecessary try/catch

* fix: fixing the blink white when open the app

* feat: changing useMMKVStorage to create from mmkv lib

* test: creating a mock for mmkv create function

* chore: fix errors on tablet

* minor tweak
2022-03-09 16:41:26 -03:00
..
README.md [NEW] E2E Encryption (#2394) 2020-09-11 11:31:38 -03:00
constants.ts Chore: Migrate RoomActionsView to Typescript (#3750) 2022-03-02 11:49:43 -03:00
encryption.ts Chore: Update react-native-mmkv-storage to 0.6.12 (#3634) 2022-03-09 16:41:26 -03:00
index.ts Chore: Migrate lib/encryption folder to TypeScript (#3639) 2022-02-16 17:14:28 -04:00
room.ts Chore: Migrate REST API - e2eGetUsersOfRoomWithoutKey to Typescript (#3793) 2022-03-02 16:53:41 -03:00
utils.ts Chore: Migrate lib/encryption folder to TypeScript (#3639) 2022-02-16 17:14:28 -04:00

README.md

Rocket.Chat Mobile

E2E Encryption

Note: This feature is currently in beta. Uploads will not be encrypted in this version. You can check this documentation for further information about the web client.

How it works

  • Each user has a public and private key (asymmetric cryptography).
  • The user private key is stored encrypted on the server and it can be decrypted on clients only using the user E2E encryption password.
  • A room key is generated using the public key of each room member (symmetric cryptography).
  • Users can decrypt the room key using their private key.
  • Each room has a unique identifier which make users able to request a room key.
  • The room unique identifier is called e2eKeyId and it's a property of the room collection.
  • The room key is called E2EKey and it's a property of the subscription collection.
  • After the room key is decrypted, the user is able to encrypt and decrypt messages of the room.

User keys

  • If the user doesn't have keys neither locally nor on the server, we create and encrypt them using a random password. These encrypted keys are sent to the server (so other clients can fetch) and saved locally.
  • If the user have keys stored on server, but doesn't have them stored locally, we fetch them from the server and request a password to decrypt the keys.

Room keys

  • If the room has a E2EKey, we decrypt it using the user key.
  • If the room doesn't have a E2EKey, but has a e2eKeyId, we emit an event on stream-notify-room-users sending the roomId and the e2eKeyId requesting the E2EKey from any online room member.
  • If the room have none of them, we create new ones and send them back to the server.