* Split text and binary client apis
* Very initial attempt at new serialization
* Defined ser+de for Recipient and ReplySURB
* Response errors
* builds with changes
* Working WS API + moved to separate crate
* updated python examples
* Fixed parsing bug
* Updated go examples
* Updated rust examples
* formatting
* Removed unused imports
* dependency updates
* Further dependency changes
* nymsphinx exposingn framing only if not in wasm32
* Cargo lock changes before develop merge
* Pending work
* Actually sending and receiving websocket from rust!
* more WIP
* Initial wasm client + establishing shared key with gateway!
* Splitting and sending a message!
* WIP
* WIP
* Initial wasm-ification of the gateway client
* Passing reconstruction result to js callback!
* Initial WASM cleaning pass
* Dependency pruning
* Moved processing loop to received_processor + at least ack unwrappingn
* Post merge fix
* Kinda updated react example
* Old print statement removed
* Removed yarn.lock
* Fixed building issue for other clients
* Fixed travis test command
* Adding ordered buffer, moving socks5 request location into common
* Moved utils to available-reader
* Starting to use OrderedMessage in socks5 requests
* Renamed available reader module
* Initially included sequence numbers
* OrderedBuffer fix
* Buffer bug fix + extra test
* Bug fixes
* Removed test from an old experiment
Co-authored-by: Dave <futurechimp@users.noreply.github.com>
* Updated built dependency
So that it wouldn't fail on nwindows
* Concurrent RW client-side
* Draft of a ProxyRunner
* Super experimental proxy runner for provider
Very much WIP
* Extracting shared code + cleanup
* Logging cleanup
* Removed redundant close request
* Added Display for FragmentIdentifier
* AckDelayQueue as wrapper for DelayQueue
* First pass on ack controller
* Controller very initially incorporated into the client
* Cleanup
* Using socks5 build.rs
* Extra (temporary) log statements
* Decreased logging levels
* Merge branch 'develop' into feature/socks5-no-core
common/client-libs/directory-client/models/src/presence/topology.rs
* More diagnostics
* WIP commit, not properly multithreaded
* WIP, now sort of multithreaded but errors all over the place
* Replaced expect with a return
* Adding abort on panic
* Removing a few noisy prints
* Another ack-related expect replaced
* Moved profile.dev annotation to workspace cargo.toml
* Semi-stabilised socks
* Assigning connection shared key post registration (#309)
* Sending return address with connect request
* WIP commit
* Reading all available data on reader + removed duplicate code
Co-authored-by: jstuczyn <jedrzej.stuczynski@gmail.com>
* Split text and binary client apis
* Very initial attempt at new serialization
* Defined ser+de for Recipient and ReplySURB
* Response errors
* builds with changes
* Working WS API + moved to separate crate
* updated python examples
* Fixed parsing bug
* Updated go examples
* Updated rust examples
* formatting
* Removed unused imports
* Removed accidentally left panic call
* Adding the beginnings of a socks5 crate
* Removing unused import
* Adding built.rs
* Figured out test failure, stuck a note in detailing under what conditions it fails.
* Added lib
* wip on the way to compile
* First compile with much of the client in place
* Comment reflow to 80 lines
* Changed Socks5 client help message
* Latest changes to from develop applied to socks5 client
* Minor cleanup on unused code
* Adding snafu dependency
* Adding socks library
* Getting socks into the module structure
* Tokio conversion for socks code nearly completed.
* Starting traffic controllers again
* Bitcoin SP starting to breathe with Socks5 proxy. Responses not yet being sent.
* Adding in some hugely verbose print action so we can see things happening
* WIP refactor of socks code.
* Renamed structs to be more rubyish
* Refactored the run command a bit.
* handle_client doesn't need to be public
* Starting to split the handle method up into smaller, refactorable chunks
* Renamed a test
* Finished initial refactor
* Minor cleanup
* Made a few notes for my future self
* Being a bit more explicit in authtentication test
* Ensuring that user/password authentication attempts fail if that auth mode is off
* Documentation
* Refactord types into a types module
* Sending the request ID across and reading the response when it comes back.
* Added the request_id to the response header
* Adding exception handling to websocket send
* Semi-working...
* Removing non-functional examples.
* Minor output clarification
* Adding a Socks5 service provider
* Websocket connection is now being made.
* Added some simple and ungraceful websocket connection error handling
* Renamed socks5_proxy back to proxy
* ibid
* Nicer websocket start method
* Receiving messages via websocket
* Socks requests work in the simple case, SSL requests don't (yet).
* Minor cleanup, renaming variables and moving private functions around
* Comments on try_read_request
* Moved some code around
* Removed commented code and printlns
* Comments sp request
* Commented response data read
* Changing Request to Connection
* ibid
* Added a controller and split connection / request parsing
* Built out error handling on requests a bit
* Initial router action
* Request deserialization tests back in action
* Request constructors
* Constructor for controller
* Renamed message_router to controller
* Starting to build out the responses
* Returning proxied connection data
* Moving towards new Socks5 request crate
* Sending Socks5 multi-part requests through mixnet
* Removed the detritus of exploratory coding.
* Breaking the socks client read loop when empty bytes are read
* Documenting the message format for serialized socks requests
* Returning a response from the socks proxy
* Removing unused import
* Removing more detritus
* Restarting loop if no response is received
* The off-by-one change that fixed it all
* Removing unused response.rs module
* Removed unused import
* Comment cleanup
* More detritus
* Cleaning...
* Docs for socks5-requests
* Using the simple-socks5-requests crate Response in the socks5 client
* Removing unused error types
* Split request/response into their own files and wrote more tests
* Removing temporary README notes
* Renamed all instances of request_id to connection_id
* Docs on Connection struct
* Caving in to connecting inside the constructor for the moment
* Fixing up comments on socks5 service provider start
* Simplified errors in the Socks5 requests crate
* Flattened service provider module hierarchy a bit.
* Removed println
* Comment to explain return on timeout
* Logging controller connect errors
* Renamed websocket reads and writes to make them a bit more understandable
* Renamed TodoError to ConnectionError
* Logging errors instead of panicking on connection read/write failures
* Fixed error handling in controller
* Removing dead comments
* Cargo fmt applied
* Removing print statements
* Removed more comments, prints, etc
Co-authored-by: jstuczyn <jedrzej.stuczynski@gmail.com>
* Changed identity keypair to use ed25519
* Encryption key is now x25519 based + compatibiltiy with sphinx
* Pathing and import fixes
* Moved all asymmetric keys to sub-module in crypto
* Extracted aes to separate module
* kdf module in crypto
* Ability to perform diffie hellman on encryption keys
* ecdsa on identity keys
* Extremely rough and incomplete registration handshake
* Authentication primitives
* Creating new random authenticationIV
* Wrapper type for the derived shared key
* Removed AuthToken in favour of using SharedKey for authentication
* Gateway identity keys
* Registration handshake without error mapping
* Gateway address in client config
* Added extra key for gateway presence
* Updated pemstore to work on borrows instead
* Gateway client trying to perform the handshake
* Gateway changes to allow for handshake and shared key
* Debug trait on sharedkey
* native client using updated gateway client
* Slightly updated gateway API
* Minor cleanup
* Fixed pemstore to correctly save multiple keypairs
* Gateway actually deriving shared key during handshake
* Gateway sending correct mid-handshake message
* Missing quotation mark in client config template
* Fixed template for correct shared key serialization
* Fixed gateway authentication
* Fixed tests
* Using correct gateway key when converting to sphinx node
* "get_all_clients" takes them from gateways as opposed to providers now
* cargo fmt
* Renamed pemstore methods
* Unused import
* Encryption of forward requests between client and gateway
* Updated sphinx dependency to use public revision
* Sending 'error' on handshake processing error
* Removed some dead code
* Dead code I forgot to remove before
* Extracted AckAes128Key into a struct
* Slight pemstore revamp allowing for symmetric key store
* ibid.
* PemStorableKey for SharedKey
* Introduced single location responsible for key management for client
* WIP
* Sphinx version update
* Stop using NodeAddressBytes for two distinct and confusing purposes
* Abstracting away SocketAddr from sphinx forwarding
* Passing the bool for reply surbs
* Attack plan for replies + encryption
* Comment + removed variable binding
* ReplySURB usage
* Topology import in nymsphinx
* Sphinx version update
* Changed 'Recipient' to contain client's encryption key
* Message preparation taking shape!
* reply surb also containing the encryption key
* Very initial message receiver
* Sphinx version update
* A possibly working way of receiving surbs
* Fixed incorrect field name in client config template
* camel casing all request arguments
* Renamed and moved `MessageMode` to more appropriate file
* Restored reconstruction tests
* Removed dead code from chunking
* Made rust examples compilable
* reply SURB key storage
* Replies as an InputMessage
* Forgotten commented code
* No retransmission processing for cover or replies
* Received reply processing
* Renamed client pathfinder to something more appropriate
* Made HasherOutputSize public
* Added key store path to config
* Reply surb attaching key digest when used
* Changes due to previous renaming
* Removed comment
* Fixed insert_encryption_key
* Assigning initial value of key store path
* Computing key digest with correct algorithm
* Initial and presumably temporary request serialization
* hacky way of introducing 'FragmentIdentifier' for replies
* Moved responsibility of reply encryption, padding, etc, to message preparer
* Optional recipient in try_get_valid_topology_ref
* Handling new reply surbs with acks and padding
* Updated go and python examples to include replies in text and binary cases
* Updated rust examples + binaryserverresponse
* Helpers in rust examples
* And updated JS example
* Moved shared key generation function to crypto crate
* Cover traffic encryption!
* hmac computation in crypto
* Updated aes imports due to new dependencies
* hkdf made more generic
* crypto cleanup + algorithms in params
* Clippy cleanup pass
* Generating encryption+mac shared keys between client and gateway
* MACs attached to forward requests to gateway
* Gateway messages encrypted and mac'd
* Lowered logging level
* compiler warning cleanup
* Some minor cleanup
* Generic stream cipher
* Generic shared key derivation + algorithm definitions
* Project-wide AES clean-up
* Comment fix
* Removed commented imports
* Updated comments
* Fixed topology test fixture
* VersionFilterable for HashMap
* Removed NymTopology trait in favour of concrete type
* Removed providers from NymTopology
* Made gateway conversion use reference, similarly to mixes
* Using more concrete types in topology rather than b58 strings
* Allowing gateways to have DNS-resolvable mix listener address
* Error propagation for gateway key conversion
* Changed identity keypair to use ed25519
* Encryption key is now x25519 based + compatibiltiy with sphinx
* Pathing and import fixes
* Moved all asymmetric keys to sub-module in crypto
* Extracted aes to separate module
* kdf module in crypto
* Ability to perform diffie hellman on encryption keys
* ecdsa on identity keys
* Extremely rough and incomplete registration handshake
* Authentication primitives
* Creating new random authenticationIV
* Wrapper type for the derived shared key
* Removed AuthToken in favour of using SharedKey for authentication
* Gateway identity keys
* Registration handshake without error mapping
* Gateway address in client config
* Added extra key for gateway presence
* Updated pemstore to work on borrows instead
* Gateway client trying to perform the handshake
* Gateway changes to allow for handshake and shared key
* Debug trait on sharedkey
* native client using updated gateway client
* Slightly updated gateway API
* Minor cleanup
* Fixed pemstore to correctly save multiple keypairs
* Gateway actually deriving shared key during handshake
* Gateway sending correct mid-handshake message
* Missing quotation mark in client config template
* Fixed template for correct shared key serialization
* Fixed gateway authentication
* Fixed tests
* Using correct gateway key when converting to sphinx node
* "get_all_clients" takes them from gateways as opposed to providers now
* cargo fmt
* Renamed pemstore methods
* Unused import
* Encryption of forward requests between client and gateway
* Updated sphinx dependency to use public revision
* Sending 'error' on handshake processing error
* Removed some dead code
* Reducing ACK packet size to exactly what we need
* Made fragmentidentifier into an array
* Padding all sent messages so they'd be split into constant length packets
* Ability to send sphinx packets of different sizes + more efficient decoding
* Closing connection on connection corruption
* Missing semicolons
* Missing license notices
* Default for packetsize
* Split nymsphinx
* Replaced Mutex with RwLock for TopologyAccessor + impl Deref
* Sphinx update + import cleanup
* Moved packet_sizes file
* Updated NymTopology API
* sphinx version bump
* Missing license notice
* nymsphinx-params crate
* Changes due to ibid.
* Chunking rework to allow variable size fragments
* Initial ack crate
* Version bump to new dev build
* Cargo lock changes
* random_route_to_gateway by node address
* exposing getting read permit
* Very initial draft on ack control
* Correctly dereferencing out of topology read permit
* All pending changes + compilation todo!s
* Restricted scope of deref on TopologyAccessorInner
* Type path alias for generate_key
* Derived traits for MessageChunker
* Ack control starting to take shape!
* Awaiting callbacks
* Most of work done on acks. Now to wire it all together
* Import cleanup
* rng generalization
* Connected real traffic together; only acks from gateway left
* Removed redundant things from nymsphinx::utils
* nymsphinx-cover crate
* Ack-related fields in client config
* Decreased packet store log level
* Restored forward sphinx request
* Slight adjustements to surb acks
* Changed TopologyReadPermit from type alias into a struct
* Changes due to ibid.
* Sphinx version upgrade
* Gateway being able to understand and handle acks
* Special Cover FragmentIdentifier + removal of dead code
* Initial packet router for gateway client
* Kill client if it fails to send to gateway too many times
* Cover messages with acks
* Moved out gateway client errors
* Ignoring cover traffic acks
* Changes in ack control
* Another sphinx version upgrade
* websocket handler delegating message chunking
* Using config defined ack wait additions
* Other minor changes I should have been more dilligent with splitting
* Import path fix
* sphinx_receiver => mixnet_receiver
* Missing renamed variable instance
* Updated aes-ctr to 0.4.0
* Removed concept of 'unfragmented' single fragment
* Replay fragments detection
* Long method split
* typo
* Cleaner client init
* Fixed race condition
* Fixed similar issue for retransmission
* Cargo fmt
* Minor clenaup
* Ability to send sphinx packets of different sizes + more efficient decoding
* Closing connection on connection corruption
* Missing semicolons
* Missing license notices
* Default for packetsize
* validator: fixing a warning, untestify this when you need it for real code
* webassembly: minor readme changes.
* README changes in wasm
* Updated wasm version
* clients/webassembly: security vuln updates
* typo fix
* WIP commit
* Significantly simplified the API
* Changed switch to have default branch
* Managed to get rid of `this` bind
* Moved 'Recipient' definition
* Examples update
* Slightly more generalised 'try_from_string' for recipient
* Updated to use client@gateway addressing
* Updated tests
Co-authored-by: Dave Hrycyszyn <futurechimp@users.noreply.github.com>
* Typo I've never noticed before
* Sphinx version update
* Updated 'address' to be 'recipient' (i.e. address + gateway)
* Updated websocket examples to use the updated structure
* Updated wasm code to work with new gateway and updated the example
* cargo fmt
* Fixed test by ensuring destination is present at a gateway
* Updated hardcoded default port
* ibid. to correct value
* Some clippy and compiler warning fixes
* Removed healthchecker from the client
* Cargo fmt issue after 100 explicit saves.........
* Changes accidentally removed in previous PR
* Initial draft for ClientsHandler
* Created listener struct
* typo
* Stateful websocket connection handler
* Exposing modules
* Depdendencies updates
* Moved listener to correct file + made start consume listener
* Main starting new listener
* Catching sigint
* Copied client storage from provider into gateway
* Exposed websocket listener type for nicer import path
* Defined websocket message receiver concrete type
* Client ledger struct without implementation
* ClientsHandler using more concrete types
* Mixnet sender + receiver and exposed listener type
* Handling mix packets
* Ability to forward mix packets
* "starting" both listeners at main
* Depedencies updates
* Initial type definitions for client messages
* Initial "gateway-requests" with AuthToken
* ibid.
* Restored most of ledger's functionalities
* Ability to retrieve all messages regardless of rate limit
* ClientsHandler request handling logic
* Required 'new' dependencies
* Main changes required for compilation
* PacketProcessor getting private key pointer
* "moved" types into gateway requests crate
* Moved and renamed types
* ibid.
* Added required serde_json dependency
* Skeleton for websocket request handling
* helper methods on ServerResponse
* WebSocket Handler pushing received mix messages directly to client
* PacketForwarder returning JoinHandle alongside the channel
* ClientsHandler following the same pattern
* Made websocket listener start method consistent with mix listener
* Syntax error + formatting
* Websocket handler having access to mix forwarder
* Minimal binary request parsing
* Implicitly derived std::error::Error on GatewayRequestsError
* Handling of all websocket requests
* Types import cleanup
* Updated placeholder fields
* Everything put into main
* Missing license notices
* Cleaned up unused code
* Copied and did initial minor changes to commands and config
* It's actually gateway
* Gateway sending its regular presence to directory server
* Re-organisation of gateway code + Gateway struct
* Updated provider argument description
* Restored duplicate ip check without importing NymTopology trait
* Moved hardcoded values into config
* Cargo fmt
* Compilation errors in other crates due to topology adjustments
* Test fixes
* Initial gateway-client
* Seemingly working version with bunch of hardcoded and temporary values
* cargo fmt
* Removed provider poller
* Updated config with gateway values instead of provider
* Gateway address including ws
* Removed hardcoded gateway address
* Properly skipping loop cover messages
* Updated log filter with tokio tungstenite related modules
* Updated sphinx version used
* Very minor cleanup
* unused import
* directory-client: removing explicit type definitions
* clients/webassembly: ugly commit, removes dependency on HTTP crates
...at the cost of copying quite a bit of NymTopology-related stuff into
the WebAssembly client. I'll make an issue to refactor that later.
* A more helpful hint in the error message when websocket connection fails.
* Removing superfluous JavaScript, route checking now happens in Rust
* Moved `nym-sphinx-wasm` into `wasm` folder and renamed its examples
* A proposal for some structural cleanup
* desktop client: beginning of a Rust example for chunking.
* Simplifying desktop client readme
* Tarting up webassembly README
* A more visual webassembly client example
* clients/webassembly: grouping a few things into named functions for clarity
* clients/webassembly: put URLs at top of file, prepping for drop-down action
* mixnode + provider run: changed startup error messages a bit
* clients/webassembly: scrolling from the bottom in the demo
* Initial set of re-exported sphinx types and constants
* Removed direct sphinx dependency from healthchecker
* Crypto module
* nym-client no longer needing sphinx
* All common modules
* mix-client until removed
* Sfw-provider no longer depending on sphinx crate
* Mixnode no longe depending directly on sphinx crate
* Ibid. for sfw-provider-requests
* Corrected import inside nymsphinx itself
* wasm client no longer needing direct sphinx dependency
* Required gateway change due to re-exporting constants in one place
* Missing import path changes in tests
* Removed direct dependency on curve25519 from wasm client
* Lock file changes
* log statement for forwarding traffic
* Mixnode logging intent to forward packet
* Presence logging level decrease + making things less public
* Default adjustments + human readable equivalents in comments
* Do not immediately refresh topology on start
* Moved auth_token to seperate file
* Extracted check_id as separate type
* Changes due to move of auth_token and making provider client mutable
* New way of serialization provider requests/responses
* Initial attempt of using new provider client
* Moved requests and responses to separate modules
* Moved serialization to separate files
* Extracted readers and writers to io related modules
* Extra tests + bug fixes
* Updated tokio dependency to require correct features
* typo
* Easier conversion of requests/responses into enum variants
* Renamed 'read_be_u16' to better show its purpose
* Serialization related tests and fixes
* Tests for async_io + fixes
* Future considerations
* Configurable max request size
* Configurable max response size for client
* Removed debug drop implementations
* Removed debug print statement
* Changes to lock file
* Added license notifications
* Cargo fmt