nim-libp2p icon indicating copy to clipboard operation
nim-libp2p copied to clipboard

[WIP] Roadmap

Open cheatfate opened this issue 6 years ago • 4 comments

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

cheatfate avatar Feb 06 '19 15:02 cheatfate

Related eth2 ticket: https://github.com/ethresearch/p2p/issues/4

arnetheduck avatar Feb 27 '19 13:02 arnetheduck

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 avatar Feb 13 '20 05:02 sinkingsugar

@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 avatar Feb 17 '20 12:02 cheatfate

@cheatfate I used bearssl fully anyway so don't worry about it!

sinkingsugar avatar Feb 17 '20 13:02 sinkingsugar

Closing this since almost everything on this list is done now (except exotic multiplexers)

Menduist avatar Sep 27 '22 14:09 Menduist