{"id":24852533,"url":"https://github.com/robertdurst/chatdemo","last_synced_at":"2025-10-14T23:31:08.006Z","repository":{"id":76905131,"uuid":"145259616","full_name":"robertDurst/ChatDemo","owner":"robertDurst","description":"A demonstration of private communication on a public channel.","archived":false,"fork":false,"pushed_at":"2019-07-29T21:05:36.000Z","size":886,"stargazers_count":29,"open_issues_count":2,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-09T18:05:18.634Z","etag":null,"topics":["cryptography","react","socket-io","wasm"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/robertDurst.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-08-18T23:37:58.000Z","updated_at":"2024-05-11T13:10:18.000Z","dependencies_parsed_at":"2023-03-10T09:00:43.042Z","dependency_job_id":null,"html_url":"https://github.com/robertDurst/ChatDemo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/robertDurst/ChatDemo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertDurst%2FChatDemo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertDurst%2FChatDemo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertDurst%2FChatDemo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertDurst%2FChatDemo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robertDurst","download_url":"https://codeload.github.com/robertDurst/ChatDemo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertDurst%2FChatDemo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279025387,"owners_count":26087974,"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","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["cryptography","react","socket-io","wasm"],"created_at":"2025-01-31T14:49:48.504Z","updated_at":"2025-10-14T23:31:08.001Z","avatar_url":"https://github.com/robertDurst.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Chat Demo\nA live demonstration of private communication on a public channel. \n\n\u003cdiv style=\"center\"\u003e\u003cimg src=\"https://imgur.com/WLDbRZi.png\"\u003e\u003c/div\u003e\n\n## How it Works\n\nWe utilize simple web sockets via [socket.io](http://socket.io/) to create a central chat room that broadcasts all messages to all members and [RSA](https://en.wikipedia.org/wiki/RSA_(cryptosystem)) for message encryption/decryption.\n\nBefore joining the chat room, the user generates a public key `[e,n]` and private key `[d,n]`. After generating the keys, the client *Registers* with the chat server by sending its public key which is broadcasted to all users.\n\nOnce the user has joined they can send unencrypted or encrypted messages. To send encrypted messages, they can click on a joined user's public key which will be filled into the *encrypt* field and write the message they want to encrypt in the *send* field. After clicking the encrypt button, their message will be encrypted and replace the plaintext in the *send* field. \n\nMessages are filtered by each client. When a client receives a message with it's public key as the header, it will automatically decrypt the message and alert the user that a message was received.\n\n\u003cdiv style=\"center\"\u003e\u003cimg src=\"https://imgur.com/ldWBZpO.png\"\u003e\u003c/div\u003e\n\n## Prerequisites\n* A recent version of node/npm (probably node 8+ should be fine)\n* Nightly Rust (we use the latest and greatest)\n\n## How to Use?\n\n### Setup\n```shell\ngit clone https://github.com/robertDurst/ChatDemo.git\ncd ChatDemo\nnpm install\nnpm run build-debug // or npm run build-release\n```\n\n### Start Client\n```shell\nnpm run client\n```\n\n### Start Server\n```shell\nnpm run server\n```\n\n### Test\n```shell\ncargo test\n```\n\n## Cryptography Dependencies\n\nThe underlying crypto makes heavy use of the crates in [rust-num](https://github.com/rust-num), specifically [num-bigint](https://github.com/rust-num/num-bigint) and [num-trait](https://github.com/rust-num/num-trait) crates.\n\nThe randomness for the crypto uses the rust [rand](https://crates.io/crates/rand) crate.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobertdurst%2Fchatdemo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobertdurst%2Fchatdemo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobertdurst%2Fchatdemo/lists"}