Skip to content
This repository was archived by the owner on Jan 30, 2026. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions src/mix_node.nim
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
import curve25519, config, utils
import libp2p/[crypto/crypto, crypto/curve25519, crypto/secp, multiaddress, peerid]
import options, os, std/streams, strformat, strutils
import options, os, std/streams, std/tempfiles, strformat, strutils

const MixNodeInfoSize* =
addrSize + (2 * FieldElementSize) + (SkRawPublicKeySize + SkRawPrivateKeySize)
const MixPubInfoSize* = addrSize + FieldElementSize + SkRawPublicKeySize
const nodeInfoFolderPath* = "nodeInfo"
const pubInfoFolderPath* = "pubInfo"
var
nodeInfoFolderPath {.threadvar.}: string
pubInfoFolderPath {.threadvar.}: string

proc initTempDirectories*() =
nodeInfoFolderPath = createTempDir("nodeInfo_", "")
pubInfoFolderPath = createTempDir("pubInfo_", "")

type MixNodeInfo* = object
multiAddr: string
Expand Down Expand Up @@ -102,7 +107,7 @@ proc readMixNodeInfoFromFile*(index: int): Option[MixNodeInfo] =
except IOError, OSError:
return none(MixNodeInfo)

proc deleteNodeInfoFolder*() =
proc deleteNodeInfoFolder*() {.gcsafe.} =
if dirExists(nodeInfoFolderPath):
removeDir(nodeInfoFolderPath)

Expand Down Expand Up @@ -169,7 +174,7 @@ proc readMixPubInfoFromFile*(index: int): Option[MixPubInfo] =
except IOError, OSError:
return none(MixPubInfo)

proc deletePubInfoFolder*() =
proc deletePubInfoFolder*() {.gcsafe.} =
if dirExists(pubInfoFolderPath):
removeDir(pubInfoFolderPath)

Expand Down
12 changes: 7 additions & 5 deletions src/mixnet_transport_adapter/poc_ping.nim
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,12 @@ proc createSwitch(libp2pPrivKey: SkPrivateKey, multiAddr: MultiAddress, nodeInde
.withRng(crypto.newRng())
.withMplex(inTimeout, outTimeout)
.withTransport(
proc(upgrade: Upgrade): Transport =
let wrappedTransport = TcpTransport.new(transportFlags, upgrade)
MixnetTransportAdapter.new(
wrappedTransport, upgrade, nodeIndex, numberOfNodes
)
proc(upgrade: Upgrade): Transport {.gcsafe.} =
{.gcsafe.}:
let wrappedTransport = TcpTransport.new(transportFlags, upgrade)
MixnetTransportAdapter.new(
wrappedTransport, upgrade, nodeIndex, numberOfNodes
)
)
.withNoise()
.build()
Expand All @@ -43,6 +44,7 @@ proc createSwitch(libp2pPrivKey: SkPrivateKey, multiAddr: MultiAddress, nodeInde
proc setUpNodes(numberOfNodes: int): (seq[SkPrivateKey], seq[MultiAddress]) =
# This is not actually GC-safe
{.gcsafe.}:
initTempDirectories()
initializeMixNodes(numberOfNodes)

var libp2pPrivKeys: seq[SkPrivateKey] = @[]
Expand Down