tor: add onion address implementation
Co-Authored-By: Eugene <crypt-iq@users.noreply.github.com>
This commit is contained in:
parent
eded682f9b
commit
a07397465b
63
tor/onionaddr.go
Normal file
63
tor/onionaddr.go
Normal file
@ -0,0 +1,63 @@
|
||||
package tor
|
||||
|
||||
import (
|
||||
"encoding/base32"
|
||||
"net"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
const (
|
||||
// base32Alphabet is the alphabet used for encoding and decoding v2 and
|
||||
// v3 onion addresses.
|
||||
base32Alphabet = "abcdefghijklmnopqrstuvwxyz234567"
|
||||
|
||||
// OnionSuffix is the ".onion" suffix for v2 and v3 onion addresses.
|
||||
OnionSuffix = ".onion"
|
||||
|
||||
// OnionSuffixLen is the length of the ".onion" suffix.
|
||||
OnionSuffixLen = len(OnionSuffix)
|
||||
|
||||
// V2DecodedLen is the length of a decoded v2 onion service.
|
||||
V2DecodedLen = 10
|
||||
|
||||
// V2Len is the length of a v2 onion service including the ".onion"
|
||||
// suffix.
|
||||
V2Len = 22
|
||||
|
||||
// V3DecodedLen is the length of a decoded v3 onion service.
|
||||
V3DecodedLen = 35
|
||||
|
||||
// V3Len is the length of a v2 onion service including the ".onion"
|
||||
// suffix.
|
||||
V3Len = 62
|
||||
)
|
||||
|
||||
var (
|
||||
// Base32Encoding represents the Tor's base32-encoding scheme for v2 and
|
||||
// v3 onion addresses.
|
||||
Base32Encoding = base32.NewEncoding(base32Alphabet)
|
||||
)
|
||||
|
||||
// OnionAddr represents a Tor network end point onion address.
|
||||
type OnionAddr struct {
|
||||
// OnionService is the host of the onion address.
|
||||
OnionService string
|
||||
|
||||
// Port is the port of the onion address.
|
||||
Port int
|
||||
}
|
||||
|
||||
// A compile-time check to ensure that OnionAddr implements the net.Addr
|
||||
// interface.
|
||||
var _ net.Addr = (*OnionAddr)(nil)
|
||||
|
||||
// String returns the string representation of an onion address.
|
||||
func (o *OnionAddr) String() string {
|
||||
return net.JoinHostPort(o.OnionService, strconv.Itoa(o.Port))
|
||||
}
|
||||
|
||||
// Network returns the network that this implementation of net.Addr will use.
|
||||
// In this case, because Tor only allows TCP connections, the network is "tcp".
|
||||
func (o *OnionAddr) Network() string {
|
||||
return "tcp"
|
||||
}
|
Loading…
Reference in New Issue
Block a user