1
0
mirror of https://github.com/fluencelabs/js-libp2p synced 2025-03-16 23:50:51 +00:00
js-libp2p/examples/encrypted-communications
Vasco Santos 2fd3b0a0e5
chore: examples not using secio ()
* chore: examples not using secio

* chore(docs): remove unused dep

* chore(docs): remove reference of secio in setup

* chore(docs): replace circuit secio reference with noise

Co-authored-by: Jacob Heun <jacobheun@gmail.com>
2020-10-07 16:16:36 +02:00
..
2020-10-07 16:16:36 +02:00

Encrypted Communications

libp2p can leverage the encrypted communications from the transports it uses (i.e WebRTC). To ensure that every connection is encrypted, independently of how it was set up, libp2p also supports a set of modules that encrypt every communication established.

We call this usage a connection upgrade where given a connection between peer A to peer B, a protocol handshake can be performed that gives that connection new properties.

A byproduct of having these encrypted communications modules is that we can authenticate the peers we are dialing to. You might have noticed that every time we dial to a peer in libp2p space, we always use its PeerId at the end (e.g /ip4/127.0.0.1/tcp/89765/p2p/QmWCbVw1XZ8hiYBwwshPce2yaTDYTqTaP7GCHGpry3ykWb), this PeerId is generated by hashing the Public Key of the peer. With this, we can create a crypto challenge when dialing to another peer and prove that peer is the owner of a PrivateKey that matches the Public Key we know.

1. Set up encrypted communications

We will build this example on top of example for Protocol and Stream Multiplexing. You will need the libp2p-noise module to complete it, go ahead and npm install libp2p-noise.

To add them to your libp2p configuration, all you have to do is:

const Libp2p = require('libp2p')
const { NOISE } = require('libp2p-noise')

const createNode = () => {
  return Libp2p.create({
    modules: {
      transport: [ TCP ],
      streamMuxer: [ Mplex ],
      // Attach noise as the crypto channel to use
      connEncryption: [ NOISE ]
    }
  })
}

And that's it, from now on, all your libp2p communications are encrypted. Try running the example 1.js to see it working.