| Commit message (Collapse) | Author | Age | Files | Lines | ||
|---|---|---|---|---|---|---|
| ... | ||||||
| * | Clarify documentation for ReadState fields | Dirkjan Ochtman | 2026-01-19 | 1 | -9/+11 | |
| | | ||||||
| * | Replace Packet::decode with ReadState::decode_packet | bjorn3 | 2026-01-19 | 1 | -48/+30 | |
| | | | | | | This handles accessing the internal decrypted buffer that the user doesn't otherwise have access to. | |||||
| * | Handle NEW_KEYS and set encryption key for ReadState | bjorn3 | 2026-01-19 | 3 | -9/+64 | |
| | | ||||||
| * | Implement support for decryption in ReadState | bjorn3 | 2026-01-19 | 3 | -40/+200 | |
| | | ||||||
| * | Move packet parsing out of ReadState::packet | bjorn3 | 2026-01-19 | 2 | -72/+32 | |
| | | | | | | | | | | Outside of a couple very narrow cases like the initial packet and (when strict key exchange is used) the rest of the key exchange, there is never a single fixed packet type which can be received at any given point in time. As such immediately parsing the packet to a fixed type in ReadState::packet doesn't help much, while it does complicate the code a bit. | |||||
| * | Introduce Completion enum | bjorn3 | 2026-01-19 | 2 | -11/+16 | |
| | | ||||||
| * | Fix validation of the identification string | bjorn3 | 2026-01-19 | 1 | -1/+3 | |
| | | | | | | The max size of the identification string is 255 including CRLF, not 256 excluding CRLF. | |||||
| * | Truncate buffer when reading from stream | Dirkjan Ochtman | 2026-01-17 | 2 | -10/+10 | |
| | | ||||||
| * | Loop in case identification is incomplete | Dirkjan Ochtman | 2026-01-17 | 1 | -3/+10 | |
| | | ||||||
| * | Simplify version exchange error handling | Dirkjan Ochtman | 2026-01-17 | 1 | -23/+15 | |
| | | ||||||
| * | Untangle buffering data and decoding it | Dirkjan Ochtman | 2026-01-17 | 2 | -9/+14 | |
| | | ||||||
| * | Attach read() to ReadState | Dirkjan Ochtman | 2026-01-17 | 2 | -22/+25 | |
| | | ||||||
| * | Abstract I/O stream | Dirkjan Ochtman | 2026-01-17 | 2 | -11/+10 | |
| | | ||||||
| * | Move some code around | Dirkjan Ochtman | 2026-01-15 | 3 | -119/+118 | |
| | | ||||||
| * | Port KeyExchange state to centralized I/O | Dirkjan Ochtman | 2026-01-15 | 2 | -28/+43 | |
| | | ||||||
| * | Add abstraction for the handshake hash | Dirkjan Ochtman | 2026-01-15 | 2 | -20/+35 | |
| | | ||||||
| * | Deduplicate read buffer truncation | Dirkjan Ochtman | 2026-01-15 | 2 | -12/+10 | |
| | | ||||||
| * | Use generic packet decoding more | Dirkjan Ochtman | 2026-01-15 | 2 | -20/+24 | |
| | | ||||||
| * | Track packet payload through decoding | Dirkjan Ochtman | 2026-01-15 | 1 | -8/+32 | |
| | | ||||||
| * | Replace KeyExchange::for_new_session() with Default impl | Dirkjan Ochtman | 2026-01-15 | 2 | -6/+2 | |
| | | ||||||
| * | Extract I/O from EcdhKeyExchange state handling | Dirkjan Ochtman | 2026-01-15 | 3 | -65/+119 | |
| | | ||||||
| * | Avoid RawKeySet lifetime dependency on session ID | Dirkjan Ochtman | 2026-01-15 | 1 | -23/+23 | |
| | | ||||||
| * | Support for derived encryption keys larger than the SHA256 output (#84) | bjorn3 | 2026-01-15 | 1 | -24/+64 | |
| | | ||||||
| * | Take semver-compatible dependency updates | Dirkjan Ochtman | 2026-01-14 | 1 | -31/+31 | |
| | | ||||||
| * | Reduce indirection some more | Dirkjan Ochtman | 2026-01-05 | 1 | -19/+25 | |
| | | ||||||
| * | Clean up indirection with KeyDerivation | Dirkjan Ochtman | 2026-01-05 | 1 | -13/+6 | |
| | | ||||||
| * | Use enum type to represent key input | Dirkjan Ochtman | 2026-01-05 | 1 | -8/+32 | |
| | | ||||||
| * | Extract named KeyDerivation type | Dirkjan Ochtman | 2026-01-05 | 1 | -13/+27 | |
| | | ||||||
| * | Tweak key type names | Dirkjan Ochtman | 2026-01-05 | 1 | -8/+8 | |
| | | ||||||
| * | Keep struct and impl together | Dirkjan Ochtman | 2026-01-05 | 1 | -7/+7 | |
| | | ||||||
| * | Move key types down to fit in with top-down ordering | Dirkjan Ochtman | 2026-01-05 | 1 | -44/+44 | |
| | | ||||||
| * | Send server version after receiving client version | bjorn3 | 2026-01-05 | 1 | -7/+7 | |
| | | | | | | | Wireshark gets confused when it happens the other way around even though the ssh protocol allows this. Wireshark will treat whichever side sends the version banner first as the client. | |||||
| * | Fix server to client keys in RawKeys::derive | bjorn3 | 2026-01-05 | 1 | -3/+3 | |
| | | ||||||
| * | Make *KeyExchange::advance consume self | bjorn3 | 2026-01-05 | 1 | -2/+2 | |
| | | | | | | This enforces that the key exchange can't be arbitrarily restarted in the middle. | |||||
| * | Add code to derive encryption keys | bjorn3 | 2026-01-05 | 2 | -7/+70 | |
| | | | | | This doesn't yet implement the actual encryption/decryption yet. | |||||
| * | Don't try to listen when --generate-host-key is passed | bjorn3 | 2026-01-05 | 1 | -1/+2 | |
| | | | | | | | This way you can generate a host key without the ssh server immediately starting. This way you can for example run it from a post-install script or a systemd service that only runs on the first boot. | |||||
| * | Replace hash_mpint_bytes with with_mpint_bytes | bjorn3 | 2025-12-19 | 2 | -7/+7 | |
| | | ||||||
| * | Couple refactors to hash_mpint_bytes | bjorn3 | 2025-12-19 | 1 | -10/+10 | |
| | | | | | | * Rename argument * Replace always succeeding <[_]>::get() with slice indexing. | |||||
| * | Introduce hash_mpint_bytes helper | bjorn3 | 2025-12-19 | 2 | -16/+20 | |
| | | | | | | We need to hash bytestrings as mpint multiple times during the key exchange. | |||||
| * | Store the generated host key on the disk | bjorn3 | 2025-12-19 | 2 | -6/+29 | |
| | | | | | | | Instead of generating one on every connection. This avoids having to either remove the host key again after every test or having to tell the ssh client to not store host fingerprints. | |||||
| * | Generate host key once when starting | bjorn3 | 2025-12-19 | 3 | -13/+21 | |
| | | ||||||
| * | Bump MSRV to 1.83 (for File::create_new()) | Dirkjan Ochtman | 2025-12-19 | 5 | -5/+6 | |
| | | ||||||
| * | Initial stab at a CONTRIBUTING.md | Dirkjan Ochtman | 2025-12-19 | 1 | -0/+359 | |
| | | ||||||
| * | Integrate with systemd's listenfd protocol | bjorn3 | 2025-12-19 | 3 | -4/+129 | |
| | | | | | | | | | This will be useful for servers in the future, but is already useful during development when using the systemfd executable by allowing you to already run the ssh client while the server is still compiling. Systemfd keeps the port open and as soon as the server has started it will accept the pending connection attempt. | |||||
| * | Actually make lints apply | Dirkjan Ochtman | 2025-12-12 | 4 | -19/+18 | |
| | | ||||||
| * | Take semver-compatible dependency updates | Dirkjan Ochtman | 2025-12-12 | 1 | -18/+18 | |
| | | ||||||
| * | Enable more lints | Dirkjan Ochtman | 2025-12-12 | 1 | -4/+16 | |
| | | ||||||
| * | Avoid warning about unused macro input | Dirkjan Ochtman | 2025-12-12 | 1 | -1/+1 | |
| | | ||||||
| * | Avoid warning due to relaxed aws-lc-rs API | Dirkjan Ochtman | 2025-11-24 | 1 | -1/+1 | |
| | | ||||||
| * | Take semver-compatible dependency updates | Dirkjan Ochtman | 2025-11-24 | 1 | -454/+124 | |
| | | ||||||
