Overview

HTTPS SSH

README

go library for the I2P SAMv3.0 bridge, used to build anonymous/pseudonymous end-to-end encrypted sockets.

You can use this library to build servers and clients and whatnot for I2P :) Crypto Anarchism FTW!! <3 <3

This library is much better than ccondom (that use BOB), much more stable and much easier to maintain.

It appears that this library has seen some usage by various tools in I2P, i guess. So I guess it is "rather stable", kindof?

Support/TODO

What works:

  • Utils
    • Resolving domain names to I2P destinations
    • .b32.i2p hashes
    • Generating keys/i2p destinations
  • Streaming
    • DialI2P() - Connecting to stuff in I2P
    • Listen()/Accept() - Handling incomming connections
    • Implements net.Conn and net.Listener
  • Datagrams
    • Implements net.PacketConn
  • Raw datagrams
    • Like datagrams, but without addresses

Does not work:

  • Everything works! :D
  • Generic extensions to the SAM3 protocol that have not (yet?) added - pull requests are welcome!

Documentation

Examples

package main

import (
    "bitbucket.org/kallevedin/sam3"
    "fmt"
)

const yoursam = "127.0.0.1:7656" // sam bridge

func client(server I2PAddr) {
    sam, _ := NewSAM(yoursam)
    keys, _ := sam.NewKeys()
    stream, _ := sam.NewStreamSession("clientTun", keys, Options_Small)
    fmt.Println("Client: Connecting to " + server.Base32())
    conn, _ := stream.DialI2P(server)
    conn.Write([]byte("Hello world!"))
    return
}

func main() {
    sam, _ := NewSAM(yoursam)
    keys, _ := sam.NewKeys()
    go client(keys.Addr())
    stream, _ := sam.NewStreamSession("serverTun", keys, Options_Medium)
    listener, _ := stream.Listen()
    conn, _ := listener.Accept()
    buf := make([]byte, 4096)
    n, _ := conn.Read(buf)
    fmt.Println("Server received: " + string(buf[:n]))
}

The above will write to the terminal:

Client: Connecting to zjnvfh4hs3et5vtz35ogwzrws26zvwkcad5uo5esecvg4qpk5b4a.b32.i2p
Server received: Hello world!

Error handling was omitted in the above code for readability.

Testing

  • go test runs the whole suite (takes 90+ sec to perform!)
  • go test -short runs the shorter variant, does not connect to anything

License

Public domain.

Authors

  • Kalle Vedin kalle.vedin@fripost.org
  • Unknown Name (majestrate)