106 lines
2.7 KiB
Plaintext
106 lines
2.7 KiB
Plaintext
-----BEGIN PGP SIGNED MESSAGE-----
|
|
Hash: SHA512
|
|
|
|
# README #
|
|
|
|
go library for the I2P [SAMv3.0](https://geti2p.net/en/docs/api/samv3) bridge, used to build anonymous/pseudonymous end-to-end encrypted sockets.
|
|
|
|
This library is much better than ccondom (that use BOB), much more stable and much easier to maintain.
|
|
|
|
## 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
|
|
* Probably needs some real-world testing
|
|
|
|
## Documentation ##
|
|
|
|
* Latest version-documentation:
|
|
* set your GOPATH
|
|
* Enter `godoc -http=:8081` into your terminal and hit enter.
|
|
* Goto http://localhost:8081, click packages, and navigate to sam3
|
|
|
|
## Examples ##
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"github.com/majestrate/i2p-tools/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:
|
|
|
|
```text
|
|
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.
|
|
|
|
## Author ##
|
|
|
|
* Kalle Vedin `kalle.vedin@fripost.org`
|
|
* Unknown Name (majestrate)
|
|
-----BEGIN PGP SIGNATURE-----
|
|
|
|
iQEzBAEBCgAdFiEEcNIGBzi++AUjrK/311wDs5teFOEFAlxk9W0ACgkQ11wDs5te
|
|
FOEl8wf/VinlOV3Op5fZ6Qr9eTanj85FoH9KbjA0P6EcUJap4QWoEUIK/mkIlhl/
|
|
jLdAMHry5K3gXObFrVAiO4XvsAF++/JJQroUWPb++UR9ksd+M4b63ia3/BtFQGUu
|
|
J2w6dK7S79Z6IumhA6xhdDaIRGiJSu8Ox0M36ZKkfAR3WTYfsz+Nucp+1l8otNhI
|
|
fjQrmLCSgAiaCW0h3m208JR20FYipjHc7CZBzF/TVCjPq9qleEMXQCTJBWcuibrR
|
|
RdoUct6oMAXNS4S7k4LYa5FK0ETNIap9aUyFa8Tp6tmzhSOun7/Gle3ynH/c9SrO
|
|
lopjX4BT4mpXN1Lvwdw+v3tTZPyuWQ==
|
|
=lYsZ
|
|
-----END PGP SIGNATURE-----
|