{"id":15395452,"url":"https://github.com/stef/tmsg","last_synced_at":"2025-03-27T20:44:53.255Z","repository":{"id":5180626,"uuid":"6354926","full_name":"stef/tmsg","owner":"stef","description":"very simple tor-based chat and file sharing","archived":false,"fork":false,"pushed_at":"2012-10-25T23:07:23.000Z","size":152,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-02-01T23:17:20.334Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"strands-project/strands_hri","license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stef.png","metadata":{"files":{"readme":"README.org","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":"2012-10-23T15:25:59.000Z","updated_at":"2023-10-27T18:21:43.000Z","dependencies_parsed_at":"2022-09-19T01:30:43.400Z","dependency_job_id":null,"html_url":"https://github.com/stef/tmsg","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/stef%2Ftmsg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stef%2Ftmsg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stef%2Ftmsg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stef%2Ftmsg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stef","download_url":"https://codeload.github.com/stef/tmsg/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245924494,"owners_count":20694728,"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":[],"created_at":"2024-10-01T15:28:24.765Z","updated_at":"2025-03-27T20:44:53.235Z","avatar_url":"https://github.com/stef.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"* tmsg\nSimple, decentralized multiparty chat and file sharing via tor and ecc\nfor auth. Receiving peers run tmsg hidden services which handle\nincoming messages. If an incoming message starts with an line signed\nby a peer the rest of the message will be also verified against this\npeers public key and if this succeeds, the message is\ndisplayed. Incoming messages are automatically truncated at 4KB.\n\ndepends on socat, seccure, ksh\n\n** set up tor hidden service\nstart a hidden service like this in /etc/tor/torrc:\n#+BEGIN_EXAMPLE\nHiddenServiceDir /var/lib/tor/tmsg/\nHiddenServicePort 80 127.0.0.1:14444\n#+END_EXAMPLE\n\nget your onion address from\n#+BEGIN_EXAMPLE\nsudo cat /var/lib/tor/tmsg/hostname\n#+END_EXAMPLE\n\nThis hostname together with the HiddenServicePort 80 from above and\nyour public key from ./pub form your complete address that you can\nshare with your friends so you can have a two-way conversation. If you\nonly share your public key, then you will be able to send to people\naccepting your key. But you can only be contacted, if you shared your\nonion address with others.\n\n** peers\ncreate a list of all your peers data in this format\n#+BEGIN_EXAMPLE\nmyself myaddress.onion \u003cmy public key\u003e\nfriend 3m3k8x....onion \u003cfriends public key\u003e\nmom 8xj8nj38x....onion \u003cmoms public key\u003e\nmyself2 my2ndaddress.onion \u003cmy other public key\u003e\n#+END_EXAMPLE\ntrailing space but no key, for read only address\n#+BEGIN_EXAMPLE\nmydeaddrop mydeadrop.onion \n#+END_EXAMPLE\ntwospaces before public key necessary, but no onion address\n#+BEGIN_EXAMPLE\nposter  \u003cpseudonym public key\u003e\n#+END_EXAMPLE\n\n** multiple instances\nYou can run multiple tmsg instances in parallel, you just have to create more onion services, and run each tmsg in a separate directory\nYou can change the local port for tmsg like this:\n#+BEGIN_EXAMPLE\nlocalport=14445 ./tmsg.sh\n#+END_EXAMPLE\n\n** sending\nexample send to self (assuming you have a line with self and your\nonion address and public key in *peers*):\n#+BEGIN_EXAMPLE\necho \"snafu\" | ./tsend.sh self\n#+END_EXAMPLE\n\nexample send to multiple peers:\n\n#+BEGIN_EXAMPLE\necho \"immanentize the eschaton\" | ./tsend.sh self hugo angela vlad kim\n#+END_EXAMPLE\n\n** complete example\n#+BEGIN_EXAMPLE\n% git clone git://github.com/stef/tmsg.git\nCloning into 'tmsg'...\nremote: Counting objects: 5, done.\nremote: Compressing objects: 100% (5/5), done.\nremote: Total 5 (delta 0), reused 5 (delta 0)\nReceiving objects: 100% (5/5), done.\n% cd tmsg\n% ./tmsg.sh\nyour public key is: $Crmgt8UIjK|jzRP+UcpShH.7crWl6a0\u0026=Dr\u003c\u003c)fl6|b:4}G70rycD$0Pov?X5(G-$pA?Iz:\u003c/(\u003c|X6zL\ndon't forget to add your onion address to ./peers^Z\nzsh: suspended  ./tmsg.sh\n% sudo cat /var/lib/tor/tmsg/hostname\n[sudo] password for stef: \nhvpd33rd4vhx4upd.onion\n% echo 'self hvpd33rd4vhx4upd.onion:80 $Crmgt8UIjK|jzRP+UcpShH.7crWl6a0\u0026=Dr\u003c\u003c)fl6|b:4}G70rycD$0Pov?X5(G-$pA?Iz:\u003c/(\u003c|X6zL' \u003epeers\n% fg\n[1]  + continued  ./tmsg.sh\n#+END_EXAMPLE\n\nMeanwhile in a different terminal (but the same directory):\n#+BEGIN_EXAMPLE\n% echo \"hello world\" | ./tsend.sh self\n#+END_EXAMPLE\n\nafter some tor specific delay in the tmsg terminal:\n#+BEGIN_EXAMPLE\n2012-10-23T22:44:50.717327580+0200 \u003cself\u003e hello world\n^C\n#+END_EXAMPLE\n\n** poor mans repl\n#+BEGIN_EXAMPLE\n./tmsg.sh \u0026; while read line; do echo \"$line\" | ./tsend.sh otheruser; done\n#+END_EXAMPLE\n\n** wishlist\n - support file uploads\n - use ephemeral signing keys\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstef%2Ftmsg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstef%2Ftmsg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstef%2Ftmsg/lists"}