indra

package module
v0.1.16 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 1, 2023 License: Unlicense Imports: 1 Imported by: 0

README

Indra Routing Protocol Logo

Indranet

GoDoc

Lightning powered distributed virtual private network for anonymising traffic on decentralised protocol networks.

White Paper

About

The ubiquitous use of encryption on the internet took some time to happen, there was a time when the US government defined them as munitions and claimed export restrictions, and famously the PGP project broke this via the First Amendment, by literally printing the source code on paper and then posting it, it became recognised that code, and encryption, are protected speech.

With ubiquitous 128 and 256-bit AES encryption now in use by default, the content of messages is secure. However, the volume of messages and endpoints of signals are still useful intelligence data, enabling state level actors to attack internet users and violate their privacy and threaten their safety.

Protecting against this high level attack the main network currently doing this work is the Tor network. However, this system has many flaws, and in recent times its centralised relay registry has come under sustained attack by DDoS (distributed denial of service) attacks.

More specifically, the protocol has a severe bottleneck in its rendezvous model for linking two outbound 3 hop connections, attackers flood these with requests, and legitimate users cannot get a word in edgewise. Ironically they built a proof of work protocol to give users a way to get ahead of the spammers.

Indra eliminates this problem by using a constantly changing set of introducers and the actual bidirectional anonymity is done by the parties themselves via the source routing headers plus pairs of hops added in front of the recipient's routing header.

One of the big problems of the Tor network is its weak network effect. There is no incentive for anyone to run nodes on the network, and worse, the most common use case is tunneling back out of the network to anonymize location, is largely abused and led to a lot of automated block systems arising on many internet services to prevent this abuse.

Indra makes it possible for anyone to offer this kind of outbound relaying service if they want to, but with compensation for doing so, which covers the risk they take as being the visible origin point of shady traffic from time to time.

Indra uses source routing, similar to the Lightning Network and an early but not really quite viable mixnet design called HORNET. The problem with source routed mixnets is that they are very vulnerable to spam. Indra eliminates this problem by no traffic being relayed without first paying a small forward payment to relays for this traffic, thus creating an economic disincentive for spam if the profit is below the routing fees.

fin

notes:

([a-zA-z0-9\_\-\.][a-zA-z0-9\/\_\-\.]+)\:([0-9]+) is a regex that matches the relative file paths in the log output. $1 and $2 from this are the relative path and the line number.

Documentation

Overview

Package indra is the root of the repository for the Indra distributed VPN, containing mainly the version information for included executables to use for information and identification on the network.

See pkg/github.com/indra-labs/indra/cmd/indra for the main server executable.

Put invocations to run all the generators in here check pkg/github.com/indra-labs/indra/cmd/bumper to add them, and they will automatically run with:

$ go generate .

which will run all these generators below and finish with a go install.

Index

Constants

View Source
const (
	// URL is the git URL for the repository.
	URL = "github.com/indra-labs/indra"
	// GitRef is the gitref, as in refs/heads/branchname.
	GitRef = "refs/heads/master"
	// ParentGitCommit is the commit hash of the parent HEAD.
	ParentGitCommit = "88d5987612e40fe889fa0f8ac553a9b3a22c01ff"
	// BuildTime stores the time when the current binary was built.
	BuildTime = "2023-07-01T20:50:47+01:00"
	// SemVer lists the (latest) git tag on the release.
	SemVer = "v0.1.16"
	// Major is the major number from the tag.
	Major = 0
	// Minor is the minor number from the tag.
	Minor = 1
	// Patch is the patch version number from the tag.
	Patch = 16
)

Variables

View Source
var CI = "false"

Functions

func Version

func Version() string

Version returns a pretty printed version information string.

Types

This section is empty.

Directories

Path Synopsis
cmd
bumper
Bumper is a tool for creating version information to be placed at the repository root of a project.
Bumper is a tool for creating version information to be placed at the repository root of a project.
docker
Package docker contains tools for Docker deployments of Indra and components.
Package docker contains tools for Docker deployments of Indra and components.
docker/release
Package release is a tool to create and publish docker images.
Package release is a tool to create and publish docker images.
indra
Indra is a low latency, source routed mixnet distributed virtual private network protocol.
Indra is a low latency, source routed mixnet distributed virtual private network protocol.
indra/seed
Package seed is a non-relay node that simply accepts and propagates peer advertisment gossip to clients and relays on the network.
Package seed is a non-relay node that simply accepts and propagates peer advertisment gossip to clients and relays on the network.
indra/seed/client
Package client is a client for the seed RPC service for remote unlock and management.
Package client is a client for the seed RPC service for remote unlock and management.
pkg
ad
cfg
crypto/ciph
Package ciph manages encryption ciphers and encrypting blobs of data.
Package ciph manages encryption ciphers and encrypting blobs of data.
crypto/nonce
Package nonce provides a simple interface for generating standard AES encryption nonces that give strong cryptographic entropy to message encryption.
Package nonce provides a simple interface for generating standard AES encryption nonces that give strong cryptographic entropy to message encryption.
crypto/sha256
Package sha256 provides a simple interface for single and double SHA256 hashes, used with secp256k1 signatures, message digest checksums, cloaked public key "addresses" and so on.
Package sha256 provides a simple interface for single and double SHA256 hashes, used with secp256k1 signatures, message digest checksums, cloaked public key "addresses" and so on.
p2p
rpc
util/b32/based32
Package based32 provides a simplified variant of the standard Bech32 human readable binary codec
Package based32 provides a simplified variant of the standard Bech32 human readable binary codec
util/b32/codecer
Package codecer is the interface definition for a Human Readable Binary Transcription Codec
Package codecer is the interface definition for a Human Readable Binary Transcription Codec
util/slice
Package slice is a collection of miscellaneous functions involving slices of bytes, including little-endian encoding for 16, 32 and 64-bit unsigned integers used for serialisation length prefixes and system entropy based hash chain padding.
Package slice is a collection of miscellaneous functions involving slices of bytes, including little-endian encoding for 16, 32 and 64-bit unsigned integers used for serialisation length prefixes and system entropy based hash chain padding.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL