Rename all RELAY_* cell types to RELAY_COMMAND_*.

This commit is contained in:
Karsten Loesing
2010-07-29 10:57:51 +02:00
parent 4727adf591
commit f6e0dc2a6e
+51 -43
View File
@@ -104,14 +104,14 @@
0.3. Constants and new cell types
Relay cell types
32 -- RELAY_ESTABLISH_INTRO
33 -- RELAY_ESTABLISH_RENDEZVOUS
34 -- RELAY_INTRODUCE1
35 -- RELAY_INTRODUCE2
36 -- RELAY_RENDEZVOUS1
37 -- RELAY_RENDEZVOUS2
38 -- RELAY_INTRO_ESTABLISHED
39 -- RELAY_RENDEZVOUS_ESTABLISHED
32 -- RELAY_COMMAND_ESTABLISH_INTRO
33 -- RELAY_COMMAND_ESTABLISH_RENDEZVOUS
34 -- RELAY_COMMAND_INTRODUCE1
35 -- RELAY_COMMAND_INTRODUCE2
36 -- RELAY_COMMAND_RENDEZVOUS1
37 -- RELAY_COMMAND_RENDEZVOUS2
38 -- RELAY_COMMAND_INTRO_ESTABLISHED
39 -- RELAY_COMMAND_RENDEZVOUS_ESTABLISHED
40 -- RELAY_COMMAND_INTRODUCE_ACK
0.4. Version overview
@@ -406,7 +406,7 @@
The OP establishes a new introduction circuit to each introduction
point. These circuits MUST NOT be used for anything but hidden service
introduction. To establish the introduction, Bob sends a
RELAY_ESTABLISH_INTRO cell, containing:
RELAY_COMMAND_ESTABLISH_INTRO cell, containing:
KL Key length [2 octets]
PK Introduction public key [KL octets]
@@ -429,15 +429,19 @@
check fails, the OP discards the cell; otherwise, it associates the
circuit with Bob's public key, and dissociates any other circuits
currently associated with PK. On success, the OR sends Bob a
RELAY_INTRO_ESTABLISHED cell with an empty payload.
RELAY_COMMAND_INTRO_ESTABLISHED cell with an empty payload.
Bob's OP does not include its own public key in the RELAY_ESTABLISH_INTRO
cell, but the public key of a freshly generated introduction key pair.
The OP also includes these fresh public keys in the v2 hidden service
descriptor together with the other introduction point information. The
reason is that the introduction point does not need to and therefore
should not know for which hidden service it works, so as to prevent it
from tracking the hidden service's activity.
Bob's OP uses either Bob's public key or a freshly generated, single-use
service key in the RELAY_COMMAND_ESTABLISH_INTRO cell, depending on the
configured hidden service descriptor version. The public key is used for
v0 descriptors, the service key for v2 descriptors. In the latter case, the
service keys of all introduction points are included in the v2 hidden
service descriptor together with the other introduction point information.
The reason is that the introduction point does not need to and therefore
should not know for which hidden service it works, so as to prevent it from
tracking the hidden service's activity. If the hidden service is configured
to publish both v0 and v2 descriptors, two separate sets of introduction
points are established.
1.4. Bob's OP advertises his service descriptor(s).
@@ -551,7 +555,7 @@
and Alice's OP does not have an established circuit to that service,
the OP builds a rendezvous circuit. It does this by establishing
a circuit to a randomly chosen OR, and sending a
RELAY_ESTABLISH_RENDEZVOUS cell to that OR. The body of that cell
RELAY_COMMAND_ESTABLISH_RENDEZVOUS cell to that OR. The body of that cell
contains:
RC Rendezvous cookie [20 octets]
@@ -561,9 +565,9 @@
The rendezvous cookie is an arbitrary 20-byte value, chosen randomly by
Alice's OP.
Upon receiving a RELAY_ESTABLISH_RENDEZVOUS cell, the OR associates the
RC with the circuit that sent it. It replies to Alice with an empty
RELAY_RENDEZVOUS_ESTABLISHED cell to indicate success.
Upon receiving a RELAY_COMMAND_ESTABLISH_RENDEZVOUS cell, the OR associates
the RC with the circuit that sent it. It replies to Alice with an empty
RELAY_COMMAND_RENDEZVOUS_ESTABLISHED cell to indicate success.
Alice's OP MUST NOT use the circuit which sent the cell for any purpose
other than rendezvous with the given location-hidden service.
@@ -571,7 +575,7 @@
1.8. Introduction: from Alice's OP to Introduction Point
Alice builds a separate circuit to one of Bob's chosen introduction
points, and sends it a RELAY_INTRODUCE1 cell containing:
points, and sends it a RELAY_COMMAND_INTRODUCE1 cell containing:
Cleartext
PK_ID Identifier for Bob's PK [20 octets]
@@ -601,7 +605,7 @@
The hybrid encryption to Bob's PK works just like the hybrid
encryption in CREATE cells (see tor-spec). Thus the payload of the
version 0 RELAY_INTRODUCE1 cell on the wire will contain
version 0 RELAY_COMMAND_INTRODUCE1 cell on the wire will contain
20+42+16+20+20+128=246 bytes, and the version 1 and version 2
introduction formats have other sizes.
@@ -612,7 +616,7 @@
If Alice has downloaded a v2 descriptor, she uses the contained public
key ("service-key") instead of Bob's public key to create the
RELAY_INTRODUCE1 cell as described above.
RELAY_COMMAND_INTRODUCE1 cell as described above.
1.8.1. Other introduction formats we don't use.
@@ -637,24 +641,27 @@
If the Introduction Point recognizes PK_ID as a public key which has
established a circuit for introductions as in 1.3 above, it sends the body
of the cell in a new RELAY_INTRODUCE2 cell down the corresponding circuit.
(If the PK_ID is unrecognized, the RELAY_INTRODUCE1 cell is discarded.)
of the cell in a new RELAY_COMMAND_INTRODUCE2 cell down the corresponding
circuit. (If the PK_ID is unrecognized, the RELAY_COMMAND_INTRODUCE1 cell is
discarded.)
After sending the RELAY_INTRODUCE2 cell, the OR replies to Alice with an
empty RELAY_COMMAND_INTRODUCE_ACK cell. If no RELAY_INTRODUCE2 cell can
be sent, the OR replies to Alice with a non-empty cell to indicate an
error. (The semantics of the cell body may be determined later; the
current implementation sends a single '1' byte on failure.)
After sending the RELAY_COMMAND_INTRODUCE2 cell, the OR replies to Alice
with an empty RELAY_COMMAND_INTRODUCE_ACK cell. If no
RELAY_COMMAND_INTRODUCE2 cell can be sent, the OR replies to Alice with a
non-empty cell to indicate an error. (The semantics of the cell body may be
determined later; the current implementation sends a single '1' byte on
failure.)
When Bob's OP receives the RELAY_INTRODUCE2 cell, it decrypts it with
the private key for the corresponding hidden service, and extracts the
When Bob's OP receives the RELAY_COMMAND_INTRODUCE2 cell, it decrypts it
with the private key for the corresponding hidden service, and extracts the
rendezvous point's nickname, the rendezvous cookie, and the value of g^x
chosen by Alice.
1.10. Rendezvous
Bob's OP builds a new Tor circuit ending at Alice's chosen rendezvous
point, and sends a RELAY_RENDEZVOUS1 cell along this circuit, containing:
point, and sends a RELAY_COMMAND_RENDEZVOUS1 cell along this circuit,
containing:
RC Rendezvous cookie [20 octets]
g^y Diffie-Hellman [128 octets]
KH Handshake digest [20 octets]
@@ -662,7 +669,7 @@
(Bob's OP MUST NOT use this circuit for any other purpose.)
If the RP recognizes RC, it relays the rest of the cell down the
corresponding circuit in a RELAY_RENDEZVOUS2 cell, containing:
corresponding circuit in a RELAY_COMMAND_RENDEZVOUS2 cell, containing:
g^y Diffie-Hellman [128 octets]
KH Handshake digest [20 octets]
@@ -670,10 +677,10 @@
(If the RP does not recognize the RC, it discards the cell and
tears down the circuit.)
When Alice's OP receives a RELAY_RENDEZVOUS2 cell on a circuit which
has sent a RELAY_ESTABLISH_RENDEZVOUS cell but which has not yet received
a reply, it uses g^y and H(g^xy) to complete the handshake as in the Tor
circuit extend process: they establish a 60-octet string as
When Alice's OP receives a RELAY_COMMAND_RENDEZVOUS2 cell on a circuit which
has sent a RELAY_COMMAND_ESTABLISH_RENDEZVOUS cell but which has not yet
received a reply, it uses g^y and H(g^xy) to complete the handshake as in
the Tor circuit extend process: they establish a 60-octet string as
K = SHA1(g^xy | [00]) | SHA1(g^xy | [01]) | SHA1(g^xy | [02])
and generate
KH = K[0..15]
@@ -692,7 +699,7 @@
1.11. Creating streams
To open TCP connections to Bob's location-hidden service, Alice's OP sends
a RELAY_BEGIN cell along the established circuit, using the special
a RELAY_COMMAND_BEGIN cell along the established circuit, using the special
address "", and a chosen port. Bob's OP chooses a destination IP and
port, based on the configuration of the service connected to the circuit,
and opens a TCP stream. From then on, Bob's OP treats the stream as an
@@ -700,9 +707,10 @@
[ Except he doesn't include addr in the connected cell or the end
cell. -RD]
Alice MAY send multiple RELAY_BEGIN cells along the circuit, to open
multiple streams to Bob. Alice SHOULD NOT send RELAY_BEGIN cells for any
other address along her circuit to Bob; if she does, Bob MUST reject them.
Alice MAY send multiple RELAY_COMMAND_BEGIN cells along the circuit, to open
multiple streams to Bob. Alice SHOULD NOT send RELAY_COMMAND_BEGIN cells
for any other address along her circuit to Bob; if she does, Bob MUST reject
them.
2. Authentication and authorization.