aboutsummaryrefslogtreecommitdiff
path: root/crates/tor-netdoc/src/doc/hsdesc
Commit message (Collapse)AuthorAgeFilesLines
...
* netdoc: fill in some test dataNick Mathewson2023-06-233-10/+34
| | | | | This resolves some TODO HS items now that we are confident we want to have these actual examples in our tests.
* netdoc: Introduce HsDescErrorNick Mathewson2023-06-221-3/+10
| | | | | | | | | | For higher-level HsDesc-related functions, this type indicates where exactly an error occurred. It lets us distinguish decryption errors from parsing errors, and attribute responsibility to the hsdir, the onion service, or the user's lack of encryption. This lets us remove some just-introduced complexity in tor-hsclient.
* hsdesc.rs: finally remove "allows".Nick Mathewson2023-06-161-12/+8
| | | | | | The last piece here is removing some needless keygen from the tests. This causes the test output (using the deterministic PRNG) to change.
* netdoc::doc::hsdesc changes to let us downgrade/remove allowsNick Mathewson2023-06-165-6/+5
|
* netdoc: unmark MAC_KEY_LEN as conjectural.Nick Mathewson2023-06-161-1/+1
| | | | | The value here is 32 bytes; I'm adding it to to the specification as torspec!141
* netdoc: remove a TODO about moving a module to where it already is.Nick Mathewson2023-06-161-2/+0
|
* netdoc: use ct_lookup for rend descriptor cookie lookupNick Mathewson2023-06-161-6/+3
| | | | | (I doubt that there is a viable side channel here, but still we might as well get in the habit of doing these things properly.)
* netdoc: Downgrade an HS todo wrt HS_DESC_AUTH_TYPENick Mathewson2023-06-161-2/+3
|
* netdoc: downgrade some TODO HS to TODO HSS.Nick Mathewson2023-06-162-7/+10
| | | | I'm using HSS for hs-service features.
* tor-netdoc: remove use of arrayref.Nick Mathewson2023-06-011-3/+7
|
* netdoc, hsclient: Update remaining ed25519::SecretKey usersNick Mathewson2023-05-182-20/+17
| | | | | | Fortunately, these are all in experimental code. Closes #798
* Replace usage of KeyUnknownCert::check_key.Nick Mathewson2023-05-162-2/+2
|
* Use non-deprecated *Secret::random_from_rng.Nick Mathewson2023-05-132-6/+7
| | | | The `new` function is deprecated in x25519-dalek 2.0.0-rc.2
* netdoc: Rename `ParseError{Kind, Source}` to `NetdocError{Kind, Source}`.Gabriela Moldovan2023-05-103-4/+4
| | | | | | | | | | | `ParseErrorSource` was originally meant to represent a parsing error, this enum has since gained some variants that aren't really parsing related (`Signature`, `CertSignature`, `UntimelyDescriptor`). Since this error type is now used for general-purpose netdoc errors, let's rename `ParseError{Kind, Source}` to `NetdocError{Kind, Source}`. Signed-off-by: Gabriela Moldovan <[email protected]>
* Merge branch 'remove-hsdesc-todo' into 'main'Ian Jackson2023-04-121-3/+0
|\ | | | | | | | | Remove misleading TODO. See merge request tpo/core/arti!1130
| * Remove misleading TODO.Gabriela Moldovan2023-04-111-3/+0
| | | | | | | | | | | | | | | | | | | | The `superencrypted` blob is, in fact, followed by a newline. See [core/torspec!122]. [core/torspec!122]: https://gitlab.torproject.org/tpo/core/torspec/-/merge_requests/122 Signed-off-by: Gabriela Moldovan <[email protected]>
* | tor-netdoc: Tidy up and fix some broken intra-doc linksIan Jackson2023-04-112-3/+5
|/ | | | | | | | | | | | 1. Abbreviate the link text, and don't have it contain `crate` which is not really great in docs. 2. Use `super::` for the link target, to find the right thing. (`crate` doesn't seem to work in rustdoc, perhaps deliberately, although the error messages are ridiculous and claim the nonexistence of intermediate modules.) 3. Wrap the lines a bit more.
* tor-netdoc: Expose test data under new "testing" feature flagIan Jackson2023-04-054-4/+4
|
* tor-netdoc: Fix feature buildsIan Jackson2023-04-051-1/+1
| | | | | | | | | | | | Fixes cargo +stable test --locked --offline F -p tor-netdoc cargo +stable clippy -p tor-netdoc F --all-targets for values of F including --all-features --features=hs-client --features=hs-common --features=hs-service (nothing)
* Generate a new KP_hss_desc_enc keypair for each new descriptor.Gabriela Moldovan2023-03-312-33/+51
| | | | | | | | | | | | | | | | Previously, to build descriptors for hidden services with client auth enabled, in addition to the list of authorized clients, users of `HsDescBuilder` were required to also provide a descriptor encryption keypair and a descriptor cookie. This was potentially dangerous and/or error-prone, because the ephemeral encryption key and the descriptor cookie are expected to be randomly generated and unique for each descriptor. This change makes `ClientAuth` private to the `hsdesc::build` module and updates `HsDescBuilder` to build `ClientAuth`s internally. Users now only need to provide the list of authorized client public keys. Signed-off-by: Gabriela Moldovan <[email protected]>
* Remove unnecessary test constant.Gabriela Moldovan2023-03-312-14/+8
| | | | | | It's not really needed, it can just be generated at (test) runtime. Signed-off-by: Gabriela Moldovan <[email protected]>
* Add an encode-decode test for descriptors with client auth.Gabriela Moldovan2023-03-311-23/+96
| | | | | | | This adds a test for an `encode -> decode -> encode` flow for a hidden service descriptor with client authorization enabled. Signed-off-by: Gabriela Moldovan <[email protected]>
* Use constants instead of magic numbers.Gabriela Moldovan2023-03-311-6/+10
| | | | Signed-off-by: Gabriela Moldovan <[email protected]>
* Stop requiring the caller to supply `AuthClient`s.Gabriela Moldovan2023-03-314-102/+151
| | | | | | | | | | | | | | | | | | `AuthClient`s were originally meant to represent parsed `auth-client` lines. In !1070, this struct was repurposed for representing individual authorized clients in the HS descriptor encoder. However, hidden services will likely use a list of public keys to represent the authorized clients rather than a list of `AuthClient`s, as the information from an `AuthClient` (`client_id`, `iv`, `encrypted_cookie`) likely won't be immediately available to the hidden service. This change updates the HS descriptor encoder to represent authorized clients as a list of `curve25519::PublicKey`s. As such, it is now the responsibility of the encoder to create the `client_id`, `iv`, and `encrypted_cookie` using the available keys, the unencrypted descriptor cookie, and HS subcredential. Signed-off-by: Gabriela Moldovan <[email protected]>
* Merge branch 'fix-broken-doc-links' into 'main'Nick Mathewson2023-03-302-5/+5
|\ | | | | | | | | Fix broken doc link. See merge request tpo/core/arti!1082
| * Fix broken doc link.Gabriela Moldovan2023-03-272-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes a broken doc link I introduced in !1070: ``` error: unresolved link to `crate::doc::hsdesc::build::inner::HsDescInnerBuilder` --> crates/tor-netdoc/src/doc/hsdesc/build/middle.rs:34:11 | 34 | /// [`crate::doc::hsdesc::build::inner::HsDescInnerBuilder`] as described in sections | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `HsDescInnerBuilder` in module `inner` | = note: `-D rustdoc::broken-intra-doc-links` implied by `-D warnings` error: could not document `tor-netdoc` ``` Signed-off-by: Gabriela Moldovan <[email protected]>
* | Remove hard-coded test certs.Gabriela Moldovan2023-03-274-98/+86
| | | | | | | | | | | | We can use a deterministic rng to generate predictable keypairs instead. Signed-off-by: Gabriela Moldovan <[email protected]>
* | Make the HS encoder randomness source injectable.Gabriela Moldovan2023-03-274-49/+44
| | | | | | | | | | | | | | This makes it possible to plug in a deterministic randomness source for testing. Signed-off-by: Gabriela Moldovan <[email protected]>
* | Use the type system to enforce use of blinded keys.Gabriela Moldovan2023-03-272-25/+37
|/ | | | | | | | | | | | | | | Hidden services use blinded singing keys derived from the identity key to sign descriptor signing keys. Before this patch, the hidden descriptor builder represented its blinded signing keys (`blinded_id`) as plain `ed25519::Keypair`s. This was not ideal, as there was nothing preventing the caller from accidentally initializing `blinded_id` with an unblinded keypair. This introduces a new `HsBlindKeypair` type to represent blinded keypairs. Signed-off-by: Gabriela Moldovan <[email protected]>
* Use transparent structs instead of builders.Gabriela Moldovan2023-03-244-100/+95
| | | | | | | | The consensus seems to be the builders don't add much value, see [this comment]. [this comment]: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/1070#note_2889488 Signed-off-by: Gabriela Moldovan <[email protected]>
* Refactor the inner doc tests to be more DRY.Gabriela Moldovan2023-03-241-53/+55
| | | | Signed-off-by: Gabriela Moldovan <[email protected]>
* Remove `NetdocText` and replace its uses with `String`.Gabriela Moldovan2023-03-244-16/+14
| | | | | | | | `NetdocText` is a wrapper around a `String` and a type marker. The type annotation proved of limited use, and made the netdoc builder API somewhat awkward to use. Signed-off-by: Gabriela Moldovan <[email protected]>
* Remove some unnecessary visibility restrictions.Gabriela Moldovan2023-03-243-130/+74
| | | | Signed-off-by: Gabriela Moldovan <[email protected]>
* Create a new `IntroPointDesc` type.Gabriela Moldovan2023-03-242-21/+55
| | | | | | | | | | | | Unlike `hsdesc::IntroPointDesc`, `hsdesc::build::IntroPointDesc` represents link specifiers as `LinkSpec`s rather than `UnparsedLinkSpec`s. Since this is a general-purpose representation of an introduction point and not merely an intermediate representation for decoding/encoding, it will probably need to be factored out of `tor-netdoc` at some point. Signed-off-by: Gabriela Moldovan <[email protected]>
* Use the less ambiguous inner/middle/outer terminology.Gabriela Moldovan2023-03-243-17/+19
|
* Add builder for encoding hidden service descriptors.Gabi Moldovan2023-03-248-16/+1215
| | | | | | | | | | | | | | This introduces the `NetdocBuilder` trait described in `netdoc-builder.md` and a new `tor-netdoc::doc::hsdesc::build` module, which exports the `HsDescBuilder`. Hidden services will use `HsDescBuilder` to build and encode hidden service descriptors. There are several TODOs in the code that I'm planning to address separately. Partially addresses #745. Signed-off-by: Gabriela Moldovan <[email protected]>
* Define constants for `AuthClient` field lengths.Gabriela Moldovan2023-03-242-7/+19
| | | | | | | These are used in multiple places (and will also be used by the HS descriptor encoder later on), so let's make them named constants. Signed-off-by: Gabriela Moldovan <[email protected]>
* Turn two blocking TODOs in hsdesc into "TODO HS"Ian Jackson2023-03-212-2/+2
| | | | TODO HS is blocking for HS release, but not for CI.
* tor-netdoc: Clarify that we must indeed check cert expiration.Nick Mathewson2023-03-011-3/+1
|
* tor-netdoc: Validate inner certs in HsDescNick Mathewson2023-03-012-66/+167
| | | | | | | | | | | | This makes our implementation behave the same as the C tor implementation, by validating all of the expiration and signatures on the certificates in the inner document. (It is still not semantically necessary to check these certs: the document in which they appear is already signed by the key with which they are allegedly signed.) Closes #744
* netdoc: Remove a TODO hs comment.Nick Mathewson2023-02-171-1/+0
| | | | | | | | | | | | | | | | It said to check whether C enforces an absence of extraneous bytes at the end of the link specifiers. It does, in `hs_desc.c:decode_link_specifiers()`, where it says: ``` if (link_specifier_list_parse(&specs, decoded, (size_t) decoded_len) < decoded_len) { goto err; } ``` The comparison with "decoded_len" checks whether all the bytes were decoded.
* tor-netdoc: Run rustfmt (separately from the refactoring)Ian Jackson2023-02-151-2/+2
|
* tor-netdoc: Remove many needless calls to .iter() and .into_iter()Ian Jackson2023-02-153-6/+3
|
* netdoc: Add a feature to expose hsdesc inner doc parsersNick Mathewson2023-02-143-0/+7
| | | | | | | We want to fuzz these parsers, but there's no currently way to get at the parsers for inner documents without going through a lot of encryption. (Coverage-guided fuzzers are powerful, but they can't find SHA3 preimages.)
* batching_split_before: Rename "prefix" to "header"Ian Jackson2023-02-131-1/+1
| | | | | | | | As per https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/1016#note_2877759 "_prefixed" becomes "_with_header". That mirrors the returned struct which is nice.
* tor-netdoc: Use batching_split_before in HsDescInnerIan Jackson2023-02-101-25/+10
|
* Rename DescEncNonce => HsDescEncNonceNick Mathewson2023-02-092-4/+4
|
* hsdesc: Use an IntegerMinutes<u16> to hold lifetime.Nick Mathewson2023-02-081-5/+5
|
* netdoc: Fix most "TODO HS rename" commentsNick Mathewson2023-02-083-10/+10
|
* netdoc::hsdesc: Distinguish layer from document.Nick Mathewson2023-02-084-32/+32
|