TODO 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. let hup reread the config file, eg so we can get new exit policies without restarting
  2. use times(2) rather than gettimeofday to measure how long it takes to process a cell
  3. Legend:
  4. SPEC!! - Not specified
  5. SPEC - Spec not finalized
  6. NICK - nick claims
  7. ARMA - arma claims
  8. - Not done
  9. * Top priority
  10. . Partially done
  11. o Done
  12. D Deferred
  13. X Abandoned
  14. Short-term:
  15. o routers have identity key, link key, onion key.
  16. o link key certs are
  17. D signed by identity key
  18. D not in descriptor
  19. o not in config
  20. D not on disk
  21. o identity and onion keys are in descriptor (and disk)
  22. o upon boot, if it doesn't find identity key, generate it and write it.
  23. o also write a file with the identity key fingerprint in it
  24. o router generates descriptor: flesh out router_get_my_descriptor()
  25. o Routers sign descriptors with identity key
  26. o routers put version number in descriptor
  27. o routers should maybe have `uname -a` in descriptor?
  28. o Give nicknames to routers
  29. o in config
  30. o in descriptors
  31. o router posts descriptor
  32. o when it boots
  33. D when it changes
  34. o change tls stuff so certs don't get written to disk, or read from disk
  35. o make directory.c 'thread'safe
  36. o dirserver parses descriptor
  37. o dirserver checks signature
  38. D client checks signature?
  39. o dirserver writes directory to file
  40. o reads that file upon boot
  41. o directory includes all routers, up and down
  42. o add "up" line to directory, listing nicknames
  43. ARMA . find an application that uses half-open connections: openssh
  44. o instruments ORs to report stats
  45. o average cell fullness
  46. o average bandwidth used
  47. . integrate rep_ok functions, see what breaks
  48. ARMA - configure log files. separate log file, separate severities.
  49. ARMA - what assumptions break if we fclose(0) when we daemonize?
  50. o make buffer struct elements opaque outside buffers.c
  51. ARMA . Go through log messages, reduce confusing error messages.
  52. ARMA . make the logs include more info (fd, etc)
  53. ARMA . add log convention to the HACKING file
  54. - make 'make install' do the right thing
  55. o change binary name to tor
  56. o change config files so you look at commandline, else look in
  57. /etc/torrc. no cascading.
  58. o have an absolute datadir with fixed names for files, and fixed-name
  59. keydir under that with fixed names
  60. ARMA - tor faq
  61. list all other systems, why we're different.
  62. o Move (most of) the router/directory code out of main.c
  63. Mid-term:
  64. . migrate to using nickname rather than addr:port for routers
  65. o decide_aci_type
  66. - generate onion skins
  67. - circuit_send_next_onion_skin
  68. - circuit_extend
  69. - onion_generate_cpath
  70. - get_unique_aci_by_addr_port
  71. - circ->n_addr and circ->n_port
  72. - circuit_enumerate_by_naddr_nport
  73. - cpath layers
  74. - connection_or_connect
  75. - connection_exact_get_by_addr_port
  76. - connection_twin_get_by_addr_port
  77. - router_get_by_addr_port
  78. - connection_or_init_conn_from_router
  79. - tag_pack, tag_unpack, connection_cpu_process_inbuf
  80. - directory_initiate_command
  81. . Redo scheduler
  82. o fix SSL_read bug for buffered records
  83. - make round-robining more fair
  84. - What happens when a circuit's length is 1? What breaks?
  85. . streams / circuits
  86. o Implement streams
  87. o Rotate circuits after N minutes?
  88. X Circuits should expire when circuit->expire triggers
  89. NICK . Handle half-open connections
  90. o Figure out what causes connections to close, standardize
  91. when we mark a connection vs when we tear it down
  92. o Look at what ssl does to keep from mutating data streams
  93. ARMA - Reduce streamid footprint from 7 bytes to 2 bytes
  94. - Check for collisions in streamid (now possible with
  95. just 2 bytes), and back up & replace with padding if so
  96. - Use the 3 saved bytes to put pseudorandomness in each relay cell
  97. - Use the 4 reserved bytes in each cell header to keep 1/5
  98. of a sha1 of the relay payload (move into stream header)
  99. - Move length into the stream header too
  100. - Spec the stream_id stuff. Clarify that nobody on the backward
  101. stream should look at stream_id.
  102. ARMA . Exit policies
  103. o Spec how to write the exit policies
  104. - Path selection algorithms
  105. - Let user request certain nodes
  106. - And disallow certain nodes
  107. D Choose path by jurisdiction, etc?
  108. - Make relay end cells have failure status and payload attached
  109. - Streams that fail due to exit policy must reextend to new node
  110. - Add extend_wait state to edge connections, thumb through them
  111. when the AP get an extended cell.
  112. SPEC!! D Non-clique topologies
  113. D Implement our own memory management, at least for common structs
  114. . Put CPU workers in separate processes
  115. o Handle multiple cpu workers (one for each cpu, plus one)
  116. o Queue for pending tasks if all workers full
  117. o Support the 'process this onion' task
  118. D Merge dnsworkers and cpuworkers to some extent
  119. - Handle cpuworkers dying
  120. o Simple directory servers
  121. o Include key in source; sign directories
  122. o Signed directory backend
  123. o Document
  124. o Integrate
  125. o Add versions to code
  126. o Have directories list recommended-versions
  127. o Include (unused) line in directories
  128. o Check for presence of line.
  129. o Quit if running the wrong version
  130. o Command-line option to override quit
  131. o Add more information to directory server entries
  132. o Exit policies
  133. D Advanced directory servers
  134. D Automated reputation management
  135. SPEC!! D Figure out how to do threshold directory servers
  136. D jurisdiction info in dirserver entries? other info?
  137. . Scrubbing proxies
  138. - Find an smtp proxy?
  139. - Check the old smtp proxy code
  140. o Find an ftp proxy? wget --passive
  141. D Wait until there are packet redirectors for Linux
  142. . Get socks4a support into Mozilla
  143. . Get tor to act like a socks server
  144. o socks4, socks4a
  145. ARMA - socks5
  146. SPEC!! - Handle socks commands other than connect, eg, bind?
  147. . Develop rendezvous points
  148. o Design
  149. - Spec
  150. - Implement
  151. D Deploy and manage open source development site.
  152. . Documentation
  153. o Discussion of socks, tsocks, etc
  154. o On-the-network protocol
  155. o Onions
  156. o Cells
  157. . Better comments for functions!
  158. - Tests
  159. o Testing harness/infrastructure
  160. NICK . Unit tests
  161. D System tests (how?)
  162. - Performance tests, so we know when we've improved
  163. . webload infrastructure (Bruce)
  164. . httperf infrastructure (easy to set up)
  165. . oprofile (installed in RH >8.0)
  166. D Deploy a widespread network
  167. D Load balancing between router twins
  168. D Keep track of load over links/nodes, to
  169. know who's hosed
  170. NICK . Daemonize and package
  171. o Teach it to fork and background
  172. - Red Hat spec file
  173. - Debian spec file equivalent
  174. . Portability
  175. . Which .h files are we actually using?
  176. . Port to:
  177. o Linux
  178. o BSD
  179. . Solaris
  180. o Cygwin
  181. o Win32
  182. o OS X
  183. - deal with pollhup / reached_eof on all platforms
  184. o openssl randomness
  185. o inet_ntoa
  186. . stdint.h
  187. - Make a script to set up a local network on your machine
  188. X Move away from openssl
  189. o Abstract out crypto calls
  190. X Look at nss, others? Just include code?
  191. o Clearer bandwidth management
  192. o Do we want to remove bandwidth from OR handshakes?
  193. o What about OP handshakes?
  194. - More flexibility in node addressing
  195. D Support IPv6 rather than just 4
  196. - Handle multihomed servers (config variable to set IP)
  197. . Move from onions to ephemeral DH
  198. o incremental path building
  199. o transition circuit-level sendmes to hop-level sendmes
  200. o implement truncate, truncated
  201. o move from 192byte DH to 128byte DH, so it isn't so damn slow
  202. - exiting from not-last hop
  203. - OP logic to decide to extend/truncate a path
  204. - make sure exiting from the not-last hop works
  205. - logic to find last *open* hop, not last hop, in cpath
  206. - choose exit nodes by exit policies
  207. Older (done) todo stuff:
  208. o Use a stronger cipher
  209. o aes now, by including the code ourselves
  210. X On the fly compression of each stream
  211. o Clean up the event loop (optimize and sanitize)
  212. o Remove that awful concept of 'roles'
  213. o Terminology
  214. o Circuits, topics, cells stay named that
  215. o 'Connection' gets divided, or renamed, or something?
  216. o DNS farm
  217. o Distribute queries onto the farm, get answers
  218. o Preemptively grow a new worker before he's needed
  219. o Prune workers when too many are idle
  220. o DNS cache
  221. o Clear DNS cache over time
  222. D Honor DNS TTL info (how??)
  223. o Have strategy when all workers are busy
  224. o Keep track of which connections are in dns_wait
  225. o Need to cache positives/negatives on the tor side
  226. o Keep track of which queries have been asked
  227. o Better error handling when
  228. o An address doesn't resolve
  229. o We have max workers running
  230. o Consider taking the master out of the loop?
  231. X Implement reply onions
  232. o Total rate limiting
  233. o Look at OR handshake in more detail
  234. o Spec it
  235. o Merge OR and OP handshakes
  236. o rearrange connection_or so it doesn't suck so much to read
  237. D Periodic link key rotation. Spec?
  238. o wrap malloc with something that explodes when it fails
  239. o Clean up the number of places that get to look at prkey