[tor-commits] [tor/master] Merge branch 'ntor-resquashed'

nickm at torproject.org nickm at torproject.org
Thu Jan 3 16:52:58 UTC 2013


commit b1bdecd703879ca09bf63bf1453a70c4b80ac96d
Merge: ee41826 d3de0b9
Author: Nick Mathewson <nickm at torproject.org>
Date:   Thu Jan 3 11:52:41 2013 -0500

    Merge branch 'ntor-resquashed'
    
    Conflicts:
    	src/or/cpuworker.c
    	src/or/or.h
    	src/test/bench.c

 .gitignore                                      |    7 +-
 changes/ntor                                    |   40 +
 configure.ac                                    |   99 +++
 doc/tor.1.txt                                   |   10 +
 src/common/crypto.c                             |  163 +++-
 src/common/crypto.h                             |   13 +-
 src/common/crypto_curve25519.c                  |  180 ++++
 src/common/crypto_curve25519.h                  |   61 ++
 src/common/di_ops.c                             |   89 ++
 src/common/di_ops.h                             |   16 +
 src/common/include.am                           |   26 +-
 src/ext/README                                  |    5 +-
 src/ext/curve25519_donna/README                 |   44 +
 src/ext/curve25519_donna/curve25519-donna-c64.c |  449 ++++++++++
 src/ext/curve25519_donna/curve25519-donna.c     |  730 ++++++++++++++++
 src/or/channeltls.c                             |    2 +
 src/or/circuitbuild.c                           |  330 +++++---
 src/or/circuitbuild.h                           |   16 +-
 src/or/circuitlist.c                            |   13 +-
 src/or/circuituse.c                             |    4 +-
 src/or/command.c                                |   75 ++-
 src/or/config.c                                 |    1 +
 src/or/cpuworker.c                              |  205 +++--
 src/or/cpuworker.h                              |    3 +-
 src/or/dirserv.c                                |    3 +-
 src/or/dirvote.c                                |    9 +
 src/or/dirvote.h                                |    6 +-
 src/or/entrynodes.c                             |    2 +-
 src/or/include.am                               |   15 +-
 src/or/microdesc.c                              |    1 +
 src/or/nodelist.c                               |   12 +
 src/or/nodelist.h                               |    1 +
 src/or/onion.c                                  | 1032 +++++++++++++++++------
 src/or/onion.h                                  |  118 ++-
 src/or/onion_fast.c                             |  123 +++
 src/or/onion_fast.h                             |   38 +
 src/or/onion_ntor.c                             |  295 +++++++
 src/or/onion_ntor.h                             |   63 ++
 src/or/onion_tap.c                              |  218 +++++
 src/or/onion_tap.h                              |   37 +
 src/or/or.h                                     |   64 +-
 src/or/relay.c                                  |   28 +-
 src/or/rendclient.c                             |   14 +-
 src/or/rendmid.c                                |    4 +-
 src/or/rendservice.c                            |   14 +-
 src/or/router.c                                 |  224 +++++-
 src/or/router.h                                 |    6 +
 src/or/routerlist.c                             |    1 +
 src/or/routerparse.c                            |   36 +
 src/test/bench.c                                |  143 ++++-
 src/test/include.am                             |   19 +-
 src/test/ntor_ref.py                            |  387 +++++++++
 src/test/test.c                                 |   77 ++-
 src/test/test_cell_formats.c                    |  502 +++++++++++
 src/test/test_containers.c                      |   45 +
 src/test/test_crypto.c                          |  181 ++++
 src/test/test_ntor_cl.c                         |  166 ++++
 src/test/test_util.c                            |   10 +
 src/tools/include.am                            |    2 +
 59 files changed, 5876 insertions(+), 601 deletions(-)

diff --cc src/or/config.c
index 6086621,979d09c..9905a94
--- a/src/or/config.c
+++ b/src/or/config.c
@@@ -388,8 -382,8 +388,9 @@@ static config_var_t option_vars_[] = 
    V(UpdateBridgesFromAuthority,  BOOL,     "0"),
    V(UseBridges,                  BOOL,     "0"),
    V(UseEntryGuards,              BOOL,     "1"),
 +  V(UseEntryGuardsAsDirGuards,   BOOL,     "1"),
    V(UseMicrodescriptors,         AUTOBOOL, "auto"),
+   V(UseNTorHandshake,            AUTOBOOL, "auto"),
    V(User,                        STRING,   NULL),
    V(UserspaceIOCPBuffers,        BOOL,     "0"),
    VAR("V1AuthoritativeDirectory",BOOL, V1AuthoritativeDir,   "0"),
diff --cc src/or/or.h
index bc2cdae,b5718a8..7b8ff70
--- a/src/or/or.h
+++ b/src/or/or.h
@@@ -2553,10 -2534,22 +2570,24 @@@ typedef enum 
    MICRODESC_DIRINFO=1 << 6,
  } dirinfo_type_t;
  
 +#define ALL_DIRINFO ((dirinfo_type_t)((1<<7)-1))
 +
  #define CRYPT_PATH_MAGIC 0x70127012u
  
+ struct fast_handshake_state_t;
+ struct ntor_handshake_state_t;
+ #define ONION_HANDSHAKE_TYPE_TAP 0x0000
+ #define ONION_HANDSHAKE_TYPE_FAST 0x0001
+ #define ONION_HANDSHAKE_TYPE_NTOR 0x0002
+ typedef struct {
+   uint16_t tag;
+   union {
+     struct fast_handshake_state_t *fast;
+     crypto_dh_t *tap;
+     struct ntor_handshake_state_t *ntor;
+   } u;
+ } onion_handshake_state_t;
+ 
  /** Holds accounting information for a single step in the layered encryption
   * performed by a circuit.  Used only at the client edge of a circuit. */
  typedef struct crypt_path_t {
@@@ -2735,26 -2724,13 +2762,24 @@@ typedef struct circuit_t 
     * more. */
    int deliver_window;
  
-   /** For storage while n_chan is pending
-     * (state CIRCUIT_STATE_CHAN_WAIT). When defined, it is always
-     * length ONIONSKIN_CHALLENGE_LEN. */
-   char *n_chan_onionskin;
+   /** For storage while n_chan is pending (state CIRCUIT_STATE_CHAN_WAIT). */
+   struct create_cell_t *n_chan_create_cell;
  
 -  /** When was this circuit created?  We keep this timestamp with a higher
 -   * resolution than most so that the circuit-build-time tracking code can
 -   * get millisecond resolution. */
 +  /** When did circuit construction actually begin (ie send the
 +   * CREATE cell or begin cannibalization).
 +   *
 +   * Note: This timer will get reset if we decide to cannibalize
 +   * a circuit. It may also get reset during certain phases of hidden
 +   * service circuit use.
 +   *
 +   * We keep this timestamp with a higher resolution than most so that the
 +   * circuit-build-time tracking code can get millisecond resolution.
 +   */
 +  struct timeval timestamp_began;
 +
 +  /** This timestamp marks when the init_circuit_base constructor ran. */
    struct timeval timestamp_created;
 +
    /** When the circuit was first used, or 0 if the circuit is clean.
     *
     * XXXX023 Note that some code will artifically adjust this value backward
@@@ -3875,8 -3802,8 +3901,10 @@@ typedef struct 
  
    int IPv6Exit; /**< Do we support exiting to IPv6 addresses? */
  
 +  char *TLSECGroup; /**< One of "P256", "P224", or nil for auto */
 +
+   /** Autobool: should we use the ntor handshake if we can? */
+   int UseNTorHandshake;
  } or_options_t;
  
  /** Persistent state for an onion router, as saved to disk. */
diff --cc src/or/rendservice.c
index e70f969,4f3fdf4..fc76f56
--- a/src/or/rendservice.c
+++ b/src/or/rendservice.c
@@@ -1382,11 -1382,8 +1382,11 @@@ rend_service_introduce(origin_circuit_
    dh = NULL;
    if (circuit_init_cpath_crypto(cpath,keys+DIGEST_LEN,1)<0)
      goto err;
-   memcpy(cpath->handshake_digest, keys, DIGEST_LEN);
+   memcpy(cpath->rend_circ_nonce, keys, DIGEST_LEN);
  
 +  /* For path bias: This intro circuit was used successfully */
 +  circuit->path_state = PATH_STATE_USE_SUCCEEDED;
 +
    goto done;
  
   log_error:
diff --cc src/test/bench.c
index da1ae9b,2c40cdf..8b91b07
--- a/src/test/bench.c
+++ b/src/test/bench.c
@@@ -15,17 -15,15 +15,23 @@@ const char tor_git_revision[] = ""
  #include "orconfig.h"
  
  #define RELAY_PRIVATE
+ #define CONFIG_PRIVATE
  
  #include "or.h"
+ #include "onion_tap.h"
  #include "relay.h"
 +#include <openssl/opensslv.h>
 +#include <openssl/evp.h>
- #if OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,0,0)
 +#ifndef OPENSSL_NO_EC
 +#include <openssl/ec.h>
 +#include <openssl/ecdh.h>
 +#include <openssl/obj_mac.h>
 +#endif
++
+ #include "config.h"
+ #ifdef CURVE25519_ENABLED
+ #include "crypto_curve25519.h"
+ #include "onion_ntor.h"
  #endif
  
  #if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_PROCESS_CPUTIME_ID)
@@@ -355,13 -387,12 +480,17 @@@ typedef struct benchmark_t 
  static struct benchmark_t benchmarks[] = {
    ENT(dmap),
    ENT(aes),
+   ENT(onion_TAP),
+ #ifdef CURVE25519_ENABLED
+   ENT(onion_ntor),
+ #endif
    ENT(cell_aes),
    ENT(cell_ops),
 +  ENT(dh),
 +#ifdef HAVE_EC_BENCHMARKS
 +  ENT(ecdh_p256),
 +  ENT(ecdh_p224),
 +#endif
    {NULL,NULL,0}
  };
  



More information about the tor-commits mailing list