status-node-manager/libs/waku_utils/waku_pair.nim

56 lines
1.8 KiB
Nim

import
# Nimble packages
chronicles,
chronos,
libp2p/crypto/crypto,
eth/[keys, p2p/discoveryv5/enr],
nimcrypto/utils,
# Nimble packages - Waku
waku/[waku_core, waku_discv5],
waku/waku_noise/noise_types,
waku/node/[peer_manager, waku_node],
waku/common/logging,
# Local modules
./waku_handshake_utils,
./waku_node
type WakuPairResult* = object
wakuNode*: WakuNode
wakuHandshakeResult*: HandshakeResult
proc wakuPair*(rng: ref HmacDrbgContext, qr, qrMessageNameTagHex: string,
wakuPort, discv5Port: uint16,
requiredConnectedPeers: int,
pubSubTopic: PubsubTopic
): Future[WakuPairResult] {.async.} =
# Initiator static/ephemeral key initialization and commitment
let initiatorInfo = initAgentKeysAndCommitment(rng)
# Read the QR
let
qrMessageNameTag = fromHex(qrMessageNameTagHex)
# We set the contentTopic from the content topic parameters exchanged in the QR
contentTopic = initContentTopicFromQr(qr)
notice "Initializing Waku pairing", wakuPort = wakuPort,
discv5Port = discv5Port
notice "Initial information parsed from the QR", contentTopic = contentTopic,
qrMessageNameTag = qrMessageNameTag
var initiatorHSResult: HandshakeResult
# Start nwaku instance
let node = await startWakuNode(rng, wakuPort, discv5Port,
requiredConnectedPeers)
# Perform the handshake
initiatorHSResult = await initiatorHandshake(rng, node, pubSubTopic,
contentTopic, qr,
qrMessageNameTag,
initiatorInfo)
return WakuPairResult(wakuNode: node,
wakuHandshakeResult: initiatorHSResult)