* 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
* 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 a client-core crate.
* Moved config into client_core
* Socks5 client now depends on client-core/config
* Native client now mostly using client-core internals
* Socks client now uses client-core internals.
* 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
* 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
* Filled in a missing word
Co-authored-by: jstuczyn <jedrzej.stuczynski@gmail.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
* 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 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
* Changed auth token storage to use sled instead of in memory hashmap
* Filtering sled related log messages
* Catching db error on trying to load sled
* Renamed default ledger name
* The actual dependency
* Changes due to ledger no longer being async
* Extra log statement
* Missing change to current_clients method
* Another uncommited change
* Cargo lock changes
* validator: adding Diesel ORM
* validator: making sure Iron::status is always avaialable
* ibid
* validator: presence-announcement REST API
* validator: adding Diesel setup
* Removing Diesel stuff from root of monorepo
* validator: adding Diesel migrations and setup
* validator: documenting how PresenceAnnouncement is different from presence.
* validator: added Chrono crate for datetime conversions into sql
* validator: restructured the presence module
* validator: removed presence announcements from persistence
* validator: commenting topology
* Adding staking to the mixmining service
* Start of mixmining + stake service
* validator: added a bit about mixmining to README
* validator: added Iron's params crate
* validator: reorganized mixmining service and db code
* validator: no need for this .env warning
* validator: removing params parser, it's now unused
* validator: adding json body parser library for Iron
* validator: adding spelling exceptions
* validator: adding bodyparser deps
* validator: ability to (de)serialize Mixnode struct
* validator: further announcement HTTP progress
* validator: simplified announcement route
* validator: injecting database and service into handler
* validator: renaming service and db variables
* validator: using camelCase json
* validator: using base Iron handler rather than middleware handler
* validator: better error message on unexpected json parsing
* validator: adding 'location' to presence::Announcement
* comments on mixmining::Db
* validator: commenting out unused mixmining::Service methods for the moment
* validator: noting that we don't yet know how to measure capacity
* validator: comments
* validator: starting to add correct serializers in rest API
* validator: renaming a mixnode announcements
* validator: extracted route creation
* validator: going lower-case for node in "Mixnode"
* validator: removing the "announcement" model
* validator: renamed annoucements handlers
* validator: temporarily removed Chrono, remove it fully if it's not needed.
* validator: added all the needed Mixnode fields to the service model
* validator: moved models into their own file.
* validator: conversions to/from api vs service models
* validator: doing type conversions from rest to service models
* validator: unused import cleanup
* validator: rewrote mixmining service comments in light of recent thinking
* validator: some notes on type conversion tests
* wip
* validator: getting capacity from db works
* wip
* validator: eliminating borrows so we can have something pure to mutex out on
* validator: a working mutex on the mixmining service
* validator: renaming mixmining db get_capacity to capacity
* validator: making mixmining db capacity field private, using accessor
* validator: local capacity updates working
* validator: starting REST API for staking
* validator: fixing clippy warning
* validator: minor naming fixes on mixmining service
* validator: service mixnode and rest mixnode + topology conversions + tests
* validator: renaming mix_nodes to mixnodes for consistency
* validator: test fixtures for mixnode
* validator: moved service models into their own file
* validator: a properly-structured toplogy route
* validator: topology retrieval
* validator: killed test fixture warning
* validator: getting set for topology equality checks (testing purposes)
* validator: otherway conversions for topology and mixnode types
* validator: initial topology retrieval working
* validator: ditching go-ish variable name :)
* ibid
* validator: added a StakeUpdate struct to get around cargo fmt failing
* validator: commenting out struct so kill warning
* Ignoring validator vscode settings
* ibid
* ibid