aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--address-spec.txt7
-rw-r--r--bandwidth-file-spec.txt27
-rw-r--r--bridgedb-spec.txt15
-rw-r--r--cert-spec.txt15
-rw-r--r--control-spec.txt89
-rw-r--r--dir-list-spec.txt24
-rw-r--r--dir-spec.txt66
-rw-r--r--ext-orport-spec.txt14
-rw-r--r--gettor-spec.txt12
-rw-r--r--glossary.txt21
-rw-r--r--guard-spec.txt35
-rw-r--r--padding-spec.txt20
-rw-r--r--param-spec.txt16
-rw-r--r--path-spec.txt44
-rw-r--r--proposals/321-happy-families.md10
-rw-r--r--socks-extensions.txt9
-rw-r--r--tor-spec.txt71
-rw-r--r--version-spec.txt6
18 files changed, 493 insertions, 8 deletions
diff --git a/address-spec.txt b/address-spec.txt
index 2a6f7db..98e7068 100644
--- a/address-spec.txt
+++ b/address-spec.txt
@@ -2,6 +2,13 @@
Special Hostnames in Tor
Nick Mathewson
+Table of Contents
+
+ 1. Overview
+ 2. .exit
+ 3. .onion
+ 4. .noconnect
+
1. Overview
Most of the time, Tor treats user-specified hostnames as opaque: When
diff --git a/bandwidth-file-spec.txt b/bandwidth-file-spec.txt
index 924623e..58ce83c 100644
--- a/bandwidth-file-spec.txt
+++ b/bandwidth-file-spec.txt
@@ -3,6 +3,33 @@
juga
teor
+Table of Contents
+
+ 1. Scope and preliminaries
+ 1.2. Acknowledgements
+ 1.3. Outline
+ 1.4. Format Versions
+ 2. Format details
+ 2.1. Definitions
+ 2.2. Header List format
+ 2.3. Relay Line format
+ 2.4. Implementation details
+ 2.4.1. Writing bandwidth files atomically
+ 2.4.2. Additional KeyValue pair definitions
+ 2.4.2.1. Simple Bandwidth Scanner
+ 2.4.2.2. Torflow
+ A. Sample data
+ A.1. Generated by Torflow
+ A.2. Generated by sbws version 0.1.0
+ A.3. Generated by sbws version 1.0.3
+ A.4. Headers generated by sbws version 1.0.4
+ A.5 Generated by sbws version 1.1.0
+ B. Scaling bandwidths
+ B.1. Scaling requirements
+ B.2. A linear scaling method
+ B.3. Quota changes
+ B.4. Torflow aggregation
+
1. Scope and preliminaries
This document describes the format of Tor's Bandwidth File, version
diff --git a/bridgedb-spec.txt b/bridgedb-spec.txt
index a4c4708..5ccce92 100644
--- a/bridgedb-spec.txt
+++ b/bridgedb-spec.txt
@@ -4,6 +4,21 @@
Karsten Loesing
Nick Mathewson
+Table of Contents
+
+ 0. Preliminaries
+ 1. Importing bridge network statuses and bridge descriptors
+ 1.1. Parsing bridge network statuses
+ 1.2. Parsing bridge descriptors
+ 1.3. Parsing extra-info documents
+ 2. Assigning bridges to distributors
+ 3. Giving out bridges upon requests
+ 4. Selecting bridges to be given out based on IP addresses
+ 5. Selecting bridges to be given out based on email addresses
+ 6. Selecting unallocated bridges to be stored in file buckets
+ 7. Displaying Bridge Information
+ 8. Writing bridge assignments for statistics
+
0. Preliminaries
This document specifies how BridgeDB processes bridge descriptor files
diff --git a/cert-spec.txt b/cert-spec.txt
index 08d754d..1782141 100644
--- a/cert-spec.txt
+++ b/cert-spec.txt
@@ -1,6 +1,21 @@
Ed25519 certificates in Tor
+Table of Contents
+
+ 1. Scope and Preliminaries
+ 1.1. Signing
+ 1.2. Integer encoding
+ 2. Document formats
+ 2.1. Ed25519 Certificates
+ 2.2. Basic extensions
+ 2.2.1. Signed-with-ed25519-key extension [type 04]
+ 2.3. RSA->Ed25519 cross-certificate
+ A.1. List of certificate types (CERT_TYPE field)
+ A.2. List of extension types
+ A.3. List of signature prefixes
+ A.4. List of certified key types (CERT_KEY_TYPE field)
+
1. Scope and Preliminaries
This document describes a certificate format that Tor uses for
diff --git a/control-spec.txt b/control-spec.txt
index 25977b9..1feb250 100644
--- a/control-spec.txt
+++ b/control-spec.txt
@@ -1,6 +1,95 @@
TC: A Tor control protocol (Version 1)
+Table of Contents
+
+ 0. Scope
+ 1. Protocol outline
+ 1.1. Forward-compatibility
+ 2. Message format
+ 2.1. Description format
+ 2.1.1. Notes on an escaping bug
+ 2.2. Commands from controller to Tor
+ 2.3. Replies from Tor to the controller
+ 2.4. General-use tokens
+ 3. Commands
+ 3.1. SETCONF
+ 3.2. RESETCONF
+ 3.3. GETCONF
+ 3.4. SETEVENTS
+ 3.5. AUTHENTICATE
+ 3.6. SAVECONF
+ 3.7. SIGNAL
+ 3.8. MAPADDRESS
+ 3.9. GETINFO
+ 3.10. EXTENDCIRCUIT
+ 3.11. SETCIRCUITPURPOSE
+ 3.12. SETROUTERPURPOSE
+ 3.13. ATTACHSTREAM
+ 3.14. POSTDESCRIPTOR
+ 3.15. REDIRECTSTREAM
+ 3.16. CLOSESTREAM
+ 3.17. CLOSECIRCUIT
+ 3.18. QUIT
+ 3.19. USEFEATURE
+ 3.20. RESOLVE
+ 3.21. PROTOCOLINFO
+ 3.22. LOADCONF
+ 3.23. TAKEOWNERSHIP
+ 3.24. AUTHCHALLENGE
+ 3.25. DROPGUARDS
+ 3.26. HSFETCH
+ 3.27. ADD_ONION
+ 3.28. DEL_ONION
+ 3.29. HSPOST
+ 3.30. ONION_CLIENT_AUTH_ADD
+ 3.31. ONION_CLIENT_AUTH_REMOVE
+ 3.32. ONION_CLIENT_AUTH_VIEW
+ 3.33. DROPOWNERSHIP
+ 3.34. DROPTIMEOUTS
+ 4. Replies
+ 4.1. Asynchronous events
+ 4.1.1. Circuit status changed
+ 4.1.2. Stream status changed
+ 4.1.3. OR Connection status changed
+ 4.1.4. Bandwidth used in the last second
+ 4.1.5. Log messages
+ 4.1.6. New descriptors available
+ 4.1.7. New Address mapping
+ 4.1.8. Descriptors uploaded to us in our role as authoritative dirserver
+ 4.1.9. Our descriptor changed
+ 4.1.10. Status events
+ 4.1.11. Our set of guard nodes has changed
+ 4.1.12. Network status has changed
+ 4.1.13. Bandwidth used on an application stream
+ 4.1.14. Per-country client stats
+ 4.1.15. New consensus networkstatus has arrived
+ 4.1.16. New circuit buildtime has been set
+ 4.1.17. Signal received
+ 4.1.18. Configuration changed
+ 4.1.19. Circuit status changed slightly
+ 4.1.20. Pluggable transport launched
+ 4.1.21. Bandwidth used on an OR or DIR or EXIT connection
+ 4.1.22. Bandwidth used by all streams attached to a circuit
+ 4.1.23. Per-circuit cell stats
+ 4.1.24. Token buckets refilled
+ 4.1.25. HiddenService descriptors
+ 4.1.26. HiddenService descriptors content
+ 4.1.27. Network liveness has changed
+ 4.1.28. Pluggable Transport Logs
+ 4.1.29. Pluggable Transport Status
+ 5. Implementation notes
+ 5.1. Authentication
+ 5.2. Don't let the buffer get too big
+ 5.3. Backward compatibility with v0 control protocol
+ 5.4. Tor config options for use by controllers
+ 5.5. Phases from the Bootstrap status event
+ 5.5.1. Overview of Bootstrap reporting.
+ 5.5.2. Phases in Bootstrap Stage 1
+ 5.5.3. Phases in Bootstrap Stage 2
+ 5.5.4. Phases in Bootstrap Stage 3
+ 5.6 Bootstrap phases reported by older versions of Tor
+
0. Scope
This document describes an implementation-specific protocol that is used
diff --git a/dir-list-spec.txt b/dir-list-spec.txt
index 3557721..c2d83f4 100644
--- a/dir-list-spec.txt
+++ b/dir-list-spec.txt
@@ -2,6 +2,30 @@
Tor Directory List Format
Tim Wilson-Brown (teor)
+Table of Contents
+
+ 1. Scope and Preliminaries
+ 1.1. Format Overview
+ 1.2. Acknowledgements
+ 1.3. Format Versions
+ 1.4. Future Plans
+ 2. Format Details
+ 2.1. Nonterminals
+ 2.2. List Header
+ 2.2.1. List Header Format
+ 2.3. List Generation
+ 2.3.1. List Generation Format
+ 2.4. Directory Entry
+ 2.4.1. Directory Entry Format
+ 3. Usage Considerations
+ 3.1. Caching
+ 3.2. Retrieving Directory Information
+ 3.3. Fallback Reliability
+ A.1. Sample Data
+ A.1.1. Sample Fallback List Header
+ A.1.2. Sample Fallback List Generation
+ A.1.3. Sample Fallback Entries
+
1. Scope and Preliminaries
This document describes the format of Tor's directory lists, which are
diff --git a/dir-spec.txt b/dir-spec.txt
index 7ba11c0..873225d 100644
--- a/dir-spec.txt
+++ b/dir-spec.txt
@@ -1,6 +1,72 @@
Tor directory protocol, version 3
+Table of Contents
+
+ 0. Scope and preliminaries
+ 0.1. History
+ 0.2. Goals of the version 3 protoc
+ 0.3. Some Remaining questions
+ 1. Outline
+ 1.1. What's different from version 2?
+ 1.2. Document meta-format
+ 1.3. Signing documents
+ 1.4. Voting timeline
+ 2. Router operation and formats
+ 2.1. Uploading server descriptors and extra-info documents
+ 2.1.1. Server descriptor format
+ 2.1.2. Extra-info document format
+ 2.1.3. Nonterminals in server descriptors
+ 3. Directory authority operation and formats
+ 3.1. Creating key certificates
+ 3.2. Accepting server descriptor and extra-info document uploads
+ 3.3. Computing microdescriptors
+ 3.4. Exchanging votes
+ 3.4.1. Vote and consensus status document formats
+ 3.4.2. Assigning flags in a vote
+ 3.4.3. Serving bandwidth list files
+ 3.5. Downloading missing certificates from other directory authorities
+ 3.6. Downloading server descriptors from other directory authorities
+ 3.7. Downloading extra-info documents from other directory authorities
+ 3.8. Computing a consensus from a set of votes
+ 3.8.0.1. Deciding which Ids to include.
+ 3.8.0.2. Deciding which descriptors to include
+ 3.8.1. Forward compatibility
+ 3.8.2. Encoding port lists
+ 3.8.3. Computing Bandwidth Weights
+ 3.9. Computing consensus flavors
+ 3.9.1. ns consensus
+ 3.9.2. Microdescriptor consensus
+ 3.10. Exchanging detached signatures
+ 3.11. Publishing the signed consensus
+ 4. Directory cache operation
+ 4.1. Downloading consensus status documents from directory authorities
+ 4.2. Downloading server descriptors from directory authorities
+ 4.3. Downloading microdescriptors from directory authorities
+ 4.4. Downloading extra-info documents from directory authorities
+ 4.5. Consensus diffs
+ 4.5.1. Consensus diff format
+ 4.5.2. Serving and requesting diff
+ 4.6 Retrying failed downloads
+ 5. Client operation
+ 5.1. Downloading network-status documents
+ 5.2. Downloading server descriptors or microdescriptors
+ 5.3. Downloading extra-info documents
+ 5.4. Using directory information
+ 5.4.1. Choosing routers for circuits.
+ 5.4.2. Managing naming
+ 5.4.3. Software versions
+ 5.4.4. Warning about a router's status.
+ 5.5. Retrying failed downloads
+ 6. Standards compliance
+ 6.1. HTTP headers
+ 6.2. HTTP status codes
+ A. Consensus-negotiation timeline.
+ B. General-use HTTP URLs
+ C. Converting a curve25519 public key to an ed25519 public key
+ D. Inferring missing proto lines.
+ E. Limited ed diff format
+
0. Scope and preliminaries
This directory protocol is used by Tor version 0.2.0.x-alpha and later.
diff --git a/ext-orport-spec.txt b/ext-orport-spec.txt
index 8008c4f..ec88244 100644
--- a/ext-orport-spec.txt
+++ b/ext-orport-spec.txt
@@ -1,6 +1,20 @@
Extended ORPort for pluggable transports
George Kadianakis, Nick Mathewson
+Table of Contents
+
+ 1. Overview
+ 2. Establishing a connection and authenticating.
+ 2.1. Authentication type: SAFE_COOKIE
+ 2.1.2. Cookie-file format
+ 2.1.3. SAFE_COOKIE Protocol specification
+ 3. The extended ORPort protocol
+ 3.1. Protocol
+ 3.2. Command descriptions
+ 3.2.1. USERADDR
+ 3.2.2. TRANSPORT
+ 4. Security Considerations
+
1. Overview
This document describes the "Extended ORPort" protocol, a wrapper
diff --git a/gettor-spec.txt b/gettor-spec.txt
index f40b298..a4959b4 100644
--- a/gettor-spec.txt
+++ b/gettor-spec.txt
@@ -2,6 +2,18 @@
GetTor specification
Jacob Appelbaum
+Table of Contents
+
+ 0. Preface
+ 1. Overview
+ 2. Implementation
+ 2.1. Reference implementation
+ 3. SMTP transport
+ 3.1. SMTP transport security considerations
+ 3.2. SMTP transport privacy considerations
+ 4. Other transports
+ 5. Implementation suggestions
+
0. Preface
This document describes GetTor and how to properly implementation GetTor.
diff --git a/glossary.txt b/glossary.txt
index 6debe20..68de376 100644
--- a/glossary.txt
+++ b/glossary.txt
@@ -11,6 +11,27 @@ This glossary is not a design document; it is only a reference.
This glossary is a work-in-progress; double-check its definitions before
citing them authoritatively. ;)
+Table of Contents
+
+ 0. Preliminaries
+ 1.0. Commonly used Tor configuration terms
+ 2.0. Tor network components
+ 2.1. Relays, aka OR (onion router)
+ 2.1.1. Specific roles
+ 2.2. Client, aka OP (onion proxy)
+ 2.3. Authorities
+ 2.4. Hidden Service
+ 2.5. Circuit
+ 2.6. Edge connection
+ 2.7. Consensus
+ 2.8. Descriptor
+ 3.0. Tor network protocols
+ 3.1. Link handshake
+ 3.2. Circuit handshake
+ 3.3. Hidden Service Protocol
+ 3.4. Directory Protocol
+ 4.0. General network definitions
+
0. Preliminaries
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
diff --git a/guard-spec.txt b/guard-spec.txt
index 4f021b7..883c2bf 100644
--- a/guard-spec.txt
+++ b/guard-spec.txt
@@ -6,6 +6,37 @@
Ola Bini
Nick Mathewson
+Table of Contents
+
+ 1. Introduction and motivation
+ 2. State instances
+ 3. Circuit Creation, Entry Guard Selection (1000 foot view)
+ 3.1 Path selection
+ 3.1.1 Managing entry guards
+ 3.1.2 Middle and exit node selection
+ 3.2 Circuit Building
+ 4. The algorithm.
+ 4.0. The guards listed in the current consensus. [Section:GUARDS]
+ 4.1. The Sampled Guard Set. [Section:SAMPLED]
+ 4.2. The Usable Sample [Section:FILTERED]
+ 4.3. The confirmed-guard list. [Section:CONFIRMED]
+ 4.4. The Primary guards [Section:PRIMARY]
+ 4.5. Retrying guards. [Section:RETRYING]
+ 4.6. Selecting guards for circuits. [Section:SELECTING]
+ 4.7. When a circuit fails. [Section:ON_FAIL]
+ 4.8. When a circuit succeeds [Section:ON_SUCCESS]
+ 4.9. Updating the list of waiting circuits [Section:UPDATE_WAITING]
+ 4.10. Whenever we get a new consensus. [Section:ON_CONSENSUS]
+ 4.11. Deciding whether to generate a new circuit.
+ 4.12. When we are missing descriptors.
+ A. Appendices
+ A.0. Acknowledgements
+ A.1. Parameters with suggested values. [Section:PARAM_VALS]
+ A.2. Random values [Section:RANDOM]
+ A.3. Why not a sliding scale of primaryness? [Section:CVP]
+ A.4. Controller changes
+ A.5. Persistent state format
+
1. Introduction and motivation
Tor uses entry guards to prevent an attacker who controls some
@@ -771,7 +802,7 @@ A.3. Why not a sliding scale of primaryness? [Section:CVP]
simple to make to the code after we implement the simpler
version of the algorithm described above.
-A.3. Controller changes
+A.4. Controller changes
We will add to control-spec.txt a new possible circuit state, GUARD_WAIT,
that can be given as part of circuit events and GETINFO responses about
@@ -779,7 +810,7 @@ A.3. Controller changes
but we will not use it because a circuit with a better guard might
become built too.
-A.4. Persistent state format
+A.5. Persistent state format
The persistent state format doesn't need to be part of this
specification, since different implementations can do it
diff --git a/padding-spec.txt b/padding-spec.txt
index f6356ed..825f1d7 100644
--- a/padding-spec.txt
+++ b/padding-spec.txt
@@ -16,6 +16,26 @@ the anonymity and load-balancing implications of their choices.
"OPTIONAL" in this document are to be interpreted as described in
RFC 2119.
+Table of Contents
+
+ 1. Overview
+ 2. Connection-level padding
+ 2.1. Background
+ 2.2. Implementation
+ 2.3. Padding Cell Timeout Distribution Statistics
+ 2.4. Maximum overhead bounds
+ 2.5. Reducing or Disabling Padding via Negotiation
+ 2.6. Consensus Parameters Governing Behavior
+ 3. Circuit-level padding
+ 3.1. Circuit Padding Negotiation
+ 3.2. Circuit Padding Machine Message Management
+ 3.3. Obfuscating client-side onion service circuit setup
+ 3.3.1. Common general circuit construction sequences
+ 3.3.2. Client-side onion service introduction circuit obfuscation
+ 3.3.3. Client-side rendezvous circuit hiding
+ 3.3.4. Circuit setup machine overhead
+ 3.4. Circuit padding consensus parameters
+ A. Acknowledgments
1. Overview
diff --git a/param-spec.txt b/param-spec.txt
index 4da8ee1..b2882a6 100644
--- a/param-spec.txt
+++ b/param-spec.txt
@@ -4,6 +4,22 @@
This file lists the recognized parameters that can appear on the "params"
line of a directory consensus.
+Table of Contents
+
+ 1. Network protocol parameters
+ 2. Performance-tuning parameters
+ 3. Voting-related parameters
+ 4. Circuit-build-timeout parameters
+ 5. Directory-related parameters
+ 6. Pathbias parameters
+ 7. Relay behavior
+ 8. V3 onion service parameters
+ 9. Denial-of-service parameters
+ 10. Padding-related parameters
+ 11. Guard-related parameters
+ 12. Relay behavior
+ X. Obsolete parameters
+
1. Network protocol parameters
"circwindow" -- the default package window that circuits should be
diff --git a/path-spec.txt b/path-spec.txt
index eb7d6e6..b1c9fde 100644
--- a/path-spec.txt
+++ b/path-spec.txt
@@ -19,6 +19,48 @@ of their choices.
"OPTIONAL" in this document are to be interpreted as described in
RFC 2119.
+Tables of Contents
+
+ 1. General operation
+ 1.1. Terminology
+ 1.2. A relay's bandwidth
+ 2. Building circuits
+ 2.1. When we build
+ 2.1.0. We don't build circuits until we have enough directory info
+ 2.1.1. Clients build circuits preemptively
+ 2.1.2. Clients build circuits on demand
+ 2.1.3. Relays build circuits for testing reachability and bandwidth
+ 2.1.4. Hidden-service circuits
+ 2.1.5. Rate limiting of failed circuits
+ 2.1.6. When to tear down circuits
+ 2.2. Path selection and constraints
+ 2.2.1. Choosing an exit
+ 2.2.2. User configuration
+ 2.3. Cannibalizing circuits
+ 2.4. Learning when to give up ("timeout") on circuit construction
+ 2.4.1 Distribution choice and parameter estimation
+ 2.4.2. How much data to record
+ 2.4.3. How to record timeouts
+ 2.4.4. Detecting Changing Network Conditions
+ 2.4.5. Consensus parameters governing behavior
+ 2.4.6. Consensus parameters governing behavior
+ 2.5. Handling failure
+ 3. Attaching streams to circuits
+ 4. Hidden-service related circuits
+ 5. Guard nodes
+ 5.1. How consensus bandwidth weights factor into entry guard selection
+ 6. Server descriptor purposes
+ 7. Detecting route manipulation by Guard nodes (Path Bias)
+ 7.1. Measuring path construction success rates
+ 7.2. Measuring path usage success rates
+ 7.3. Scaling success counts
+ 7.4. Parametrization
+ 7.5. Known barriers to enforcement
+ X. Old notes
+ X.1. Do we actually do this?
+ X.2. A thing we could do to deal with reachability.
+ X.3. Some stuff that worries me about entry guards. 2006 Jun, Nickm.
+
1. General operation
Tor begins building circuits as soon as it has enough directory
@@ -90,7 +132,7 @@ of their choices.
is unknown (usually its target IP), but we believe the path probably
supports the request according to the rules given below.
-1.1. A relay's bandwidth
+1.2. A relay's bandwidth
Old versions of Tor did not report bandwidths in network status
documents, so clients had to learn them from the routers' advertised
diff --git a/proposals/321-happy-families.md b/proposals/321-happy-families.md
index 288ba66..f9ac7b4 100644
--- a/proposals/321-happy-families.md
+++ b/proposals/321-happy-families.md
@@ -19,7 +19,7 @@ we can de-duplicate families which sometimes helps.) Adding or
removing a server from the family requires all the other servers to
change their torrc settings.
-The is growth in size is not just a theoretical problem. Family
+This growth in size is not just a theoretical problem. Family
declarations currently make up a little over 55% of the
microdescriptors in the directory--around 24% after compression.
The largest family has around 270 members. With Walking Onions, 270
@@ -34,7 +34,7 @@ requirements and providing a more detailed migration plan.
In this design, every family has a master ed25519 "family key". A node
is in the family iff its server descriptor includes a certificate of its
ed25519 identity key with the family key. The certificate
-format the one in the tor-certs.txt spec; we would allocate a new
+format is the one in the tor-certs.txt spec; we would allocate a new
certificate type for this usage. These certificates would need to
include the signing key in the appropriate extension.
@@ -93,7 +93,7 @@ need to do in this event would be to move to a new private family
key.
A more orthodox method would be to keep the private key somewhere
-offline, and using it to generate a certificate for each relay in
+offline, and use it to generate a certificate for each relay in
the family as needed. These certificates should be made with
long-enough lifetimes, and relays should warn when they are going to
expire soon.
@@ -186,8 +186,8 @@ microdescriptors' family lines:
digest of the microdescriptor listed in the original votes. (This
calculation is deterministic.)
-The problem with this approach is that authorities would have to s
-to fetch microdescriptors they do not have in order to replace their
+The problem with this approach is that authorities would have to
+fetch microdescriptors they do not have in order to replace their
family lines. Currently, voting never requires an authority to
fetch a microdescriptor from another authority. If we implement
vote compression and diffs as in the Walking Onions proposal,
diff --git a/socks-extensions.txt b/socks-extensions.txt
index 5fd1f82..0107856 100644
--- a/socks-extensions.txt
+++ b/socks-extensions.txt
@@ -1,6 +1,15 @@
Tor's extensions to the SOCKS protocol
+Table of Contents
+
+ 1. Overview
+ 1.1. Extent of support
+ 2. Name lookup
+ 3. Other command extensions.
+ 4. HTTP-resistance
+ 5. Optimistic data
+
1. Overview
The SOCKS protocol provides a generic interface for TCP proxies. Client
diff --git a/tor-spec.txt b/tor-spec.txt
index de95acb..4b2c7f2 100644
--- a/tor-spec.txt
+++ b/tor-spec.txt
@@ -4,6 +4,77 @@
Roger Dingledine
Nick Mathewson
+Table of Contents
+
+ 0. Preliminaries
+ 0.1. Notation and encoding
+ 0.2. Security parameters
+ 0.3. Ciphers
+ 0.4. A bad hybrid encryption algorithm, for legacy purposes
+ 1. System overview
+ 1.1. Keys and names
+ 2. Connections
+ 2.1. Picking TLS ciphersuites
+ 2.2. TLS security considerations
+ 3. Cell Packet format
+ 4. Negotiating and initializing connections
+ 4.1. Negotiating versions with VERSIONS cells
+ 4.2. CERTS cells
+ 4.3. AUTH_CHALLENGE cells
+ 4.4. AUTHENTICATE cells
+ 4.4.1. Link authentication type 1: RSA-SHA256-TLSSecret
+ 4.4.2. Link authentication type 3: Ed25519-SHA256-RFC5705
+ 4.5. NETINFO cells
+ 5. Circuit management
+ 5.1. CREATE and CREATED cells
+ 5.1.1. Choosing circuit IDs in create cells
+ 5.1.2. EXTEND and EXTENDED cells
+ 5.1.3. The "TAP" handshake
+ 5.1.4. The "ntor" handshake
+ 5.1.5. CREATE_FAST/CREATED_FAST cells
+ 5.2. Setting circuit keys
+ 5.2.1. KDF-TOR
+ 5.2.2. KDF-RFC5869
+ 5.3. Creating circuits
+ 5.3.1. Canonical connections
+ 5.4. Tearing down circuits
+ 5.5. Routing relay cells
+ 5.5.1. Circuit ID Checks
+ 5.5.2. Forward Direction
+ 5.5.2.1. Routing from the Origin
+ 5.5.2.2. Relaying Forward at Onion Routers
+ 5.5.3. Backward Direction
+ 5.5.3.1. Relaying Backward at Onion Routers
+ 5.5.4. Routing to the Origin
+ 5.6. Handling relay_early cells
+ 6. Application connections and stream management
+ 6.1. Relay cells
+ 6.2. Opening streams and transferring data
+ 6.2.1. Opening a directory stream
+ 6.3. Closing streams
+ 6.4. Remote hostname lookup
+ 7. Flow control
+ 7.1. Link throttling
+ 7.2. Link padding
+ 7.3. Circuit-level flow control
+ 7.3.1. SENDME Cell Format
+ 7.4. Stream-level flow control
+ 8. Handling resource exhaustion
+ 8.1. Memory exhaustion
+ 9. Subprotocol versioning
+ 9.1. "Link"
+ 9.2. "LinkAuth"
+ 9.3. "Relay"
+ 9.4. "HSIntro"
+ 9.5. "HSRend"
+ 9.6. "HSDir"
+ 9.7. "DirCache"
+ 9.8. "Desc"
+ 9.9. "Microdesc"
+ 9.10. "Cons"
+ 9.11. "Padding"
+ 9.12. "FlowCtrl"
+
Note: This document aims to specify Tor as currently implemented, though it
may take it a little time to become fully up to date. Future versions of Tor
may implement improved protocols, and compatibility is not guaranteed.
diff --git a/version-spec.txt b/version-spec.txt
index 63782b6..615f6f2 100644
--- a/version-spec.txt
+++ b/version-spec.txt
@@ -1,6 +1,12 @@
HOW TOR VERSION NUMBERS WORK
+Table of Contents
+
+ 1. The Old Way
+ 2. The New Way
+ 3. Version status.
+
1. The Old Way
Before 0.1.0, versions were of the format: