Ian Jackson
163ee44902
tor-hsclient: Add a TODO SPEC re circuit dirtiness
2023-06-23 13:46:40 +01:00
Nick Mathewson
48d839e1b5
Merge branch 'data2' into 'main'
...
tor-hsclient: Expire old IPT data
See merge request tpo/core/arti!1295
2023-06-23 12:06:09 +00:00
Ian Jackson
a6ca13d056
tor-hsclient: Discuss HS descriptor expiry and revision counters
...
And delete the corresponding TODO.
2023-06-23 12:52:59 +01:00
Nick Mathewson
5ae0c581bc
Merge commit '3105f99a'.
...
(This is !1294 , minus a redundant merge.)
2023-06-23 07:51:00 -04:00
Ian Jackson
9938491057
tor-hsclient: Downgrade multi-ipt TODO
2023-06-23 12:43:00 +01:00
Ian Jackson
6448e56942
tor-hsclient: Downgrade rend/ipt parallelism TODOs and add links
2023-06-23 12:43:00 +01:00
Ian Jackson
546d1159a6
tor-hsclient: Downgrade ipt parallelism to a note
2023-06-23 12:43:00 +01:00
Ian Jackson
cf4659a981
tor-hsclient: Downgrade hsdir fetch parallelism to a note
2023-06-23 12:43:00 +01:00
Ian Jackson
ef85b9290e
tor-hsclient: Drop intro circuit after ack
2023-06-23 12:43:00 +01:00
Ian Jackson
6bbe1dd4ef
tor-hsclient: Discuss intro circuit extend-and-reuse
...
This is a summary of a discussion I had on IRC.
2023-06-23 12:41:29 +01:00
Ian Jackson
9a2702b58b
Merge branch 'expire' into 'main'
...
tor-hsclient: Expire circuits when they get too old
See merge request tpo/core/arti!1287
2023-06-23 10:40:19 +00:00
Ian Jackson
879c540cfa
tor-circmgr: Test random_idx_where with empty slice
...
I have verified that this test fails, as expected, when applied
without the corresponding bugfix.
2023-06-23 11:09:59 +01:00
Ian Jackson
a0f5dbc05d
tor-circmgr: random_idx_where: Don't panic on empty range
...
Fixes #918 .
2023-06-23 11:09:55 +01:00
Ian Jackson
e4ff44e760
tor-hsclient: Write a test plan for IPT state management
...
This won't be trivial. Put it in as a TODO HS rather than as part of
this fix MR.
2023-06-23 10:34:28 +01:00
Ian Jackson
14b697bcff
tor-hsclient: Expire old IPT data
...
If we don't use it for a whole, the whole of `Data` will be expired by
the new machinery in !1290 . However, we also need to expire
individual IPTs.
This bug doesn't seem to have had a relevant TODO.
2023-06-23 10:34:28 +01:00
Andy
3105f99a99
Corrected the order of imports in order to make the 'rust-checks' job complete successfully.
2023-06-23 01:25:28 +02:00
Andy
bec24f7920
Provided a fix for #831 - 'Unused import' warnings on Windows
2023-06-23 01:11:20 +02:00
Nick Mathewson
8ecb4107d4
hscrypto: downgrade a comment to HSS
2023-06-22 15:37:34 -04:00
Nick Mathewson
20940644ca
Merge branch 'desc-error' into 'main'
...
Clean up HsDesc error types and stabilize onion-service ErrorKinds
See merge request tpo/core/arti!1289
2023-06-22 18:56:14 +00:00
Nick Mathewson
24545fd455
Merge branch 'circmgr-timeout-est' into 'main'
...
circmgr: New API to expose estimate-based timeouts.
See merge request tpo/core/arti!1281
2023-06-22 18:50:40 +00:00
gabi-250
f2c3b5760d
Merge branch 'move-dummy-keymgr-impl' into 'main'
...
keymgr: Move dummy keymgr impl from arti-client to tor-keymgr
See merge request tpo/core/arti!1269
2023-06-22 18:06:00 +00:00
Nick Mathewson
1249d803fb
Merge branch 'proto-better-path' into 'main'
...
Better API for getting circuit paths
Closes #787
See merge request tpo/core/arti!1286
2023-06-22 17:53:23 +00:00
Nick Mathewson
dcb3b06a95
circmgr: Now that Action is public, clean it up a little.
2023-06-22 13:53:14 -04:00
Nick Mathewson
2b0d04a5fe
circmgr: New API to expose estimate-based timeouts.
...
This will help create good timeout values for various onion-service
operations.
2023-06-22 13:53:14 -04:00
Nick Mathewson
18982e6b93
hsdescerror: Add paragraph breaks to docs.
2023-06-22 13:44:56 -04:00
Nick Mathewson
90f653f582
netdoc: Use a dev-dependency on anyhow to fix a doc example
2023-06-22 13:42:40 -04:00
Nick Mathewson
c78d7f63a4
Merge branch 'proto-todos' into 'main'
...
tor-proto: resolve or defer the easier TODO HS items.
See merge request tpo/core/arti!1282
2023-06-22 17:42:06 +00:00
Ian Jackson
26a8cfea6c
tor-hsclient: Add a note about circuit expiry uncertainty, ticket
2023-06-22 18:41:27 +01:00
Gabriela Moldovan
e46d4fe66f
keymgr: Remove blank line to satisfy maint/cargo_sort.
2023-06-22 18:34:20 +01:00
Gabriela Moldovan
bc24e7974c
keymgr: Make the dummy types non_exhaustive.
2023-06-22 18:34:20 +01:00
Gabriela Moldovan
8bfdb69ebc
keymgr: Add a TODO regarding missing dummy impls.
2023-06-22 18:34:20 +01:00
Gabriela Moldovan
297248cd9f
keymgr: Update outdated docs.
2023-06-22 18:34:19 +01:00
Gabriela Moldovan
cd0cad3aa6
keymgr: Remove outdated TODOs.
2023-06-22 18:34:04 +01:00
Gabriela Moldovan
f2d81c73ac
keymgr: Remove unnecessary dummy types.
...
We don't need dummy impls for `Error` and `Result`.
2023-06-22 18:34:04 +01:00
Gabriela Moldovan
fbb1ad0b1e
keymgr: Move dummy implementation to tor-keymgr.
2023-06-22 18:33:43 +01:00
Gabriela Moldovan
b83b77d83e
arti-client: Make all dummy APIs pub.
...
`dummy.rs` will be moved to `tor-keymgr`, which will export everything
from the module.
2023-06-22 18:31:28 +01:00
Gabriela Moldovan
f293bd64f2
arti-client: Add a dummy KeyType.
2023-06-22 18:30:54 +01:00
Nick Mathewson
5ce7221f06
hspool: Use let-else pattern; our MSRV permits it.
2023-06-22 13:21:36 -04:00
Nick Mathewson
3ccec0b04a
tor-error: Stabilize OnionService error kinds
2023-06-22 13:17:08 -04:00
Nick Mathewson
3d4181bcd4
tor-error: typo fix in a comment.
2023-06-22 13:15:50 -04:00
Nick Mathewson
33bfa7c7a8
Remove onion service descriptor-related errorkinds.
...
These have been subsumed by other errorkinds, mostly
OnionServiceProtocolViolation and TorProtocolViolation.
In particular please review the change in tor-hsclient closely;
I am not sure about the new errorkinds for the error there.
2023-06-22 13:11:06 -04:00
Gabriela Moldovan
fbdf05946c
keymgr: Remove unnecessary pub(crate).
2023-06-22 18:07:57 +01:00
Gabriela Moldovan
273cd70021
keymgr: Define a `keymgr` feature.
...
The dummy key manager impl from `arti-client` will be moved to
`tor-keymgr` soon. This commit adds a `keymgr` feature flag to
`tor-keymgr` which will eventually be used to choose between the real
key manager API and the dummy one.
2023-06-22 18:07:57 +01:00
Nick Mathewson
dbd2552178
netdoc: Introduce HsDescError
...
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.
2023-06-22 12:43:30 -04:00
Ian Jackson
fb3112fb73
tor-hsclient: Expand explanation of `last_used` (for Open)
2023-06-22 17:21:06 +01:00
Nick Mathewson
7842ace4db
tor-hsclient: Make comment about circuit expiry more accurate
2023-06-22 16:16:23 +00:00
Nick Mathewson
610ed2d457
Merge branch 'socks_errorkinds' into 'main'
...
Generate correct-ish socks5 errors for onion service errors.
Closes #736
See merge request tpo/core/arti!1279
2023-06-22 16:15:55 +00:00
gabi-250
4b7060a492
Merge branch 'notes' into 'main'
...
tor-hsclient: Delete/rewrite out-of-date commentary
See merge request tpo/core/arti!1288
2023-06-22 16:00:34 +00:00
Nick Mathewson
57b1e36667
arti: Resolve TODO HS items related to extended SOCKS5 errors
...
This takes an approach discussed in #736 : Instead of trying to
distinguish INTRO/REND failures perfectly, we instead map our
existing ErrorKinds as best we can, in respect to the fact that
this distinction is not super important in practice.
Closes #736
2023-06-22 11:05:57 -04:00
Nick Mathewson
967cae6ced
New ErrorKind for invalid onion addresses
...
Use this to emit HS_BAD_ADDRESS as appropriate.
2023-06-22 10:57:08 -04:00
Nick Mathewson
42f16fc2ce
socksproto: Add unspecified but documented socks5 extension codes
2023-06-22 10:56:24 -04:00
Nick Mathewson
1a9e5b8463
Remove ErrorKind::OnionService{Intro,Rend}Failed
...
These errors are orthogonal to our actual error kinds. See
discussion on #736 .
2023-06-22 10:56:23 -04:00
Ian Jackson
6cd56972e4
tor-hsclient: Delete/rewrite out-of-date commentary
2023-06-22 15:48:41 +01:00
Ian Jackson
7001a38c0c
tor-hsclient: linkify a URL in a doc comment
2023-06-22 15:45:13 +01:00
Ian Jackson
fe76477342
tor-hsclient: Apply broken formatting as demanded by rustfmt
2023-06-22 14:54:48 +01:00
Ian Jackson
10b54065e8
tor-hsclient: Test circuit expiry
2023-06-22 14:54:48 +01:00
Ian Jackson
3badca02c9
tor-hsclient: Expire HS circuits that we don't want to reuse
2023-06-22 14:54:00 +01:00
Nick Mathewson
8a6836cf4a
proto: Resolve/downgrade some path-related "TODO HS" items
2023-06-22 09:45:47 -04:00
Nick Mathewson
f80a1189a5
proto: Implement Redactable and Display for PathEntry.
2023-06-22 09:45:47 -04:00
Nick Mathewson
1bb298d1e6
circmgr: Use path_ref() instead of path().
2023-06-22 09:45:47 -04:00
Nick Mathewson
f2fc086594
proto: Add ClientCirc::path_ref(), deprecate path().
...
The new path_ref() method returns an Arc<Path>, which gives a much
better API for reasons discussed in the new documentation of path().
(We could just replace path() if we'd prefer, but IMO having
path_ref() here isn't so bad.)
2023-06-22 09:45:47 -04:00
Nick Mathewson
b64cf3f6f0
proto: Make Path and PathEntry at least minimally useful
...
(I'm not 100% sure about having both hops() and iter(). Should I
remove one?)
2023-06-22 09:45:47 -04:00
Nick Mathewson
1e1a76f7ac
proto: Expose an opaque PathEntry.
...
The new PathEntry struct wraps the old PathEntry enum, which has
been renamed to HopDetail. It's an opaque struct because we want to
be able to put new information in the enum as we think best.
2023-06-22 09:45:47 -04:00
Nick Mathewson
e6735cdd9d
proto: Make Path public
...
(You can't get one yet or do much with it.)
2023-06-22 08:37:34 -04:00
Nick Mathewson
8609b9f92a
proto: Remove Mutex from Path.
...
Now Path is a regular struct with no interior mutability, and we use
Arc::make_mut() for the case when we need to add a hop.
2023-06-22 08:37:18 -04:00
Ian Jackson
a35a1402ae
tor-hsclient: Introduce helper function for locking services table
2023-06-22 13:32:14 +01:00
Ian Jackson
dedda8a590
tor-hsclient: Abolish an obsolete comment
...
We don't now handle inability to store by panicking. Like the
previous comment says, such situations end up with Err in stored,
and that's handled by logging, below.
2023-06-22 13:24:16 +01:00
Nick Mathewson
2d3739bfe1
proto: Move Path into a separate shared mutable structure
...
(We're about to remove the interior mutability from Path.)
2023-06-22 08:23:51 -04:00
Gabriela Moldovan
e5aafa129b
keymgr: Downgrade 2 "TODO hs" to "TODO HSS".
2023-06-22 11:28:24 +01:00
Gabriela Moldovan
84b2cc98d5
keymgr: Remove outdated TODO.
...
This TODO talks about a change we've decided not to implement.
2023-06-22 11:25:27 +01:00
Nick Mathewson
ea99e728d2
proto: Downgrade a comment about unauthenticated SENDMEs
...
We never actually need to allow these again; see #914
2023-06-21 15:42:19 -04:00
Nick Mathewson
fa9a3821a6
proto::circuit: 🤝 downgrade a "TODO HS".
2023-06-21 15:09:02 -04:00
Nick Mathewson
5912509b05
proto: Put client and service hs_ntor behind individual features
...
This lets us keep the service-side hs-ntor handshake experiemental
for now.
2023-06-21 15:06:20 -04:00
Nick Mathewson
cc8c3c0d7d
proto: Resolve some hs_ntor "TODO HS" comments.
2023-06-21 14:58:54 -04:00
Nick Mathewson
a317476520
proto: downgrade some "TODO HS" comments to "HSS"
...
These are all related to issues that will come up for the service
side of the onion service implementation.
2023-06-21 14:52:50 -04:00
Alexander Færøy
d1658a120e
Merge branch 'stderr' into 'main'
...
lints: Promote clippy::print_stderr and clippy::print_stdout
See merge request tpo/core/arti!1271
2023-06-21 16:41:10 +00:00
Gabriela Moldovan
b8279c3421
keymgr: Fix clippy lints.
2023-06-21 17:04:03 +01:00
Gabriela Moldovan
d8743771e8
keymgr: Remove outdated TODO.
...
This TODO was addressed in #899
2023-06-21 17:03:41 +01:00
Gabriela Moldovan
1e1cb05d27
keymgr: Make ArtiNativeKeyStore::key_path() return a relative path.
...
This also updates `ArtiNativeKeyStore`'s `KeyStore::remove`
implementation to build the absolute path of the file being removed, by
joining `self.keystore_dir` and the relpath returned by
`ArtiNativeKeyStore::key_path()`.
This addresses #908
2023-06-21 17:03:40 +01:00
Gabriela Moldovan
91abe17da1
keymgr: Derive Into for ArtiPath.
...
Sometimes we need the underlying String (for example to create a
PathBuf).
2023-06-21 17:01:02 +01:00
Ian Jackson
f7a93d6de9
Merge branch 'keymgr-api-consistency' into 'main'
...
keymgr: Remove Error::NotFound, update KeyMgr, KeyStore APIs.
See merge request tpo/core/arti!1280
2023-06-21 15:54:02 +00:00
Ian Jackson
8f7e86c87e
lints: Run maint/add_warning to actually apply new lints (again)
...
I prepared 161b9844d
against an earlier version of main without the
geoip crate. Run maint/add_warning again.
2023-06-21 16:44:49 +01:00
Ian Jackson
ffa94d8f30
Merge branch 'keymgr-rm-cond' into 'main'
...
keymgr: Remove unnecessary condition.
See merge request tpo/core/arti!1277
2023-06-21 15:28:07 +00:00
Ian Jackson
5ca0cbdefc
Merge branch 'keymgr-remove-todo' into 'main'
...
keymgr: Remove outdated TODO.
See merge request tpo/core/arti!1278
2023-06-21 15:27:26 +00:00
Ian Jackson
8948d611bd
Merge branch 'defer-hsservice-todos' into 'main'
...
Downgrade every "TODO HS" in tor-hsservice
See merge request tpo/core/arti!1265
2023-06-21 15:13:46 +00:00
Ian Jackson
1e5004eba7
Merge branch 'hsdesc-accessors' into 'main'
...
netdoc: Use derive amplify::Getters for HsDesc accessors.
Closes #909
See merge request tpo/core/arti!1266
2023-06-21 15:11:05 +00:00
Alexander Færøy
ddb81d7efd
Merge branch 'doc_link_fix' into 'main'
...
Fix a rustdoc link.
See merge request tpo/core/arti!1274
2023-06-21 15:04:54 +00:00
Gabriela Moldovan
f633e41380
keymgr: Remove Error::NotFound, update KeyMgr, KeyStore APIs.
...
This removes the `NotFound` `tor_keymgr::Error` variant. Since `KeyMgr`
and `KeyStore` users will need to be able to distinguish between "not
found" errors and other I/O errors, this also changes the return types
of the `get()` and `remove()` functions of `KeyStore` and `KeyMgr`,
which now return `Ok(None)` instead of `Error::NotFound`.
This makes the `KeyStore` API consistent with `KeyMgr::get`, which
already has a return type of `Result<Option<K>>` (rather than
`Result<K>`).
This also prepares us for #901 , which will make key store errors
opaque. Without this change:
* we'd have to create a `struct NotFoundError;` error type. Its
`HasKind` impl would need to return a new
`ErrorKind::KeyStoreErrorNotFound` `ErrorKind` variant
* callers would have to match the `error_kind()` of the error to
figure out whether the key simply can't be found
(`ErrorKind::KeyStoreErrorNotFound`), or if something went wrong
(any other `ErrorKind`).
Given the above, I think `Result<Option<()>>` makes for a more ergonomic
API.
Part of #901
2023-06-21 16:00:30 +01:00
gabi-250
53a05c1e7b
Merge branch 'upgrade_21June2023' into 'main'
...
Upgrade a couple of dependencies
See merge request tpo/core/arti!1276
2023-06-21 14:23:50 +00:00
Nick Mathewson
dd944bc787
Generate correct ErrorKinds for hsdesc decryption failures.
...
Part of #736
2023-06-21 10:22:42 -04:00
Gabriela Moldovan
523eb7e5f0
keymgr: Remove outdated TODO.
...
This TODO describes something we're not planning to implement, so let's
just remove it.
2023-06-21 14:55:13 +01:00
Gabriela Moldovan
521ba309cc
keymgr: Remove unnecessary condition.
...
We don't need to special-case `NotFound` errors because
`ssh_key::PrivateKey::from_openssh` doesn't read from disk (so it
shouldn't be returning `NotFound` errors in the first place).
Previously, this condition made sense because we were using
`ssh_key::PrivateKey::read_openssh_file` instead of
`ssh_key::PrivateKey::from_openssh`, which _does_ read from disk. This
condition should have been removed in !1263 (the refactoring where we
switched to `from_openssh`).
(Also, after #901 is implemented, we probably won't have an
`Error::NotFound` error anymore).
2023-06-21 14:42:42 +01:00
Nick Mathewson
a7627341ec
Merge branch 'onionsocks' into 'main'
...
arti: return prop304 extended socks5 reply codes for onion services
See merge request tpo/core/arti!1248
2023-06-21 13:38:42 +00:00
Nick Mathewson
16a07a8f63
Upgrade to memmap2 0.7
2023-06-21 09:13:55 -04:00
Nick Mathewson
0505579497
Upgrade to strum 0.25.
2023-06-21 09:12:36 -04:00
Saksham Mittal
056ca5c438
Remove extra 'this' in some methods
2023-06-21 18:40:18 +05:30
Saksham Mittal
341cf5c690
Create chanmgr() method in TorClient
2023-06-21 18:34:24 +05:30
Nick Mathewson
2d7756956e
Add and use ErrorKinds for remaining onion service errors
2023-06-21 09:01:02 -04:00
Nick Mathewson
36c4112600
arti: return prop304 extended socks5 reply codes for onion services
...
We don't yet return all of them; this commit adds some todo notes
about changes we may need to our ErrorKinds.
Part of #736
2023-06-21 09:01:01 -04:00
Nick Mathewson
fbb3d98fb3
arti: Abbreviate SocksStatus and ErrorKind imports and refactor.
2023-06-21 09:00:03 -04:00
Nick Mathewson
f14a87e4c8
Merge branch 'todos' into 'main'
...
tor-hsclient: Dispose of easy todos and remove many allows
See merge request tpo/core/arti!1272
2023-06-21 12:53:16 +00:00
Nick Mathewson
372a72e185
Fix a rustdoc link.
2023-06-21 08:45:25 -04:00
Nick Mathewson
21ff8e8060
Merge branch 'chanmgr-doc-fix' into 'main'
...
Remove message 'For now, only direct channels are supported' in tor-chanmgr docs
See merge request tpo/core/arti!1273
2023-06-21 12:35:46 +00:00
Nick Mathewson
107fbb05de
Merge branch 'geoip-nullity-fromstr' into 'main'
...
Followups wrt country-code robustness
See merge request tpo/core/arti!1268
2023-06-21 12:32:23 +00:00
Saksham Mittal
c3384df00f
Remove message 'For now, only direct channels are supported' in tor-chanmgr docs
2023-06-21 17:29:11 +05:30
Ian Jackson
9a05fbb10d
tor-hsclient: Apply deferred clippy churn needed by fmt churn
...
rustfmt *introduced* this clippy warning.
2023-06-21 12:54:57 +01:00
Ian Jackson
fe41d2059e
tor-hsclient: Apply deferred rustfmt churn
2023-06-21 12:19:04 +01:00
Ian Jackson
60fc4ef98a
tor-hsclient: Drop most allows that are marked for removal
2023-06-21 12:19:04 +01:00
Ian Jackson
a57d3067a5
tor-hsclient: Drop a large number of unneeded imports
2023-06-21 12:19:04 +01:00
Ian Jackson
ae1f144829
tor-hsclient: Add HSID to some log messages
...
For the debug!, we can use the unredacted form. For error!, we use
Sensitive.
2023-06-21 12:19:04 +01:00
Ian Jackson
d4b7714926
tor-hsclient: Do Debug the descriptor as part of Data
...
Empirically, this does not cause the descriptor to be spat out in
normal operation. And it seems right.
2023-06-21 12:19:04 +01:00
Ian Jackson
c94a726664
tor-hsclient: Drop some temporary trace calls
...
These were added as part of a debugging #885 , and are no longer
needed.
2023-06-21 12:19:04 +01:00
Ian Jackson
8267fb4535
tor-hsclient: Drop two eprintlns in production code
2023-06-21 12:19:04 +01:00
Ian Jackson
0845694021
tor-hsclinet: Promote dead code allows to cover all tests
...
We want to remove the crate-level dead code allows. The tests are
incomplete and there are multiple todos for that.
2023-06-21 12:19:04 +01:00
Ian Jackson
63ab6fb01c
tor-hsclient: Use a formulaic TODO mark for incompleteness of tests
2023-06-21 12:19:04 +01:00
Ian Jackson
5a7ea7067d
tor-hsclinet: Add a narrow allow, pending answer to open question
...
I need to talk to HS expert(s) about when this circuit can be
torn down.
2023-06-21 12:19:04 +01:00
Ian Jackson
9a30c4afce
tor-hsclient: Remove unused Context.hs_blind_id_key
2023-06-21 12:19:04 +01:00
Ian Jackson
8f90fe619e
tor-hsclient: Add an allow for a deliberately-unused variable
2023-06-21 12:19:04 +01:00
Ian Jackson
be3433891f
tor-hsclient: Omit some unussed struct fields in patterns
...
For the arms that have a fixed retry time, or a fixed ErrorKind,
dont't bind the unused inner error.
2023-06-21 12:19:04 +01:00
Ian Jackson
161b9844da
lints: Run maint/add_warning to actually apply new lints
2023-06-21 12:15:41 +01:00
Nick Mathewson
8676b27e95
geoip: Add a few more tests.
2023-06-20 16:22:21 -04:00
Nick Mathewson
b0342a8ede
geoip: Explain in more detail what a CountryCode is to us.
2023-06-20 16:22:21 -04:00
Nick Mathewson
f918a86c10
geoip: require that ccs actually are printable ascii.
...
(There are plenty of strings that convert into 2 bytes of UTF8
without being two ascii characters, and there are plenty of
sequences of two ascii characters that aren't printable.)
2023-06-20 16:22:21 -04:00
Nick Mathewson
cf9d902320
geoip: Make ?? a little more bullet-proof
...
We want to make sure that ?? is always None, never a CountryCode.
2023-06-20 16:22:21 -04:00
gabi-250
db7f46265e
Merge branch 'keymgr-refactor-fs-ops' into 'main'
...
keymgr: Move FS operations out of KeyType impl
See merge request tpo/core/arti!1263
2023-06-20 18:41:33 +00:00
Nick Mathewson
f41b1178c5
netdoc: downgrade two accessor-related TODOs
2023-06-20 14:02:04 -04:00
Nick Mathewson
17fab6e913
netdoc: Use derive amplify::Getters for HsDesc accessors.
...
Closes #909 .
2023-06-20 14:00:41 -04:00
Nick Mathewson
8d4ca94e19
Merge branch 'add-tor-geoip' into 'main'
...
tor-geoip: Add new crate with GeoIP database functionality
See merge request tpo/core/arti!1239
2023-06-20 17:59:15 +00:00
Gabriela Moldovan
c40e064b42
keymgr: Fix clippy lints.
2023-06-20 18:54:35 +01:00
Gabriela Moldovan
97350cfe4b
keymgr: Address clippy lints and run cargo fmt.
2023-06-20 18:54:35 +01:00
Gabriela Moldovan
2f10b08d41
keymgr: Enforce keystore_dir properties for every key read/written from the keystore.
2023-06-20 18:54:35 +01:00
Gabriela Moldovan
9bfd263f42
keymgr: Update function names and docs to reflect reality.
...
The functions that handle OpenSSH-formatted keys now no longer read or
write from disk. This commit updates their names and doc strings to stop
suggesting they do.
2023-06-20 18:54:35 +01:00
Gabriela Moldovan
abdf854547
keymgr: Move FS operations out of ssh.rs
...
This moves the filesystem calls from the `ssh` module to
`ArtiNativeKeyStore`. While `ArtiNativeKeyStore` shouldn't be concerning
itself with filesystem operations either, that refactoring will be
tackled separately (see arti#899).
2023-06-20 18:54:35 +01:00
Nick Mathewson
a812a486c3
Downgrade every "TODO HS" in tor-hsservice
...
These are all service-specific, and not client-specific.
2023-06-20 13:30:56 -04:00
eta
d5632eacb2
tor-geoip: Add new crate with GeoIP database functionality
...
- This adds a new crate, `tor-geoip`, which can parse and perform
lookups in the GeoIP database C-tor already uses (generated by a
maintenance utility in the C-tor codebase).
- We embed a copy of C-tor's databases with the crate and use
`include_str!` to ship them with the binary, bloating its size
somewhat.
- This does, however, solve the problem of figuring out how to
distribute these.
- The plan is to gate this functionality behind a feature flag anyway,
so the cost should be nil unless explicitly opted into.
Part of tpo/core/onionmasq#47.
2023-06-20 16:57:58 +01:00
Gabriela Moldovan
181638333f
keymgr: Create a temporary error type for the key types we don't support yet.
2023-06-20 16:48:36 +01:00
Gabriela Moldovan
0c7e5d1924
keymgr: Create a separate error source for key corruption errors.
2023-06-20 16:48:36 +01:00
Alexander Færøy
2fa8a4e56c
Merge branch 'update-keymgr-todo' into 'main'
...
keymgr: Change "TODO hs" to "TODO HSS".
See merge request tpo/core/arti!1264
2023-06-20 13:42:28 +00:00
Gabriela Moldovan
c0762f76f1
keymgr: Fix broken docs.
2023-06-20 13:34:32 +01:00
Gabriela Moldovan
84e05591c7
arti-client: Remove unnecessary #[cfgs(...)].
...
The `keymgr` module selects one of the key manager implementations
(dummy or "real") and exposes all the APIs we need, so we can remove
all of the cfgs related to the `keymgr` feature from `client.rs`.
Part of #897
2023-06-20 13:33:51 +01:00
Gabriela Moldovan
733a559322
arti-client: Create module exposing one of the key manager APIs.
...
This moves the key manager API selection (dummy vs "real" impl) into the
`keymgr` module. The module exports the dummy API if the `keymgr`
feature is disabled, and the impl from `tor-keymgr` otherwise.
Part of #897
2023-06-20 13:33:51 +01:00
Gabriela Moldovan
8202be3cfe
arti-client: Make some of the dummy KeyMgr impls return an error.
...
`insert` and `remove` should return an error rather than `Ok(())`, as
`Ok(())` implies the key was stored/removed, which is impossible in the
no-op implementation.
2023-06-20 13:33:51 +01:00
Gabriela Moldovan
02c36dabd7
arti-client: Add more dummy keymgr APIs.
...
This will help us reduce the number of `#[cfgs(...)]` from `client.rs`
Part of #897
2023-06-20 13:33:51 +01:00
Gabriela Moldovan
c7d32dbf4c
arti-client: Add a result type for the dummy keymgr impl.
...
Part of #897
2023-06-20 13:33:51 +01:00
Gabriela Moldovan
b289c0fd15
arti-client: Add an Error type for the dummy key manager.
...
Part of #897
2023-06-20 13:33:51 +01:00
Gabriela Moldovan
95e4021ed8
arti-client, keymgr: Introduce Mistrust settings and enforce FS permissions.
2023-06-20 13:29:10 +01:00
Gabriela Moldovan
be5c911ac8
arti-client: Temporarily ignore key store errors.
...
We currently initialize the `ArtiNativeKeyStore` with a dummy root dir,
so when `ArtiNativeKeyStore` starts validating directories, this code
will start to fail. Let's preemptively ignore any errors coming from
`ArtiNativeKeyStore::new`. This is temporary and will be removed when we
introduce the key store config (and a real default value for the
keystore root dir).
2023-06-20 13:29:10 +01:00
Gabriela Moldovan
e8176ac8b5
keymgr: Add TODO about separation of concerns wrt FS operations.
2023-06-20 13:29:10 +01:00
Gabriela Moldovan
6837dbce58
keymgr: Add an error variant for fs_mistrust errors.
...
This will be useful later, when `KeyMgr` will start validating
permissions and paths.
2023-06-20 13:29:10 +01:00
Gabriela Moldovan
01b43f7f26
keymgr: Add a FsErrorSource to Error::Fs.
...
In the future, the potential causes of an `Error::Filesystem` error will
include permission errors as well as other errors (not just
`io::Error`s).
2023-06-20 13:29:10 +01:00
Nick Mathewson
f24a7d48c0
Merge branch 'circmgr-todos' into 'main'
...
Resolve several "TODO HS" comments in circmgr.
See merge request tpo/core/arti!1258
2023-06-20 12:13:24 +00:00
Ian Jackson
affa5b5e91
Merge branch 'rpcdoc' into 'main'
...
rpc: Minor docs improvements
See merge request tpo/core/arti!1260
2023-06-20 12:11:49 +00:00
gabi-250
602bcc3c47
Typo fixes
2023-06-20 11:47:02 +00:00
Nick Mathewson
3e704a080c
rpc: Fix docs typo
2023-06-20 11:38:31 +00:00
Gabriela Moldovan
fed726e4ff
keymgr: Defer key bundle support until "Basic Service" milestone.
...
We don't really need "key bundles" for the client keys.
2023-06-20 11:36:04 +01:00
Gabriela Moldovan
0bb7c7f600
keymgr: Change "TODO hs" to "TODO HSS".
...
We probably don't need to support passphrases for the "Basic Client"
milestone, so let's update this TODO accordingly.
2023-06-20 11:24:03 +01:00
Alexander Færøy
f55187e065
Merge branch 'arti-client' into 'main'
...
Sort out .onion handling in arti-client
See merge request tpo/core/arti!1257
2023-06-19 14:44:55 +00:00
Nick Mathewson
c7fa6cb746
Merge branch 'rpc_session_mgt' into 'main'
...
More work on RPC sessions, connections, and managers
See merge request tpo/core/arti!1254
2023-06-16 18:08:58 +00:00
Nick Mathewson
b9500c6f3d
Merge branch 'netdoc-todos' into 'main'
...
Resolve many TODO HS items in tor-netdoc
See merge request tpo/core/arti!1251
2023-06-16 17:31:31 +00:00
Nick Mathewson
a34af0323b
Fix compilation afver last suggestion.
2023-06-16 13:24:41 -04:00
Ian Jackson
0e3dbdee8e
Apply 1 suggestion(s) to 1 file(s)
2023-06-16 17:07:25 +00:00
Ian Jackson
85a046e266
rpc: Cross-reference up from tor-rpcbase re where DispatchTable lives
2023-06-16 17:48:59 +01:00
Ian Jackson
ceaa70f41a
rpc: Expand and clarify and cross-reference lock hierarchy
2023-06-16 17:48:59 +01:00
Ian Jackson
0460a4a4d8
rpc: Document relationship between `Connection` and `RpcSession`
2023-06-16 17:48:59 +01:00
Nick Mathewson
34fc77081c
hsdesc.rs: finally remove "allows".
...
The last piece here is removing some needless keygen from the
tests. This causes the test output (using the deterministic PRNG)
to change.
2023-06-16 12:24:05 -04:00
Nick Mathewson
1091918525
netdoc::doc::hsdesc changes to let us downgrade/remove allows
2023-06-16 12:24:05 -04:00
Nick Mathewson
f1b90fdfee
netdoc: unmark MAC_KEY_LEN as conjectural.
...
The value here is 32 bytes; I'm adding it to to the specification
as torspec!141
2023-06-16 12:24:05 -04:00
Nick Mathewson
d8f7ce510c
SharedRandVal: Note that it doesn't have to be Ct.
2023-06-16 12:24:05 -04:00
Nick Mathewson
984d97a38d
netdoc: remove a TODO about moving a module to where it already is.
2023-06-16 12:24:05 -04:00
Nick Mathewson
6edcca7df3
netdoc: use ct_lookup for rend descriptor cookie lookup
...
(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.)
2023-06-16 12:24:05 -04:00
Nick Mathewson
2eba3d213e
llcrypto: add another warning to ct_lookup.
2023-06-16 12:24:05 -04:00
Nick Mathewson
25db56777c
Lower tor-proto::util::ct::lookup to tor-llcrypto
...
This is mostly code movement; you may want to review it with
`--color-moved`.
I'm doing this so we can also use the function in netdoc for
looking up hsdesc authentication.
2023-06-16 12:24:05 -04:00
Nick Mathewson
a20c3eda6e
netdoc: Downgrade an HS todo wrt HS_DESC_AUTH_TYPE
2023-06-16 12:24:05 -04:00
Nick Mathewson
6fb19c00f5
netdoc: downgrade some TODO HS to TODO HSS.
...
I'm using HSS for hs-service features.
2023-06-16 12:24:05 -04:00
Nick Mathewson
3c824fe302
netdoc::build remove very broken example.
...
This could never be a full rustdoc test, since rustdoc never
runs tests for private items. Even if it were a rustdoc test,
it uses a bunch of types that aren't exposed in the right places,
and it invokes nonexistent functions, and it assumes a `self`
that isn't there.
In lieu of writing a new untested test, I've added a note to refer
the developer to where they can find working example code.
2023-06-16 12:24:05 -04:00
Nick Mathewson
7a617a2dbd
netdoc: Remove a TODO that we already solved.
2023-06-16 12:23:56 -04:00
Nick Mathewson
072ce9182b
hsclient: note that we should check revctr.
2023-06-16 12:23:56 -04:00
Nick Mathewson
c2764cf111
tor-cell: Downgrade 2 TODO-HS to TODO-HSS
2023-06-16 12:21:27 -04:00
Nick Mathewson
1691c35392
circmgr: Use a slightly nicer way to pick a circuit from our pool.
...
This algorithm only looks at circuits until it finds one that
satisfies our needs. To get a random circuit, it just randomizes
the starting point within the pool.
This optimization may help if we let circuit pools grow large.
2023-06-16 12:14:49 -04:00
Nick Mathewson
686d5cf209
circmgr: Make hspool size dynamic
...
Previously we'd always try to keep 8 circuits ready. That doesn't
make sense if we are super-busy. Instead, if we run out of
circuits, we double the amount that we try to keep ready, and if we
never go under 80% of our target number, we half the number we try
to keep ready.
We limit the rate of change here, to make sure that we aren't
flapping too much or shrinking too aggressively.
This algorithm is still a mite arbitrary, and will need tuning in
the future.
2023-06-16 12:11:49 -04:00
Nick Mathewson
69179c5dfe
circmgr::hspool: Move the Mutex into an intermediary Inner struct
...
This will be helpful as we complexify the pool behavior a bit.
2023-06-16 11:42:38 -04:00
Nick Mathewson
1c470fd483
circmgr: Remove TODOS about retrying.
...
These functions' documentation already says that they don't retry,
and hsclient appears to be where we are concentrating our retry
efforts.
2023-06-16 11:40:00 -04:00
Ian Jackson
b34ba70070
arti-client: hs: remove some now-obsolete allows
2023-06-16 16:18:02 +01:00
Ian Jackson
f877f37308
arti-client: address: Prefer to throw OnionAddressResolveRequest (fmt)
2023-06-16 16:18:02 +01:00
Ian Jackson
d9f1c7195b
arti-client: address: Prefer to throw OnionAddressResolveRequest
...
Reformatting deferred for clarity.
2023-06-16 16:18:02 +01:00
Ian Jackson
dafccf93b0
arti-client: hs: Test cases for variously disabling .onion
...
This test case shows that we return a suboptimal error in some cases.
2023-06-16 16:18:02 +01:00
Ian Jackson
18291cb001
arti-client: Provide ErrorDetailDiscriminants for convenient testing
...
ErrorDetail isn't PartialEq so we can't assert_eq! it.
But the discriminants will be.
2023-06-16 16:18:02 +01:00
Ian Jackson
0a7ca71e70
arti-client: StreamPrefs::connect_to_onion_services: honour
2023-06-16 16:18:02 +01:00
Ian Jackson
2d112efc0f
arti-client: StreamPrefs::connect_to_onion_services: docs
...
This disposes of the TODO as well.
2023-06-16 16:18:02 +01:00
Ian Jackson
c5b655ed45
arti-client: StreamPrefs::connect_to_onion_services: fix cfg
2023-06-16 16:18:02 +01:00
Ian Jackson
21090aa6f0
arti-client: StreamPrefs::connect_to_onion_services: fix name
2023-06-16 16:18:02 +01:00
nate_d1azzz
08b7419138
Added setter method in impl for StreamPrefs
...
(Taken from tpo/core/arti!1113 and squashed by Ian Jackson, with
conflicting hunk in StreamPrefs struct skipped.
The setter name is wrong, the cfg feature is wrong, there are no
docs, and the TODO is still there. These will be fixed in a moment.)
2023-06-16 16:18:02 +01:00
Ian Jackson
40dae63b65
arti-client hs: connect_to_onion_services: default to true
...
This should be enabled by default. There's still no setter for not,
nor is it honoured - those are separate TODOs.
2023-06-16 16:18:02 +01:00
Ian Jackson
ce72588322
arti-client: OnionAddressNotSupported: Change description and kind
...
Previously this error meant "we haven't written this code yet".
Now, we change it to "you haven't built Arti with this feature".
2023-06-16 16:18:02 +01:00
Ian Jackson
2521b88cd6
arti-client: address: Apply deferred rustfmt churn
2023-06-16 16:18:02 +01:00
Ian Jackson
60cfb09e77
arti-client: address: Plumb StreamPrefs into enforce_config
...
No functional change yet. We'll use this shortly.
2023-06-16 16:18:02 +01:00
Ian Jackson
bf93519cdd
arti-client: address: Move config enforcement
...
Disposes of two TODOs.
2023-06-16 16:18:02 +01:00
Ian Jackson
eb9b0d0d78
arti-client: address: Move config enforcement (pre-fmt)
...
This will make subsequent commits less noisy to read.
2023-06-16 16:18:02 +01:00
Ian Jackson
e95f9e52cc
arti-client: address: Disable some tests when HS disabled
...
These have already been partially/replaced supplemented.
The other test referred to will appear shortly.
2023-06-16 16:18:02 +01:00
Ian Jackson
e5d53091cf
Merge branch 'hs-naming-arti' into 'main'
...
arti-*: Rename hs feature to onion-service-client
See merge request tpo/core/arti!1039
2023-06-16 13:22:25 +00:00
Nick Mathewson
672062113e
cirmgr: remove a dead-code exception.
2023-06-16 08:45:49 -04:00
Nick Mathewson
5196363d36
Merge branch 'insert' into 'main'
...
rpc: Make CastTable::insert be more type-safe
See merge request tpo/core/arti!1253
2023-06-16 12:20:14 +00:00
Ian Jackson
07d5bc9537
arti-client: Rename hs feature to onion-service-client (cfg lines)
2023-06-16 12:34:53 +01:00
Ian Jackson
8d98982bb2
arti-client: Rename hs feature to onion-service-client
...
Rationale as per #756 .
This is the same name as in the `arti` crate.
2023-06-16 12:34:47 +01:00
Gabriela Moldovan
37e0837cea
arti-client: rustfmt
2023-06-15 18:56:48 +01:00
Gabriela Moldovan
94b228a4c6
arti-client: Fix clippy lints.
...
We need to allow some lints in the dummy key manager because its
implementation needs to mirror that of `tor_keymgr::KeyMgr` (so we can't
apply the API changes suggested by clippy).
2023-06-15 18:43:24 +01:00
Gabriela Moldovan
ec9200c50f
keymgr: Add Diziet's notes about storing public keys in the key store.
2023-06-15 18:16:34 +01:00
Gabriela Moldovan
bed1ae6304
arti-client: Use a dummy key manager if the keymgr feature is disabled.
...
TorClient now only uses the tor_keymgr::KeyMgr implementation if the
keymgr experimental feature is enabled. If the feature is disabled, a
dummy key manager implementation is used.
The new `keymgr` feature depends on `onion-client`, because the key
manager is only used for HS client auth.
2023-06-15 18:16:34 +01:00
Gabriela Moldovan
35879a681f
arti-client: Implement From<tor_keymgr::Error> for Error.
2023-06-15 18:16:34 +01:00
Gabriela Moldovan
21d93300eb
keymgr, arti-client: KeyMgr should return Ok(None) if the key is not found.
...
This simplifies usage quite a bit and will enable us to implement a
dummy `KeyMgr` that doesn't depend on the error types from tor-keymgr
(which will replace the "real" `KeyMgr` if the keymgr feature is
disabled).
2023-06-15 18:16:34 +01:00
Gabriela Moldovan
60e2b51f3d
keymgr: Add TODO regarding KeyStore rename.
2023-06-15 18:16:34 +01:00
Gabriela Moldovan
0525193d99
keymgr: Add TODO about KeyType refactorings.
2023-06-15 18:16:34 +01:00
Gabriela Moldovan
97ba27aedb
keymgr: Add the key type to the `arti_extension`.
2023-06-15 18:16:34 +01:00
Gabriela Moldovan
a958b3a91a
arti_client: Add TODO about refactoring code around HsClientSecretKeysBuilder.
2023-06-15 18:16:34 +01:00
Gabriela Moldovan
15122a8e10
keymgr: Add TODO regarding some error refactorings.
2023-06-15 18:16:34 +01:00
Gabriela Moldovan
eda974cd34
keymgr: Move the HS client and service key specifiers out of tor-keymgr.
...
The HS `HsClientSpecifier` and `HsClientSecretKeySpecifier` are moved to
`tor-hsclient`. The HS service secret key specifier stubs are moved to
`tor-hsservice`.
2023-06-15 18:16:33 +01:00
Gabriela Moldovan
0828597a2e
keymgr: Expand the TODOs regarding HS service key specifiers.
...
Signed-off-by: Gabriela Moldovan <gabi@torproject.org>
2023-06-15 18:15:30 +01:00
Gabriela Moldovan
e0ded457ba
keymgr: Expand HsClientSpecifier docs, add TODO about refactoring.
...
Signed-off-by: Gabriela Moldovan <gabi@torproject.org>
2023-06-15 18:15:30 +01:00
Gabriela Moldovan
e99ee7ec02
arti-client, keymgr: Initialize KeyMgr with an ArtiNativeKeyStore.
...
The `KeyMgr` is now initialized with an `ArtiNativeKeyStore` built from
an invalid key store root dir (this is alright for the purposes of this
proof-of-concept, since `ArtiNativeKeyStore::new` won't fail as it
doesn't currently validate the keystore root dir).
2023-06-15 18:15:30 +01:00
Gabriela Moldovan
64c24dca66
keymgr: Introduce ToEncodableKey to simplify lookups.
...
This means `KeyMgr` users don't need to specify the underlying key type
(e.g. `ed25519::Keypair`) when retrieving keys. Instead, they can just
specify the type required (as long as it implements `ToEncodableKey`),
e.g. `HsClientIntroAuthKeypair`.
2023-06-15 18:15:30 +01:00
Gabriela Moldovan
fbed393680
arti-client: Make the client use the KeyMgr.
...
`TorClient` now uses a `KeyMgr` to retrieve the `HsClientSecretKeys`
client auth keys passed to `get_or_launch_connection`.
2023-06-15 18:15:30 +01:00
Gabriela Moldovan
61f37b1b5c
keymgr: Add key manager implementation stub.
2023-06-15 18:15:30 +01:00
Gabriela Moldovan
17ae752a0b
keymgr: Implement `SshKeyType::read_ssh_format_erased` for `KeyType`.
...
This adds a proof-of-concept `SshKeyType::read_ssh_format_erased`
implementation for `KeyType`. The implementation decodes an OpenSSH key
and converts it to one of the key types used internally by Arti. The
value returned is type-erased, and will be downscast later down the line
by the `KeyMgr` (note: `KeyMgr` doesn't exist yet).
The `SshKeyType::write_ssh_format` will be implemented once these APIs
are a bit more stable.
2023-06-15 18:15:30 +01:00
Gabriela Moldovan
a2d0ee63cc
keymgr: Add ArtiNativeKeyStore implementation skeleton.
...
This adds implementation stubs for `ArtiNativeKeyStore`, and introduces
the traits needed to make the `KeyStore` APIs work.
2023-06-15 18:15:30 +01:00
Gabriela Moldovan
d133c8b0a6
hsclient: Change builder error return type to ConfigBuildError.
...
It's not perfectly clear what this error type should be, so let's use
`ConfigBuildError` for now (it makes things easier in `arti-client`, as
we already have an `ErrorDetail` for it).
2023-06-15 18:15:30 +01:00
Nick Mathewson
6521864a34
rpc: Document and apply lock hierarchy for Mgr/Connection
2023-06-15 12:53:50 -04:00
Nick Mathewson
9e8ad5415e
rpc: Give the session-creation function an argument.
...
This will later let us tell the session-creation function
how the authentication occurred, which will let it decide
what privileges to provide.
2023-06-15 11:50:12 -04:00
Nick Mathewson
2d28402fb7
rpc: revise session initialization a lot.
...
Formerly, every time we wanted to launch a new connection, we had
to give the RpcMgr a TorClient. The connection would hold that
TorClient until a session was authenticated, and then would wrap
it in a Session and put it in the object map.
Now, the RpcMgr holds a Box<dyn Fn()...> that knows how to
create Sessions. When a connection is authenticated, it
asks the Mgr to make it a new session. This lets us make it
clearer that the TorClient simply can't be given out until the
connection is authenticated. Later, it will let us create
more types of Session objects under more complicated rules.
2023-06-15 11:44:14 -04:00
Ian Jackson
a1934e7102
tor-hsclient: Make Untried a {}-less unit
...
Suggested here
https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/1247#note_2912642
It's unlikely this will grow any content, so fine.
2023-06-15 16:43:45 +01:00
gabi-250
7e601fba01
tor-hsclient: Insert a blank line
2023-06-15 16:43:45 +01:00
gabi-250
d99434d06b
tor-hsclient: Docs improvements.
2023-06-15 16:43:45 +01:00
Ian Jackson
856269f7a7
tor-hsclient: Remove two done TODOs
2023-06-15 16:43:45 +01:00
Ian Jackson
731cc9ed44
tor-hsclient: provide intro_index accessor for FailedAttemptError (xref)
...
Add a cross-reference to docs arising from MR comments in !1246 .
2023-06-15 16:43:45 +01:00
Ian Jackson
2dfa00f379
tor-hsclient: Actually store our IPT experiences
2023-06-15 16:43:45 +01:00
Ian Jackson
f5a895b33f
tor-hsclient: intro_rend_connect: bind `outcome`
...
This will be used in a moment.
2023-06-15 16:43:45 +01:00
Ian Jackson
4f4f753b6a
tor-hsclient: Actually choose which intro points to use
...
Right now this just always chooses randomly because nothing stores
anything in the HashMap.
2023-06-15 16:43:45 +01:00
Ian Jackson
65d7d499d7
tor-hsclient: Introduce RelayIdForExperience
...
Wrap this up in a newtype so we don't accidentally use it for anything
else. Provide two constructors, one for storing and one for lookups.
2023-06-15 16:43:45 +01:00
Ian Jackson
397c4fb01f
tor-hsclient: Add random sort key to UsableIpt
2023-06-15 16:43:45 +01:00
Ian Jackson
279afeefc2
tor-hsclient: provide intro_index accessor for FailedAttemptError
2023-06-15 16:43:45 +01:00
Ian Jackson
dac7a45ea8
tor-error: Introduce `LooseCmpRetryTime`
...
Having a newtype for this kind of thing is considerably more
convenient. I'm going to use this in a moment.
2023-06-15 16:43:45 +01:00
Nick Mathewson
6da1acadab
rpc: Rename Session=>RpcSession
2023-06-15 11:29:57 -04:00
Nick Mathewson
269fab7abe
rpc: Expose Session object.
...
We'll want to move the responsibility for creating Sessions outside
the rpcmgr crate.
2023-06-15 11:28:34 -04:00
Nick Mathewson
bd134525fd
RPC: rename new_session to new_connection
2023-06-15 11:15:40 -04:00
Ian Jackson
1710ce54f4
rpc: Remove some verbiage about 'static, and demo that it's OK without
...
It's now not actually possible to write code that doesn't work, even
if `Tr` *isn't* 'static, because of the bounds on `CastTable::insert`.
I tried to produce a non-working setup with a non-static `Simple`, but
you can't implement `Object` for such a thing. Removing 'static from
Object would stop the downcasts from Any to Object working.
Prior to the new typesafe insert, this change
- let f: fn(&dyn $crate::Object) -> &(dyn $traitname + 'static) = |self_| {
+ let f: fn(&dyn $crate::Object) -> &(dyn $traitname) = |self_| {
would result in a runtime crash. Now it results in a compiler error.
2023-06-15 12:07:11 +01:00
Ian Jackson
0eedf0e254
rpc: Give the name `O` to "the type associated with this CastTable"
...
This was locally bound to `S` in one place. Bind and use it throughout.
Since this is an RPC object, `O` is a better name.
In each item, use the description once and thereafter just the name.
2023-06-15 12:03:53 +01:00
Ian Jackson
2228751a00
rpc: Add Simple test case for CastTable
2023-06-15 12:03:53 +01:00
Ian Jackson
54b364cdcf
rpc: Move boxing from macro to CastTable::insert (formatting)
2023-06-15 12:03:53 +01:00
Ian Jackson
890a7b52be
rpc: Move boxing from macro to CastTable::insert
2023-06-15 11:32:32 +01:00
Ian Jackson
8452fe11cf
rpc: Make CastTable::insert be more type-safe
...
This checks the Requirements.
2023-06-15 11:13:26 +01:00
Nick Mathewson
de423f6a36
rpc: switch GlobalId mac to KMAC.
2023-06-14 14:47:13 -04:00
Nick Mathewson
66a72370d1
rpc: connection_id _is_ used: remove a comment to the contrary
2023-06-14 14:46:08 -04:00
Nick Mathewson
789953d800
rpc: revise the relationship between Mgr and Connection
...
This adds a Weak reference from Connection to Mgr, makes DispatchTable
mutable, and makes a few other changes as discussed between me and
Diziet the other week.
I bet we are not done tweaking this, but I hope it's a setp forwards.
2023-06-14 14:43:08 -04:00
Ian Jackson
a156e60780
Merge branch 'pt-snowflake-fix' into 'main'
...
make snowflake example feature-gated
See merge request tpo/core/arti!1249
2023-06-14 18:13:57 +00:00
trinity-1686a
02a82ad748
make snowflake example feature-gated
2023-06-14 18:13:57 +00:00
Ian Jackson
d277f6729d
tor-hsclient: InvalidTarget::ImpossibleRelayIds is RetryTime::Never
...
As per
https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/1246#note_2912105
2023-06-14 17:26:05 +01:00
Nick Mathewson
46a89ffb14
tor-hsclient: Correction to HasRetryTime for InvalidTarget doc
2023-06-14 17:26:05 +01:00
Ian Jackson
c99207b60e
tor-hsclient: Add doc for HasKind for FailedAttemptError
...
There is a cross-reference here to code (`IptSortKey`) in another
branch that I haven't made an MR for yet.
2023-06-14 17:26:05 +01:00
Ian Jackson
d5bf90c33e
tor-hsclient: Add docs and comments about HasRetryTime for InvalidTarget
2023-06-14 17:26:05 +01:00
Ian Jackson
3e8590c2b5
tor-cell: HasRetryTime for IntroduceAckStatus: Confirm re CANT_RELAY (fmt)
...
rustdoc insisted on misindenting this before, and now it insists on
un-mis-indenting it.
2023-06-14 17:26:05 +01:00
Ian Jackson
fb4e33fbdf
tor-cell: HasRetryTime for IntroduceAckStatus: Confirm re CANT_RELAY
...
Remove this todo as per
https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/1246#note_2912104
2023-06-14 17:26:05 +01:00
Ian Jackson
bfcddd4e59
tor-cell: Add a doc comment for impl tor_error::HasRetryTime for IntroduceAckStatus
2023-06-14 17:26:05 +01:00
Nick Mathewson
f32b8cfaa2
netdoc::build: remove or narrow `allow`s.
2023-06-14 11:26:05 -04:00
Ian Jackson
ea678ffa22
tor-hsclient: impl HasRetryTime for FailedAttemptError
2023-06-14 15:17:54 +01:00
Ian Jackson
c4944de996
tor-hsclient: impl HasRetryTime for InvalidTarget
2023-06-14 15:16:31 +01:00
Ian Jackson
f98c7df12e
tor-cell: impl HasRetryTime for IntroduceAckStatus
2023-06-14 15:16:31 +01:00
Nick Mathewson
ab56dcf145
Merge branch 'tor-cell-todos' into 'main'
...
Resolve most TODO HS comments in tor-cell
See merge request tpo/core/arti!1245
2023-06-13 22:30:50 +00:00
gabi-250
677148d077
Merge branch 'hscrypto-todos' into 'main'
...
hscrypto: Resolve all but one TODO HS comment.
See merge request tpo/core/arti!1244
2023-06-13 18:40:59 +00:00
Nick Mathewson
0912496dbb
cell: Downgrade a couple more TODO HS comments.
2023-06-13 13:57:57 -04:00
Ian Jackson
d843aaa3b2
Merge branch '20_byte_sendme_digest' into 'main'
...
proto: Make sure that auth tags are truncated to 20 bytes
See merge request tpo/core/arti!1242
2023-06-13 17:05:27 +00:00
Nick Mathewson
589fefd581
cell: Remove relaycell::restrict
...
This module didn't have anything in it; nonetheless, removing it
does count as an API break since it was public.
2023-06-13 13:04:16 -04:00
Nick Mathewson
6a6164a360
cell: Remove some TODOs
...
Yes, we still will need more accessors for onion services, but we
can add them as we find the need.
2023-06-13 12:58:22 -04:00
Nick Mathewson
0f3724322d
cell: remove/localize "allow(dead-code)"
2023-06-13 12:50:09 -04:00
gabi-250
a931c7e5d9
Merge branch 'hs' into 'main'
...
tor-hsclient: Finish(?) plumbing up first cut of HS client connection
See merge request tpo/core/arti!1240
2023-06-13 16:47:19 +00:00
Nick Mathewson
0add7df458
hscrypto: fix TODOs in time-period code.
...
* Return a more informative error type (instead of Option)
* Check that time periods are an integer number of seconds
* Decide not to change the semantics of an argument.
2023-06-13 12:39:52 -04:00
Nick Mathewson
0a4dac0fa0
hscrypto: remove compatibility note about time periods.
...
We updated and clarified the spec in arti!107, and noted the
remaining infelicities in proposal 342.
2023-06-13 12:20:12 -04:00
Nick Mathewson
44ced7dbd3
hscrypto: write a README
2023-06-13 12:15:04 -04:00
Nick Mathewson
848793da5a
hscrypto: note that hs_mac is not a good choice for new protocols
2023-06-13 12:11:38 -04:00
Nick Mathewson
7a82285984
hscrypto: comment out an unused key type.
...
(I'm not removing it entirely since maybe we _should_ use it, and
maybe we _will_ as we do services. I've added a TODO HS for
removing it or using it, and removed the TODO HS at the head of
pk.rs about making sure that all the key types in the module really
belong there.)
2023-06-13 12:01:12 -04:00
Nick Mathewson
9888c4422d
hscrypto: Remove a TODO about extending an internal macro.
2023-06-13 11:53:29 -04:00
Ian Jackson
cc7fd57511
Merge branch 'hs3' into 'main'
...
tor-hsclient: Plumb some needed values through etc.
See merge request tpo/core/arti!1238
2023-06-13 15:53:01 +00:00
Nick Mathewson
670c73a159
hscrypto: Remove a TODO about implementing ErrorKind.
...
I think it isn't actually a great idea for HsIdParseError to
implement ErrorKind, since the actual ErrorKind would depend
entirely on where the problematic ID came from.
2023-06-13 11:50:53 -04:00
Nick Mathewson
9311a8da5b
hscrypto: clarify and downgrade TODOs about blinding secrets
2023-06-13 11:48:54 -04:00
Ian Jackson
bfaf0bba6f
tor-hsclient: Add some more debugging
2023-06-13 16:14:57 +01:00
Ian Jackson
e123ade035
tor-hsclient: Return the circuit
2023-06-13 16:14:57 +01:00
Ian Jackson
57ba35dfe0
tor-hsclient: Conduct the INTRODUCE1 exchange
2023-06-13 16:14:57 +01:00
Ian Jackson
ab11a2042f
tor-hsclient: Remove an already-done TODO
...
Since !1238 we do pass the handshake_state along.
2023-06-13 16:14:57 +01:00
Ian Jackson
f76b6eb614
tor-cell: IntroduceAck: Add .success() function to give a Result
...
The type is a bit odd but this is a result of the underlying protocol.
I don't feel like inventing `IntroduceAckSuccess` that contains only
the extensions.
2023-06-13 16:14:57 +01:00
Ian Jackson
0c10a9554b
tor-hsclient: Rename some errors for greater consistency
2023-06-13 16:14:57 +01:00
Ian Jackson
d98405d1e0
tor-hsclient: Reorder timeout errors to be "less interesting"
...
If something *other* than a timeout went wrong, then that is less
expected so more interesting.
2023-06-13 16:14:57 +01:00
Nick Mathewson
c79ed2b31b
tor-hsclient: Improve proto_oneshot docs
2023-06-13 16:14:06 +01:00
Ian Jackson
b1ac10203a
tor-hsclient: Pass handshake_state to complete_handcshake (fmt)
2023-06-13 16:14:03 +01:00
Ian Jackson
6810881f38
tor-hsclient: Pass handshake_state to complete_handcshake
...
Pass Introduced to complete_handshake. The lack of this was a slip.
Add handshake_state to Introduced, and use it.
2023-06-13 16:13:57 +01:00
Nick Mathewson
40840b1f3a
proto: Make sure that auth tags are truncated to 20 bytes
...
Onion service hops (pointlessly) use SHA3-256 for their
authentication, but they truncate it to 20 bytes (assuming I'm
reading the C right.)
See torspec#204 for clarification here.
2023-06-13 11:04:23 -04:00
Ian Jackson
85273a7646
tor-hsclient: Add a missing doc
...
Requested in !1228 but overlooked
2023-06-13 13:22:27 +01:00
Ian Jackson
01259a560b
tor-hsclient: Introduce proto_oneshot, to help with message handling (fmt)
2023-06-13 13:22:27 +01:00
Ian Jackson
0dcf872e3a
tor-hsclient: Introduce proto_oneshot, to help with message handling
...
This gets rid of a lot of repeated `oneshot::<...<Result, ...>>` and
a bit of repeated functional code, etc.
2023-06-13 13:22:27 +01:00
Ian Jackson
1587c06790
tor-hsclient: (try to) receive the RENDEZVOUS2 message
2023-06-13 13:00:19 +01:00
Ian Jackson
5d49660e0a
RPC: Suppress a warning to do with RPC and SOCKS
...
Fixes `cargo check`
2023-06-13 12:11:23 +01:00
Ian Jackson
880095356e
tor-hsclient: Fix a botched doc comment
2023-06-13 12:00:56 +01:00
Ian Jackson
78de0d279c
Merge branch 'msg_in_handler' into 'main'
...
proto: Convert MsgHandler API to expect a message, not a cell.
Closes #887
See merge request tpo/core/arti!1236
2023-06-13 10:57:01 +00:00
Nick Mathewson
beecf3c92c
proto: Convert MsgHandler API to expect a message, not a cell.
...
Closes #887 .
2023-06-12 14:55:26 -04:00
Nick Mathewson
47b1083d3a
Merge branch 'rpc_pseudomethods_v6' into 'main'
...
RPC: Functionality to downcast dyn Object to a dyn Trait.
See merge request tpo/core/arti!1225
2023-06-12 18:10:46 +00:00
gabi-250
5480035f51
Merge branch 'desc-validation-err-doc' into 'main'
...
tor-error: Document another potential cause for OnionServiceDescriptorValidationFailed.
See merge request tpo/core/arti!1215
2023-06-12 18:03:06 +00:00
Nick Mathewson
8166a29746
RPC: Functionality to downcast dyn Object to a dyn Trait.
...
This is a rather tricky piece of functionality. It works as
follows.
We introduce a `CastTable` type. Each `CastTable` tells us how to
downcast `dyn Object` for objects of a single concrete type.
The `Object` type now has a `get_casttable` method that returns
an empty `CastTable` by default.
`CastTable` is, internally, a map from the `TypeId` of the target
dyn Trait reference type to a function
`fn(&dyn Object) -> &dyn Trait`. These functions are stored as
`Box<dyn Any + ...>`. (They are Boxed because they may refer to
generic functions, which you can't get a static reference to,
and they're Any because the functions have different types.)
The `decl_object!` macro now implements `get_casttable` as
appropriate. (The syntax is a bit janky, but that's what we get
for not using derive_adhoc.) For non-generic types, `get_casttable`
uses a Lazy<CastTable>`. to initialize a CastTable exactly once.
For generic types, it use a `Lazy<RwLock<HashMap<..>>` to
build one CastTable per instantiation of the generic type.
This could probably be optimized a bit more, the yaks could be
shaved in a more scintillating hairstyle, and the syntax for
generic `decl_object` could definitely be improved.
2023-06-12 13:35:28 -04:00
Gabriela Moldovan
44fca4c2ca
tor-error: Clarify what we mean by "hostile".
...
Signed-off-by: Gabriela Moldovan <gabi@torproject.org>
2023-06-12 18:25:50 +01:00
Gabriela Moldovan
de8ca98900
tor-error: Document another potential cause for OnionServiceDescriptorValidationFailed.
...
Signed-off-by: Gabriela Moldovan <gabi@torproject.org>
2023-06-12 18:25:46 +01:00
Nick Mathewson
255d74ac3c
hsclient: fill in a lot more introduce/rendezvous logic.
...
This code tries to fill in some TODO HS code, replacing it with a
lot more code with a bunch more TODO HS comments. Hopefully the
expansions of the new TODO HS comments should be simpler.
2023-06-12 13:15:59 -04:00
Nick Mathewson
2c8e3b22b5
cell: Add an accessor for the body of a Rendezvous2.
2023-06-12 13:15:59 -04:00
Nick Mathewson
f78c5a5a42
proto: Add a commment about a problem in my hs_ntor plans.
...
I am pretty sure that C tor works around this somehow; we should
figure out how!
2023-06-12 13:15:59 -04:00
Nick Mathewson
c38ba16a81
proto: code movement and reindentation in hs_ntor
2023-06-12 13:15:59 -04:00
Nick Mathewson
7255b122d7
proto: Remove now-unused hs_ntor APIs
2023-06-12 13:15:59 -04:00
Nick Mathewson
bb6115103a
proto: refactor hs_ntor to reuse state.
...
We want the ability to send the same handshake request in parallel
on multiple introduce circuits. This implies encoding the client
handshake more than once.
(Sadly we can't _actually_ do this in the protocol as it stands,
since the onion service can use a separate KP_hss_ntor for each
introduction point; I'll add a comment to that effect later.)
2023-06-12 13:15:59 -04:00
Nick Mathewson
edfb3642e0
hsclient: receive rendezvous2 messages too.
2023-06-12 13:15:59 -04:00
Nick Mathewson
32d54c857e
hsclient: Move the body of the msg handler into a new function
2023-06-12 13:15:59 -04:00
Nick Mathewson
e948116bc7
hsclient: Add a second oneshot to Rendezvous msghandler
...
On a client's circuit to the rendezvous point, we need to first wait
for an `RENDEZVOUS_ESTABLISHED` message, and then for a
`RENDEZVOUS2` message.
2023-06-12 13:15:59 -04:00
Nick Mathewson
796dc4457b
hsclient: use hs-client feature in tor-proto.
2023-06-12 13:15:59 -04:00
Nick Mathewson
ac90cb7500
Upgrade async-trait requirement to 1.54
...
We need the fix from [82d69902], which first appeared in async-trait
version 1.54. (Technically we only need this fix in tor-hsclient,
but we may as well update our minimal async-trait version everywhere.)
[82d69902]: 82d6990253
2023-06-12 13:15:59 -04:00
Nick Mathewson
3b93cdb2dd
Merge branch 'redactable_relayids' into 'main'
...
Implement Redactable for RelayIds, and other improvements
Closes #882
See merge request tpo/core/arti!1233
2023-06-12 16:06:11 +00:00
Nick Mathewson
ddea524849
linkspec: cleanup usage; change std::fmt to fmt.
2023-06-12 11:39:45 -04:00
Nick Mathewson
345808322d
Merge branch 'circuit_send_message_fixes' into 'main'
...
Correct documentation and API on ClientCirc::send_control_message
Closes #885 and #881
See merge request tpo/core/arti!1232
2023-06-12 14:14:32 +00:00
Ian Jackson
da78c53e20
Merge branch 'arc_hsdirs_in_netdir' into 'main'
...
netdir: Wrap HsDir an Arc<>
Closes #883
See merge request tpo/core/arti!1234
2023-06-12 13:56:44 +00:00
Ian Jackson
4ee4de2d0a
Apply 1 suggestion(s) to 1 file(s)
2023-06-12 13:49:18 +00:00
Nick Mathewson
b19eb8648f
Merge branch 'pt-snowflake' into 'main'
...
add documentation for configuring snowflake pt
Closes #879 and #875
See merge request tpo/core/arti!1216
2023-06-11 20:59:31 +00:00
Nick Mathewson
0313ca9f62
netdir: Wrap HsDir an Arc<>
...
This change reduces the cost of cloning a `NetDir`. It's fine
since–although we replace the HsDir once–we never modify it once it
exists.
Closes #883 .
2023-06-09 16:08:57 -04:00
Nick Mathewson
a542a3e93f
RelayId: Display the ID type on redacted identities.
...
Formerly we would display just the first characters of the identity,
without telling you what kind of ID it was.
2023-06-09 16:03:56 -04:00
Nick Mathewson
a6ce079d4a
linkspec: implement Display/Redacted on RelayIds
2023-06-09 16:03:56 -04:00
Nick Mathewson
979a2bd6a0
linkspec: Implement HasRelayIds::display_relay_ids().
2023-06-09 15:50:25 -04:00
Nick Mathewson
c76fbff125
proto: Have send_control_message take an AnyRelayMsg.
...
When we break the 1:1 relationship of message and cell, we'll want
this API to take messages, not cells.
This API is experimental, so we don't need to call it a semver
break.
Closes #881 .
2023-06-09 15:28:01 -04:00
Nick Mathewson
58babcb756
proto: Correct the docs on send_control_message
...
Formerly we said that it would not return until the handler
was uninstalled. This is incorrect: it returns as soon as the
message is sent and the handler installed.
Closes #885 .
2023-06-09 15:22:15 -04:00
trinity-1686a
a74bb8d4d8
add a few more comments on PTs
2023-06-09 20:15:25 +02:00
Ian Jackson
7231042343
tor-hsclient: Use send_control_message properly (fmt)
...
This re-indents the body of the trapping IEFE.
2023-06-09 17:47:35 +01:00
Ian Jackson
e4a3498f28
tor-hsclient: Use send_control_message properly
...
The comment was entirely wrong. send_control_message returns as soon
as the message has been enqueued. So we actually *need* to wait for
the oneshot.
Also, given that a circuit collapse doesn't give us a real error, we
plumb the error through the oneshot. Introduce an IEFE to capture the
error from the decoding.
2023-06-09 17:45:50 +01:00
Ian Jackson
8d71ceef9a
tor-hsclient: Obtain reply_tx earlier
...
No functional change other than to error cases.
Will fit better with code to come in a moment.
2023-06-09 17:45:41 +01:00
Ian Jackson
27b76ffa3c
tor-hsclient: Break out handle_proto_error
...
We're going to want to reuse this.
2023-06-09 17:45:29 +01:00
Ian Jackson
c9cc76addb
tor-hsclient: Add TODO for broken send_control_message use
2023-06-09 17:36:48 +01:00
Ian Jackson
9240ae55ba
tor-hsclient: Discuss circuit parallelisation in sad case
...
Apropose
https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/1228#note_2910588
2023-06-09 17:36:48 +01:00
Ian Jackson
5cc1323752
tor-hsclient: Add a TODO to retain the NetDir less long
2023-06-09 17:36:48 +01:00
Ian Jackson
a9a59186fa
tor-hsclient: Add some trace! temporarily
...
With this I see this:
2023-06-09T12:26:27.698815Z DEBUG tor_hsclient::connect: hs conn to duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion: RPT $36acd600bc8ea6c2800434778909ce3d83621358: sending ESTABLISH_RENDEZVOUS
2023-06-09T12:26:27.699144Z TRACE tor_proto::circuit::reactor: Circ 1.0: reactor received SendMsgAndInstallHandler { msg: RelayCell { streamid: StreamId(0), msg: EstablishRendezvous(EstablishRendezvous { cookie: RendCookie(CtByteArray([220, 39, 37, 30, 37, 108, 111, 23, 127, 220, 50, 108, 161, 109, 229, 235, 110, 88, 233, 38])) }) }, sender: Sender { complete: false } }
2023-06-09T12:26:27.699238Z TRACE tor_guardmgr: Received report of guard status guard_id=FirstHopId(Guard(Default, GuardId(RelayIds { ed_identity: Some(Ed25519Identity { 6lORxW93KRbhHFPNG0g+oBkXZbRnpwBzyfDcta7ed/M }), rsa_identity: Some(RsaIdentity { $f0c9c07d1b7c6fc8547f52cac1015b4a79e2ac1a }) }))) status=Success
2023-06-09T12:26:27.699429Z TRACE tor_hsclient::connect: SEND CONTROL MESSAGE RETURNED
2023-06-09T12:26:27.699966Z INFO tor_guardmgr:💂 We have found that guard [scrubbed] is usable.
2023-06-09T12:26:27.700030Z TRACE tor_guardmgr:💂 Guard status changed. guard_id=GuardId(RelayIds { ed_identity: Some(Ed25519Identity { 6lORxW93KRbhHFPNG0g+oBkXZbRnpwBzyfDcta7ed/M }), rsa_identity: Some(RsaIdentity { $f0c9c07d1b7c6fc8547f52cac1015b4a79e2ac1a }) }) old=Untried new=Reachable
2023-06-09T12:26:27.700607Z TRACE tor_guardmgr: Known usability status guard_id=FirstHopId(Guard(Default, GuardId(RelayIds { ed_identity: Some(Ed25519Identity { 6lORxW93KRbhHFPNG0g+oBkXZbRnpwBzyfDcta7ed/M }), rsa_identity: Some(RsaIdentity { $f0c9c07d1b7c6fc8547f52cac1015b4a79e2ac1a }) }))) usable=true
2023-06-09T12:26:27.701481Z DEBUG arti_client::status: 45%: connecting successfully; directory is fetching authority certificates (8/8)
2023-06-09T12:26:27.765193Z TRACE tor_proto::circuit::reactor: Circ 1.0: handling cell: Relay(Relay { body: .. })
2023-06-09T12:26:27.765284Z TRACE tor_proto::circuit::reactor: Circ 1.0: Received meta-cell UnparsedRelayCell { body: [39, 0, 0, 0 [[[ eldied -iwj ]]]] }
2023-06-09T12:26:27.765352Z TRACE tor_hsclient::connect: SENDING VIA ONESHOT
2023-06-09T12:26:27.765363Z TRACE tor_hsclient::connect: SENDING VIA ONESHOT DONE
2023-06-09T12:26:27.765367Z TRACE tor_proto::circuit::reactor: Circ 1.0: meta handler completed with result: Ok(UninstallHandler)
2023-06-09T12:26:29.588045Z DEBUG tor_hsclient::connect: hs conn to duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion: attempt failed: error: internal error (bug) at /volatile/rustcargo/Rustup/Arti/arti/crates/tor-hsclient/src/connect.rs:725:28: RENDEZVOUS_ESTABLISHED not sent yet
This seems to suggest that send_control_message is returning sooner
than expected.
2023-06-09 17:36:48 +01:00
Ian Jackson
7be005b05d
tor-hsclient: Add a lot of debug! (fmt)
2023-06-09 17:36:48 +01:00
Ian Jackson
2a34f69c88
tor-hsclient: Add a lot of debug!
2023-06-09 17:36:48 +01:00
Ian Jackson
57f295cc21
safelog: Provide Redacted.as_inner() and .as_ref()
...
Just like for Sensitive.
2023-06-09 17:36:48 +01:00
Ian Jackson
c679e8706a
tor-hsclient: Add missing `#[source]` annotation for `Failure` error
...
Without this, the printed errors are very bland.
2023-06-09 17:36:48 +01:00
Ian Jackson
16d58d641e
tor-hsclient: Discuss gold-plated handling of RENDEZVOUS_ESTABLISHED
2023-06-09 17:36:48 +01:00
Ian Jackson
1fb4c1eb2a
tor-hsclient: Check RENDEZVOUS_ESTABLISHED *after* it should exist
...
Bugfix, without which this code wouldn't work.
Reported in
https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/1228#note_2910293
2023-06-09 17:36:48 +01:00
Ian Jackson
180f1dcb47
tor-hsclient: Discuss performance and circuit build serialisation
2023-06-09 17:36:48 +01:00
Ian Jackson
4b94b63081
tor-hsclient: Add TODO about trying multiple IPTs in parallel
2023-06-09 17:36:48 +01:00
Ian Jackson
a4755e2e46
tor-hsclient: Expand TODO about IPT selection to mention randomness
2023-06-09 17:36:48 +01:00
Ian Jackson
2f838dce15
tor-hsclient: tuning parameters: TODO about getting from the netdir
...
As per
https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/1228#note_2910286
Not thinking about this right now, but it seems like a reasonable
suggestion.
2023-06-09 17:36:48 +01:00
Ian Jackson
00d5978999
tor-hsclient: Add vacuous doc comments
...
As per
https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/1228#note_2910284
2023-06-09 17:36:48 +01:00
Ian Jackson
b2faf02170
tor-hsclient: Add a TODO for changing RendPtIdentityForError
2023-06-09 17:36:48 +01:00
Ian Jackson
bcbe66f636
tor-hsclient: Improve description of `Context`
...
Be more specific about precisely what it's the context for, and its
lifetime.
2023-06-09 17:36:48 +01:00
Ian Jackson
4e2321086f
tor-hsclient: Correct InvalidTarget error
...
Remove TODO comment; instead, replace with a comment about future use
for HS server side, inspired by
https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/1228/diffs?commit_id=ecfd39507c4e8d52788f4599d6275cab3b4a2a5f#c0123bb2f6b9a9ca50fa45886b667580a7dc951e_79_82
Do not implment `tor_error::HasKind`; the true kind depends on where
the bad information came from, which the calling code will understand.
As per
https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/1228/diffs?commit_id=d63ad3ab041460bf85defb99b31d6ebe075a0eb1#c0123bb2f6b9a9ca50fa45886b667580a7dc951e_101_110
2023-06-09 17:36:48 +01:00
Ian Jackson
742462deae
tor-hsclient: mocks: Fix new code to use mockable ClientCirc
2023-06-09 17:36:48 +01:00
Ian Jackson
6c377cdeec
tor-hsclient: mocks: Make MockableClientCirc be Debug
2023-06-09 17:36:48 +01:00
Ian Jackson
cead8e2716
tor-hsclient: mocks: Provide send_control_message
...
We were able to get as far as we have, merely because all the new code
uses just Arc<ClientCirc> rather than the mockable version.
We want to change that, so we need to mock this function too.
2023-06-09 17:36:48 +01:00
Ian Jackson
8e5814c683
tor-hsclient: Call the mock with the result circuit
2023-06-09 17:36:48 +01:00
Ian Jackson
90a48f5b52
tor-hsclient: Define representation of intro point experience data
...
This is the data structure for recording IPT outcomes and, later,
selecting a good IPT to try for a new connection.
2023-06-09 17:36:48 +01:00
Ian Jackson
c2952a5b20
tor-hsclient: Implement rendezvous setup, and retry framework
...
This contains code to:
* Iterate over introduction points
* Make multiple attempts to connect
* Apply timeouts to the various phases of each attempt
* Establish a rendezvous point
* Represent errors that occur during the above
It provides places to add:
* Implementation of the INTRODUCE1/INTRODUCE_ACK handshake
* Reception of RENDEZVOUS2 and actual end-to-end circuit establishment
* Recording of the outcome of connection attempts via particular IPTs
* Using previous IPT outcome information for selecting IPTs to try
* Tests of the new code (although more mocking will probably be needed)
Much of this code works with a fixed type ClientCirc rather than going via
the Mockable traits. That is wrong, and it will be fixed later.
2023-06-09 17:36:48 +01:00
Ian Jackson
4827ce8548
tor-error: Extend applicability of RemoteNetworkTimeout
...
We're going to use this for rendezvous completion timeout, which could
be due to basically anything.
2023-06-09 17:36:48 +01:00
Ian Jackson
f194819b9e
tor-hsclient: errors: Introduce IntroPtIndex
...
We're going to want to report about rendezvous points in errors.
We'll do this by printing the "number" of the intro point in the descriptor.
2023-06-09 17:36:48 +01:00
Ian Jackson
f40b21304d
tor-hsclient: errors: Introduce RendPtIdentityForError
...
We're going to want to report about rendezvous points in errors.
We'll be using this. And we'll want to convert it from a Relay.
2023-06-09 17:36:48 +01:00
Ian Jackson
cfbd318132
tor-hsclient: Allow dead code for now
...
The dead code warnings are a nuisance while this file is half-written.
2023-06-09 17:36:48 +01:00
Ian Jackson
02b10a147c
tor-hsclient: Mocks: Add get_or_launch_client_rend to mock pool
...
This has the wrong return type at the moment.
2023-06-09 17:36:48 +01:00
Ian Jackson
5bf917650a
tor-hsclient: Mock trait: use actual HsCircPool in non-mock impl
...
The impl was in terms of itself. Sadly, nothing warns about this bug.
2023-06-09 17:36:48 +01:00
Ian Jackson
9d22ce9f8a
tor-hsclient: impl HasKind for InvalidTarget: ..DescriptorValidationFailed
...
This basically always means we couldn't cope with the descriptor.
We need to extend the description of OnionServiceDescriptorValidationFailed
2023-06-09 17:36:48 +01:00
Ian Jackson
33c90e5b72
tor-error: Introduce define_asref_dyn_std_error and use it
...
This factors out an ad-hoc AsRef impl. We're going to want to reuse
this for another error type.
2023-06-09 17:36:48 +01:00
Ian Jackson
f2f76f4f31
tor-hsclient: Have descriptor_ensure take only &mut data.desc
...
It returns a borrow (so whatever is passed remains borrowed) and the
next phase is going to need to perhaps mutate other parts of data, so
we must pass only what is needed.
2023-06-09 17:36:48 +01:00
Ian Jackson
ccc9a35afe
tor-hsclient: Move &mut Data out of Context, and pass &Context (fmt)
2023-06-09 17:36:48 +01:00
Ian Jackson
62f3981d27
tor-hsclient: Move &mut Data out of Context, and pass &Context
...
Now Context can be usefully shared, across different
threads/tasks/functions, so long as only one of them needs to modify
`Data`.
2023-06-09 17:36:48 +01:00
Ian Jackson
065ba51f93
tor-hsclient: export InvalidTarget
...
It's going to appear in our public errors.
2023-06-09 17:36:48 +01:00
Ian Jackson
cbce8697b6
tor-hsclient: Add a TODO for InvalidTarget error
2023-06-09 17:36:48 +01:00
Alexander Færøy
ab73cf9e8b
Merge branch 'report-trait-doc-fix' into 'main'
...
Expand arti-client docs to include error reporting section
See merge request tpo/core/arti!1213
2023-06-09 13:12:48 +00:00
Alexander Færøy
f48789f494
Merge branch 'warning' into 'main'
...
Fix a silly clippy warning
See merge request tpo/core/arti!1226
2023-06-09 12:25:04 +00:00
Ian Jackson
a50016b3da
tor-hscrypto: implement Rng.gen() for RendCookie
2023-06-09 12:24:24 +01:00
Ian Jackson
dc95c7874a
tor-hscrypto: Break out REND_COOKIE_LEN
...
We need to reuse this.
2023-06-09 12:24:19 +01:00
trinity-1686a
b7fd5a6778
change path to snowflake client
2023-06-08 20:19:59 +02:00
Ian Jackson
e35cd4f115
Fix a silly clippy warning
...
Fixes
nailing-cargo +stable clippy -p tor-hsclient --all-features --all-targets
2023-06-08 15:29:06 +01:00
Alexander Færøy
174332640d
Merge branch 'hsclient-feature' into 'main'
...
hs: Fix a feature name in arti-client
See merge request tpo/core/arti!1222
2023-06-08 14:15:06 +00:00
Ian Jackson
de995c1164
Expand docs for NetDirProvider
...
Apropos a question that arose on IRC, to which I felt the answer
wasn't 100% unambiguous.
Also, reference the usual implementation (it can't be a link because
it's an upward reference).
2023-06-08 10:47:29 +01:00
trinity-1686a
b3c8004f8d
change link for more information on pts
2023-06-08 09:20:07 +02:00
Saksham Mittal
6e97b9df1f
Rephrase error handling to reporting
2023-06-08 10:26:52 +05:30
Saksham Mittal
3f7709f98d
Add error handling section in README
2023-06-08 10:26:52 +05:30
Saksham Mittal
724cab8a28
Add separate example with Report
2023-06-08 10:26:38 +05:30
trinity-1686a
73b0bc3561
remove forgoten debug line
2023-06-08 01:29:33 +02:00
trinity-1686a
9c3c7f4bc3
add anchor to amp-cache link
2023-06-08 00:28:58 +02:00
trinity-1686a
925ac7f9d7
complement general documentation on bridges and pt
2023-06-07 23:59:03 +02:00
trinity-1686a
4632d4ff44
move snowflake example to dedicated file and comment it more
2023-06-07 23:59:03 +02:00
trinity-1686a
c528443bf4
add documentation for configuring snowflake pt
2023-06-07 23:59:03 +02:00
Nick Mathewson
999f914e03
rpc: make decl_object! responsible for writing impl Object {} blocks.
2023-06-07 14:37:04 -04:00
Nick Mathewson
924dbf7d8f
Merge branch 'ipt_to_circtarget' into 'main'
...
Construct a CircTarget from an IntroPointDesc.
See merge request tpo/core/arti!1221
2023-06-07 12:35:26 +00:00
Nick Mathewson
bdb96b4ac1
hs: Fix a feature name in arti-client
...
In arti-client it's called "onion-client", not "hs-client".
2023-06-07 08:21:22 -04:00
Nick Mathewson
618ed48cea
hsclient: Create a CircTarget from an IntroPointDesc.
...
The main body of this function is written so that we can later use
it to create a CircTarget from an INTRODUCE2 message.
2023-06-07 07:55:45 -04:00
Alexander Færøy
2877140075
Merge branch 'access' into 'main'
...
hsdesc docs: Provide some accessors
See merge request tpo/core/arti!1220
2023-06-06 17:54:12 +00:00
Nick Mathewson
205b6d176c
netdir, netdoc: Add accessors for protocol version status.
...
The consensus includes a listing for clients and for relays,
saying which protocol versions are _required_ for participation on
the network, and which versions are _recommended_. We have been
parsing this, but not yet exposing it.
This commit adds accessors to expose it, since we'll need that in
order to create CircTargets for introduction points and rendezvous
points.
2023-06-06 09:06:01 -04:00
Nick Mathewson
e7ebb31009
Merge branch 'remove_arrayref' into 'main'
...
Remove use of arrayref
Closes #872
See merge request tpo/core/arti!1214
2023-06-06 00:37:31 +00:00
Nick Mathewson
362a1f8ac1
arti: Interpret socks request to mean "lookup an RPC session"
...
The actual decoding here is just a placeholder. The important part
is that we can get either a (SessionId, StreamId) tuple out of the
request, or we treat it as part of an isolation token.
This commit has a few TODOs for additional things that we'll need
in order to build out our design.
2023-06-05 14:47:38 -04:00
Nick Mathewson
291c739003
arti: Move SOCKS code for building StreamPrefs and getting a TorClient.
2023-06-05 14:46:51 -04:00
Nick Mathewson
05e9bc199b
arti: Add an alias in the SOCKS code for per-conn isolatino info.
...
This enables some small simplifications.
2023-06-05 14:46:51 -04:00
Nick Mathewson
e102a1c943
RPC: Note a possible API change in RpcMgr::new.
2023-06-05 14:46:51 -04:00
Nick Mathewson
3a93c94f4b
RPC: Make Session objects get a GlobalId.
2023-06-05 14:46:51 -04:00
Nick Mathewson
9f51bcb0be
RPC: tell the `arti` SOCKS code about an RpcMgr object.
...
It will use this to find which TorClient to use when opening a
stream.
2023-06-05 14:46:51 -04:00
Nick Mathewson
27a5074635
RPC: Give out and accept GlobalIds for appropriate objects.
2023-06-05 14:46:51 -04:00
Nick Mathewson
b7feb034a9
RPC: Let objects declare that they need a GlobalId.
2023-06-05 14:46:51 -04:00
Nick Mathewson
71e98b1a12
RPC: Implement a "global identifier" for non-session-bound IDs
...
These identifiers are actually only "global" with respect to a given
`RpcMgr`, but they should not be forgeable or reusable across RpcMgr
objects. We're going to use them so that we have a kind of identifier
for `TorClient`s that we can expose to SOCKS.
2023-06-05 14:46:51 -04:00
Nick Mathewson
d6944bf003
rpc: Slightly refactor GenIdx encoding.
2023-06-05 14:45:42 -04:00
Nick Mathewson
545984b095
rpc: Give RpcMgr a registry of connections.
...
We're going to use this to implement arti#863, which requires that
some RPC objects be globally nameable.
2023-06-05 14:45:42 -04:00
Nick Mathewson
0b2511dd2b
rpc: Move Arc::new() to RpcMgr code.
2023-06-05 14:45:42 -04:00
Ian Jackson
9a30d76ea6
hsdesc: Add minimal set of accessors for HsDesc and IntroPointDesc
2023-06-05 19:33:31 +01:00
Ian Jackson
8382927080
hsdesc docs: Don't imply that a thing has been done, which hasn't yet
2023-06-05 19:20:45 +01:00
Ian Jackson
fa324f76de
hsdesc docs: Use the definite article
...
These are (I hope) the only key matching the description. If they're
not, the description needs to be expanded.
2023-06-05 19:20:13 +01:00
Ian Jackson
660726b2f0
tor-circmgr: send_control_message: Add reference to MR discussion
2023-06-05 13:54:49 +01:00
Ian Jackson
bfe575bc64
tor-circmgr: send_control_message: Change a rename proposal
...
As per
https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/1218#note_2908119
2023-06-05 13:51:01 +01:00
Ian Jackson
9b36697282
tor-circmgr: send_control_message: Fix reference to circuit
2023-06-05 13:50:51 +01:00
Ian Jackson
e35d4e6a46
tor-circmgr: send_control_message: API change proposal
...
I am hoping we can merge this as a "TODO (Diziet)", even though I
think it may be controversial. Ie merging this doesn't represent a
decision to do as I suggest.
2023-06-05 13:19:58 +01:00
Ian Jackson
eecbf85b4c
tor-circmgr: Propose to rename `MetaCellDisposition::UninstallHandler`
2023-06-05 13:19:58 +01:00
Ian Jackson
a9ff778ba5
tor-circmgr: send_control_message: Clarify some corner cases
...
Also, no longer talk about handlers being "installed". That's not
something that's exposed by this API.
And, say that `send_control_message` can be called again only
after *`send_control_message`* returns, not when `handle_msg` has
returned `UinstallHandler`. IMO this makes more sense.
Explain that we can't maintain a continuous watch while holding a
conversation with the peer. (This is surely an API bug.)
2023-06-05 13:19:58 +01:00
Nick Mathewson
469f62a983
Remove semver.md files from 1.1.5
2023-06-01 14:08:24 -04:00
Ian Jackson
254d4c93a7
Merge branch 'bump-versions-v115' into 'main'
...
Bump crate versions in preparation for v1.1.5 release.
See merge request tpo/core/arti!1211
2023-06-01 17:32:41 +00:00
Nick Mathewson
0bf44b1393
tor-cell: remove use of arrayref
...
Closes #872
2023-06-01 11:14:48 -04:00
Nick Mathewson
dfcbd7d4ee
tor-llcrypto: remove use of arrayref
2023-06-01 10:50:25 -04:00
Nick Mathewson
744d32d554
tor-netdoc: remove use of arrayref.
2023-06-01 10:36:35 -04:00
Nick Mathewson
46d2a768a1
tor-proto: Remove use of arrayref.
2023-06-01 10:32:00 -04:00
Nick Mathewson
daf5ecc153
Bump crate versions in preparation for v1.1.5 release.
...
Generated with the following commands:
```
cargo set-version --bump minor -p tor-cell
cargo set-version --bump minor -p tor-linkspec
cargo set-version --bump minor -p tor-proto
cargo set-version --bump minor -p tor-netdoc
cargo set-version --bump minor -p tor-circmgr
cargo set-version --bump patch -p tor-cert
cargo set-version --bump patch -p tor-basic-utils
cargo set-version --bump patch -p tor-rpcbase
cargo set-version --bump patch -p tor-llcrypto
cargo set-version --bump patch -p tor-hscrypto
cargo set-version --bump patch -p tor-checkable
cargo set-version --bump patch -p tor-async-utils
cargo set-version --bump patch -p caret
cargo set-version --bump patch -p fs-mistrust
cargo set-version --bump patch -p safelog
cargo set-version --bump patch -p retry-error
cargo set-version --bump patch -p tor-error
cargo set-version --bump patch -p tor-config
cargo set-version --bump patch -p tor-events
cargo set-version --bump patch -p tor-units
cargo set-version --bump patch -p tor-rtcompat
cargo set-version --bump patch -p tor-rtmock
cargo set-version --bump patch -p tor-protover
cargo set-version --bump patch -p tor-bytes
cargo set-version --bump patch -p tor-socksproto
cargo set-version --bump patch -p tor-consdiff
cargo set-version --bump patch -p tor-netdir
cargo set-version --bump patch -p tor-congestion
cargo set-version --bump patch -p tor-persist
cargo set-version --bump patch -p tor-chanmgr
cargo set-version --bump patch -p tor-ptmgr
cargo set-version --bump patch -p tor-guardmgr
cargo set-version --bump patch -p tor-dirclient
cargo set-version --bump patch -p tor-dirmgr
cargo set-version --bump patch -p tor-hsclient
cargo set-version --bump patch -p tor-hsservice
cargo set-version --bump patch -p arti-client
cargo set-version --bump patch -p arti-rpcserver
cargo set-version --bump patch -p arti-config
cargo set-version --bump patch -p arti-hyper
cargo set-version --bump patch -p arti
cargo set-version --bump patch -p arti-bench
cargo set-version --bump patch -p arti-testing
```
2023-06-01 10:03:05 -04:00
Tor CI Release
3aef515135
fallbackdir: Update list generated on June 01, 2023
...
Signed-off-by: Tor CI Release <no-email@torproject.org>
2023-06-01 09:41:28 -04:00
Nick Mathewson
8d32e1f65f
Run fixup-features script and resolve its complaints.
2023-05-31 08:04:10 -04:00
Nick Mathewson
244ec5dce2
tor-bytes: Remove use of arrayref
...
Part of #872 : Now that const generics are in, we have better ways to
express converting slices into array-references.
2023-05-25 14:48:57 -04:00
Nick Mathewson
6703f3d52a
Merge branch 'stream_ctrl' into 'main'
...
Experimental new stream-ctrl feature
Closes #847
See merge request tpo/core/arti!1198
2023-05-24 20:01:40 +00:00
Nick Mathewson
e4758a754e
Add "TODO RPC" notes around DataStreamCtrl per review.
2023-05-24 15:25:33 -04:00
Nick Mathewson
a397ca77d9
proto: Add stream-status functionality to DataStreamCtrl.
...
There are some weaknesses and problems here; see TODO notes.
2023-05-24 15:25:33 -04:00
Ian Jackson
14b7fae113
Merge branch 'virtual_conditional' into 'main'
...
proto: Make PathEntry::Virtual feature-conditional.
See merge request tpo/core/arti!1201
2023-05-24 14:57:24 +00:00
Nick Mathewson
3d4b9aa1b7
Merge branch 'rpc-auth-and-meta' into 'main'
...
rpc: authentication and basic handle manipulation
See merge request tpo/core/arti!1200
2023-05-24 14:53:29 +00:00
Nick Mathewson
7178ab85eb
Merge branch 'real_generational_arena' into 'main'
...
rpc: Use the real generational-arena crate
See merge request tpo/core/arti!1203
2023-05-24 14:50:20 +00:00
Nick Mathewson
936387efee
rpc: Remove downgrade_owned for now
...
Rationale: Our weak-vs-strong design is a bit confused at the moment
due to concerns about deduplication and capability semantics. It's
not clear that a general "change strong to weak" method is
compatible with what we want to provide.
2023-05-24 10:15:56 -04:00
Nick Mathewson
4a9c6fba7d
rpc: Disable auth:get_rpc_protocol for now.
2023-05-24 10:15:56 -04:00
Nick Mathewson
9713e8d305
rpc: Implement functionality to remove objects from a session
...
I've made doing some design choices here:
* Reserving "rpc" as a prefix for post-authentication
functionality that is not arti-specific.
* Declaring these to be methods on the session rather than methods
on the objects themselves.
There's a problem with defining an API to drop a weak reference; see
comment in code.
2023-05-24 10:15:56 -04:00
Nick Mathewson
15a8644bf7
rpc: fix documentation for methods in Context.
2023-05-24 10:15:56 -04:00
Nick Mathewson
fef8342be3
rpc: Make the top-level returned object a "session".
...
This will make it easier to change the semantics of what exactly we
return, whether it has to be/contain a client, whether you can use
it to look up all the live objects, &etc.
2023-05-24 10:15:56 -04:00
Nick Mathewson
45b4845f3a
rpc: Remove fake_generational_arena
...
Now that generation-arena has merged [@diziet's patch] to clarify
their license, we no longer need to disable it.
[@diziet's patch]: https://github.com/fitzgen/generational-arena/pull/56
2023-05-23 13:58:08 -04:00
Nick Mathewson
24d67594d7
cell: Make EstablishRendezvous contain a RendCookie.
2023-05-23 13:33:07 -04:00
Nick Mathewson
278e2fea79
Merge branch 'socks-read-fix' into 'main'
...
Fix a local-only CPU DoS bug.
Closes #861
See merge request tpo/core/arti!1196
2023-05-23 15:28:00 +00:00
Nick Mathewson
03c81ae5aa
proto: Make PathEntry::Virtual feature-conditional.
...
This fixes a warning when building tor-proto without the
`rpc-common` feature.
2023-05-23 10:59:37 -04:00
Nick Mathewson
03cb91012d
Fix a local-only CPU DoS bug.
...
Previously, there was a bug in the way that our code used our SOCKS
implementations. If the buffer used for a SOCKS handshake became full
without completing the handshake, then rather than expanding the buffer
or closing the connection, our code would keep trying to read into the
zero-byte slice available in the full buffer forever, in a tight loop.
We're classifying this as a LOW-severity issue, since it is only
exploitable by pluggable transports (which are trusted) and by
local applications with access to the SOCKS port.
Closes #861 .
Fixes TROVE-2023-001.
Reported-By: Jakob Lell <jakob AT srlabs DOT de>
2023-05-23 10:48:27 -04:00
Nick Mathewson
0993672cb2
rpc: Implement auth:query.
2023-05-23 09:08:32 -04:00
Nick Mathewson
2798dade00
rpc: Implement the auth:get_rpc_protocol method.
2023-05-23 08:58:03 -04:00
Nick Mathewson
d745e2d866
rpc: move existing auth code to new module.
2023-05-23 08:46:19 -04:00
Ian Jackson
5ba7f31c1d
tor-hsclient: Mockable: Do concrete calls with UFCS
...
Method dispatch rules mean that if the receiver type of the actual
function changes, `self.call()` can turn into a purely-recursive call
which overflows the stack.
Async Rust doesn't have the usual warning for this situation :-(.
UFCS is clumsier but doesn't have that problem because it involves
much less magical dispatch. Instead of generating a recursive call
which overflows the stack, it fails to compile.
2023-05-23 12:47:33 +01:00
Ian Jackson
79b9a26df0
tor-hsclient: Fix MockableClientCirc for ClientCirc changes
...
ClientCirc::begin_dir_stream now takes Arc<Self>. Method resolution
rules mean that this code would just recurse, leading to a stack
overflow.
2023-05-23 12:47:33 +01:00
Nick Mathewson
0df0cf4250
proto: Create a `DataStreamCtrl` type.
...
The idea here is that we want to make DataStream visible to the
RPC system without requiring that the RPC session hold the
DataStream itself (or the Reader, or the Writer). We could solve
this problem by making _all_ the state in the DataStream shared,
but that would introduce unnecessary extra locking in our critical
path.
Instead we're creating the notion of a "control handle" that lets
you manage and observe a stream without actually owning the stream.
Right now the only supported functionality is asking for the
stream's circuit.
Part of #847
2023-05-22 11:27:44 -04:00
Ian Jackson
1fc1c269c3
Fix a docs reference to refer to HsClientIntroAuthKeypair
...
Fixes warning from
cargo -o doc --document-private-items --all-features --workspace
This was evidentlhy overlooked during recent replacement of unescorted
private keys in the code.
2023-05-22 14:30:16 +01:00
Nick Mathewson
0765412fc8
proto: Add a new experimental stream-ctrl feature.
...
(It doesn't do anything yet. It may eventually become always-on.
But for now let's make this API optional. Part of #847 )
2023-05-22 09:07:03 -04:00