# Tor specifications This repository holds the specifications that describe how Tor works. They try to present Tor's protocols in sufficient detail to allow the reader to implement a compatible implementation of Tor without ever having to read the Tor source code. The [proposals](/proposals) directory holds our design proposals. These include historical documents that have now been merged into . For more information on the proposal process, including an explanation of how to make new proposals, see, see [001-process.txt](/proposals/001-process.txt). ## What you can find here Tor's specification is pretty big, and we've broken it into a bunch of files. * General interest * [tor-spec.txt](tor-spec.txt) contains the specification for the core Tor protocol itself; this is a good place to start reading. * [cert-spec.txt](cert-spec.txt) describes a certificate format used in the other parts of the protocol. * [dir-spec.txt](dir-spec.txt) specifies the operations and formats used to maintain a view of the network directory. * [padding-spec.txt](padding-spec.txt) describes a set of padding mechanisms used to impede traffic analysis. * [version-spec.txt](version-spec.txt) explains how to parse Tor version numbers. * [glossary.txt](glossary.txt) is a glossary of terms used in the other specifications. * Client operations * [address-spec.txt](address-spec.txt) lists a set of special addresses that Tor handles differently from the regular DNS system. * [guard-spec.txt](guard-spec.txt) explains the "guard node" algorithm that Tor clients use to avoid sampling attacks. * [path-spec.txt](path-spec.txt) explains how clients choose their paths through the Tor network. * [socks-extensions](socks-extensions.txt) specifies Tor-specific extensions to the SOCKS protocol. * Onion services * [rend-spec-v2.txt](rend-spec-v2.txt) is the old, deprecated version of the onion service protocol. * [rend-spec-v3.txt](rend-spec-v3.txt) is the current version of the onion service protocol. * Censorship resistance * [bridgedb-spec.txt](bridgedb-spec.txt) explains how the `bridgedb` server gives out bridges to censored clients. * [gettor-spec.txt](gettor-spec.txt) describes the `gettor` tool, which is used to download Tor in censored areas. * [pt-spec.txt](pt-spec.txt) describes the protocol that Tor clients and relays use to communicate with pluggable transports used for traffic obfuscation. * Directory authorities * [bandwidth-file-spec.txt](bandwidth-file-spec.txt) specifies the file format used by bandwidth-measuring tools to report their observations to directory authorities. * [srv-spec.txt](src-spec.txt) specifies the protocol that directory authorities use to securely compute shared random values for the network. * Controller protocol * [control-spec.txt](control-spec.txt) explains the protocol used by controllers to communicate with a running Tor process. * Miscellaneous * [dir-list-spec.txt](dir-list-spec.txt) explains the format used by tools like the fallback directory scripts to output a list of Tor directories for inclusion in the Tor source code. * The [attic](attic) directory has obsolete or historical documents.