{"id":16686985,"url":"https://github.com/paralin/torpeer","last_synced_at":"2026-03-18T21:26:52.011Z","repository":{"id":80562596,"uuid":"42144543","full_name":"paralin/TorPeer","owner":"paralin","description":"p2p discovery protocol via hidden services on tor.","archived":false,"fork":false,"pushed_at":"2015-09-09T01:39:07.000Z","size":206,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-05T03:42:26.172Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"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/paralin.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":"2015-09-08T23:31:01.000Z","updated_at":"2023-03-24T19:31:13.000Z","dependencies_parsed_at":"2023-02-28T22:01:29.882Z","dependency_job_id":null,"html_url":"https://github.com/paralin/TorPeer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/paralin/TorPeer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paralin%2FTorPeer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paralin%2FTorPeer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paralin%2FTorPeer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paralin%2FTorPeer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paralin","download_url":"https://codeload.github.com/paralin/TorPeer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paralin%2FTorPeer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265464256,"owners_count":23770316,"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-12T15:07:27.392Z","updated_at":"2026-02-03T09:38:32.040Z","avatar_url":"https://github.com/paralin.png","language":null,"readme":"# TorPeer\n\nP2P discovery \u0026 communcation protocol via hidden services on [Tor](https://www.torproject.org/).\n\nConcept\n=======\n\nStandard P2P discovery requires routers, forwarded ports/NAT hole punching,\nand reveals client IP addresses. In situations where we'd rather not reveal\nIP addresses, are operating in a situation without reliable NAT\npunchthrough/dedicated routing servers, and have a relatively small number\nof clients, it makes sense to piggyback on the Tor network for peer to peer\ncommunication.\n\nThere's a small problem here, though. While hidden services are a great\nway to talk to other nodes in the network by name and it's fairly\nsimple to share the addresses of others in the network, there's not much\nin the way of peer discovery via Tor already written. This project aims\nto define a super-simple protocol for requesting and sharing connection\ninformation within the Tor network.\n\nThe basic idea is that with a few initial nodes, a client can request a\nlist of other known online/offline nodes in order to make additional\nconnections later. Each node keeps a table of known online hosts, which\nit has either directly contacted, or has had contact with via other\nhosts. As a potential DOS for this system would be flooding invalid\nconnection addresses to incoming connections, the system requires\nsigned timestampped verification messages from each host to verify that\nthey actually exist.\n\nAll communication is done with [proto3][protodocs]. Over HTTP transports, JSON\nencoding via proto3 is supported. Generally this system is designed for\ndirect binary communication, though. HTTP is used usually just to grab\nan initial list of peers to try, especially for dedicated routers.\n\n[protodocs]: https://developers.google.com/protocol-buffers/docs/proto3\n\nIdentification\n==============\n\nEach node in the network has identification composed of two parts:\n\n - Tor hidden service address\n - Computed proof-of-work paired with the identity.\n\nTor handles message verification internally via keypair with hidden\nservices. As such, other sign/verify methods are redundant. However,\nit's possible to flood the network with new hidden service addresses\n(these are very easy to generate). The system can use a configurable\ndifficulty proof-of-work derived from the hidden service address to make\nsure it's not too inexpensive to re-create identities.\n\nThere are currently the following archetype nodes:\n\n - Participants: care about peering events as well as network traffic.\n - Routers: connect to participants but only care about peering events.\n\nImplementation\n==============\n\nReference implementation is written in C++.\n\nInteraction with Tor\n====================\n\nIt is expected that Tor be configured externally from all of the\nimplementations. A hidden service configuration is necessary. Certain\nelements of this configuration, plus stored proof-of-work, must be\npassed into the library when initialized, or generated using included\nhelper methods.\n\nAuthors\n=======\n\nChristian Stewart \u003cchristian@paral.in\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparalin%2Ftorpeer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fparalin%2Ftorpeer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparalin%2Ftorpeer/lists"}