Commit 16184f62 authored by Nick Mathewson's avatar Nick Mathewson 🐘
Browse files

Specify CREATE_FAST and CREATED_FAST


svn:r4161
parent 978648bf
Loading
Loading
Loading
Loading
+29 −0
Changes for doc/tor-spec.txt: 29 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -124,6 +124,8 @@ TODO: (very soon)
         2 -- CREATED     (Acknowledge create)      (See Sec 4)
         3 -- RELAY       (End-to-end data)         (See Sec 5)
         4 -- DESTROY     (Stop using a circuit)    (See Sec 4)
         5 -- CREATE_FAST (Create a circuit, no PK) (See sec 4)
         6 -- CREATED_FAST (Circtuit created, no PK) (See Sec 4)

   The interpretation of 'Payload' depends on the type of the cell.
      PADDING: Payload is unused.
@@ -207,6 +209,28 @@ TODO: (very soon)
   implementations should notice when the other side of a connection is
   sending CREATE cells with the "wrong" MSG, and switch accordingly.)

4.1.1. CREATE_FAST/CREATED_FAST cells

   When initializing the first hop of a circuit, the OP has already
   established the OR's identity and negotiated a secret key using TLS.
   Because of this, it is not always necessary for the OP to perform the
   an set of public key operations to create a circuit.  In this case, the
   OP SHOULD send a CREATE_FAST cell instead of a CREATE cell for the first
   hop only.  The OR responds with a CREATED_FAST cell, and the circuit is
   created.

   A CREATE_FAST cell contains:

       Key material (X)    [20 bytes]

   A CREATED_FAST cell contains:

       Key material (Y)    [20 bytes]
       Derivative key data [20 bytes]

   [Versions of Tor before 0.1.???? did not support these cell types;
    clients should not send CREATE_FAST cells to older Tor servers.]

4.2. Setting circuit keys

   Once the handshake between the OP and an OR is completed, both
@@ -227,6 +251,11 @@ TODO: (very soon)
   is used to encrypt the stream of data going from the OP to the OR, and
   Kb is used to encrypt the stream of data going from the OR to the OP.

   The fast-setup case uses the same formula, except that X|Y is used
   in place of g^xy in determining K.  That is,
      K = SHA1(X|Y | [00]) | SHA1(X|Y | [01]) | ... SHA1(X|Y| | [04])
   The values KH, Kf, Kb, Df, and Db are established and used as before.

4.3. Creating circuits

   When creating a circuit through the network, the circuit creator