Files
go-sam-go/sigs.md

32 KiB

sam3

-- import "github.com/go-i2p/sam3"

Library for I2Ps SAMv3 bridge (https://geti2p.com)

Usage

const (
	Sig_NONE                 = "SIGNATURE_TYPE=EdDSA_SHA512_Ed25519"
	Sig_DSA_SHA1             = "SIGNATURE_TYPE=DSA_SHA1"
	Sig_ECDSA_SHA256_P256    = "SIGNATURE_TYPE=ECDSA_SHA256_P256"
	Sig_ECDSA_SHA384_P384    = "SIGNATURE_TYPE=ECDSA_SHA384_P384"
	Sig_ECDSA_SHA512_P521    = "SIGNATURE_TYPE=ECDSA_SHA512_P521"
	Sig_EdDSA_SHA512_Ed25519 = "SIGNATURE_TYPE=EdDSA_SHA512_Ed25519"
)
var (
	// Suitable options if you are shuffling A LOT of traffic. If unused, this
	// will waste your resources.
	Options_Humongous = []string{"inbound.length=3", "outbound.length=3",
		"inbound.lengthVariance=1", "outbound.lengthVariance=1",
		"inbound.backupQuantity=3", "outbound.backupQuantity=3",
		"inbound.quantity=6", "outbound.quantity=6"}

	// Suitable for shuffling a lot of traffic.
	Options_Large = []string{"inbound.length=3", "outbound.length=3",
		"inbound.lengthVariance=1", "outbound.lengthVariance=1",
		"inbound.backupQuantity=1", "outbound.backupQuantity=1",
		"inbound.quantity=4", "outbound.quantity=4"}

	// Suitable for shuffling a lot of traffic quickly with minimum
	// anonymity. Uses 1 hop and multiple tunnels.
	Options_Wide = []string{"inbound.length=1", "outbound.length=1",
		"inbound.lengthVariance=1", "outbound.lengthVariance=1",
		"inbound.backupQuantity=2", "outbound.backupQuantity=2",
		"inbound.quantity=3", "outbound.quantity=3"}

	// Suitable for shuffling medium amounts of traffic.
	Options_Medium = []string{"inbound.length=3", "outbound.length=3",
		"inbound.lengthVariance=1", "outbound.lengthVariance=1",
		"inbound.backupQuantity=0", "outbound.backupQuantity=0",
		"inbound.quantity=2", "outbound.quantity=2"}

	// Sensible defaults for most people
	Options_Default = []string{"inbound.length=3", "outbound.length=3",
		"inbound.lengthVariance=0", "outbound.lengthVariance=0",
		"inbound.backupQuantity=1", "outbound.backupQuantity=1",
		"inbound.quantity=1", "outbound.quantity=1"}

	// Suitable only for small dataflows, and very short lasting connections:
	// You only have one tunnel in each direction, so if any of the nodes
	// through which any of your two tunnels pass through go offline, there will
	// be a complete halt in the dataflow, until a new tunnel is built.
	Options_Small = []string{"inbound.length=3", "outbound.length=3",
		"inbound.lengthVariance=1", "outbound.lengthVariance=1",
		"inbound.backupQuantity=0", "outbound.backupQuantity=0",
		"inbound.quantity=1", "outbound.quantity=1"}

	// Does not use any anonymization, you connect directly to others tunnel
	// endpoints, thus revealing your identity but not theirs. Use this only
	// if you don't care.
	Options_Warning_ZeroHop = []string{"inbound.length=0", "outbound.length=0",
		"inbound.lengthVariance=0", "outbound.lengthVariance=0",
		"inbound.backupQuantity=0", "outbound.backupQuantity=0",
		"inbound.quantity=2", "outbound.quantity=2"}
)

Examples and suggestions for options when creating sessions.

var PrimarySessionSwitch string = PrimarySessionString()
var SAM_HOST = getEnv("sam_host", "127.0.0.1")
var SAM_PORT = getEnv("sam_port", "7656")

func ExtractDest

func ExtractDest(input string) string

func ExtractPairInt

func ExtractPairInt(input, value string) int

func ExtractPairString

func ExtractPairString(input, value string) string

func GenerateOptionString

func GenerateOptionString(opts []string) string

func GetSAM3Logger

func GetSAM3Logger() *logrus.Logger

GetSAM3Logger returns the initialized logger

func IgnorePortError

func IgnorePortError(err error) error

func InitializeSAM3Logger

func InitializeSAM3Logger()

func PrimarySessionString

func PrimarySessionString() string

func RandString

func RandString() string

func SAMDefaultAddr

func SAMDefaultAddr(fallforward string) string

func SetAccessList

func SetAccessList(s []string) func(*SAMEmit) error

SetAccessList tells the system to treat the AccessList as a whitelist

func SetAccessListType

func SetAccessListType(s string) func(*SAMEmit) error

SetAccessListType tells the system to treat the AccessList as a whitelist

func SetAllowZeroIn

func SetAllowZeroIn(b bool) func(*SAMEmit) error

SetAllowZeroIn tells the tunnel to accept zero-hop peers

func SetAllowZeroOut

func SetAllowZeroOut(b bool) func(*SAMEmit) error

SetAllowZeroOut tells the tunnel to accept zero-hop peers

func SetCloseIdle

func SetCloseIdle(b bool) func(*SAMEmit) error

SetCloseIdle tells the connection to close it's tunnels during extended idle time.

func SetCloseIdleTime

func SetCloseIdleTime(u int) func(*SAMEmit) error

SetCloseIdleTime sets the time to wait before closing tunnels to idle levels

func SetCloseIdleTimeMs

func SetCloseIdleTimeMs(u int) func(*SAMEmit) error

SetCloseIdleTimeMs sets the time to wait before closing tunnels to idle levels in milliseconds

func SetCompress

func SetCompress(b bool) func(*SAMEmit) error

SetCompress tells clients to use compression

func SetEncrypt

func SetEncrypt(b bool) func(*SAMEmit) error

SetEncrypt tells the router to use an encrypted leaseset

func SetFastRecieve

func SetFastRecieve(b bool) func(*SAMEmit) error

SetFastRecieve tells clients to use compression

func SetInBackups

func SetInBackups(u int) func(*SAMEmit) error

SetInBackups sets the inbound tunnel backups

func SetInLength

func SetInLength(u int) func(*SAMEmit) error

SetInLength sets the number of hops inbound

func SetInQuantity

func SetInQuantity(u int) func(*SAMEmit) error

SetInQuantity sets the inbound tunnel quantity

func SetInVariance

func SetInVariance(i int) func(*SAMEmit) error

SetInVariance sets the variance of a number of hops inbound

func SetLeaseSetKey

func SetLeaseSetKey(s string) func(*SAMEmit) error

SetLeaseSetKey sets the host of the SAMEmit's SAM bridge

func SetLeaseSetPrivateKey

func SetLeaseSetPrivateKey(s string) func(*SAMEmit) error

SetLeaseSetPrivateKey sets the host of the SAMEmit's SAM bridge

func SetLeaseSetPrivateSigningKey

func SetLeaseSetPrivateSigningKey(s string) func(*SAMEmit) error

SetLeaseSetPrivateSigningKey sets the host of the SAMEmit's SAM bridge

func SetMessageReliability

func SetMessageReliability(s string) func(*SAMEmit) error

SetMessageReliability sets the host of the SAMEmit's SAM bridge

func SetName

func SetName(s string) func(*SAMEmit) error

SetName sets the host of the SAMEmit's SAM bridge

func SetOutBackups

func SetOutBackups(u int) func(*SAMEmit) error

SetOutBackups sets the inbound tunnel backups

func SetOutLength

func SetOutLength(u int) func(*SAMEmit) error

SetOutLength sets the number of hops outbound

func SetOutQuantity

func SetOutQuantity(u int) func(*SAMEmit) error

SetOutQuantity sets the outbound tunnel quantity

func SetOutVariance

func SetOutVariance(i int) func(*SAMEmit) error

SetOutVariance sets the variance of a number of hops outbound

func SetReduceIdle

func SetReduceIdle(b bool) func(*SAMEmit) error

SetReduceIdle tells the connection to reduce it's tunnels during extended idle time.

func SetReduceIdleQuantity

func SetReduceIdleQuantity(u int) func(*SAMEmit) error

SetReduceIdleQuantity sets minimum number of tunnels to reduce to during idle time

func SetReduceIdleTime

func SetReduceIdleTime(u int) func(*SAMEmit) error

SetReduceIdleTime sets the time to wait before reducing tunnels to idle levels

func SetReduceIdleTimeMs

func SetReduceIdleTimeMs(u int) func(*SAMEmit) error

SetReduceIdleTimeMs sets the time to wait before reducing tunnels to idle levels in milliseconds

func SetSAMAddress

func SetSAMAddress(s string) func(*SAMEmit) error

SetSAMAddress sets the SAM address all-at-once

func SetSAMHost

func SetSAMHost(s string) func(*SAMEmit) error

SetSAMHost sets the host of the SAMEmit's SAM bridge

func SetSAMPort

func SetSAMPort(s string) func(*SAMEmit) error

SetSAMPort sets the port of the SAMEmit's SAM bridge using a string

func SetType

func SetType(s string) func(*SAMEmit) error

SetType sets the type of the forwarder server

func SplitHostPort

func SplitHostPort(hostport string) (string, string, error)

type DatagramSession

type DatagramSession struct {
}

The DatagramSession implements net.PacketConn. It works almost like ordinary UDP, except that datagrams may be at most 31kB large. These datagrams are also end-to-end encrypted, signed and includes replay-protection. And they are also built to be surveillance-resistant (yey!).

func (*DatagramSession) Accept

func (s *DatagramSession) Accept() (net.Conn, error)

func (*DatagramSession) Addr

func (s *DatagramSession) Addr() net.Addr

func (*DatagramSession) B32

func (s *DatagramSession) B32() string

func (*DatagramSession) Close

func (s *DatagramSession) Close() error

Closes the DatagramSession. Implements net.PacketConn

func (*DatagramSession) Dial

func (s *DatagramSession) Dial(net string, addr string) (*DatagramSession, error)

func (*DatagramSession) DialI2PRemote

func (s *DatagramSession) DialI2PRemote(net string, addr net.Addr) (*DatagramSession, error)

func (*DatagramSession) DialRemote

func (s *DatagramSession) DialRemote(net, addr string) (net.PacketConn, error)

func (*DatagramSession) LocalAddr

func (s *DatagramSession) LocalAddr() net.Addr

Implements net.PacketConn

func (*DatagramSession) LocalI2PAddr

func (s *DatagramSession) LocalI2PAddr() i2pkeys.I2PAddr

Returns the I2P destination of the DatagramSession.

func (*DatagramSession) Lookup

func (s *DatagramSession) Lookup(name string) (a net.Addr, err error)

func (*DatagramSession) Read

func (s *DatagramSession) Read(b []byte) (n int, err error)

func (*DatagramSession) ReadFrom

func (s *DatagramSession) ReadFrom(b []byte) (n int, addr net.Addr, err error)

Reads one datagram sent to the destination of the DatagramSession. Returns the number of bytes read, from what address it was sent, or an error. implements net.PacketConn

func (*DatagramSession) RemoteAddr

func (s *DatagramSession) RemoteAddr() net.Addr

func (*DatagramSession) SetDeadline

func (s *DatagramSession) SetDeadline(t time.Time) error

Sets read and write deadlines for the DatagramSession. Implements net.PacketConn and does the same thing. Setting write deadlines for datagrams is seldom done.

func (*DatagramSession) SetReadDeadline

func (s *DatagramSession) SetReadDeadline(t time.Time) error

Sets read deadline for the DatagramSession. Implements net.PacketConn

func (*DatagramSession) SetWriteBuffer

func (s *DatagramSession) SetWriteBuffer(bytes int) error

func (*DatagramSession) SetWriteDeadline

func (s *DatagramSession) SetWriteDeadline(t time.Time) error

Sets the write deadline for the DatagramSession. Implements net.Packetconn.

func (*DatagramSession) Write

func (s *DatagramSession) Write(b []byte) (int, error)

func (*DatagramSession) WriteTo

func (s *DatagramSession) WriteTo(b []byte, addr net.Addr) (n int, err error)

Sends one signed datagram to the destination specified. At the time of writing, maximum size is 31 kilobyte, but this may change in the future. Implements net.PacketConn.

type I2PConfig

type I2PConfig struct {
	SamHost string
	SamPort string
	TunName string

	SamMin string
	SamMax string

	Fromport string
	Toport   string

	Style   string
	TunType string

	DestinationKeys i2pkeys.I2PKeys

	SigType                   string
	EncryptLeaseSet           string
	LeaseSetKey               string
	LeaseSetPrivateKey        string
	LeaseSetPrivateSigningKey string
	LeaseSetKeys              i2pkeys.I2PKeys
	InAllowZeroHop            string
	OutAllowZeroHop           string
	InLength                  string
	OutLength                 string
	InQuantity                string
	OutQuantity               string
	InVariance                string
	OutVariance               string
	InBackupQuantity          string
	OutBackupQuantity         string
	FastRecieve               string
	UseCompression            string
	MessageReliability        string
	CloseIdle                 string
	CloseIdleTime             string
	ReduceIdle                string
	ReduceIdleTime            string
	ReduceIdleQuantity        string
	LeaseSetEncryption        string

	//Streaming Library options
	AccessListType string
	AccessList     []string
}

I2PConfig is a struct which manages I2P configuration options

func NewConfig

func NewConfig(opts ...func(*I2PConfig) error) (*I2PConfig, error)

func (*I2PConfig) Accesslist

func (f *I2PConfig) Accesslist() string

Accesslist generates the I2CP access list configuration string based on the configured access list

func (*I2PConfig) Accesslisttype

func (f *I2PConfig) Accesslisttype() string

Accesslisttype returns the I2CP access list configuration string based on the AccessListType setting

func (*I2PConfig) Close

func (f *I2PConfig) Close() string

Close returns I2CP close-on-idle configuration settings as a string if enabled

func (*I2PConfig) DestinationKey

func (f *I2PConfig) DestinationKey() string

DestinationKey returns the DESTINATION configuration string for the SAM bridge If destination keys are set, returns them as a string, otherwise returns "TRANSIENT"

func (*I2PConfig) DoZero

func (f *I2PConfig) DoZero() string

DoZero returns the zero hop and fast receive configuration string settings

func (*I2PConfig) EncryptLease

func (f *I2PConfig) EncryptLease() string

EncryptLease returns the lease set encryption configuration string Returns "i2cp.encryptLeaseSet=true" if encryption is enabled, empty string otherwise

func (*I2PConfig) FromPort

func (f *I2PConfig) FromPort() string

FromPort returns the FROM_PORT configuration string for SAM bridges >= 3.1 Returns an empty string if SAM version < 3.1 or if fromport is "0"

func (*I2PConfig) ID

func (f *I2PConfig) ID() string

ID returns the tunnel name as a formatted string. If no tunnel name is set, generates a random 12-character name using lowercase letters.

func (*I2PConfig) LeaseSetEncryptionType

func (f *I2PConfig) LeaseSetEncryptionType() string

LeaseSetEncryptionType returns the I2CP lease set encryption type configuration string. If no encryption type is set, returns default value "4,0". Validates that all encryption types are valid integers.

func (*I2PConfig) Leasesetsettings

func (f *I2PConfig) Leasesetsettings() (string, string, string)

Leasesetsettings returns the lease set configuration strings for I2P Returns three strings: lease set key, private key, and private signing key settings

func (*I2PConfig) MaxSAM

func (f *I2PConfig) MaxSAM() string

MaxSAM returns the maximum SAM version supported as a string If no maximum version is set, returns default value "3.1"

func (*I2PConfig) MinSAM

func (f *I2PConfig) MinSAM() string

MinSAM returns the minimum SAM version supported as a string If no minimum version is set, returns default value "3.0"

func (*I2PConfig) Print

func (f *I2PConfig) Print() []string

Print returns a slice of strings containing all the I2P configuration settings

func (*I2PConfig) Reduce

func (f *I2PConfig) Reduce() string

Reduce returns I2CP reduce-on-idle configuration settings as a string if enabled

func (*I2PConfig) Reliability

func (f *I2PConfig) Reliability() string

Reliability returns the message reliability configuration string for the SAM bridge If a reliability setting is specified, returns formatted i2cp.messageReliability setting

func (*I2PConfig) Sam

func (f *I2PConfig) Sam() string

Sam returns the SAM bridge address as a string in the format "host:port"

func (*I2PConfig) SessionStyle

func (f *I2PConfig) SessionStyle() string

SessionStyle returns the SAM session style configuration string If no style is set, defaults to "STREAM"

func (*I2PConfig) SetSAMAddress

func (f *I2PConfig) SetSAMAddress(addr string)

SetSAMAddress sets the SAM bridge host and port from a combined address string addr format can be either "host" or "host:port"

func (*I2PConfig) SignatureType

func (f *I2PConfig) SignatureType() string

SignatureType returns the SIGNATURE_TYPE configuration string for SAM bridges >= 3.1 Returns empty string if SAM version < 3.1 or if no signature type is set

func (*I2PConfig) ToPort

func (f *I2PConfig) ToPort() string

ToPort returns the TO_PORT configuration string for SAM bridges >= 3.1 Returns an empty string if SAM version < 3.1 or if toport is "0"

type Option

type Option func(*SAMEmit) error

Option is a SAMEmit Option

type Options

type Options map[string]string

options map

func (Options) AsList

func (opts Options) AsList() (ls []string)

obtain sam options as list of strings

type PrimarySession

type PrimarySession struct {
	Timeout  time.Duration
	Deadline time.Time

	Config SAMEmit
}

Represents a primary session.

func (*PrimarySession) Addr

func (ss *PrimarySession) Addr() i2pkeys.I2PAddr

Returns the I2P destination (the address) of the stream session

func (*PrimarySession) Close

func (ss *PrimarySession) Close() error

func (*PrimarySession) Dial

func (sam *PrimarySession) Dial(network, addr string) (net.Conn, error)

func (*PrimarySession) DialTCP

func (sam *PrimarySession) DialTCP(network string, laddr, raddr net.Addr) (net.Conn, error)

DialTCP implements x/dialer

func (*PrimarySession) DialTCPI2P

func (sam *PrimarySession) DialTCPI2P(network string, laddr, raddr string) (net.Conn, error)

func (*PrimarySession) DialUDP

func (sam *PrimarySession) DialUDP(network string, laddr, raddr net.Addr) (net.PacketConn, error)

DialUDP implements x/dialer

func (*PrimarySession) DialUDPI2P

func (sam *PrimarySession) DialUDPI2P(network, laddr, raddr string) (*DatagramSession, error)

func (*PrimarySession) From

func (ss *PrimarySession) From() string

func (*PrimarySession) ID

func (ss *PrimarySession) ID() string

Returns the local tunnel name of the I2P tunnel used for the stream session

func (*PrimarySession) Keys

func (ss *PrimarySession) Keys() i2pkeys.I2PKeys

Returns the keys associated with the stream session

func (*PrimarySession) LocalAddr

func (ss *PrimarySession) LocalAddr() net.Addr

func (*PrimarySession) Lookup

func (s *PrimarySession) Lookup(name string) (a net.Addr, err error)

func (*PrimarySession) NewDatagramSubSession

func (s *PrimarySession) NewDatagramSubSession(id string, udpPort int) (*DatagramSession, error)

Creates a new datagram session. udpPort is the UDP port SAM is listening on, and if you set it to zero, it will use SAMs standard UDP port.

func (*PrimarySession) NewRawSubSession

func (s *PrimarySession) NewRawSubSession(id string, udpPort int) (*RawSession, error)

Creates a new raw session. udpPort is the UDP port SAM is listening on, and if you set it to zero, it will use SAMs standard UDP port.

func (*PrimarySession) NewStreamSubSession

func (sam *PrimarySession) NewStreamSubSession(id string) (*StreamSession, error)

Creates a new StreamSession with the I2CP- and streaminglib options as specified. See the I2P documentation for a full list of options.

func (*PrimarySession) NewStreamSubSessionWithPorts

func (sam *PrimarySession) NewStreamSubSessionWithPorts(id, from, to string) (*StreamSession, error)

Creates a new StreamSession with the I2CP- and streaminglib options as specified. See the I2P documentation for a full list of options.

func (*PrimarySession) NewUniqueStreamSubSession

func (sam *PrimarySession) NewUniqueStreamSubSession(id string) (*StreamSession, error)

Creates a new StreamSession with the I2CP- and streaminglib options as specified. See the I2P documentation for a full list of options.

func (*PrimarySession) Resolve

func (sam *PrimarySession) Resolve(network, addr string) (net.Addr, error)

func (*PrimarySession) ResolveTCPAddr

func (sam *PrimarySession) ResolveTCPAddr(network, dest string) (net.Addr, error)

func (*PrimarySession) ResolveUDPAddr

func (sam *PrimarySession) ResolveUDPAddr(network, dest string) (net.Addr, error)

func (*PrimarySession) SignatureType

func (ss *PrimarySession) SignatureType() string

func (*PrimarySession) To

func (ss *PrimarySession) To() string

type RawSession

type RawSession struct {
}

The RawSession provides no authentication of senders, and there is no sender address attached to datagrams, so all communication is anonymous. The messages send are however still endpoint-to-endpoint encrypted. You need to figure out a way to identify and authenticate clients yourself, iff that is needed. Raw datagrams may be at most 32 kB in size. There is no overhead of authentication, which is the reason to use this..

func (*RawSession) Close

func (s *RawSession) Close() error

Closes the RawSession.

func (*RawSession) LocalAddr

func (s *RawSession) LocalAddr() i2pkeys.I2PAddr

Returns the local I2P destination of the RawSession.

func (*RawSession) Read

func (s *RawSession) Read(b []byte) (n int, err error)

Reads one raw datagram sent to the destination of the DatagramSession. Returns the number of bytes read. Who sent the raw message can not be determined at this layer - you need to do it (in a secure way!).

func (*RawSession) SetDeadline

func (s *RawSession) SetDeadline(t time.Time) error

func (*RawSession) SetReadDeadline

func (s *RawSession) SetReadDeadline(t time.Time) error

func (*RawSession) SetWriteDeadline

func (s *RawSession) SetWriteDeadline(t time.Time) error

func (*RawSession) WriteTo

func (s *RawSession) WriteTo(b []byte, addr i2pkeys.I2PAddr) (n int, err error)

Sends one raw datagram to the destination specified. At the time of writing, maximum size is 32 kilobyte, but this may change in the future.

type SAM

type SAM struct {
	Config SAMEmit
}

Used for controlling I2Ps SAMv3.

func NewSAM

func NewSAM(address string) (*SAM, error)

Creates a new controller for the I2P routers SAM bridge.

func (*SAM) Close

func (sam *SAM) Close() error

close this sam session

func (*SAM) EnsureKeyfile

func (sam *SAM) EnsureKeyfile(fname string) (keys i2pkeys.I2PKeys, err error)

if keyfile fname does not exist

func (*SAM) Keys

func (sam *SAM) Keys() (k *i2pkeys.I2PKeys)

func (*SAM) Lookup

func (sam *SAM) Lookup(name string) (i2pkeys.I2PAddr, error)

Performs a lookup, probably this order: 1) routers known addresses, cached addresses, 3) by asking peers in the I2P network.

func (*SAM) NewDatagramSession

func (s *SAM) NewDatagramSession(id string, keys i2pkeys.I2PKeys, options []string, udpPort int) (*DatagramSession, error)

Creates a new datagram session. udpPort is the UDP port SAM is listening on, and if you set it to zero, it will use SAMs standard UDP port.

func (*SAM) NewKeys

func (sam *SAM) NewKeys(sigType ...string) (i2pkeys.I2PKeys, error)

Creates the I2P-equivalent of an IP address, that is unique and only the one who has the private keys can send messages from. The public keys are the I2P desination (the address) that anyone can send messages to.

func (*SAM) NewPrimarySession

func (sam *SAM) NewPrimarySession(id string, keys i2pkeys.I2PKeys, options []string) (*PrimarySession, error)

Creates a new PrimarySession with the I2CP- and streaminglib options as specified. See the I2P documentation for a full list of options.

func (*SAM) NewPrimarySessionWithSignature

func (sam *SAM) NewPrimarySessionWithSignature(id string, keys i2pkeys.I2PKeys, options []string, sigType string) (*PrimarySession, error)

Creates a new PrimarySession with the I2CP- and PRIMARYinglib options as specified. See the I2P documentation for a full list of options.

func (*SAM) NewRawSession

func (s *SAM) NewRawSession(id string, keys i2pkeys.I2PKeys, options []string, udpPort int) (*RawSession, error)

Creates a new raw session. udpPort is the UDP port SAM is listening on, and if you set it to zero, it will use SAMs standard UDP port.

func (*SAM) NewStreamSession

func (sam *SAM) NewStreamSession(id string, keys i2pkeys.I2PKeys, options []string) (*StreamSession, error)

Creates a new StreamSession with the I2CP- and streaminglib options as specified. See the I2P documentation for a full list of options.

func (*SAM) NewStreamSessionWithSignature

func (sam *SAM) NewStreamSessionWithSignature(id string, keys i2pkeys.I2PKeys, options []string, sigType string) (*StreamSession, error)

Creates a new StreamSession with the I2CP- and streaminglib options as specified. See the I2P documentation for a full list of options.

func (*SAM) NewStreamSessionWithSignatureAndPorts

func (sam *SAM) NewStreamSessionWithSignatureAndPorts(id, from, to string, keys i2pkeys.I2PKeys, options []string, sigType string) (*StreamSession, error)

Creates a new StreamSession with the I2CP- and streaminglib options as specified. See the I2P documentation for a full list of options.

func (*SAM) ReadKeys

func (sam *SAM) ReadKeys(r io.Reader) (err error)

read public/private keys from an io.Reader

type SAMConn

type SAMConn struct {
}

Implements net.Conn

func (*SAMConn) Close

func (sc *SAMConn) Close() error

Implements net.Conn

func (*SAMConn) LocalAddr

func (sc *SAMConn) LocalAddr() net.Addr

func (*SAMConn) Read

func (sc *SAMConn) Read(buf []byte) (int, error)

Implements net.Conn

func (*SAMConn) RemoteAddr

func (sc *SAMConn) RemoteAddr() net.Addr

func (*SAMConn) SetDeadline

func (sc *SAMConn) SetDeadline(t time.Time) error

Implements net.Conn

func (*SAMConn) SetReadDeadline

func (sc *SAMConn) SetReadDeadline(t time.Time) error

Implements net.Conn

func (*SAMConn) SetWriteDeadline

func (sc *SAMConn) SetWriteDeadline(t time.Time) error

Implements net.Conn

func (*SAMConn) Write

func (sc *SAMConn) Write(buf []byte) (int, error)

Implements net.Conn

type SAMEmit

type SAMEmit struct {
	I2PConfig
}

func NewEmit

func NewEmit(opts ...func(*SAMEmit) error) (*SAMEmit, error)

func (*SAMEmit) Accept

func (e *SAMEmit) Accept() string

func (*SAMEmit) AcceptBytes

func (e *SAMEmit) AcceptBytes() []byte

func (*SAMEmit) Connect

func (e *SAMEmit) Connect(dest string) string

func (*SAMEmit) ConnectBytes

func (e *SAMEmit) ConnectBytes(dest string) []byte

func (*SAMEmit) Create

func (e *SAMEmit) Create() string

func (*SAMEmit) CreateBytes

func (e *SAMEmit) CreateBytes() []byte

func (*SAMEmit) GenerateDestination

func (e *SAMEmit) GenerateDestination() string

func (*SAMEmit) GenerateDestinationBytes

func (e *SAMEmit) GenerateDestinationBytes() []byte

func (*SAMEmit) Hello

func (e *SAMEmit) Hello() string

func (*SAMEmit) HelloBytes

func (e *SAMEmit) HelloBytes() []byte

func (*SAMEmit) Lookup

func (e *SAMEmit) Lookup(name string) string

func (*SAMEmit) LookupBytes

func (e *SAMEmit) LookupBytes(name string) []byte

func (*SAMEmit) SamOptionsString

func (e *SAMEmit) SamOptionsString() string

type SAMResolver

type SAMResolver struct {
	*SAM
}

func NewFullSAMResolver

func NewFullSAMResolver(address string) (*SAMResolver, error)

func NewSAMResolver

func NewSAMResolver(parent *SAM) (*SAMResolver, error)

func (*SAMResolver) Resolve

func (sam *SAMResolver) Resolve(name string) (i2pkeys.I2PAddr, error)

Performs a lookup, probably this order: 1) routers known addresses, cached addresses, 3) by asking peers in the I2P network.

type StreamListener

type StreamListener struct {
}

func (*StreamListener) Accept

func (l *StreamListener) Accept() (net.Conn, error)

implements net.Listener

func (*StreamListener) AcceptI2P

func (l *StreamListener) AcceptI2P() (*SAMConn, error)

accept a new inbound connection

func (*StreamListener) Addr

func (l *StreamListener) Addr() net.Addr

get our address implements net.Listener

func (*StreamListener) Close

func (l *StreamListener) Close() error

implements net.Listener

func (*StreamListener) From

func (l *StreamListener) From() string

func (*StreamListener) To

func (l *StreamListener) To() string

type StreamSession

type StreamSession struct {
	Timeout  time.Duration
	Deadline time.Time
}

Represents a streaming session.

func (*StreamSession) Addr

func (s *StreamSession) Addr() i2pkeys.I2PAddr

Returns the I2P destination (the address) of the stream session

func (*StreamSession) Close

func (s *StreamSession) Close() error

func (*StreamSession) Dial

func (s *StreamSession) Dial(n, addr string) (c net.Conn, err error)

implement net.Dialer

func (*StreamSession) DialContext

func (s *StreamSession) DialContext(ctx context.Context, n, addr string) (net.Conn, error)

context-aware dialer, eventually...

func (*StreamSession) DialContextI2P

func (s *StreamSession) DialContextI2P(ctx context.Context, n, addr string) (*SAMConn, error)

context-aware dialer, eventually...

func (*StreamSession) DialI2P

func (s *StreamSession) DialI2P(addr i2pkeys.I2PAddr) (*SAMConn, error)

Dials to an I2P destination and returns a SAMConn, which implements a net.Conn.

func (*StreamSession) From

func (s *StreamSession) From() string

func (*StreamSession) ID

func (s *StreamSession) ID() string

Returns the local tunnel name of the I2P tunnel used for the stream session

func (*StreamSession) Keys

func (s *StreamSession) Keys() i2pkeys.I2PKeys

Returns the keys associated with the stream session

func (*StreamSession) Listen

func (s *StreamSession) Listen() (*StreamListener, error)

create a new stream listener to accept inbound connections

func (*StreamSession) LocalAddr

func (s *StreamSession) LocalAddr() net.Addr

func (*StreamSession) Lookup

func (s *StreamSession) Lookup(name string) (i2pkeys.I2PAddr, error)

lookup name, convenience function

func (*StreamSession) Read

func (s *StreamSession) Read(buf []byte) (int, error)

Read reads data from the stream.

func (*StreamSession) SetDeadline

func (s *StreamSession) SetDeadline(t time.Time) error

func (*StreamSession) SetReadDeadline

func (s *StreamSession) SetReadDeadline(t time.Time) error

func (*StreamSession) SetWriteDeadline

func (s *StreamSession) SetWriteDeadline(t time.Time) error

func (*StreamSession) SignatureType

func (s *StreamSession) SignatureType() string

func (*StreamSession) To

func (s *StreamSession) To() string

func (*StreamSession) Write

func (s *StreamSession) Write(data []byte) (int, error)

Write sends data over the stream.