{"id":13684824,"url":"https://github.com/tarush-r/End-To-End-Ecrypted-Chat-App","last_synced_at":"2025-05-01T00:33:28.208Z","repository":{"id":49518278,"uuid":"331660469","full_name":"tarush-r/End-To-End-Ecrypted-Chat-App","owner":"tarush-r","description":"A secure end to end encrypted chat app made using flutter, nodeJs, mongoDB and sockets.","archived":false,"fork":false,"pushed_at":"2021-10-13T06:42:44.000Z","size":11169,"stargazers_count":53,"open_issues_count":0,"forks_count":14,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-08-03T14:08:05.366Z","etag":null,"topics":["chat-application","end-to-end-encryption","flutter","mongodb","node-js","nodejs","secure","socket-io"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tarush-r.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-01-21T14:55:38.000Z","updated_at":"2024-06-08T16:14:23.000Z","dependencies_parsed_at":"2022-07-29T18:18:49.575Z","dependency_job_id":null,"html_url":"https://github.com/tarush-r/End-To-End-Ecrypted-Chat-App","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tarush-r%2FEnd-To-End-Ecrypted-Chat-App","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tarush-r%2FEnd-To-End-Ecrypted-Chat-App/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tarush-r%2FEnd-To-End-Ecrypted-Chat-App/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tarush-r%2FEnd-To-End-Ecrypted-Chat-App/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tarush-r","download_url":"https://codeload.github.com/tarush-r/End-To-End-Ecrypted-Chat-App/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224230628,"owners_count":17277372,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chat-application","end-to-end-encryption","flutter","mongodb","node-js","nodejs","secure","socket-io"],"created_at":"2024-08-02T14:00:39.343Z","updated_at":"2024-11-12T06:30:42.413Z","avatar_url":"https://github.com/tarush-r.png","language":"Dart","funding_links":[],"categories":["Dart"],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cbr\u003e\n  \u003cspan\u003eCypher\u003c/span\u003e\n  \u003cbr\u003e\n \n \n[![](https://img.shields.io/badge/Made_with-Flutter-orange?style=for-the-badge\u0026logo=flutter)]( https://flutter.dev/ \"Flutter\")[![](https://img.shields.io/badge/Made_with-Javascript-orange?style=for-the-badge\u0026logo=javascript)](https://www.javascript.com/ \"Javascript\")[![](https://img.shields.io/badge/Made_with-NodeJS-yellow?style=for-the-badge\u0026logo=nodejs)](https://nodejs.org/en/ \"NodeJS\")[![](https://img.shields.io/badge/Made_with-MongoDB-green?style=for-the-badge\u0026logo=MongoDB)](https://www.mongodb.com/ \"MongoDB\")\n\u003c/h1\u003e\n\u003cspan\u003e\u003ch4 align=\"center\"\u003eEasy, secure, end to end encrypted (E2EE) messenger.\u003c/h4\u003e\u003c/span\u003e\n\n\u003cp align=\"justify\"\u003e\nCypher, is an end-to-end encrypted secured instant messaging application that would encrypt the user’s chats and media with the use of various secured methods that would prevent any kind of data breach.\n\u003cp\u003e\n\n\n* Every message is encrypted from sender to recipient. There is no way to send a plain text message in them and Cypher's servers cannot decrypt them.\n\n\n\nThe Cypher Encryption Scheme has a couple key requirements that secure your data.\n\n1. The server must never know your password.\n2. The server must never know your private key.\n\n\n## How the Cypher Encryption Scheme Works\n\nFor successful end to end encryption, private-public key pair is used. It is important to store these in such a way that server doesn't have full information required\nto decrypt messages stored in server.\nThe method used to securely store these keys is as follows.\n\n### Upon Registration\n\nWhen a user registers, the client must:\n\n1. Hash the password that the user entered, using a cryptographically secure, one way hashing algorithm.\n2. Derive an encryption key and a remainder from the hash. Neither the key nor the password should be practically derivable from just the remainder. The method Cypher uses:\n  * Remove some portion from the hash as the key. The remaining portion becomes the remainder. *Cypher removes the first 24 bytes as user's password and the next 16 bytes as encryption key.*\n3. Send the first 24 bytes from step 2 i.e the password to the server as the user's password.\n4. Generate a public/private key pair.\n5. Encrypt the private key with the encryption key it derived from the password hash using a symmetric encryption algorithm. \n6. Send the encrypted private key and clear text public key to the server.\n\n### Upon Login\n\nWhen a user logs in, the client must:\n\n1. Complete steps 1-3 of the registration process in order to authenticate the user.\n2. Retrieve the user's encrypted private key and clear text public key from the server.\n3. Use the key taken from the password hash to decrypt the private key.\n\n\n## Functions implemented\n- End to end encrypted chatting\n- **Schedule message** for any user from your contact bbook who has registered into our application\n- Agora video call\n- Media and location sharing\n- Self profile update or visit other user's profile\n- Forgot password/reset password\n- Delete chats with a particular user\n- Delete account\n- Logout from current device or from all devices user has logged into\n\n\n### Screenshots ###\n----------------------------------------------------------------------------------------\n\u003cimg height=480 width=240 style=\"margin: 10px;\" src=\"./screenshots/notificaton.png\"/\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003cimg height=480 width=240 style=\"margin: 10px;\" src=\"./screenshots/chat_screen.png\"/\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003cimg height=480 width=240 style=\"margin: 10px;\" src=\"./screenshots/share.png\"/\u003e\n\u003cbr\u003e\n### Agora video call and call log ###\n\u003cimg height=480 width=240 style=\"margin: 10px;\" src=\"./screenshots/Screenshot_20210503-141058.jpg\"/\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003cimg height=480 width=240 style=\"margin: 10px;\" src=\"./screenshots/call_logs.png\"/\u003e\n\u003cbr\u003e\n### Message scheduling for a contact and delete chat with a particular contact ###\n\u003cimg height=480 width=240 style=\"margin: 10px;\" src=\"./screenshots/chatlist_schedule_swipe.png\"/\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003cimg height=480 width=240 style=\"margin: 10px;\" src=\"./screenshots/scheduler.png\"/\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003cimg height=480 width=240 style=\"margin: 10px;\" src=\"./screenshots/chatlist_delete_swipe.png\"/\u003e\n\n\u003cimg height=480 width=240 style=\"margin: 10px;\" src=\"./screenshots/settings.png\"/\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003cimg height=480 width=240 style=\"margin: 10px;\" src=\"./screenshots/support.png\"/\u003e\n\u003cbr\u003e\n### Self profile update and view other user's profile ###\n\u003cimg height=480 width=240 style=\"margin: 10px;\" src=\"./screenshots/profile.png\"/\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003cimg height=480 width=240 style=\"margin: 10px;\" src=\"./screenshots/view_profile.png\"/\u003e\n\u003cbr\u003e\n### Login, sign up and all users from contact book of logged in user who have registered into our app listed ###\n\u003cimg height=480 width=240 style=\"margin: 10px;\" src=\"./screenshots/Screenshot_1616383521.png\"/\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003cimg height=480 width=240 style=\"margin: 10px;\" src=\"./screenshots/Screenshot_1616383548.png\"/\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003cimg height=480 width=240 style=\"margin: 10px;\" src=\"./screenshots/verified_contacts.png\"/\u003e\n\n---------------------------------------------------------------------------------------\n\n#### Installation\n###### Client\nClone the repository and navigate to chatapp_client folder and run the flutter application after giving backend localhost/ngrok url in urls.dart\n\n###### Backend\nClone the repository, navigate to chatapp_backend folder and run the following command-\n```html\n  npm run dev\n```\n\n###             Tech stack\n`Backend` : Nodejs, sockets  \u003cbr\u003e\n`Database`: Mongodb \u003cbr\u003e\n`Frontend` : Flutter  \u003cbr\u003e\n\n\n\u003ch3 align=\"center\"\u003e\u003cb\u003eDeveloped with :heart: by \u003cb\u003e\u003ca href=\"https://github.com/tarush-r/\"\u003eTarush Rajput\u003c/a\u003e, \u003cb\u003e\u003ca href=\"https://github.com/sakship31/\"\u003eSakshi Pandey\u003c/a\u003e, \u003cb\u003e\u003ca href=\"https://github.com/Rahil-Parikh/\"\u003eRahil Parikh\u003c/a\u003e\u003c/b\u003e, \u003cb\u003e\u003ca href=\"https://github.com/AkshatG6/\"\u003eAkshat Gandhi\u003c/a\u003e\u003c/b\u003e and \u003cb\u003e\u003ca href=\"https://github.com/kunal-16/\"\u003eKunal Rane\u003c/a\u003e\u003c/b\u003e\u003c/h3\u003e\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftarush-r%2FEnd-To-End-Ecrypted-Chat-App","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftarush-r%2FEnd-To-End-Ecrypted-Chat-App","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftarush-r%2FEnd-To-End-Ecrypted-Chat-App/lists"}