| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
It's not documented anywhere ATM. I will do that in a followup MR.
|
| |
|
|
|
|
|
|
| |
The Effort type didn't have any const constructor and we had to
disassemble it to do any arithmetic. This adds a const constructor and
int/float saturating arithmetic methods.
Co-authored-by: Micah Elizabeth Scott <[email protected]>
|
| |
|
|
| |
Co-authored-by: Micah Elizabeth Scott <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In this design, the thin multiplexing layer between PoW types is always
available when onion services are in use, but the specific pow schemes
(and their dependency libraries) are gated by crate features everywhere.
There are now no new cfg() gates.
When the pow-v1 scheme is disabled, we can parse `pow-params v1` lines
into an empty type (so clients know a PoW scheme exists that might be
supported if they were configured differently). We currently don't save
the contents of unknown hsdesc items.
On the relaycell side, the hs ext module already sets a strong precedent
for keeping unrecognized data as a byte vec, and it doesn't provide a
good way to signal soft parse errors like unrecognized optional
extensions. There, the `v1` type is completely optional, and services
lacking a pow scheme suggested by a client would see one of these
'unrecognized' blobs. This isn't necessarily helpful but it fits the
rest of the design.
Co-authored-by: Micah Elizabeth Scott <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
My previous strategy here was to try and centralize hspow in one crate,
writing it like a self-contained feature. That introduced friction in
the data types, prompting the use of simplistic types at the netdoc/cell
layers and full-featured types in the optional modules.
This changes tactics, dissolving the low-level parts of tor-hspow into
tor-hscrypto and the high-level parts into hsclient/hsservice. Full
featured types are used everywhere now, but the tradeoff is that
compile-time configurability is a lot more pervasive. Anything that
knows about PoW types at all needs to be fully configured out. I took
this opportunity to try a more complete set of crate features, allowing
users to configure individual PoW schemes.
Co-authored-by: Micah Elizabeth Scott <[email protected]>
|
| |
|
|
| |
Part of #1476
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
FooKeypairSpecifier` instances
This adds the following trivial `From` instances:
- tor_hsservice: impl From<&HsIdPublicKeySpecifier> for HsIdKeypairSpecifier
- tor_hsservice: impl From<&BlindIdPublicKeySpecifier> for BlindIdKeypairSpecifier
- tor_hscrypto::pk: impl From<HsBlindIdKeypair> for HsBlindIdKey
- tor_llcrypto::pk::ed25519: impl From<ExpandedKeypair> for PublicKey
- tor_keymgr::mgr: impl From<TestKey> for TestPublicKey
- tor::hscrypto::pk: impl From<HsIdKeypair> for HsIdKey
|
| |
|
|
| |
Needed because such keys will be stored in the `OnionServiceConfig`.
|
| | |
|
| |
|
|
| |
Prompted by https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/2246#note_3045656
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
We will use this impl for parsing the authorized clients of a hidden
service running in "restricted discovery" mode.
NB: "Restricted discovery" is the new terminology for "services that
require client authorization", i.e. services that implement "client
authorization" as described in rend-spec HS-DESC-ENC[0]. Note we haven't
fully transitioned to the new terminology yet (see #1476).
Part of #1292
[0]: https://spec.torproject.org/rend-spec/hsdesc-encrypt.html#HS-DESC-SECOND-LAYER
|
| |
|
|
|
|
|
|
|
|
|
| |
I don't think we need a separate wrapper type for displaying
`HsClientDescEncKey` keys in the "C Tor format"
(`<auth-type>:<key-type>:<base32-encoded-public-key>`).
I think this should be the canonical string representation of
`HsClientDescEncKey`, so I'm removing the `display_authorized_client`
function and corresponding `DisplayAuthorizedHsClientDescEncKey` wrapper
type.
|
| |
|
|
|
|
|
| |
This will enable us to implement the `arti hsc` client subcommand for
generating client auth keys (#1281).
Closes #1291
|
| |
|
|
| |
This commit is automatically generated.
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
Part of #1166
|
| |
|
|
|
|
| |
These are now unused.
Part of #1166
|
| |
|
|
| |
Closes #1166
|
| |
|
|
|
| |
This is not a blocker; it's just a code movement or duplication
issue IIUC.
|
| |\
| |
| |
| |
| |
| |
| | |
tor-hscrypto: Return 0 if the timestamp is before the start of the TP.
Closes #1155
See merge request tpo/core/arti!1828
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
#1155 was happening because we couldn't compute the offset of the
current time from the start of the _next_ TP
(`TimePeriod::offset_within_period` expected `when` to come after the
start of the TP). `TimePeriod::offset_within_period` now returns an
offset of 0 for timestamps that come before the start of the TP, to
support computing revision counters for the descriptors uploaded to
the HsDirs from the ring associated with the next TP.
Fixes #1155
|
| |/ |
|
| |
|
|
|
| |
With this change, we no longer expose the ExpandedSecretKey
unescorted, which makes it harder to misuse the API.
|
| |
|
|
|
|
|
| |
This type was part of `hazmat`, and was no longer necessary anywhere
in our codebase. (It had one remaining user, which was easy enough
to remove.) By removing it, we remove the opportunity for using an
unescorted ed25519 private key.
|
| |
|
|
|
|
|
|
|
|
| |
This code was needed with the old version of dalek-cryptography,
which wasn't compatible with up-to-date versions of the `rand`
crate(s). But now that we've upgraded, we can drop this.
(We could have left it around and deprecated it, but we are already
making a breaking change to tor-llcrypto by upgrading
dalek-cryptography.)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The main changes that we have to adjust for are as follows:
* In x25519-dalek:
* `StaticSecret` is now behind a feature.
* `StaticSecret::new` is deprecated in favor of
`StaticSecret::random_from_rng`.
* StaticSecret no longer does its own clamping.
* In ed25519-dalek:
* `SecretKey` has (in effect) been renamed to `SigningKey`. The name
`SecretKey` is now an alias for `[u8; 32]`.
* `SigningKey` is effectively a keypair, since it contains a
public key as well.
* `PublicKey` has been renamed to `VerifyingKey`.
* The functions to extract a signing key and verifying key have
been renamed as you might expect.
* `ExpandedSecretKey` has been moved to `hasmat` and no longer
implements `sign`.
* `ExpanededSecretKey` now has as its elements a scalar and a hash
prefix.
* Various functions that took `&[u8]` now take `&[u8; N]`.
* We no longer need a wrapper for older versions of rand.
There is a single test in tor-keymgr that does not pass. I've
marked it as ignore for now, in hopes that @gabi-250 can help me
figure it out.
This closes #808. There are several changes I want to make before
we merge, however. They are marked with TODO DALEK.
|
| |
|
|
|
|
| |
IMO it is quite undesirable to have multiple copies of "gen a secret
key and make a keypair out of it". Add a TODO HSS and and a ref to
arti#1137 which is related.
|
| | |
|
| |
|
|
|
|
|
|
|
| |
1. Move `impl From<SpecificKeypair> for curve25519::StaticKeypair`
(which was just a bespoke impl for HsClientDescEncKeypair)
into the define_pk_keypair macro, so everything has it.
Currently the only other user of the curve25519_pair feature is HsSvcNtorKey.
2. Provide the reverse conversion too.
|
| | |
|
| |
|
|
|
|
|
|
|
| |
We need to add a module-global `#[allow(deprecated)]` to silence the
deprecation warnings coming from the derived `derive_more` impls of the
2 newly deprecated structs. Since we don't want the `allow` to apply to
the entire `pk` module, let's put `HsClientIntroAuthKey` and
`HsClientIntroAuthKeypair` in a separate module and apply the
`#[allow(deprecated)]` there.
|
| |
|
|
| |
Part of #1037
|
| |
|
|
|
|
|
|
|
|
|
| |
periods.
Hidden services can have multiple "active" time periods for which they
generate descriptors. We need to be able to compute the offset of a
timestamp from the start of a given time period, even if that timestamp
falls within the "next" time period (for example, when publishing
descriptors for the "previous" time period, the `when` timestamp will
fall outside the `(start, end)` range of the "previous" time period).
|
| |
|
|
|
|
| |
This is the approach from appendix F.2 in rend-spec.
Part of #1053.
|
| |
|
|
|
|
|
|
| |
Sometimes it's useful to have the ability to derive the `HsIdKey` from
the keypair (for example, if we've just read the `HsIdKeypair` from the
keystore and also need the `HsIdKey`, this `From` impl enables us to
derive the public part of the key, instead of having to read it from the
keystore).
|
| | |
|
| |
|
|
|
|
| |
This renaming aims to make it clearer that this offset is _not_ the time
between start of the epoch and the start of this time period, but rather
the delta between our epoch and the Unix epoch, in seconds.
|
| | |
|
| |
|
|
| |
We need it to sign descriptors.
|
| | |
|
| |
|
|
| |
Needed to implement `PartialEq` for `AuthorizedClientConfig`.
|
| |
|
|
| |
This was missing the conventional spaces. Noticed in passing.
|
| |
|
|
|
| |
(Also, extend our macro so that we can wrap other curve25519 keys in
this way, if we want.)
|
| |
|
|
| |
This will be used by the descriptor publisher when building descriptors.
|
| |
|
|
|
|
| |
This function will be used by the descriptor publisher (it needs to
generate descriptors, and for that it needs the subcredential, which can
be derived from the `HsBlindIdKey` and `TimePeriod`).
|
| | |
|
| | |
|