diff --git a/README.md b/README.md index 1561b675f..d71267ad1 100644 --- a/README.md +++ b/README.md @@ -22,15 +22,15 @@ So far the code has untested or under-tested implementations of: * the ntor protocol * the relay crypto algorithm [cruddy vesion] * parsing and encoding all the cell types (except for hs-related - ones). [cruddy version] + ones) * parsing and validating ed25519 certificates * parsing and validating router descriptors * parsing and validating microdescriptors * parsing and validating microdesc consensuses + * link authentication (client->server type) Before I share it, I think it needs more work on: - * link authentication (client->server type) * refactoring everywhere * lots of tests * a sensible api for cell types @@ -123,7 +123,7 @@ implementations `tor-llcrypto`: Wrappers and re-imports of cryptographic code that Tor needs in various ways. Other crates should use this crate, and not actually -use any crypto crates directly +use any crypto crates directly. `tor-bytes`: Byte-by-byte encoder and decoder functions and traits. We use this to safely parse cells, certs, and other byte-oriented things. @@ -134,12 +134,23 @@ this to safely parse cells, certs, and other byte-oriented things. system. Less complete than the one in Tor's current src/rust, but more simple. -`tor-netdoc`: Parsing for Tor's network documents. Currently only handles -routerdescs. Underdocumented and too big. needs splitting. +`tor-netdoc`: Parsing for Tor's network documents. Underdocumented and too +big. + +`tor-linkspec`: Traits and types for connecting and extending to Tor relays. `tor-proto`: Functions to work with cell types, handshakes, and other aspects -of the Tor protocol. Underdocumented, too big, needs -refactoring. +of the Tor protocol. This crate is NOT ALLOWED to have any dependencies on +specific TLS libraries or async environments; those have to happen at a +higher level. + +`tor-netdir`: Wraps tor-netdoc to expose a "tor network directory" interface. +Doesn't touch the network itself. Right now it only handles microdesc-based +directories, and reads all its information from disk. + +`client-demo`: A simple tor client program. Right now it requires that you +already have a datadir full of directory information. It does a client->relay +handshake, then stops. ## Intended architecture diff --git a/TODO b/TODO index 001886e34..a8895c65f 100644 --- a/TODO +++ b/TODO @@ -27,13 +27,14 @@ X Won't do. - Primitive crypto - Wrap x25519 in a trait - - Use signature trait for ed25519. + - Use signature trait for ed25519? + - Ed25519 needs to have an "identity" non-parsed version, maybe. o Add RSA-pkcs1 signature support o Add RSA-pem encode/decode support - RSA-oaep, if supported. o test vectors for sha1 - - test vectors for sha2 - - test vectors for sha3/shake + o test vectors for sha2 + o test vectors for sha3/shake - RSA test vectors as needed - Higher level crypto @@ -54,9 +55,7 @@ X Won't do. one rustls has? Like "untrusted"? - Consider using a writer trait that's agnostic about whether it's writing into an expanding Vec or a fixed slice. - - Good API for "make this cell and encrypt it and write it" - - Good API for "take a cell out of a Reader" and stuff that comes after. - - Async variant of that API? + - Use "bytes" crate more natively in tor-bytes trait. - Tests - For all cell types - for all relay cell types @@ -70,20 +69,8 @@ X Won't do. - Directory parsing stuff . Parsing backend - o Get tokens - Match tor's actual token behavior? - o Remove extraneous hoohaw. - o Get a "parse into a vector of maybe-tokens" thing. - o Get a "validate that every must-token is there" thing. - o Macro for making a Keyword type. - - Parse descriptors - o Parse into a reasonable routerdesc object. - - Parse a pile of them. - o Check ed signatures on router descriptors - o Check rsa signatures on descriptors - o Check additional invariants? - Parse consensus directories, both variants. - - Parse microdescs - Apply consensus diffs - Directory encoding stuff @@ -110,7 +97,7 @@ X Not currently planning to do: X Link protocol v2 (renegotiation) - Unsure if planning to do: - - Link protocol v3 (short circuit IDs, PK comparison) + X Link protocol v3 (short circuit IDs, PK comparison) - Linkauth 1 (RSA-SHA256-TLSSecret) - Parsing votes - HSv2 directory support