Commit Graph

220 Commits

Author SHA1 Message Date
Kim De Mey 4463a28fd6
Add discv5 max packet size limit (#505) 2022-05-02 16:49:19 +02:00
Kim De Mey 6d4b1f4fe1
Handle the decodeAuthMessage error case separatly and log to trace (#498)
* Handle the decodeAuthMessage error case separatly and log to trace

Garbage data on the TCP port (e.g. from port scanners) would
cause lots of error log messages, so log this to trace and get rid
of a (little) bit of exception usage in the process.

* Remove usage of result var in rlpxAccept and rlpxConnect

* Discv4: Add ENRRequest & ENRResponse msgs to avoid fails on these

Fix #499
These messages are not implemented yet however, but just ignored.
2022-04-04 22:31:09 +02:00
Jordan Hrycaj 944d7a4069 Mitigating RLP annoyances
why:
  Rlp errors throw exceptions which cause the dispatcher loop to
  terminate the current session immediately.

details:
  The DisconnectionReasonList message requires a single entry list.
  Observed and now accepted deviations are:

  Geth: single byte number

  bor(a Geth fork): blobbed single entry list containing a number
2022-03-24 14:49:15 +00:00
Kim De Mey e62fdfe6f1
Add bind ip and bind port for eth1 rlpx and discovery protocols (#485)
Includes some small refactor on usage of result and Nim style
according to style guide.
2022-03-15 18:08:15 +01:00
jangko 6c4d04562d
add bootnodes test 2022-02-27 11:53:11 +07:00
Kim De Mey 05ef9a8e00
More --styleCheck fixes for discoveryv5 and eth/common (#473) 2022-02-03 15:51:08 +01:00
Kim De Mey 41edd4a3f2
Add DiscoveryConfig to tune routing table ip limits and bitPerHops (#471) 2022-02-02 15:29:45 +01:00
Kim De Mey 8b7d41f596
Don't use exceptions for enr get call (#453)
The ENR code used to be solely exception based, and these
exceptions where a left-over of that. They are useless as later
calls use Result anyhow.

Additionally, they cause quite the performance loss because they
are used in the "common path" for the toTypedRecord call, e.g.
when reading the fields of ip6, tcp6 and udp6.
2021-12-21 15:09:32 +01:00
Kim De Mey 2c236f6495
Style fixes according to --styleCheck:usages (#452)
Currently only setting `--styleCheck:hint` as there are some
dependency fixes required and the compiler seems to trip over the
findnode MessageKind, findnode Message field and the findNode
proc. Also over protocol.Protocol usage.
2021-12-20 13:14:50 +01:00
Etan Kissling 5655bd035c
Merge pull request #450 from etan-status/reject-whoareyou-len
reject WHOAREYOU packets with non-empty message
2021-12-14 16:22:25 +01:00
Ștefan Talpalaru 2088d7568d
CI: test with multiple Nim version (#429)
* CI: test with multiple Nim version

* clean up the testing tree a little

* replace "unittest" with "unittest2"
2021-12-11 19:12:55 +01:00
Etan Kissling 45387ad4d2
reject WHOAREYOU packets with non-empty message
This changes the `discv5` parser to reject malformed WHOAREYOU packets
that have a non-0 message length. The extra data used to be ignored.
The `message` part of WHOAREYOU packets is always empty.
See https://github.com/ethereum/devp2p/blob/master/discv5/discv5-wire.md
2021-12-11 15:55:14 +01:00
Kim De Mey 22757db83b
Fix logDistance for BE arch and remove toBytes for NodeId (#427)
toBytes for NodeId wasn't selected by compiler byt if it does
get selected, it will fail on the test cases due to the
countdown that is done in logDistance.
Set to toBytesBE properly now and do countup, that should make
it correct also for BE architecture.

Removed toBytes to avoid confusion and avoid this one being
selected ever. The only place toBytes for NodeId was used is in
sessions.nim makeKey func and there also the stint one
(thus native endianness) was selected in Nim 1.2.x.
Native endianness is fine there as it is only an internal
representation.
2021-11-17 22:55:19 +01:00
Kim De Mey 9a1bb5e125
Make ENR $ call print the IP address prettier (#409) 2021-10-19 14:13:09 +02:00
Kim De Mey f101c83626
Enr rlp lists (#408)
* Don't fail ENR decoding when value is an RLP list

* Store RLP raw list in the ENR field pair instead

* Add ENR kList FieldKind so lists can be treated differently

Treated differently now when printing out the ENR, mentioning
that it is a raw RLP list
2021-10-19 09:26:14 +02:00
Kim De Mey 5125a438db
Make the custom distances call somewhat more accessible (#404)
And make the naming more consistent
2021-10-07 16:03:12 +02:00
Kim De Mey 1babe38226
Allow for tcp/udp ports to always be configured (#402)
* Allow for tcp/udp ports to always be configured

- Allow for an ENR to be build with tcp and udp ports also when
no IP address is provided
- In the address set-up always provide best efforttcp and udp ports
also when configuration of external ip (and/or ports) fails.
2021-09-29 18:50:23 +02:00
KonradStaniec a95b205cf7
Modify nodes verification (#398)
* Modify nodes verification

* Move nodes verification to separate module

By moving verification to separate module it can be re-used
in different contexts not only in discoveryv5.
2021-09-13 14:20:26 +02:00
KonradStaniec e219547d64
Fix lookupDistances function and make it public (#399) 2021-09-10 17:26:22 +02:00
Kim De Mey bea1f1c6a1
Clean-up routing table object constructions (#395) 2021-09-07 11:56:16 +02:00
KonradStaniec c078f85e48
Expose id and address of talkreq sender (#393) 2021-09-07 10:49:18 +02:00
KonradStaniec bfadcfbfaf
Make Routing table distance function configurable (#392) 2021-09-02 14:00:36 +02:00
Kim De Mey 9bc4fa366a
Let talkreq directly return the seq[byte] for easier API (#384) 2021-07-30 16:04:14 +02:00
Kim De Mey eb0908e33f
Push raises Defect to rlpx and accompanying changes (#373) 2021-07-14 10:35:35 +02:00
Kim De Mey 79911ed5d8
Log distance to uint16 and add public neighbours calls (#371)
* Use uint16 instead of uint32 for discv5 log distance

* Make neighboursAtDistances and neighbours calls available
2021-07-13 10:05:46 +02:00
Kim De Mey 41127eaee8
Remove portal wire code which was moved to nimbus-eth1 repo (#370) 2021-07-09 22:14:31 +02:00
kdeme e2e30247bf
Add implementation of Portal wire protocol 2021-06-09 14:57:30 +02:00
Kim De Mey 8abe6b7144
Add support for discv5 talk protocols (#357) 2021-05-20 09:49:46 +02:00
kdeme 755729c6a1
Fix several compiler warnings
Mostly replacing deprecated calls
2021-05-11 09:24:23 +02:00
kdeme 90b4724492
Adjust for chronosStrictException usage in rest of eth/p2p 2021-05-06 17:20:54 +02:00
kdeme b0474c0d40
Add raises annotations to discovery.nim
And add push raises Defect, remove unneeded gcsafe and remove
all usage of inline.
2021-04-27 21:11:54 +02:00
kdeme 9fed10de88
Allow for discv4 chronos strict usage
And group p2p tests that can be run with strict usage along the way.
2021-04-27 10:09:54 +02:00
Jamie Lokier a48687d277
discv4: Add test associated with fix to Kademlia crash (#341)
It's been confirmed that the test fails if the Kademlia crash workaround isn't
in `findNode`, and passes with it there.

Signed-off-by: Jamie Lokier <jamie@shareable.org>
2021-04-06 18:46:32 +01:00
Kim De Mey 762415319c
Add build_dcli target and add it to CI (#344)
* Add build_dcli target and add it to CI

* Fix local imports for dcli

* And use local imports for all other files too

* Use local imports in tests and rlpx protocols
2021-04-06 13:33:24 +02:00
Kim De Mey 207b783253
Nimble file cleanup and group discv5 tests to compile once (#340) 2021-03-29 15:26:34 +02:00
Kim De Mey 0700ec770f
Improve network address discovery / NAT setup (#323)
* Add search for best route and refactor setupNat to setupAddress

* Update setupAddress and make enr ports in discovery optional

* Add specific error log when no route is found
* Use bindIP if it is public
* Adjust some log levels
2021-03-02 17:13:29 +01:00
jangko dda2bec8aa turn networkId into distinct uint 2021-02-13 17:43:17 +07:00
Kim De Mey a339944bcf
Some discv5 cleanup / refactor (#326)
* Use Address in HandshakeKey

* Refactor + comments + dcli use queryRandom

* Rename types.nim to messages.nim
2021-02-02 22:47:21 +01:00
kdeme bfbad64d83 Add update of ENR on newly discovered address 2021-02-01 20:30:55 +02:00
kdeme 689eef2c11 Move IpAddress into the pong message 2021-02-01 20:30:55 +02:00
kdeme e43ee6ef9c Add ip address voting through pong responses 2021-02-01 20:30:55 +02:00
kdeme 68c9b7b3ad
Fix lookup to sort and query closest nodes 2020-12-15 13:24:57 +01:00
Kim De Mey d024ea8e85
Change invalid distance warning to debug (#316)
And also:

* move connected_peers metric so it does get added where it
shouldn't.

* imports cleanup
2020-12-14 12:21:03 +01:00
Kim De Mey b4c1391be9
Discv5 ip limits for routing table (#308)
* Add ip limits to routing table and routing table buckets

* Fix order of ip limit check and duplicate check for replacement

* Fix ip limit for node with updated ip in ENR

* Fix bug where address wouldn't update on ENR update

and update some comments

* Reuse some add/remove code in routing table

* Fix seen bug on ENR update in routing table

* Rework addNode to make sure to do address check always

and adjust some logs.

* More documentation on the ip limits in routing table [skip ci]
2020-11-26 18:20:15 +01:00
kdeme 784a868705
Add handshake tests for discovery v5.1 2020-11-13 12:34:49 +01:00
kdeme 44637cdd8e
Remove support for discovery v5.0 2020-11-13 12:33:07 +01:00
Kim De Mey 71d6dbd1b4
Discv5 small adjustments (#307)
* Use checkedEnumAssign in discv5.1

* Some renaming according to discv5 spec nomenclature
2020-10-29 22:04:37 +01:00
Kim De Mey 6bdf1b4b0f
Simplify UseDiscv51 compile flag (#305) 2020-10-19 21:04:53 +02:00
kdeme 65ed0c4850 Activate discovery v5.0 handshake tests again 2020-10-16 21:20:47 +03:00
kdeme c28cba3589 Limit request id to maximum 8 bytes 2020-10-16 21:20:47 +03:00
kdeme 301067c869 Fix RequestId encoding/decoding and improved tests
- RequestId to variable rlp byte array
- Do encoding and decoding steps in the message tests
- Do sign and verify in the nonce sign test
2020-10-16 21:20:47 +03:00
kdeme 17ef0b25e0 Update to support the latest discv5.1 specification 2020-10-16 21:20:47 +03:00
kdeme ce2cd2323c Support findnode with multiple distances in discv5.1 2020-10-16 21:20:47 +03:00
kdeme 8042d72711 Add discovery v5.1 implementation 2020-10-16 21:20:47 +03:00
Kim De Mey 6b17531d48
Improvements on dropping of challenges and handling of too large distance (#296)
- drop handshake challenge on invalid handshake
- send empty nodes reponse when distance is > 256
- misc
2020-09-30 09:43:51 +02:00
Kim De Mey c9caafb2a4
Replace memory db with lrucache for temporary storage of sessions (#292) 2020-09-10 14:49:48 +02:00
kdeme ec260dcfe4
Add & update tests 2020-07-17 22:48:14 +02:00
kdeme 1eae8f93f9
Fix empty ENR list in auth-response properly + potentially request new ENR on revalidation 2020-07-17 16:18:50 +02:00
kdeme 84fd39a8f8
Update enrs in buckets and replacement caches and fix empty ENR list in AuthResponse 2020-07-17 11:14:08 +02:00
kdeme c7ac9f54b3
Refactor the findNode code + add tests 2020-07-15 15:27:22 +02:00
Kim De Mey 7febbec673
Use brHmacDrbgGenerate for all random operations in discovery (#272) 2020-07-13 14:34:53 +02:00
Kim De Mey f3de959261
Discv5 readme (#278)
* Add discovery v5 readme + test_discv5 task

* Move hkdf tests to test file and add to nimble task
2020-07-12 23:53:27 +02:00
Kim De Mey 28a8d52308
Fix enr deserialization crash + more tests + fuzz test (#274)
* Fix enr deserialization crash + more tests + fuzz test

* CI: Install depsOnly
2020-07-11 01:28:53 +02:00
kdeme 4f3df3c9b2
Change update back to use var parameter of Record 2020-07-08 14:28:54 +02:00
kdeme d3db83fa0a
Extra test on newProtocol 2020-07-08 13:16:07 +02:00
kdeme 0fb21e72d7
Add updateEnr and allow for table constructor usage in newProtocol 2020-07-08 11:45:58 +02:00
kdeme 72420d7f17
Allow for passing in previous enr at discovery protocol creation 2020-07-07 23:39:32 +02:00
kdeme 57302fcf52
Allow for multiple enr fields to be inserted + enr update proc 2020-07-07 22:48:26 +02:00
kdeme 3bbe757fe3
Add record size check on init + add insertFieldPair call + tests 2020-07-07 17:19:15 +02:00
Jacek Sieka 484fbcab1b
use bearssl rng throughout (#265)
* use bearssl rng throughout

* seeder can fail

* imports and exports

* modules, sigh

* one more try

* move var

* even fewer thread vars

* remove out-of-date genrated files
2020-07-07 10:56:26 +02:00
Kim De Mey 9a467225fb
Add routing table metrics + tweaks + fixes (#261)
- routing table metrics + option in dcli
- only forward "seen" nodes on a findNode request
- setJustSeen & replace on ping AND findnode
- self lookup only at start
- revalidate 10x more
- use bitsPerHop (b) of 5
- small fix in resolve
- small fix in bucket split
2020-06-30 13:35:15 +02:00
kdeme 5ffe6bb8ff
Add more routing table kbucket tests 2020-06-23 17:54:12 +02:00
kdeme ba19465892
Functional replacement cache 2020-06-23 16:11:58 +02:00
kdeme ceb4a20463 Fix depth calculation for bucket splitting 2020-06-23 09:35:12 +02:00
kdeme 2d7b3440f2 make bitsPerHop configurable + add routing table tests 2020-06-23 09:35:12 +02:00
Jacek Sieka 61feae0f21
secp: requiresInit updates (#258)
* secp: requiresInit updates

* fixup!

* clean up mapconverts
2020-06-22 18:07:48 +02:00
Kim De Mey 225a9ad41c
Add predicate filter option for randomNodes (#251)
* Add predicate filter option for randomNodes

* Further ValidIpAddress fixes

* Add gcsafe/noSideEffect and add test case
2020-06-11 21:24:52 +02:00
Kim De Mey 1c77cc1d3d
Fix discovery after introduction of ValidIpAddress (#248) 2020-06-09 11:09:35 +02:00
kdeme 6dd820840a
Add simple auth header encode/decode test 2020-06-04 15:03:41 +02:00
Kim De Mey a110f091af
Discv5 eh2 (#240)
* Discv5: More error handling improvements

- More results usage and raises pragma annotations
- Remove ENode related code and adjust Node object
- Misc.

* Add sendMessage and catch RlpError when decoding WhoAreYou

* Make the receive proc exception free

Except for `Exception` hah...

* Address review comments

* And another bunch of results and raises annotations

* Send Nodes Message also on 0 nodes and remove usage of broken require
2020-05-28 10:19:36 +02:00
kdeme 17586c05d7 Remove waku protocol from the repository 2020-05-07 20:49:00 +03:00
kdeme 74df90e16d
discv5: further prepping for results error handling 2020-04-30 00:11:03 +02:00
kdeme 3a6d4336bc
Bunch of renames to use same nomenclature as spec 2020-04-27 14:13:00 +02:00
kdeme 5dec5c5a9b discv5 encoding: First steps to move to result based error handling 2020-04-24 15:51:04 +02:00
kdeme 59ba3704d6 Add resolve proc + test 2020-04-21 21:27:32 +02:00
kdeme d3c9ccea67 Fix FindNode to return nodes with specific distance + tests 2020-04-21 21:27:32 +02:00
Jacek Sieka fd6caa0fdc
Rlp experimental (#227)
* rlp: remove experimental features

* avoid range library

* trie: avoid reference-unsafe bitrange type
2020-04-20 20:14:39 +02:00
Zahary Karadjov ee5c9619e0
Fix test_discoveryv5 2020-04-15 05:55:08 +03:00
Zahary Karadjov 6513cd9eff
Allow application-supplied ENR fields in discv5 2020-04-15 05:32:52 +03:00
Kim De Mey 99c68d40f7
Fix idAtDistance (#219) 2020-04-14 11:08:08 +02:00
Jacek Sieka 0b110f3287
Secp more refactor (#211)
* simplify some modules

* mark several modules with raises
* fix clearing of keys in auth.nim
* fix keyfile case dropping off
* fix keyfile stream storage
* uuid should be output in lowercase

* enode: simplify API
2020-04-06 18:24:15 +02:00
Jacek Sieka ac5bbe4d3d
keys: get rid of deprecated calls (#213) 2020-04-04 18:44:01 +02:00
Jacek Sieka 02d661503f
refactor secp interface (#203)
* avoid mix of exceptions and return codes
* introduce result
* use deprecated compatibility API to avoid big-bang refactoring
* loosely based on nim-libp2p secp as well as the rust-secp256k1 wrapper
* oh, boy does our secp256k1 wrapper need updating - we're _far_
behind...
2020-04-02 14:40:29 +02:00
kdeme 65bed1ae94 discv5: allow creation of node without external ip 2020-03-30 13:32:15 +02:00
kdeme 0a33744d1c Add IP checks on ENRs received from Nodes packet 2020-03-27 14:38:45 +01:00
kdeme c3f23e5912 Minor adjustments to store bootnode records + deletion test 2020-03-24 16:45:15 +02:00
kdeme 713f2e3bff Add getNode and tests for findNode and getNode 2020-03-24 16:45:15 +02:00
kdeme f46f9f1418 discv5: add start call 2020-03-24 16:45:15 +02:00
kdeme 00c2bac465 Fix logDist and add test 2020-03-24 16:45:15 +02:00
kdeme 267a06dbe6 discv5: Pass bootstrap nodes and add deletion of nodes 2020-03-24 16:45:15 +02:00