nim-libp2p
nim-libp2p copied to clipboard
[WIP] Roadmap
Cryptography
- [x] NIST P-256/384/521 curves, required to perform DHE.
- [x] NIST P-256/384/521 ECDSA required for peer identification.
- [x] RSA required for peer identification
- [x] ED25519 required for peer identification
- [x] SECP256k1 required for peer identification
- [x] ASN.1 DER encoder/decoder for (ECDSA, RSA public keys/private keys/signatures)
- [x] Key interface
- [x] Curve25519 required for noise-libp2p
- [x] Poly1305 required for noise-libp2p
- [x] ChaCha20 required for noise-libp2p
https://github.com/libp2p/go-libp2p-crypto
Network Interfaces
- [x] https://github.com/libp2p/go-addr-util
Storage and utility
- [ ] https://github.com/libp2p/go-libp2p-peerstore
- [x] https://github.com/libp2p/go-libp2p-peer
Protocol negotiation
- [x] https://github.com/multiformats/go-multistream
- [x] https://github.com/libp2p/go-conn-security-multistream
Stream Multiplexer
- [x] https://github.com/libp2p/go-stream-muxer
- [x] https://github.com/libp2p/go-mplex (baseline multiplexer supported by most implementations)
- Additional multiplexers that different implementations support - can be implemented when the need arises
- [ ] https://github.com/whyrusleeping/go-smux-yamux
- [ ] https://github.com/whyrusleeping/go-smux-muxado
- [ ] https://github.com/whyrusleeping/go-smux-multiplex
- [ ] https://github.com/whyrusleeping/go-smux-spdystream
Connections
- [x] https://github.com/libp2p/go-conn-security
- [x] https://github.com/libp2p/go-libp2p-secio
- [x] noise-libp2p (https://github.com/libp2p/specs/issues/195, https://github.com/libp2p/specs/pull/202)
Connection manager
- [x] https://github.com/libp2p/go-libp2p-interface-connmgr
Transports
- [x] https://github.com/libp2p/go-libp2p-transport
- [x] https://github.com/libp2p/go-libp2p-transport-upgrader
- [x] https://github.com/libp2p/go-tcp-transport
Protocols
- [x] https://github.com/libp2p/go-libp2p-protocol
- [x] https://github.com/libp2p/go-libp2p/tree/master/p2p/protocol/identify (base protocol)
- [x] https://github.com/libp2p/go-libp2p/tree/master/p2p/protocol/ping (base protocol)
- [x] https://github.com/libp2p/go-libp2p-pubsub (required for Ethereum2)
Name resolution
- [ ] ~~https://github.com/libp2p/go-libp2p-kad-dht (this is actually protocol as all the above).~~
- [x] Discovery version 5
Metrics
- [x] https://github.com/libp2p/go-libp2p-metrics
- [x] https://github.com/libp2p/go-flow-metrics
Swarm
This is actually main loop of any libp2p node which performs all the logic
- [ ] https://github.com/libp2p/go-libp2p-swarm
Related eth2 ticket: https://github.com/ethresearch/p2p/issues/4
About Curve25519 if @cheatfate and @dryajov agree I can refactor the current ed25519 code which actually includes (not sure if entirely) Curve25519, although very scalar code. We also need X25519 for noise btw, again depends on Curve25519. Let me know what you guys think please. Or actually including a more optimized C library (since C is nim's assembly) could be another option.
@sinkingsugar we do not need optimized C library, because we already has one - nim-bearssl
.
Also i'm not sure what you mean under word refactor
, because ed25519
is constant-time implementation and so i'm not sure it needs any refactor process. For some reason ed25519 is not part of TLS standard, while Curve25519 is, so i'm not sure is ed25519 implementation is enough to build Curve25519.
@cheatfate I used bearssl fully anyway so don't worry about it!
Closing this since almost everything on this list is done now (except exotic multiplexers)