Commit Graph

161 Commits

Author SHA1 Message Date
Nick Mathewson 9f4230fb1b Initial pass on directory-manager code.
This code can now bootstrap from the network, cache the results, and
reload from cache.

There's lots more work to do here, including a big pile of tidying
and refactoring and testing and documentation.
2020-11-19 19:11:10 -05:00
Nick Mathewson 87fe434875 Refactor AuthCertKeyIds::cmp(). 2020-11-19 11:38:06 -05:00
Nick Mathewson 02bac5f04e Add support for using fallback directories in path construction
This is mainly a refactoring commit, with a little new code.

It also adds #[derive(Copy,Clone)] for a few types.
2020-11-19 10:06:48 -05:00
Nick Mathewson 168def3c28 Make AuthCertKeyIds sortable. 2020-11-16 15:08:12 -05:00
Nick Mathewson 29afe2869f Type and functions for key ID inspection of AuthCert. 2020-11-16 08:55:31 -05:00
Nick Mathewson 4512d7e9ed Have the consensus-parsing code expose the signed piece of the consensus. 2020-11-16 08:55:31 -05:00
Nick Mathewson cc59658fea Add accessors for consensus lifetimes. 2020-11-14 10:32:17 -05:00
Nick Mathewson 0d1489be4e Remember the position of authcert and microdescs
We'll need this to save them to disk after parsing them from an
upstream source.
2020-11-14 10:32:17 -05:00
Nick Mathewson 38070d6ec9 netdoc: Add a bogus "Extent()" facility to remember where things were.
Also add the missing str.rs file (oops)
2020-11-14 10:32:17 -05:00
Nick Mathewson 8569af82dd netdoc: split off string utils 2020-11-14 10:32:17 -05:00
Nick Mathewson e417a9dc13 Use Infallible in tor-netdoc. 2020-11-11 10:09:16 -05:00
Nick Mathewson 136c536123 Mark tor_netdoc::err::Pos as Send and Sync
I am about 99% sure this is safe: the pointer that this type
contains is never dereferenced, and is only compared to the bounds
of a string later on.
2020-11-11 10:00:48 -05:00
Nick Mathewson c440f4d476 Use bitflags crate to represent RouterFlags. 2020-11-11 09:33:53 -05:00
Nick Mathewson 4d24fff9c0 Upgrade dependencies 2020-11-10 12:27:10 -05:00
Nick Mathewson d9dafa0a28 Add a new circuit-manager crate and move path selection there. 2020-11-02 10:44:31 -05:00
Nick Mathewson b93e4b76c8 Remove a bunch of dbg! calls. 2020-10-26 14:33:14 -04:00
Nick Mathewson d3b71bc177 More documentation in tor-netdoc. 2020-10-26 11:51:53 -04:00
Nick Mathewson 8c09981427 Use from_bytes name for Ed25519Identity 2020-10-25 20:32:47 -04:00
Nick Mathewson f3e1fafca2 Validate master-key-ed25519 field in routerdescs 2020-10-19 09:44:38 -04:00
Nick Mathewson 57637f3644 netdir: don't use relays with NoEdConsensus flag set. 2020-10-19 09:31:36 -04:00
Nick Mathewson 295a791a82 Improvements to Relay type in tor-netdir.
Now, a Relay is always valid.  This required some changes to the
API: all_relays() has to return a new UncheckedRelay type that might
or might not be valid, and the functions on Relay and ChanTarget
that return ed25519 identities need to return an Ed25519Identity,
not an ed25519::PublicKey.

This change required some new encoding/decoding/conversion functions
on Ed25519Identity.
2020-10-19 09:22:49 -04:00
Nick Mathewson 3798891b36 Calculate digest correctly when microdesc ends with base64 object. 2020-10-19 08:42:35 -04:00
Nick Mathewson df406f5319 Netdoc: validate objects even on unrecognized items. 2020-10-19 08:09:20 -04:00
Nick Mathewson 6f3d5d061d portpolicy: note a spec issue 2020-10-19 08:08:38 -04:00
Nick Mathewson 5523134607 Mark must-resolve XXXX issues with "XXXXM3".
"M3" is for "milestone 3" -- my target to fix the technical debt
that I think will be bad if we ship even a pre-alpha with it.

These aren't necessarily _all_ must-resolve, but they're all
must-look-at.

Closes #15
2020-10-18 17:38:59 -04:00
Nick Mathewson 32bfeb84eb Update microdesc parsing: ed25519 keys are no longer optional. 2020-10-18 17:12:47 -04:00
Nick Mathewson 353a4bfb87 Cleanup from prop315 implementation.
Most of the fixes here are just removing comments that said "this
isn't technically required but I'm going to pretend it is".

I also made the "protocols" field in microdescs out of its Option<>,
since we're now requiring that.
2020-10-16 16:36:51 -04:00
Nick Mathewson 7a4c1e87ea Implement proposal 315: make various directory fields required 2020-10-16 16:30:40 -04:00
Nick Mathewson 3408c9ad26 Run "cargo upgrade". 2020-10-15 13:32:02 -04:00
Nick Mathewson 6f75b82ef3 Use Ed25519Identity in microdescriptors. 2020-10-15 12:42:09 -04:00
Nick Mathewson 6b2ba9a16c Document remaining private members of tor-netdoc. 2020-10-10 16:41:43 -04:00
Nick Mathewson f8fde02c0b Document most private items in tor-netdoc. 2020-10-09 18:02:02 -04:00
Nick Mathewson b845d37b3b Add routerdesc examples 2020-10-07 13:48:31 -04:00
Nick Mathewson b3e2086c7b netdoc: more tests for routerdesc parsing 2020-10-07 13:19:17 -04:00
Nick Mathewson 30f8aead6c A few more tests in tor-netdoc 2020-10-07 11:34:12 -04:00
Nick Mathewson 0ba8ab9b9a netdoc: test for signature/key checking func 2020-10-07 10:58:32 -04:00
Nick Mathewson b371a84a26 mdconsensus: add tests for a few accessors 2020-10-06 15:02:55 -04:00
Nick Mathewson 02e5380a73 tests for some failing cases in mdconsensus 2020-10-06 14:12:43 -04:00
Nick Mathewson 580c1ac567 Tokenize: report accurate positions for more parsing errors 2020-10-02 15:25:28 -04:00
Nick Mathewson f89283eaa6 microdesc parsing: tests for bad microdescs 2020-10-02 15:24:00 -04:00
Nick Mathewson ff852df70e tests and fixes for md content parsing 2020-10-02 14:04:03 -04:00
Nick Mathewson 8c2aae10f7 netdoc: remove some outdated/unused stuff. 2020-10-02 11:21:59 -04:00
Nick Mathewson 1adc6c40fb authcert: test error recovery. 2020-10-02 10:59:55 -04:00
Nick Mathewson 38685d3cc1 Netdoc: use a more bulletproof pattern to prevent infinite loops
Previously our "read a bunch of this kind of document" functions had
a common problem, where they could get into an infinite loop if the
underlying "read this kind of document" function failed without
consuming any tokens.

I _think_ that this error case was unreachable (or else fuzzing
would have found it, right?), but proving that it was unreachable
was a bit fiddly, and I couldn't follow my own arguments about it.

Instead, we just store the position of the reader before we start
reading, and make sure that it has consumed at least some data.  If
it hasn't, then we consume and drop a token before advancing to the
next document.
2020-10-02 10:15:14 -04:00
Nick Mathewson 4a1f319ffe authcert: add tests for several ways certs can fail. 2020-10-02 09:50:47 -04:00
Nick Mathewson 17e82a50c2 authcert: fix an error, and detect mismatched fingerprints 2020-10-02 09:49:27 -04:00
Nick Mathewson e6ba2ac8ed netdoc: rename BadVersion to BadTorVersion for clarity 2020-10-01 10:23:22 -04:00
Nick Mathewson 5ff859b89d improve errors in authcert.rs 2020-10-01 10:21:25 -04:00
Nick Mathewson a5f382aa61 Remove redundant signature check in authcert parsing. 2020-09-30 18:50:31 -04:00
Nick Mathewson d4d3e1c3db More tests on parsing, plus remove dead code. 2020-09-30 18:46:27 -04:00