Commit Graph

8112 Commits

Author SHA1 Message Date
Nick Mathewson 481e5e5a63 New module with traits for time-bound and signed objects
Too often I've been writing code that defers timeliness checking to
an is_valid_at() method [which you'd better call or else whoops] and
which does signature checking while parsing [not great for
performance].

Instead, let's make return types where you can't get at the interior
object without first either checking the signatures/timeliness, or
declaring that (dangerously) you don't care.
2020-09-01 17:59:58 -04:00
Nick Mathewson c8602beba9 WANT_FROM_OTHER_CRATES: observations on tls 2020-09-01 15:27:05 -04:00
Nick Mathewson 790d6becf2 Implement an ersatz hash() for RSAIdentity
For whatever reason, something I had didn't like me implementing a
custom PartialEq but deriving Hash
2020-08-28 18:16:56 -04:00
Nick Mathewson 4b75c51882 Run cargo-upgrade. 2020-08-28 18:14:17 -04:00
Nick Mathewson f55f86c6a8 llcrypto: add test vectors for sha3 and shake 2020-08-28 17:47:16 -04:00
Nick Mathewson 4a2e732457 Small readme edit 2020-08-28 13:42:08 -04:00
Nick Mathewson 6fabb54033 netdoc: Parser for microdesc consensus documents
There's more to do here, and things to refactor, but this ought to
be enough to get a rudimentary client working.
2020-08-27 14:30:24 -04:00
Nick Mathewson e221146d9e llcrypto: make RSAIdentity implement the Hash trait. 2020-08-27 12:54:07 -04:00
Nick Mathewson 86f6f30b6d netdoc: parse multiple authcerts from a string. 2020-08-27 12:54:07 -04:00
Nick Mathewson 696e7ad334 netdoc: add a check_len method for B64 2020-08-26 10:57:07 -04:00
Nick Mathewson d4af6a163f Add a B16 argument type, to mirror B64. 2020-07-20 20:55:47 -04:00
Nick Mathewson bbb8fea39b More parsing for fingerprints, including non-spaced fingerprints. 2020-07-20 20:55:47 -04:00
Nick Mathewson 5f00e41a6b Expose Protocols::new() as public. 2020-07-20 20:55:47 -04:00
Nick Mathewson 8c0bbfef2c tor-netdoc: Make SectionRules derive Clone.
This is going to come in handy for the networkstatus stuff, where I
need to define different variants of SectionRules for votes and
consensuses.
2020-07-20 20:55:47 -04:00
Nick Mathewson 173bec26a5 Update to latest packages; ed25519 now needs signature crate traits. 2020-07-20 20:55:03 -04:00
Nick Mathewson 7bd7e7ec7d Run cargo fix --edition-idioms 2020-06-26 13:17:14 -04:00
Nick Mathewson e1bbc2fdb0 Run "cargo update". 2020-06-21 11:14:56 -04:00
Nick Mathewson c602883881 Use "cargo upgrade" from cargo-edit to list current versions 2020-06-12 21:06:07 -04:00
Nick Mathewson 32ecff11eb Upgrade to latest version of rsa crate 2020-06-12 21:05:01 -04:00
Nick Mathewson 0ffa58d2d4 Merge remote-tracking branch 'official/main' into main 2020-06-12 20:05:41 -04:00
Nick Mathewson d36f52eea9 Mark a variable unused 2020-06-12 20:04:55 -04:00
Nick Mathewson f1a3841519 curate WANT_FROM_OTHER_CRATES 2020-06-12 14:02:15 -04:00
Nick Mathewson c7285c9449 Add documentation for authcert parsing. 2020-06-11 17:08:59 -04:00
Nick Mathewson 6264041b77 update to use latest rust-crypto traits and modules 2020-06-10 14:16:07 -04:00
Nick Mathewson c13728eaa2 Add a couple of commits missing from previous. 2020-06-09 18:46:56 -04:00
Nick Mathewson 3b4c828cb7 netdoc: initial implementation of authority certs. 2020-06-09 17:23:45 -04:00
Nick Mathewson 2d8021420f netdoc: note a forward-compatibility issue with RSA signatures. 2020-06-09 17:22:49 -04:00
Nick Mathewson 6ff619aab3 netdoc: when parsing from a string, detect extra tokens 2020-06-09 14:06:17 -04:00
Nick Mathewson 4408fc7084 Netdoc: allow parsing multiple routerdescs from a string. 2020-06-09 13:58:43 -04:00
Nick Mathewson 4a5b31d6cd netdoc: report microdesc errors at correct offsets. 2020-06-09 13:13:34 -04:00
Nick Mathewson d4f58b0977 netdoc: fix microdesc digest calculation at last. 2020-06-09 13:07:44 -04:00
Nick Mathewson 47c3a11d2c Add a "first_item" entry for Section.
This will make it simpler to implement digests for sections.
2020-06-09 12:44:24 -04:00
Nick Mathewson 96f3d8c846 Add a "last_item" entry for Section.
This will make it simpler to implement digests for sections.
2020-06-09 12:39:07 -04:00
Nick Mathewson ad79778a39 netdoc: recover from microdesc parsing errors
On an error, advance to the start of the next microdesc.

There's a possible issue with this approach where if we aren't
careful, we might wind up in an infinite loop.  I've made a comment
about the fragility here, but it would probably be good to revisit
this design.
2020-06-08 11:52:26 -04:00
Nick Mathewson 624843668a netdoc: add an iterator that can parse annotated microdescs 2020-06-07 18:57:26 -04:00
Nick Mathewson 78aa76ab36 Implement parsing for microdescriptor annotations
This patch also updates the microdescriptor parsing so we can handle
a whole bunch of them in a row.
2020-06-06 20:51:22 -04:00
Nick Mathewson 1e8bde2c45 netdoc: fix behavior when using a fancy closure with PauseAt.
Previously, every call to peek() or next() would call self.pred().
But this would run us into trouble if we were using a closure that
had mutable state, since it would stop us from checking for things
like "the third occurrence of the foo token".

Now we store the value of self.pred(self.peek()).
2020-06-06 17:13:06 -04:00
Nick Mathewson fe93263d35 netdoc: add annotation fields for microdescriptors 2020-06-06 15:31:03 -04:00
Nick Mathewson b3f2e273c5 note that microdescriptor sha256 calculation is wrong 2020-06-03 17:26:18 -04:00
Nick Mathewson 5d0990658a Restore a pause_at() method, but for NetDocReader. 2020-06-03 17:24:14 -04:00
Nick Mathewson 81f67e240b Remove the Pausable trait as busted.
We need to have the Peekable be long-lived, so we can't consume it.
We _could_ create a second Peekable, which is apparently what we
have been doing, but that breaks down when we try to do it again.
2020-06-03 17:08:47 -04:00
Nick Mathewson bc6d1b2228 netdoc: Refactor iteration over tokens.
I want the "peekable iterator" type to be passed around a lot, and
it needs to have some way to get at the string that's used with it.
2020-06-03 12:45:17 -04:00
Nick Mathewson 9742f3ac42 Netdoc: tweak definition for keywords to accommodate annotations
The macro can now define annotations that don't count as regular
keywords.  Additionally, the Keyword trait is now tweaked to take
advantage of the fact that every Keyword is Copy.
2020-05-27 13:09:22 -04:00
Nick Mathewson 75d24e6742 llcrypto: test vectors for sha2 2020-05-21 13:27:48 -04:00
Nick Mathewson 56b9e3fbc6 netdoc: exit an object if we encounter non-base64.
This way, an unterminated base64 object doesn't "eat" the whole rest
of something we're trying to parse.
2020-05-20 13:04:28 -04:00
Nick Mathewson 0e40748e4d netdoc: tokenizer should always consume bytes if they exist.
Also document that it always consumes a positive integer number of
lines.

This is part of an effort to improve error recovery.
2020-05-20 12:24:31 -04:00
Nick Mathewson 0f5915915b netdoc: Teach tokenizer about annotations.
I'm not sure that annotations are a feature I want to keep
long-term, but for now it would be useful if this code can also read
Tor's file formats for network directories.
2020-05-19 14:06:19 -04:00
Nick Mathewson c427b26fe7 netdoc: Add convenience methods for pausing iterators 2020-05-19 12:14:13 -04:00
Nick Mathewson 8468c8ec49 netdoc: move keyword into Item type.
This saves us from having to check specific strings in most cases.
2020-05-19 12:01:06 -04:00
Nick Mathewson e3d68d6db6 netdoc: Extract keyword into its own file. 2020-05-19 11:43:15 -04:00