You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.6 KiB
63 lines
1.6 KiB
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 v3 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" |
|
}
|
|
|